GmlRendererOL.js
Summary
No overview generated for 'GmlRendererOL.js'
mapbuilder.loadScript(baseDir+"/widget/GmlRendererBase.js");
function GmlRendererOL(widgetNode, model) {
GmlRendererBase.apply(this,new Array(widgetNode, model));
var OlLayer = OpenLayers.Class(OpenLayers.Layer.GML, {
loadGML: function() {
if (!this.loaded) {
var gml = new OpenLayers.Format.GML();
try {
this.proj = this.projection;
this.addFeatures(gml.read(this.mbWidget.renderDoc));
this.loaded = true;
} catch (e) {
alert(mbGetMessage("documentParseError"),
new XMLSerializer().serializeToString(this.mbWidget.renderDoc));
}
}
},
calculateInRange: function() {
return true;
},
destroyFeatures: function() {
var features = this.features;
var featuresToRemove = [];
var feature;
for (var i=0; i<features.length; i++) {
feature = features[i];
feature.mbWidgetConfig = null;
if (!feature.geometry) {
featuresToRemove.push(feature);
}
}
this.removeFeatures(featuresToRemove);
for (var i=0; i<featuresToRemove.length; i++) {
featuresToRemove[i].destroy();
}
OpenLayers.Layer.GML.prototype.destroyFeatures.apply(this, arguments);
},
preFeatureInsert: function(feature) {
if (feature.geometry) {
var sourceNode = this.mbWidget.model.doc.selectSingleNode("//*[@fid='"+feature.fid+"']");
var sourceModel = null;
if (sourceNode) {
sourceModel = sourceNode.getAttribute('sourceModel');
}
var widgetConfig = null;
if (sourceModel && config.objects[sourceModel].config && config.objects[sourceModel].config[this.mbWidget.id]) {
widgetConfig = config.objects[sourceModel].config[this.mbWidget.id];
} else {
widgetConfig = this.mbWidget.config;
}
feature.mbWidgetConfig = widgetConfig;
if (!widgetConfig.sourceSRS) {
if (widgetConfig.featureSRS) {
widgetConfig.sourceSRS = new OpenLayers.Projection(widgetConfig.featureSRS);
} else {
widgetConfig.sourceSRS = null;
}
}
if (widgetConfig.sourceSRS) {
this.convertPoints(feature.geometry, widgetConfig.sourceSRS);
}
}
},
drawFeature: function(feature, style) {
var widgetConfig = feature.mbWidgetConfig;
if (widgetConfig) {
feature.style = null;
if (widgetConfig.defaultStyle && style != "select") {
feature.style = widgetConfig.defaultStyle.createSymbolizer ?
widgetConfig.defaultStyle.createSymbolizer(feature) :
widgetConfig.defaultStyle;
}
if (widgetConfig && widgetConfig.selectStyle) {
feature.mbSelectStyle = widgetConfig.selectStyle;
}
}
OpenLayers.Layer.GML.prototype.drawFeature.apply(this, arguments);
},
convertPoints: function(component, sourceSRS) {
if (component.CLASS_NAME == 'OpenLayers.Geometry.Point') {
component.transform(sourceSRS, this.proj);
} else {
for (var i=0; i<component.components.length; ++i) {
this.convertPoints(component.components[i], sourceSRS);
}
}
},
getFeatureByFid: function(fid) {
if (!this.features) {
return null;
}
for (var i = 0; i < this.features.length; ++i) {
if (this.features[i].fid == fid) {
return this.features[i];
}
}
},
destroy: function() {
this.mbWidget = null;
OpenLayers.Layer.Vector.prototype.destroy.apply(this, arguments);
}
});
this.olLayer = null;
this.defaultStyle = null;
this.selectStyle = null;
this.hiddenFeatures = new Array();
this.containerNodeId = this.htmlTagId;
model.containerModel = this.targetModel;
if ( !this.stylesheet ) {
var styleNode = widgetNode.selectSingleNode("mb:stylesheet");
if (styleNode) {
this.stylesheet = new XslProcessor(getNodeValue(styleNode), model.namespace);
this.stylesheet.setParameter("proxyUrl", config.proxyUrl);
}
}
this.hoverCursor = this.getProperty('mb:hoverCursor', 'pointer');
this.paint = function(objRef) {
if (objRef.targetModel.map) {
if (objRef.olLayer) {
objRef.model.setParam('gmlRendererLayer', null);
}
objRef.renderDoc = objRef.stylesheet ? objRef.stylesheet.transformNodeToObject(objRef.model.doc) : objRef.model.doc;
if (!objRef.renderDoc) {
return;
}
objRef.map = objRef.targetModel.map;
var models = [objRef.model];
if (objRef.model.mergeModels) {
for (var i=0; i<objRef.model.mergeModels.length; i++) {
models.push(objRef.model.mergeModels[i]);
}
}
for (var i = 0; i < models.length; i++) {
var widgetConfig = config.objects[models[i].id].config ? config.objects[models[i].id].config[objRef.id] : null;
if (!widgetConfig) {
widgetConfig = objRef.config;
}
if (widgetConfig.sldModelNode) {
var sldModel = config.objects[getNodeValue(widgetConfig.sldModelNode)];
if (sldModel) {
sldModel.addListener("loadModel", objRef.paint, objRef);
if (!sldModel.doc) {
return;
}
var sldNode = sldModel.getSldNode();
if (sldModel.sld) {
var namedLayer = sldModel.sld.namedLayers[objRef.id].userStyles;
for (var j=0; j<namedLayer.length; ++j) {
namedLayer[j].propertyStyles = namedLayer[j].findPropertyStyles();
if (namedLayer[j].name == widgetConfig.defaultStyleName) {
widgetConfig.defaultStyle = namedLayer[j];
}
if (namedLayer[j].name == widgetConfig.selectStyleName) {
widgetConfig.selectStyle = namedLayer[j];
}
}
if (widgetConfig.selectStyle) {
widgetConfig.selectStyle.defaultStyle.cursor = objRef.hoverCursor;
}
} else if (sldNode) {
widgetConfig.defaultStyle =
sld2OlStyle(sldNode.selectSingleNode("//*[wmc:Name='"+widgetConfig.defaultStyleName+"']"));
widgetConfig.selectStyle =
sld2OlStyle(sldNode.selectSingleNode("//*[wmc:Name='"+widgetConfig.selectStyleName+"']"));
if (widgetConfig.selectStyle) {
widgetConfig.selectStyle.cursor = objRef.hoverCursor;
}
}
}
}
}
if (!objRef.olLayer || !objRef.olLayer.mbWidget) {
objRef.olLayer = new OlLayer(objRef.id, null, {mbWidget: objRef});
objRef.targetModel.map.addLayer(objRef.olLayer);
} else {
objRef.olLayer.loaded = false;
objRef.olLayer.destroyFeatures();
objRef.olLayer.loadGML();
}
objRef.removeHiddenFeatures(objRef);
objRef.model.setParam('gmlRendererLayer', objRef.olLayer);
}
objRef.targetModel.addListener('refresh', objRef.paint, objRef);
}
this.model.addListener("refresh",this.paint, this);
this.hiddenListener=function(objRef, layerName){
alert('hide/unhide '+layerName);
}
this.model.addListener("hidden",this.hiddenListener,this);
this.hideFeature = function(objRef, fid) {
if (!fid) {
fid = objRef.model.getParam('hideFeature');
}
var feature = objRef.olLayer.getFeatureByFid(fid);
if (feature) {
objRef.hiddenFeatures.push(fid);
feature.mbHidden = true;
objRef.olLayer.renderer.eraseGeometry(feature.geometry);
}
}
this.model.addListener("hideFeature", this.hideFeature, this);
this.showFeature = function(objRef, fid) {
if (!fid) {
fid = objRef.model.getParam('showFeature');
}
var feature = objRef.olLayer.getFeatureByFid(fid);
if (feature) {
OpenLayers.Util.removeItem(objRef.hiddenFeatures, fid);
feature.mbHidden = false;
objRef.olLayer.drawFeature(feature);
}
}
this.model.addListener("showFeature", this.showFeature, this);
this.removeHiddenFeatures = function(objRef) {
if (objRef.olLayer) {
var hiddenFeatures = objRef.hiddenFeatures.toString().split(/,/);
objRef.hiddenFeatures = new Array();
for (var i=0; i<hiddenFeatures.length; i++) {
if (hiddenFeatures[i]) {
objRef.hideFeature(objRef, hiddenFeatures[i]);
}
}
}
}
this.init = function(objRef) {
var clickWidgetNode = widgetNode.selectSingleNode("mb:featureOnClick");
if (clickWidgetNode) {
var clickWidget = config.objects[getNodeValue(clickWidgetNode)];
objRef.model.addListener("olFeatureSelect", clickWidget.onClick, clickWidget);
}
var hoverWidgetNode = widgetNode.selectSingleNode("mb:featureOnHover");
if (hoverWidgetNode) {
var hoverWidget = config.objects[getNodeValue(hoverWidgetNode)];
objRef.model.addListener("olFeatureHover", hoverWidget.onMouseover, hoverWidget);
objRef.model.addListener("olFeatureOut", hoverWidget.onMouseout, hoverWidget);
}
objRef.targetModel.addListener("aoi", objRef.removeHiddenFeatures, objRef);
}
this.model.addListener("init", this.init, this);
this.model.removeListener("newModel", this.clearWidget, this);
this.clearWidget = function(objRef) {
if (objRef.olLayer) {
objRef.olLayer.loaded = false;
for (var i=0; i<objRef.olLayer.map.controls.length; i++) {
if (objRef.olLayer.map.controls[i].layer == objRef.olLayer) {
objRef.olLayer.map.controls[i].destroy();
}
}
objRef.olLayer.destroy();
objRef.olLayer = null;
}
}
this.model.addListener("newModel", this.clearWidget, this);
}
Documentation generated by
JSDoc on Sun Apr 27 20:30:54 2008