OpenLayers支持tissot's ellipses本地by adding a sphere to the circular() method .
不幸的是Leaflet L.circle()不支持此类功能。
如何用Leaflet绘制tissot的椭圆?
最佳答案
编辑3:
使用 leaflet-geodesy 的新命题这似乎非常适合您的需求。它不受 Turf 错误的影响(请参阅下面的编辑 2)。
API 非常简单:
LGeo.circle([51.441767, 5.470247], 500000).addTo(map);
(中心位置以[纬度,经度]度为单位,半径以米为单位)
演示:http://jsfiddle.net/ve2huzxw/61/
与 nathansnider 的解决方案进行快速比较:http://fiddle.jshell.net/58ud0ttk/2/
(表明两个代码产生相同的结果区域,唯一的区别在于用于近似区域的段数)
编辑:一个很好的页面,将 Leaflet-geodesy 与标准 L.Circle 进行比较:https://www.mapbox.com/mapbox.js/example/v1.0.0/leaflet-geodesy/
<小时/>编辑2:
不幸的是,草皮使用 JSTS Topology Suite建立缓冲区。看来 JSTS 中的此操作不适合像地球表面这样的非平面几何形状。
已报告该错误 here截至目前,主 Turf 库还没有完整的解决方法。
因此下面的答案(编辑 1)会产生错误的结果。
参见nathansnider's answer了解围绕点构建缓冲区的解决方法。
<小时/>编辑1:
您可以使用 Turf 轻松构建所描述的多边形。 。它提供了 turf.buffer 方法,该方法可以在给定要素(可以是一个简单的点)周围创建具有指定距离的多边形。
因此您可以简单地执行以下操作:
var pt = {
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [5.470247, 51.441767]
}
};
var buffered = turf.buffer(pt, 500, 'kilometers');
L.geoJson(pt).addTo(map);
L.geoJson(buffered).addTo(map);
演示:http://jsfiddle.net/ve2huzxw/41/
<小时/>原答案:
不幸的是,目前似乎没有 Leaflet 插件可以做到这一点。
目前还不清楚 Tissot 指示线应该代表什么:
- 一个真正的椭圆,代表无限小圆的变形(即单个点的变形),或
- 类似圆形的形状,表示地球表面上有限大小的圆的变形,就像您链接到的 OpenLayers 演示一样?
在该演示中,EPSG:4326 中的形状不是椭圆形,与形状的另一半相比,垂直轴的长度在较高纬度处减小。
如果您正在寻找第二个选项,那么您将必须手动构建一个表示球体与地球表面相交的多边形。如果我的理解是正确的,这就是 OL demo 所做的。如果这是您的选择,也许您可以在那里生成多边形并将它们作为 GeoJSON 特征导入到 Leaflet 中? :-)
关于javascript - 如何在Leaflet中绘制天梭椭圆(天梭指示线),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33526678/