diff --git a/src/ol/format/geojsonformat.js b/src/ol/format/geojsonformat.js index 8d975f6a4c..dea0348f19 100644 --- a/src/ol/format/geojsonformat.js +++ b/src/ol/format/geojsonformat.js @@ -9,6 +9,7 @@ goog.require('goog.object'); goog.require('ol.Feature'); goog.require('ol.format.JSON'); goog.require('ol.geom.GeometryCollection'); +goog.require('ol.geom.GeometryType'); goog.require('ol.geom.LineString'); goog.require('ol.geom.MultiLineString'); goog.require('ol.geom.MultiPoint'); diff --git a/src/ol/format/kmlformat.js b/src/ol/format/kmlformat.js index aff6e5c5ad..cde7c22b9d 100644 --- a/src/ol/format/kmlformat.js +++ b/src/ol/format/kmlformat.js @@ -21,6 +21,7 @@ goog.require('ol.Feature'); goog.require('ol.feature'); goog.require('ol.format.XML'); goog.require('ol.geom.GeometryCollection'); +goog.require('ol.geom.GeometryType'); goog.require('ol.geom.LineString'); goog.require('ol.geom.MultiLineString'); goog.require('ol.geom.MultiPoint'); diff --git a/src/ol/geom/geometry.js b/src/ol/geom/geometry.js index ca079dd89c..bb93809b62 100644 --- a/src/ol/geom/geometry.js +++ b/src/ol/geom/geometry.js @@ -1,4 +1,5 @@ goog.provide('ol.geom.Geometry'); +goog.provide('ol.geom.GeometryType'); goog.require('goog.asserts'); goog.require('goog.events.EventType'); diff --git a/src/ol/geom/geometrycollection.js b/src/ol/geom/geometrycollection.js index 3357e84184..e37e0dd04d 100644 --- a/src/ol/geom/geometrycollection.js +++ b/src/ol/geom/geometrycollection.js @@ -5,6 +5,7 @@ goog.require('goog.asserts'); goog.require('goog.object'); goog.require('ol.extent'); goog.require('ol.geom.Geometry'); +goog.require('ol.geom.GeometryType'); diff --git a/src/ol/geom/linearring.js b/src/ol/geom/linearring.js index 622e56776d..1772b5f0ab 100644 --- a/src/ol/geom/linearring.js +++ b/src/ol/geom/linearring.js @@ -1,6 +1,7 @@ goog.provide('ol.geom.LinearRing'); goog.require('ol.extent'); +goog.require('ol.geom.GeometryType'); goog.require('ol.geom.SimpleGeometry'); goog.require('ol.geom.closest'); goog.require('ol.geom.flat'); diff --git a/src/ol/geom/linestring.js b/src/ol/geom/linestring.js index ead7a2ad91..acc3ac8053 100644 --- a/src/ol/geom/linestring.js +++ b/src/ol/geom/linestring.js @@ -1,6 +1,7 @@ goog.provide('ol.geom.LineString'); goog.require('ol.extent'); +goog.require('ol.geom.GeometryType'); goog.require('ol.geom.SimpleGeometry'); goog.require('ol.geom.closest'); goog.require('ol.geom.flat'); diff --git a/src/ol/geom/multilinestring.js b/src/ol/geom/multilinestring.js index 98cfb3402d..c649e41a52 100644 --- a/src/ol/geom/multilinestring.js +++ b/src/ol/geom/multilinestring.js @@ -3,6 +3,7 @@ goog.provide('ol.geom.MultiLineString'); goog.require('goog.array'); goog.require('goog.asserts'); goog.require('ol.extent'); +goog.require('ol.geom.GeometryType'); goog.require('ol.geom.LineString'); goog.require('ol.geom.SimpleGeometry'); goog.require('ol.geom.closest'); diff --git a/src/ol/geom/multipoint.js b/src/ol/geom/multipoint.js index 35185d244e..1cc711b710 100644 --- a/src/ol/geom/multipoint.js +++ b/src/ol/geom/multipoint.js @@ -1,6 +1,7 @@ goog.provide('ol.geom.MultiPoint'); goog.require('ol.extent'); +goog.require('ol.geom.GeometryType'); goog.require('ol.geom.Point'); goog.require('ol.geom.SimpleGeometry'); goog.require('ol.geom.flat'); diff --git a/src/ol/geom/multipolygon.js b/src/ol/geom/multipolygon.js index 87adb0c827..27727e70a4 100644 --- a/src/ol/geom/multipolygon.js +++ b/src/ol/geom/multipolygon.js @@ -1,6 +1,7 @@ goog.provide('ol.geom.MultiPolygon'); goog.require('ol.extent'); +goog.require('ol.geom.GeometryType'); goog.require('ol.geom.Polygon'); goog.require('ol.geom.SimpleGeometry'); goog.require('ol.geom.closest'); diff --git a/src/ol/geom/point.js b/src/ol/geom/point.js index 57e10e4fd5..4e357f7e5a 100644 --- a/src/ol/geom/point.js +++ b/src/ol/geom/point.js @@ -2,6 +2,7 @@ goog.provide('ol.geom.Point'); goog.require('goog.asserts'); goog.require('ol.extent'); +goog.require('ol.geom.GeometryType'); goog.require('ol.geom.SimpleGeometry'); goog.require('ol.geom.flat'); diff --git a/src/ol/geom/polygon.js b/src/ol/geom/polygon.js index b6d67d87fd..50b2f276e4 100644 --- a/src/ol/geom/polygon.js +++ b/src/ol/geom/polygon.js @@ -1,6 +1,7 @@ goog.provide('ol.geom.Polygon'); goog.require('ol.extent'); +goog.require('ol.geom.GeometryType'); goog.require('ol.geom.LinearRing'); goog.require('ol.geom.SimpleGeometry'); goog.require('ol.geom.closest'); diff --git a/src/ol/interaction/drawinteraction.js b/src/ol/interaction/drawinteraction.js index b555411ae1..c36d0116d5 100644 --- a/src/ol/interaction/drawinteraction.js +++ b/src/ol/interaction/drawinteraction.js @@ -7,7 +7,11 @@ goog.require('ol.Feature'); goog.require('ol.Map'); goog.require('ol.MapBrowserEvent'); goog.require('ol.MapBrowserEvent.EventType'); +goog.require('ol.geom.GeometryType'); goog.require('ol.geom.LineString'); +goog.require('ol.geom.MultiLineString'); +goog.require('ol.geom.MultiPoint'); +goog.require('ol.geom.MultiPolygon'); goog.require('ol.geom.Point'); goog.require('ol.geom.Polygon'); goog.require('ol.interaction.Interaction'); @@ -395,7 +399,10 @@ ol.interaction.Draw.prototype.finishDrawing_ = function(event) { goog.asserts.assert(!goog.isNull(sketchFeature)); var coordinates; var geometry = sketchFeature.getGeometry(); - if (this.mode_ === ol.interaction.DrawMode.LINE_STRING) { + if (this.mode_ === ol.interaction.DrawMode.POINT) { + goog.asserts.assertInstanceof(geometry, ol.geom.Point); + coordinates = geometry.getCoordinates(); + } else if (this.mode_ === ol.interaction.DrawMode.LINE_STRING) { goog.asserts.assertInstanceof(geometry, ol.geom.LineString); coordinates = geometry.getCoordinates(); // remove the redundant last point @@ -407,6 +414,16 @@ ol.interaction.Draw.prototype.finishDrawing_ = function(event) { // force clockwise order for exterior ring sketchFeature.setGeometry(new ol.geom.Polygon(coordinates)); } + + // cast multi-part geometries + if (this.type_ === ol.geom.GeometryType.MULTI_POINT) { + sketchFeature.setGeometry(new ol.geom.MultiPoint([coordinates])); + } else if (this.type_ === ol.geom.GeometryType.MULTI_LINE_STRING) { + sketchFeature.setGeometry(new ol.geom.MultiLineString([coordinates])); + } else if (this.type_ === ol.geom.GeometryType.MULTI_POLYGON) { + sketchFeature.setGeometry(new ol.geom.MultiPolygon([coordinates])); + } + if (this.layer_) { this.layer_.getSource().addFeature(sketchFeature); } diff --git a/old/test/spec/ol/interaction/drawinteraction.test.js b/test/spec/ol/interaction/drawinteraction.test.js similarity index 96% rename from old/test/spec/ol/interaction/drawinteraction.test.js rename to test/spec/ol/interaction/drawinteraction.test.js index 8da33d6f95..43e5568042 100644 --- a/old/test/spec/ol/interaction/drawinteraction.test.js +++ b/test/spec/ol/interaction/drawinteraction.test.js @@ -80,7 +80,7 @@ describe('ol.interaction.Draw', function() { simulateEvent('mousedown', 10, 20); simulateEvent('mouseup', 10, 20); simulateEvent('click', 10, 20); - var features = source.getFeatures(); + var features = source.getAllFeatures(); expect(features).to.have.length(1); var geometry = features[0].getGeometry(); expect(geometry).to.be.a(ol.geom.Point); @@ -93,7 +93,7 @@ describe('ol.interaction.Draw', function() { simulateEvent('mousemove', 15, 20); simulateEvent('mouseup', 15, 20); simulateEvent('click', 15, 20); - var features = source.getFeatures(); + var features = source.getAllFeatures(); expect(features).to.have.length(0); }); @@ -113,7 +113,7 @@ describe('ol.interaction.Draw', function() { simulateEvent('mousedown', 30, 15); simulateEvent('mouseup', 30, 15); simulateEvent('click', 30, 15); - var features = source.getFeatures(); + var features = source.getAllFeatures(); expect(features).to.have.length(1); var geometry = features[0].getGeometry(); expect(geometry).to.be.a(ol.geom.MultiPoint); @@ -149,7 +149,7 @@ describe('ol.interaction.Draw', function() { simulateEvent('mouseup', 30, 20); simulateEvent('click', 30, 20); - var features = source.getFeatures(); + var features = source.getAllFeatures(); expect(features).to.have.length(1); var geometry = features[0].getGeometry(); expect(geometry).to.be.a(ol.geom.LineString); @@ -182,7 +182,7 @@ describe('ol.interaction.Draw', function() { simulateEvent('mouseup', 30, 20); simulateEvent('click', 30, 20); - var features = source.getFeatures(); + var features = source.getAllFeatures(); expect(features).to.have.length(1); var geometry = features[0].getGeometry(); expect(geometry).to.be.a(ol.geom.LineString); @@ -218,7 +218,7 @@ describe('ol.interaction.Draw', function() { simulateEvent('mouseup', 30, 20); simulateEvent('click', 30, 20); - var features = source.getFeatures(); + var features = source.getAllFeatures(); expect(features).to.have.length(1); var geometry = features[0].getGeometry(); expect(geometry).to.be.a(ol.geom.MultiLineString); @@ -261,7 +261,7 @@ describe('ol.interaction.Draw', function() { simulateEvent('mouseup', 10, 20); simulateEvent('click', 10, 20); - var features = source.getFeatures(); + var features = source.getAllFeatures(); expect(features).to.have.length(1); var geometry = features[0].getGeometry(); expect(geometry).to.be.a(ol.geom.Polygon); @@ -308,7 +308,7 @@ describe('ol.interaction.Draw', function() { simulateEvent('mouseup', 10, 20); simulateEvent('click', 10, 20); - var features = source.getFeatures(); + var features = source.getAllFeatures(); expect(features).to.have.length(1); var geometry = features[0].getGeometry(); expect(geometry).to.be.a(ol.geom.MultiPolygon);