无法在Openlayers 3中保存绘制的圆形到JSON的功能

时间:2016-12-20 14:57:06

标签: javascript json openlayers-3

所以,这就是:我想在OL3中的地图上绘制一个圆圈,然后将其保存到JSON文件中。据我所知,你不能写圆形几何到JSON(https://github.com/openlayers/ol3/issues/3552)。我使用OL3示例绘制形状并将其更改为使用ol.geom.Polygon.circular方法以避免使用圆几何。当我尝试保存它时,我得到“TypeError:循环对象值”。

if (value) {
var geometryFunction, maxPoints;
    if (value === 'Circle') {
        value='Circle';
        maxPoints=2;
        geometryFunction = function (coordinates, geometry) {
        if (!geometry) {
        geometry = new ol.geom.Polygon(null);
                    }
      var center = coordinates[0];
      var last = coordinates[1];
      var dx = center[0] - last[0];
      var dy = center[1] - last[1];
      var radius = Math.sqrt(dx * dx + dy * dy);
      geometry = ol.geom.Polygon.circular(wgs84Sphere, center, radius);
      return geometry;
                }; 
            draw = new ol.interaction.Draw({
                features:features,
                type: value,
                geometryFunction: geometryFunction,
                maxPoints: maxPoints
            });
            map.addInteraction(draw);

这就是我保存JSON的方式:

var writer = new ol.format.GeoJSON();
var geojsonStr = writer.writeFeatures(source.getFeatures());
alert(geojsonStr);

我很确定必须有一种方法可以使用ol.geom.Polygon.fromCircle或ol.geom.Polygon.circular绘制并保存圆圈给JSON。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

使用自定义@Override public void onCreate() { super.onCreate(); PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE); wakeLock = m.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Some Tag"); wakeLock.acquire(); ... } @Override public void onDestroy() { wakeLock.release(); } 时,必须使用作为第二个参数传递给几何函数的现有geometryFunction(如果可用)。我更新了你的小提琴:http://jsfiddle.net/px6ks0am/1/

成功的关键是以下geometry,它还负责正确地重新投影圆形多边形:

geometryFunction