2016-12-20 19 views
0

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

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圈以JSON的方式。 Polygon.circular。有任何想法吗?

+0

你在你的功能,例如储存任何复杂的属性(即不是字符串或数字等)使用'feature.set()'?如果没有看到您的应用程序,很难猜测发生了什么。 – ahocevar

+0

这就是我所拥有的:http://jsfiddle.net/px6ks0am/ 因为JSON不能获得圆形几何体,所写的特征是空的。我怎样才能避免使用圆或将其转换为多边形? – thebat93

回答

0

当使用自定义geometryFunction时,如果可用,则必须使用作为第二个参数传递给几何函数的现有geometry。我更新了你的小提琴:http://jsfiddle.net/px6ks0am/1/

成功的关键是以下geometryFunction,这也需要适当地重新投影圆形多边形的护理:

var wgs84Sphere = new ol.Sphere(6378137); 
function geometryFunction(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); 
    var circle = ol.geom.Polygon.circular(wgs84Sphere, ol.proj.toLonLat(center), radius); 
    circle.transform('EPSG:4326', 'EPSG:3857'); 
    geometry.setCoordinates(circle.getCoordinates()); 
    return geometry; 
} 
+0

非常感谢!这是一个值得回答的问题!我可以找到一些ol.geom.Polygon.circular的例子,但没有一个处理实际的绘图。欣赏它! – thebat93