Retour à la documentation
/**
* @class spw.api.GeometryConverter
* @classdesc Classe utilitaire permettant de convertir des géométries dans divers formats et vice versa
*/
define([
"dojo/_base/declare", "dojo/_base/array", "esri/geometry/Polygon",
"esri/geometry/Point", "esri/geometry/Multipoint", "esri/geometry/Polyline",
"esri/geometry/Extent",
"spw/libs/togeojson",
"spw/libs/terraformer-1.0.3.min"
],
/** @lends spw.api.GeometryConverter.prototype */
function (declare, array, Polygon, Point, Multipoint, Polyline, Extent, togeojson) {
var GeometryConverter = declare("spw.api.GeometryConverter", null, {});
GeometryConverter.esriToGeoJSON = function(esriGeometry) {
return Terraformer.ArcGIS.parse(esriGeometry);
};
GeometryConverter.geoJSONToEsri = function(geoJSONGeometry, options) {
if((!options || !options.sr) && geoJSONGeometry.crs && geoJSONGeometry.crs.properties && geoJSONGeometry.crs.properties.name){
if(!options) options= {};
options.sr = (geoJSONGeometry.crs.properties.name.indexOf("EPSG:") > -1 ?
parseInt(geoJSONGeometry.crs.properties.name.split("EPSG:")[1]) :
null);
}
var json = Terraformer.ArcGIS.convert(geoJSONGeometry, options);
if(!json) {
console.error("Error occured : transform geoJSONGeometry to esriGeometry.");
return null;
}
return _instanciateEsriGeometry(json);
};
GeometryConverter.esriToWkt = function(esriGeometry) {
return Terraformer.WKT.convert(Terraformer.ArcGIS.parse(esriGeometry));
};
GeometryConverter.kmlToGeoJSON = function(doc) {
return toGeoJSON.kml(doc);
};
GeometryConverter.gpxToGeoJSON = function(doc) {
return toGeoJSON.gpx(doc);
};
GeometryConverter.wktToEsri = function(wktGeometry, options) {
var json = Terraformer.ArcGIS.convert(Terraformer.WKT.parse(wktGeometry), options);
if(!json) {
console.error("Error occured : transform wktGeometry to esriGeometry.");
return null;
}
return _instanciateEsriGeometry(json);
};
GeometryConverter.instanciateEsriGeometry = function(json) {
return _instanciateEsriGeometry(json);
};
function _instanciateEsriGeometry(json){
if(!json) {
console.error("Error occured : _instanciateEsriGeometry.");
return null;
}
if(json.rings)
return new Polygon(json);
if(json.x && json.y)
return new Point(json);
if(json.paths)
return new Polyline(json);
if(json.points)
return new Multipoint(json);
if(json.xmin && json.xmax && json.ymin && json.ymax)
return new Extent(json);
return null;
};
GeometryConverter.shapeGeometryToEsri = function(shapeGeometry) {
if (shapeGeometry.type == 5/*ShpType.SHAPE_POLYGON*/ && shapeGeometry.rings){
/* shape: ShpPolygon
box: Object
rings: Array[1]
0: Array[7]
0: ShpPoint
type: 1
x: 5.48395564959111
y: 50.67435638866909 */
var rings = [];
array.forEach(shapeGeometry.rings, function(r){
var ring = [];
array.forEach(r, function(p){
ring.push([p.x, p.y]);
});
rings.push(ring);
});
return new Polygon(rings);
} else if(shapeGeometry.type == 3/*ShpType.SHAPE_POLYLINE*/&& shapeGeometry.rings) {
var path = [];
array.forEach(shapeGeometry.rings[0], function(p){
path.push([p.x, p.y]);
});
return new Polyline(path);
} else if (shapeGeometry.type == 1/*ShpType.SHAPE_POINT*/) {
return new Point(shapeGeometry.x, shapeGeometry.y);
} else {
console.error("GeometryConverter.shapeGeometryToEsri - type unsupported");
}
};
return GeometryConverter;
}
);