Merge pull request #1689 from tonio/fix_modify
Check for geometries type instead of `instanceof`
This commit is contained in:
@@ -86,6 +86,13 @@ var vectorSource = new ol.source.GeoJSON(
|
|||||||
'coordinates': [0, 0]
|
'coordinates': [0, 0]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
'type': 'Feature',
|
||||||
|
'geometry': {
|
||||||
|
'type': 'MultiPoint',
|
||||||
|
'coordinates': [[-2e6, 0], [0, -2e6]]
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
'type': 'Feature',
|
'type': 'Feature',
|
||||||
'geometry': {
|
'geometry': {
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ goog.require('ol.MapBrowserEvent.EventType');
|
|||||||
goog.require('ol.ViewHint');
|
goog.require('ol.ViewHint');
|
||||||
goog.require('ol.coordinate');
|
goog.require('ol.coordinate');
|
||||||
goog.require('ol.extent');
|
goog.require('ol.extent');
|
||||||
|
goog.require('ol.geom.GeometryType');
|
||||||
goog.require('ol.geom.LineString');
|
goog.require('ol.geom.LineString');
|
||||||
goog.require('ol.geom.MultiLineString');
|
goog.require('ol.geom.MultiLineString');
|
||||||
goog.require('ol.geom.MultiPoint');
|
goog.require('ol.geom.MultiPoint');
|
||||||
@@ -173,12 +174,13 @@ ol.interaction.Modify.prototype.writeMultiPointGeometry_ =
|
|||||||
function(feature, geometry) {
|
function(feature, geometry) {
|
||||||
var points = geometry.getCoordinates();
|
var points = geometry.getCoordinates();
|
||||||
var coordinates, i, ii, segmentData;
|
var coordinates, i, ii, segmentData;
|
||||||
for (i = 0, ii = points.length - 1; i < ii; ++i) {
|
for (i = 0, ii = points.length; i < ii; ++i) {
|
||||||
coordinates = points[i];
|
coordinates = points[i];
|
||||||
segmentData = /** @type {ol.interaction.SegmentDataType} */ ({
|
segmentData = /** @type {ol.interaction.SegmentDataType} */ ({
|
||||||
feature: feature,
|
feature: feature,
|
||||||
geometry: geometry,
|
geometry: geometry,
|
||||||
depth: [i],
|
depth: [i],
|
||||||
|
index: i,
|
||||||
segment: [coordinates, coordinates],
|
segment: [coordinates, coordinates],
|
||||||
style: this.overlay_.getStyleFunction()
|
style: this.overlay_.getStyleFunction()
|
||||||
});
|
});
|
||||||
@@ -406,25 +408,31 @@ ol.interaction.Modify.prototype.handleDrag = function(evt) {
|
|||||||
var segment = segmentData.segment;
|
var segment = segmentData.segment;
|
||||||
var index = dragSegment[1];
|
var index = dragSegment[1];
|
||||||
|
|
||||||
|
switch (geometry.getType()) {
|
||||||
if (geometry instanceof ol.geom.Point) {
|
case ol.geom.GeometryType.POINT:
|
||||||
coordinates = vertex;
|
coordinates = vertex;
|
||||||
segment[0] = segment[1] = vertex;
|
segment[0] = segment[1] = vertex;
|
||||||
} else if (geometry instanceof ol.geom.MultiPoint) {
|
break;
|
||||||
coordinates[depth[0]][segmentData.index + index] = vertex;
|
case ol.geom.GeometryType.MULTI_POINT:
|
||||||
segment[0] = segment[1] = vertex;
|
coordinates[segmentData.index] = vertex;
|
||||||
} else if (geometry instanceof ol.geom.LineString) {
|
segment[0] = segment[1] = vertex;
|
||||||
coordinates[segmentData.index + index] = vertex;
|
break;
|
||||||
segment[index] = vertex;
|
case ol.geom.GeometryType.LINE_STRING:
|
||||||
} else if (geometry instanceof ol.geom.MultiLineString) {
|
coordinates[segmentData.index + index] = vertex;
|
||||||
coordinates[depth[0]][segmentData.index + index] = vertex;
|
segment[index] = vertex;
|
||||||
segment[index] = vertex;
|
break;
|
||||||
} else if (geometry instanceof ol.geom.Polygon) {
|
case ol.geom.GeometryType.MULTI_LINE_STRING:
|
||||||
coordinates[0][segmentData.index + index] = vertex;
|
coordinates[depth[0]][segmentData.index + index] = vertex;
|
||||||
segment[index] = vertex;
|
segment[index] = vertex;
|
||||||
} else if (geometry instanceof ol.geom.MultiPolygon) {
|
break;
|
||||||
coordinates[depth[0]][0][segmentData.index + index] = vertex;
|
case ol.geom.GeometryType.POLYGON:
|
||||||
segment[index] = vertex;
|
coordinates[0][segmentData.index + index] = vertex;
|
||||||
|
segment[index] = vertex;
|
||||||
|
break;
|
||||||
|
case ol.geom.GeometryType.MULTI_POLYGON:
|
||||||
|
coordinates[depth[0]][0][segmentData.index + index] = vertex;
|
||||||
|
segment[index] = vertex;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
geometry.setCoordinates(coordinates);
|
geometry.setCoordinates(coordinates);
|
||||||
@@ -528,29 +536,39 @@ ol.interaction.Modify.prototype.handleMouseAtPixel_ = function(pixel, map) {
|
|||||||
* @param {ol.Coordinate} vertex Vertex.
|
* @param {ol.Coordinate} vertex Vertex.
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
ol.interaction.Modify.prototype.insertVertex_ =
|
ol.interaction.Modify.prototype.insertVertex_ = function(segmentData, vertex) {
|
||||||
function(segmentData, vertex) {
|
|
||||||
var segment = segmentData.segment;
|
var segment = segmentData.segment;
|
||||||
var feature = segmentData.feature;
|
var feature = segmentData.feature;
|
||||||
var geometry = segmentData.geometry;
|
var geometry = segmentData.geometry;
|
||||||
var depth = segmentData.depth;
|
var depth = segmentData.depth;
|
||||||
var index = segmentData.index;
|
var index = segmentData.index;
|
||||||
geometry = /** @type {ol.geom.Point|ol.geom.LineString|ol.geom.Polygon|
|
var coordinates;
|
||||||
ol.geom.MultiPoint|ol.geom.MultiLineString|ol.geom.MultiPolygon} */
|
|
||||||
(geometry);
|
|
||||||
var coordinates = geometry.getCoordinates();
|
|
||||||
|
|
||||||
if (geometry instanceof ol.geom.MultiPoint) {
|
switch (geometry.getType()) {
|
||||||
coordinates[depth[0]] = coordinates;
|
case ol.geom.GeometryType.MULTI_LINE_STRING:
|
||||||
} else if (geometry instanceof ol.geom.MultiLineString) {
|
goog.asserts.assertInstanceof(geometry, ol.geom.MultiLineString);
|
||||||
coordinates[depth[0]].splice(index + 1, 0, vertex);
|
coordinates = geometry.getCoordinates();
|
||||||
} else if (geometry instanceof ol.geom.Polygon) {
|
coordinates[depth[0]].splice(index + 1, 0, vertex);
|
||||||
coordinates[0].splice(index + 1, 0, vertex);
|
break;
|
||||||
} else if (geometry instanceof ol.geom.MultiPolygon) {
|
case ol.geom.GeometryType.POLYGON:
|
||||||
coordinates[depth[0]][0].splice(index + 1, 0, vertex);
|
goog.asserts.assertInstanceof(geometry, ol.geom.Polygon);
|
||||||
} else {
|
coordinates = geometry.getCoordinates();
|
||||||
coordinates.splice(index + 1, 0, vertex);
|
coordinates[0].splice(index + 1, 0, vertex);
|
||||||
|
break;
|
||||||
|
case ol.geom.GeometryType.MULTI_POLYGON:
|
||||||
|
goog.asserts.assertInstanceof(geometry, ol.geom.MultiPolygon);
|
||||||
|
coordinates = geometry.getCoordinates();
|
||||||
|
coordinates[depth[0]][0].splice(index + 1, 0, vertex);
|
||||||
|
break;
|
||||||
|
case ol.geom.GeometryType.LINE_STRING:
|
||||||
|
goog.asserts.assertInstanceof(geometry, ol.geom.LineString);
|
||||||
|
coordinates = geometry.getCoordinates();
|
||||||
|
coordinates.splice(index + 1, 0, vertex);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
geometry.setCoordinates(coordinates);
|
geometry.setCoordinates(coordinates);
|
||||||
var rTree = this.rBush_;
|
var rTree = this.rBush_;
|
||||||
goog.asserts.assert(goog.isDef(segment));
|
goog.asserts.assert(goog.isDef(segment));
|
||||||
|
|||||||
Reference in New Issue
Block a user