[Mapbender-commits] r4341 - trunk/mapbender/http/javascripts
svn_mapbender at osgeo.org
svn_mapbender at osgeo.org
Fri Jul 10 11:37:07 EDT 2009
Author: christoph
Date: 2009-07-10 11:37:07 -0400 (Fri, 10 Jul 2009)
New Revision: 4341
Modified:
trunk/mapbender/http/javascripts/geometry.js
Log:
Modified: trunk/mapbender/http/javascripts/geometry.js
===================================================================
--- trunk/mapbender/http/javascripts/geometry.js 2009-07-10 15:36:19 UTC (rev 4340)
+++ trunk/mapbender/http/javascripts/geometry.js 2009-07-10 15:37:07 UTC (rev 4341)
@@ -311,6 +311,150 @@
}
};
+GeometryArray.prototype.importPoint = function(currentGeometry, featureEpsg){
+ var coordinates = currentGeometry.coordinates;
+
+ this.addMember(geomType.point);
+
+ this.get(-1).addGeometry();
+ this.getGeometry(-1,-1).addPointByCoordinates(coordinates[0], coordinates[1], coordinates[2]);
+ this.getGeometry(-1,-1).setEpsg(featureEpsg);
+ this.close();
+};
+
+GeometryArray.prototype.importLine = function(currentGeometry, featureEpsg){
+ var coordinates = currentGeometry.coordinates;
+
+ this.addMember(geomType.line);
+ this.get(-1).addGeometry();
+ for (var m = 0; m < coordinates.length; m++) {
+ var currentPoint = coordinates[m];
+ this.getGeometry(-1,-1).addPointByCoordinates(currentPoint[0], currentPoint[1], currentPoint[2]);
+ }
+ this.getGeometry(-1,-1).setEpsg(featureEpsg);
+ this.close();
+};
+
+GeometryArray.prototype.importMultiLine = function(currentGeometry, featureEpsg){
+ var coordinates = currentGeometry.coordinates;
+
+ this.addMember(geomType.line);
+ for (var m = 0; m < coordinates.length; m++) {
+ this.get(-1).addGeometry();
+ var currentLine = coordinates[m];
+ for (var n = 0; n < currentLine.length; n++) {
+ var currentPoint = currentLine[n];
+ this.getGeometry(-1,-1).addPointByCoordinates(currentPoint[0], currentPoint[1], currentPoint[2]);
+ }
+ this.getGeometry(-1,-1).setEpsg(featureEpsg);
+ }
+ this.close();
+};
+
+GeometryArray.prototype.importPolygon = function(currentGeometry, featureEpsg){
+ var coordinates = currentGeometry.coordinates;
+
+ this.addMember(geomType.polygon);
+ for (var m = 0; m < coordinates.length; m++) {
+ this.get(-1).addGeometry();
+ var currentPolygon = coordinates[m];
+ for (var n = 0; n < currentPolygon.length; n++) {
+ var currentPoint = currentPolygon[n];
+ this.getGeometry(-1,-1).addPointByCoordinates(currentPoint[0], currentPoint[1], currentPoint[2]);
+ }
+ this.getGeometry(-1,-1).setEpsg(featureEpsg);
+ }
+ this.close();
+};
+
+GeometryArray.prototype.importMultiPolygon = function(currentGeometry, featureEpsg){
+ var coordinates = currentGeometry.coordinates;
+
+ this.addMember(geomType.polygon);
+ for (var m = 0; m < coordinates.length; m++) {
+ this.get(-1).addGeometry();
+ var currentPolygon = coordinates[m];
+ for (var n = 0; n < currentPolygon.length; n++) {
+ var currentRing = currentPolygon[n];
+ if (n == 0) {
+ for (var p = 0; p < currentRing.length; p++) {
+ var currentPoint = currentRing[p];
+ this.getGeometry(-1, -1).addPointByCoordinates(currentPoint[0], currentPoint[1], currentPoint[2]);
+ }
+ }
+ else {
+ var ring = new Geometry(geomType.polygon);
+ for (var p = 0; p < currentRing.length; p++) {
+ var currentPoint = currentRing[p];
+ ring.addPointByCoordinates(currentPoint[0], currentPoint[1], currentPoint[2]);
+ }
+ ring.close();
+ this.getGeometry(-1,-1).addInnerRing(ring);
+ }
+ }
+ this.getGeometry(-1,-1).setEpsg(featureEpsg);
+ }
+ this.close();
+};
+
+GeometryArray.prototype.importFeature = function(currentFeature){
+ var isFeature = (currentFeature.type == "Feature") ? true : false;
+
+ // add geometry ...
+ if (currentFeature.geometry && isFeature) {
+ var featureEpsg = "EPSG:4326";
+ if (!currentFeature.crs || currentFeature.crs.type !== "name" || !currentFeature.crs.properties.name) {
+ var e = new Mb_warning("SRS not set or unknown in GeoJSON. Using 'EPSG:4326'.");
+ }
+ else {
+ featureEpsg = currentFeature.crs.properties.name;
+ }
+
+ //
+ // GEOMETRY
+ //
+ var currentGeometry = currentFeature.geometry;
+ var geometrytype = currentGeometry.type;
+ switch (geometrytype) {
+ case "Point":
+ this.importPoint(currentGeometry, featureEpsg);
+ break;
+
+ case "LineString":
+ this.importLine(currentGeometry, featureEpsg);
+ break;
+
+ case "MultiLineString":
+ this.importMultiLine(currentGeometry, featureEpsg);
+ break;
+
+ case "Polygon":
+ this.importPolygon(currentGeometry, featureEpsg);
+ break;
+
+ case "MultiPolygon":
+ this.importMultiPolygon(currentGeometry, featureEpsg);
+ break;
+
+ case "GeometryCollection":
+ var exc = new Mb_exception("Geometry: GeometryCollections are not yet supported");
+ break;
+ }
+ }
+
+ if (currentFeature.properties) {
+ var properties = currentFeature.properties;
+ // GeometryCollections are NOT YET IMPLEMENTED
+ if (geometrytype != "GeometryCollection") {
+ for (var l in properties) {
+ if (typeof(properties[l]) != "function") {
+ this.get(-1).e.setElement(l, properties[l]);
+ }
+ }
+ this.get(-1).e.setElement("fid", currentFeature.id);
+ }
+ }
+}
GeometryArray.prototype.importGeoJSON = function (geoJSON) {
// you can pass either geoJSON or the evaluated geoJSON string
// for backwards compatibility
@@ -322,142 +466,17 @@
// FEATURE COLLECTION
//
var isFeatureCollection = (geoJSON.type == "FeatureCollection") ? true : false;
- if (isFeatureCollection) {
- //
- // FEATURE
- //
- var featureArray = geoJSON.features;
- for (var j = 0; j < featureArray.length; j++) {
- var currentFeature = featureArray[j];
- var isFeature = (currentFeature.type == "Feature") ? true : false;
-
- // add geometry ...
- if (currentFeature.geometry && isFeature) {
- var featureEpsg = "EPSG:4326";
- if (!currentFeature.crs || currentFeature.crs.type !== "name" || !currentFeature.crs.properties.name) {
- var e = new Mb_warning("SRS not set or unknown in GeoJSON. Using 'EPSG:4326'.");
- }
- else {
- featureEpsg = currentFeature.crs.properties.name;
- }
-
- //
- // GEOMETRY
- //
- var currentGeometry = currentFeature.geometry;
- var geometrytype = currentGeometry.type;
- var coordinates = currentGeometry.coordinates;
- switch (geometrytype) {
- case "Point":
- //
- // POINT
- //
- this.addMember(geomType.point);
-
- this.get(-1).addGeometry();
- this.getGeometry(-1,-1).addPointByCoordinates(coordinates[0], coordinates[1], coordinates[2]);
- this.getGeometry(-1,-1).setEpsg(featureEpsg);
- this.close();
- break;
-
- case "LineString":
- //
- // LINESTRING
- //
- this.addMember(geomType.line);
- this.get(-1).addGeometry();
- for (var m = 0; m < coordinates.length; m++) {
- var currentPoint = coordinates[m];
- this.getGeometry(-1,-1).addPointByCoordinates(currentPoint[0], currentPoint[1], currentPoint[2]);
- }
- this.getGeometry(-1,-1).setEpsg(featureEpsg);
- this.close();
- break;
-
- case "MultiLineString":
- //
- // MULTILINESTRING
- //
- this.addMember(geomType.line);
- for (var m = 0; m < coordinates.length; m++) {
- this.get(-1).addGeometry();
- var currentLine = coordinates[m];
- for (var n = 0; n < currentLine.length; n++) {
- var currentPoint = currentLine[n];
- this.getGeometry(-1,-1).addPointByCoordinates(currentPoint[0], currentPoint[1], currentPoint[2]);
- }
- this.getGeometry(-1,-1).setEpsg(featureEpsg);
- }
- this.close();
- break;
-
- case "Polygon":
- //
- // POLYGON
- //
- this.addMember(geomType.polygon);
- for (var m = 0; m < coordinates.length; m++) {
- this.get(-1).addGeometry();
- var currentPolygon = coordinates[m];
- for (var n = 0; n < currentPolygon.length; n++) {
- var currentPoint = currentPolygon[n];
- this.getGeometry(-1,-1).addPointByCoordinates(currentPoint[0], currentPoint[1], currentPoint[2]);
- }
- this.getGeometry(-1,-1).setEpsg(featureEpsg);
- }
- this.close();
- break;
-
- case "MultiPolygon":
- //
- // MULTIPOLYGON
- //
- this.addMember(geomType.polygon);
- for (var m = 0; m < coordinates.length; m++) {
- this.get(-1).addGeometry();
- var currentPolygon = coordinates[m];
- for (var n = 0; n < currentPolygon.length; n++) {
- var currentRing = currentPolygon[n];
- if (n == 0) {
- for (var p = 0; p < currentRing.length; p++) {
- var currentPoint = currentRing[p];
- this.getGeometry(-1, -1).addPointByCoordinates(currentPoint[0], currentPoint[1], currentPoint[2]);
- }
- }
- else {
- var ring = new Geometry(geomType.polygon);
- for (var p = 0; p < currentRing.length; p++) {
- var currentPoint = currentRing[p];
- ring.addPointByCoordinates(currentPoint[0], currentPoint[1], currentPoint[2]);
- }
- ring.close();
- this.getGeometry(-1,-1).addInnerRing(ring);
- }
- }
- this.getGeometry(-1,-1).setEpsg(featureEpsg);
- }
- this.close();
- break;
-
- case "GeometryCollection":
- var exc = new Mb_exception("Geometry: GeometryCollections are not yet supported");
- break;
- }
+ switch (geoJSON.type) {
+ case "FeatureCollection" :
+ var featureArray = geoJSON.features;
+ for (var j = 0; j < featureArray.length; j++) {
+ var currentFeature = featureArray[j];
+ this.importFeature(currentFeature);
}
-
- if (currentFeature.properties) {
- var properties = currentFeature.properties;
- // GeometryCollections are NOT YET IMPLEMENTED
- if (geometrytype != "GeometryCollection") {
- for (var l in properties) {
- if (typeof(properties[l]) != "function") {
- this.get(-1).e.setElement(l, properties[l]);
- }
- }
- this.get(-1).e.setElement("fid", currentFeature.id);
- }
- }
- }
+ break;
+ case "Feature" :
+ this.importFeature(geoJSON);
+ break;
}
return true;
}
@@ -751,6 +770,11 @@
str += "," + propString;
}
+ var fid = this.e.getElementValueByName("fid");
+ if (fid) {
+ str += ", \"id\":\"" + fid + "\"";
+ }
+
str += "}";
return str;
More information about the Mapbender_commits
mailing list