FeatureCollection.js
Summary
No overview generated for 'FeatureCollection.js'
mapbuilder.loadScript(baseDir+"/model/ModelBase.js");
mapbuilder.loadScript(baseDir+"/graphics/WfsQueryLayer.js");
function FeatureCollection(modelNode, parent) {
ModelBase.apply(this, new Array(modelNode, parent));
var featureTagName = modelNode.selectSingleNode("mb:featureTagName");
if (featureTagName ) {
this.featureTagName = featureTagName.firstChild.nodeValue;
} else {
this.featureTagName = "topp:CITY_NAME";
}
var coordsTagName = modelNode.selectSingleNode("mb:coordsTagName");
if (coordsTagName ) {
this.coordsTagName = coordsTagName.firstChild.nodeValue;
} else {
this.coordsTagName = "//gml:coordinates";
}
var nodeSelectXpath = modelNode.selectSingleNode("mb:nodeSelectXpath");
if( nodeSelectXpath ) {
this.nodeSelectXpath = nodeSelectXpath.firstChild.nodeValue;
}
var coordSelectXpath = modelNode.selectSingleNode("mb:coordSelectXpath");
if( coordSelectXpath ) {
this.coordSelectXpath = coordSelectXpath.firstChild.nodeValue;
} else {
this.coordSelectXpath = "topp:the_geom/gml:MultiPoint/gml:pointMember/gml:Point/gml:coordinates";
}
this.convertCoords = function(objRef) {
if( objRef.doc && objRef.containerModel && objRef.containerModel.doc ) {
var coordNodes = objRef.doc.selectNodes( objRef.coordsTagName );
if (coordNodes.length>0 && objRef.containerModel) {
var srsNode = coordNodes[0].selectSingleNode("ancestor-or-self::*/@srsName");
if( srsNode && (srsNode.nodeValue.toUpperCase() != objRef.containerModel.getSRS().toUpperCase()) ) {
var sourceProj = new Proj(srsNode.nodeValue);
objRef.setParam("modelStatus",mbGetMessage("convertingCoords"));
var containerProj = new Proj(objRef.containerModel.getSRS());
for (var i=0; i<coordNodes.length; ++i) {
var coords = coordNodes[i].firstChild.nodeValue;
var coordsArray = coords.split(' ');
var newCoords = '';
for (var j=0; j<coordsArray.length; ++j) {
var xy = coordsArray[j].split(',');
if (xy.length==2) {
var pt=new PT(xy[0],xy[1]);
cs_transform(sourceProj,containerProj,pt);
newCoords += pt.join(',') + ' ';
}
}
coordNodes[i].firstChild.nodeValue=newCoords;
}
}
}
}
}
this.loadWfsRequests = function(objRef) {
if( objRef.containerModel.doc != null) {
var featureTypes = objRef.containerModel.doc.selectNodes("/wmc:OWSContext/wmc:ResourceList/wmc:FeatureType");
if( featureTypes.length > 0 ) {
for( var i=0; i<featureTypes.length; i++) {
var httpPayload = new Object();
var wfsFeature = featureTypes[i]
var server = wfsFeature.selectSingleNode("wmc:Server")
var onlineResource = server.selectSingleNode("wmc:OnlineResource")
httpPayload.method = onlineResource.getAttribute("method")
httpPayload.url = onlineResource.getAttribute("xlink:href")
var query = wfsFeature.selectSingleNode("wfs:GetFeature")
httpPayload.postData = (new XMLSerializer()).serializeToString( query )
objRef.wfsFeature = wfsFeature
objRef.newRequest(objRef,httpPayload);
}
}
}
}
this.addFirstListener("loadModel",this.convertCoords,this);
if( this.containerModel ) this.containerModel.addListener("loadModel",this.loadWfsRequests,this);
this.setHidden=function(featureName, hidden){
this.hidden = hidden;
this.callListeners("hidden", featureName);
}
this.getHidden=function(layerName){
return this.hidden;
}
this.hidden = false;
this.getFeatureNodes = function() {
return this.doc.selectNodes(this.nodeSelectXpath);
}
this.getFeatureName = function(featureNode) {
var labelNode = featureNode.selectSingleNode(this.featureTagName); //TBD: set this dynamically
return labelNode?labelNode.firstChild.nodeValue:mbGetMessage("noRssTitle");
}
this.getFeatureId = function(featureNode) {
return featureNode.getAttribute("fid")?featureNode.getAttribute("fid"):"no_id";
}
this.getFeaturePoint = function(featureNode) {
var coords = featureNode.selectSingleNode(this.coordSelectXpath);
if (coords) {
var point = coords.firstChild.nodeValue.split(',');
return point
} else {
return new Array(0,0); //or some other error to return?
}
}
this.getFeatureGeometry = function(featureNode) {
var geometryTag = featureNode.selectSingleNode(this.coordsTagName);
if( geometryTag != null )
return geometryTag.firstChild;
else {
alert(mbGetMessage("invalidGeom", (new XMLSerializer()).serializeToString(featureNode)));
}
}
}
Documentation generated by
JSDoc on Tue Aug 21 08:12:28 2007