Add transformGeometry function to avoid repeated code
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
goog.provide('ol.format.Feature');
|
goog.provide('ol.format.Feature');
|
||||||
|
|
||||||
goog.require('goog.functions');
|
goog.require('goog.functions');
|
||||||
|
goog.require('ol.proj');
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -98,3 +99,28 @@ ol.format.Feature.prototype.writeFeatures = goog.abstractMethod;
|
|||||||
* @return {ArrayBuffer|Node|Object|string} Node.
|
* @return {ArrayBuffer|Node|Object|string} Node.
|
||||||
*/
|
*/
|
||||||
ol.format.Feature.prototype.writeGeometry = goog.abstractMethod;
|
ol.format.Feature.prototype.writeGeometry = goog.abstractMethod;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {ol.geom.Geometry} geometry Geometry.
|
||||||
|
* @param {boolean} write Set to true for writing, false for reading.
|
||||||
|
* @param {(olx.format.WriteOptions|olx.format.ReadOptions)=} opt_options
|
||||||
|
* Options.
|
||||||
|
* @return {ol.geom.Geometry} Transformed geometry.
|
||||||
|
* @protected
|
||||||
|
*/
|
||||||
|
ol.format.Feature.transformGeometry = function(
|
||||||
|
geometry, write, opt_options) {
|
||||||
|
var featureProjection = goog.isDef(opt_options) ?
|
||||||
|
ol.proj.get(opt_options.featureProjection) : null;
|
||||||
|
var dataProjection = goog.isDef(opt_options) ?
|
||||||
|
ol.proj.get(opt_options.dataProjection) : null;
|
||||||
|
if (!goog.isNull(featureProjection) && !goog.isNull(dataProjection) &&
|
||||||
|
!ol.proj.equivalent(featureProjection, dataProjection)) {
|
||||||
|
return (write ? geometry.clone() : geometry).transform(
|
||||||
|
write ? featureProjection : dataProjection,
|
||||||
|
write ? dataProjection : featureProjection);
|
||||||
|
} else {
|
||||||
|
return geometry;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ goog.require('goog.array');
|
|||||||
goog.require('goog.asserts');
|
goog.require('goog.asserts');
|
||||||
goog.require('goog.object');
|
goog.require('goog.object');
|
||||||
goog.require('ol.Feature');
|
goog.require('ol.Feature');
|
||||||
|
goog.require('ol.format.Feature');
|
||||||
goog.require('ol.format.JSONFeature');
|
goog.require('ol.format.JSONFeature');
|
||||||
goog.require('ol.geom.GeometryCollection');
|
goog.require('ol.geom.GeometryCollection');
|
||||||
goog.require('ol.geom.GeometryType');
|
goog.require('ol.geom.GeometryType');
|
||||||
@@ -72,18 +73,10 @@ ol.format.GeoJSON.readGeometry_ = function(object, opt_options) {
|
|||||||
if (goog.isNull(object)) {
|
if (goog.isNull(object)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
var featureProjection = goog.isDef(opt_options) ?
|
|
||||||
ol.proj.get(opt_options.featureProjection) : null;
|
|
||||||
var dataProjection = goog.isDef(opt_options) ?
|
|
||||||
ol.proj.get(opt_options.dataProjection) : null;
|
|
||||||
var geometryReader = ol.format.GeoJSON.GEOMETRY_READERS_[object.type];
|
var geometryReader = ol.format.GeoJSON.GEOMETRY_READERS_[object.type];
|
||||||
goog.asserts.assert(goog.isDef(geometryReader));
|
goog.asserts.assert(goog.isDef(geometryReader));
|
||||||
var geometry = geometryReader(object);
|
return ol.format.Feature.transformGeometry(
|
||||||
if (!goog.isNull(featureProjection) && !goog.isNull(dataProjection) &&
|
geometryReader(object), false, opt_options);
|
||||||
!ol.proj.equivalent(featureProjection, dataProjection)) {
|
|
||||||
geometry.transform(dataProjection, featureProjection);
|
|
||||||
}
|
|
||||||
return geometry;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -183,17 +176,8 @@ ol.format.GeoJSON.readPolygonGeometry_ = function(object) {
|
|||||||
ol.format.GeoJSON.writeGeometry_ = function(geometry, opt_options) {
|
ol.format.GeoJSON.writeGeometry_ = function(geometry, opt_options) {
|
||||||
var geometryWriter = ol.format.GeoJSON.GEOMETRY_WRITERS_[geometry.getType()];
|
var geometryWriter = ol.format.GeoJSON.GEOMETRY_WRITERS_[geometry.getType()];
|
||||||
goog.asserts.assert(goog.isDef(geometryWriter));
|
goog.asserts.assert(goog.isDef(geometryWriter));
|
||||||
var featureProjection = goog.isDef(opt_options) ?
|
return geometryWriter(
|
||||||
ol.proj.get(opt_options.featureProjection) : null;
|
ol.format.Feature.transformGeometry(geometry, true, opt_options));
|
||||||
var dataProjection = goog.isDef(opt_options) ?
|
|
||||||
ol.proj.get(opt_options.dataProjection) : featureProjection;
|
|
||||||
if (!goog.isNull(featureProjection) && !goog.isNull(dataProjection) &&
|
|
||||||
!ol.proj.equivalent(featureProjection, dataProjection)) {
|
|
||||||
return geometryWriter(
|
|
||||||
geometry.clone().transform(featureProjection, dataProjection));
|
|
||||||
} else {
|
|
||||||
return geometryWriter(geometry);
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user