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));
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(styleNode.firstChild.nodeValue,model.namespace);
this.stylesheet.setParameter("proxyUrl", config.proxyUrl);
}
}
var hoverCursorNode = widgetNode.selectSingleNode('mb:hoverCursor');
this.hoverCursor = hoverCursorNode ? hoverCursorNode.firstChild.nodeValue : 'pointer';
this.paint = function(objRef) {
if (objRef.targetModel.map) {
if (objRef.olLayer) {
objRef.model.setParam('gmlRendererLayer', null);
if (objRef.targetModel.map == objRef.map) {
objRef.olLayer.destroy();
objRef.olLayer = null;
}
}
var doc = objRef.stylesheet ? objRef.stylesheet.transformNodeToObject(objRef.model.doc) : objRef.model.doc;
if (!doc) {
return;
}
objRef.map = objRef.targetModel.map;
var models = [objRef.model];
if (objRef.model.mergeModels) {
for (var i in objRef.model.mergeModels) {
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[widgetConfig.sldModelNode.firstChild.nodeValue];
if (sldModel) {
sldModel.addListener("loadModel", objRef.paint, objRef);
if (sldModel.doc) {
widgetConfig.defaultStyle = new Object();
widgetConfig.selectStyle = new Object();
var sldNode = sldModel.getSldNode();
var sldXPath = "sld:UserStyle[sld:Name=";
var wmcXPath = "wmc:Style[wmc:Name=";
var defaultPointNode = "//sld:UserStyle[sld:Name='"+widgetConfig.defaultStyleName+"']//sld:PointSymbolizer";
var defaultLineNode = "//sld:UserStyle[sld:Name='"+widgetConfig.defaultStyleName+"']//sld:LineSymbolizer";
var defaultPolygonNode = "//sld:UserStyle[sld:Name='"+widgetConfig.defaultStyleName+"']//sld:PolygonSymbolizer";
var selectPointNode = "//sld:UserStyle[sld:Name='"+widgetConfig.selectStyleName+"']//sld:PointSymbolizer";
var selectLineNode = "//sld:UserStyle[sld:Name='"+widgetConfig.selectStyleName+"']//sld:LineSymbolizer";
var selectPolygonNode = "//sld:UserStyle[sld:Name='"+widgetConfig.selectStyleName+"']//sld:PolygonSymbolizer";
widgetConfig.defaultStyle.point = sld2OlStyle(sldNode.selectSingleNode(defaultPointNode));
if (!widgetConfig.defaultStyle.point) {
widgetConfig.defaultStyle.point = sld2OlStyle(sldNode.selectSingleNode(defaultPointNode.replace(sldXPath, wmcXPath)));
}
widgetConfig.defaultStyle.line = sld2OlStyle(sldNode.selectSingleNode(defaultLineNode));
if (!widgetConfig.defaultStyle.line) {
widgetConfig.defaultStyle.line = sld2OlStyle(sldNode.selectSingleNode(defaultLineNode.replace(sldXPath, wmcXPath)));
}
widgetConfig.defaultStyle.polygon = sld2OlStyle(sldNode.selectSingleNode(defaultPolygonNode));
if (!widgetConfig.defaultStyle.polygon) {
widgetConfig.defaultStyle.polygon = sld2OlStyle(sldNode.selectSingleNode(defaultPolygonNode.replace(sldXPath, wmcXPath)));
}
widgetConfig.selectStyle.point = sld2OlStyle(sldNode.selectSingleNode(selectPointNode));
if (!widgetConfig.selectStyle.point) {
widgetConfig.selectStyle.point = sld2OlStyle(sldNode.selectSingleNode(selectPointNode.replace(sldXPath, wmcXPath)));
}
widgetConfig.selectStyle.line = sld2OlStyle(sldNode.selectSingleNode(selectLineNode));
if (!widgetConfig.selectStyle.line) {
widgetConfig.selectStyle.line = sld2OlStyle(sldNode.selectSingleNode(selectLineNode.replace(sldXPath, wmcXPath)));
}
widgetConfig.selectStyle.polygon = sld2OlStyle(sldNode.selectSingleNode(selectPolygonNode));
if (!widgetConfig.selectStyle.polygon) {
widgetConfig.selectStyle.polygon = sld2OlStyle(sldNode.selectSingleNode(selectPolygonNode.replace(sldXPath, wmcXPath)));
}
if (widgetConfig.selectStyle.point) {
widgetConfig.selectStyle.point.cursor = widgetConfig.hoverCursor;
}
if (widgetConfig.selectStyle.line) {
widgetConfig.selectStyle.line.cursor = widgetConfig.hoverCursor;
}
if (widgetConfig.selectStyle.polygon) {
widgetConfig.selectStyle.polygon.cursor = widgetConfig.hoverCursor;
}
}
}
}
}
var OlLayer = OpenLayers.Class(OpenLayers.Layer.GML, {
loadGML: function() {
if (!this.loaded) {
var gml = this.format ? new this.format() : new OpenLayers.Format.GML();
this.addFeatures(gml.read(doc));
this.loaded = true;
}
},
preFeatureInsert: function(feature) {
if (feature.geometry) {
var sourceNode = objRef.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[objRef.id]) {
widgetConfig = config.objects[sourceModel].config[objRef.id];
} else {
widgetConfig = objRef.config;
}
if (widgetConfig.defaultStyle) {
if (feature.geometry.CLASS_NAME.indexOf('Point') > -1) {
feature.style = widgetConfig.defaultStyle.point;
} else
if (feature.geometry.CLASS_NAME.indexOf('Line') > -1) {
feature.style = widgetConfig.defaultStyle.line;
} else
if (feature.geometry.CLASS_NAME.indexOf('Polygon') > -1) {
feature.style = widgetConfig.defaultStyle.polygon;
}
}
if (widgetConfig.selectStyle) {
if (feature.geometry.CLASS_NAME.indexOf('Point') > -1) {
feature.mbSelectStyle = widgetConfig.selectStyle.point;
} else
if (feature.geometry.CLASS_NAME.indexOf('Line') > -1) {
feature.mbSelectStyle = widgetConfig.selectStyle.line;
} else
if (feature.geometry.CLASS_NAME.indexOf('Polygon') > -1) {
feature.mbSelectStyle = widgetConfig.selectStyle.polygon;
}
}
}
},
getFeatureByFid: function(fid) {
var layer = objRef.olLayer;
if (!layer) {
return null;
}
var features = layer.features;
if (!features) {
return null;
}
for (var i = 0; i < features.length; ++i) {
if (features[i].fid == fid) {
return features[i];
}
}
}
});
objRef.olLayer = new OlLayer(objRef.id);
objRef.targetModel.map.addLayer(objRef.olLayer);
objRef.model.setParam('gmlRendererLayer', objRef.olLayer);
}
objRef.targetModel.addListener('refresh', objRef.paint, objRef);
}
this.model.addListener("refresh",this.paint, this);
this.model.addListener("refreshGmlRenderers",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 in hiddenFeatures) {
if (hiddenFeatures[i]) {
objRef.hideFeature(objRef, hiddenFeatures[i]);
}
}
}
}
this.init = function(objRef) {
var clickWidgetNode = widgetNode.selectSingleNode("mb:featureOnClick");
if (clickWidgetNode) {
var clickWidget = config.objects[clickWidgetNode.firstChild.nodeValue];
objRef.model.addListener("olFeatureSelect", clickWidget.onClick, clickWidget);
}
var hoverWidgetNode = widgetNode.selectSingleNode("mb:featureOnHover");
if (hoverWidgetNode) {
var hoverWidget = config.objects[hoverWidgetNode.firstChild.nodeValue];
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);
}
Documentation generated by
JSDoc on Tue Aug 21 08:12:28 2007