OpenLayers - 缺少圆坐标

OpenLayers - Circle coordinates are missing

我希望可以选择将绘图导出为 geoJSON 文件。到目前为止,我已经完美地处理了所有这些问题,除了圆圈,诚然,圆圈根本没有任何几何形状!

我知道,GeoJSON 格式可以呈现一个纯圆,我们需要按照这个线程将其建模为点:

How to define a circle using GeoJson? https://docs.mongodb.com/manual/tutorial/query-a-2dsphere-index/

我完全意识到这一点,这就是为什么我开始修改我的代码以使圆圈物理可见的原因。

我的问题与这个非常相似:

类似于下面的解决方案:

http://geoadmin.github.io/ol3/apidoc/sphere.js.html

修改代码后:

   var wgs84Sphere = new ol.sphere(6378137);

   var circleInteraction = new ol.interaction.Draw({
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);
  var circle = ol.geom.Polygon.circular(wgs84Sphere, ol.proj.toLonLat(center), radius);
  circle.transform('EPSG:4326', 'EPSG:3857');
  geometry.setCoordinates(circle.getCoordinates());
  return geometry;
  },
  type: 'Circle',
  source: vectorLayer.getSource()
  });
  circleInteraction.setActive(false);
  circleInteraction.on('drawend', onDrawend );

我收到一个错误:

未捕获类型错误:ol.sphere 不是构造函数

这是由 OpenLayers 库升级引起的,从 5.0.0 版本开始不再有效。 https://github.com/openlayers/openlayers/issues/9046

针对这种情况,我尝试更改wgs84Sphere变量

  var polygon_geometry = new ol.geom.Polygon;

  var wgs84Sphere = ol.sphere.getArea(polygon_geometry, projection='EPSG:4326', radius=6378137)

但是也没用

Uncaught TypeError: 无法读取未定义的属性(读取 SimpleGeometry.js:170

指向直线

    if (coordinates.length === 0) {

那么可以为圆生成 .geoJSON 几何图形吗?

我的完整 JSFiddle 在这里:

https://jsfiddle.net/pet6h30d/

ol.geom.Polygon.circular的参数也改变了,所以你不需要构建一个球体,见https://openlayers.org/en/latest/examples/draw-and-modify-geodesic.html如果你不需要修改你只需要一个多边形

geometryFunction: function(coordinates, geometry, projection) {
  if (!geometry) {
    geometry = new ol.geom.Polygon([]);
  }
  var center = ol.proj.transform(coordinates[0], projection, 'EPSG:4326');
  var last = ol.proj.transform(coordinates[1], projection, 'EPSG:4326');
  var radius = ol.sphere.getDistance(center, last);
  var circle = ol.geom.Polygon.circular(center, radius);
  circle.transform('EPSG:4326', projection);
  geometry.setCoordinates(circle.getCoordinates());
  return geometry;
},