【问题标题】:Leaflet.js Circle to Polygon ConversionLeaflet.js 圆到多边形的转换
【发布时间】:2021-06-16 20:21:06
【问题描述】:

我正在使用 Leaflet.js 来保存覆盖图,并为用户提供使用多边形或圆形的选项。

为了使所有对象保持相同的格式,我在保存之前将圆形转换为多边形。

但是,当我重新加载圆圈时,它是椭圆形的。

我知道这是由于地球的曲线,但我不确定如何纠正我的方法以考虑到这一点? (我已经看过但找不到任何能提供我所追求的解决方案的东西)。

主要问题是我在下面使用的 javascript 方法,因为它没有考虑到地球的曲线。

 // GenerateCirlcePolygon - Creates Circle from 360 line Segments 
 function GenerateCirlcePolygon(origin, radius) {
     var earthRadius = 6371;

     //latitude in radians
     var lat = (origin.Latitude * Math.PI) / 180;

     //longitude in radians 
     var lon = (origin.Longitude * Math.PI) / 180;
     //angular distance covered on earth's surface
     var d = parseFloat(radius) / earthRadius;
     polyPoints = new Array();

     for (i = 0; i <= 360; i++) {
         var point = new VELatLong(0, 0)
         var bearing = i * Math.PI / 180; //rad
         point.Latitude = Math.asin(Math.sin(lat) * Math.cos(d) + Math.cos(lat) * Math.sin(d) * Math.cos(bearing));
         point.Longitude = ((lon + Math.atan2(Math.sin(bearing) * Math.sin(d) * Math.cos(lat), Math.cos(d) - Math.sin(lat) * Math.sin(point.Latitude))) * 180) / Math.PI;
         point.Latitude = (point.Latitude * 180) / Math.PI;
         polyPoints.push(point);
     }

任何建议都会很棒。

【问题讨论】:

  • 为什么不将图层存储为geojson?那么你永远是对的

标签: javascript leaflet leaflet-geoman


【解决方案1】:

您可以使用来自leaflet-geoman的内置函数:L.PM.Utils.circleToPolygon(circle, sides)

L.PM.Utils.circleToPolygon(circle, 60).addTo(map)

【讨论】:

  • 感谢您的回复,我在文档中看不到该功能。它是一个未记录的函数还是需要另一个库?
  • 它没有文档,但可以毫无问题地使用。我是 Geoman 的维护者之一。如果不想使用这个内置功能,可以复制一下:PolyToCirclywrapping calculation
  • 哦,太棒了,谢谢!我肯定会使用内置的,并会让你知道我是怎么上手的。真的很感谢帮助! geoman 也很棒,所以也谢谢你
  • 谢谢!如果您赞成并接受答案,那就太好了,这样这个问题就结束了
  • 刚刚试了一下,效果很好。也标记为答案。再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多