对圆半径使用大地测量?


15

我目前正在开发一个OpenLayers映射站点。可以使用线条工具和面积工具进行测量。如OpenLayers API所述,目前都将这两项设置为计算测地线

我使用测地线测量,而不是平面测量,因为在用户测试期间,人们质疑工具的测量以获取其已知的距离(例如,在城镇之间行驶)。

该站点的新功能是使用户能够在设置半径的地图上绘制圆。OpenLayers仅允许使用平面距离绘制圆,因此,当用户使用测地线测量工具测量圆时,值将不匹配。在下面的图像中,圆的平面半径为10km,但是测地线的直径为12km。

显然,这会让用户(和我自己)想知道哪个是正确的。

替代文字

看着这个答案,似乎大多数桌面GIS系统“忽略”了这个问题,并返回了平面尺寸和距离。那么,在处理平面和测地线测量的用户界面和准确性方面,最佳实践是什么?

更新资料

我找到了这个Google示例,该示例说明了半径和墨卡托投影的问题:

http://maps.forum.nu/gm_sensitive_circle2.html

绘制圆圈的JavaScript代码如下:

    var lat1 = (PI/180)* center.lat(); // radians
    var lng1 = (PI/180)* center.lng(); // radians

    for (var a = 0 ; a < 361 ; a++ ) {
        var tc = (PI/180)*a;
        var y = asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc));
        var dlng = atan2(sin(tc)*sin(d)*cos(lat1),cos(d)-sin(lat1)*sin(y));
        var x = ((lng1-dlng+PI) % (2*PI)) - PI ; // MOD function
        var point = new GLatLng(parseFloat(y*(180/PI)),parseFloat(x*(180/PI)));
        circlePoints.push(point);
        bounds.extend(point);
    }

这个圆是否考虑了地球的曲率?

最终更新

工作代码发布在http://geographika.co.uk/creating-a-geodesic-circle-in-openlayers


1
这里一定有问题。在直线和球体之后的直线之间的短距离内,相差不能为20%。必须有其他事情。
NicklasAvén2010年

4
投影很可能是墨卡托(Mercator),仅在赤道具有真实比例(通常,实际上可以在其他地方(在单个纬度上)使用真实比例的墨卡托投影,但大多数全局参数化使用赤道)。当您从真实的标度纬度向北/向南行驶时,墨卡托的比例误差确实非常高(实际上是无穷无尽)。
保罗·拉姆西

测量是在北纬52度进行的,并且确实在墨卡托投影中。那么,这是否意味着在Mercator中绘制的任何客户端要素都将返回非常不准确的区域和长度,除非靠近赤道?
geographika,2010年

1
是的,几乎就是这种情况,将数据投影到以米或英尺为单位的本地网格中,一切都会很好。
伊恩·特顿

2
@Paul好电话。但是这些数据仅表明投影是圆柱形的,墨卡托就是其中之一。在真实的圆柱投影中,水平变形等于sec(纬度)。通过这个公式,20 / 12.13的失真达到了52.66度的纬度。那正是利默里克的自由度。
Whuber

Answers:


8

如果您是在浏览器中自学,则可以得到一个“圆”(由于投影的原因,它在屏幕上不会是圆形的;而是由一个多边形(带有您想要绘制的尽可能多的点)来近似),请使用测地线计算的直接形式:给定一个点,一个方向(方位角)和一个距离,即可得出结果点。血腥细节:http : //en.wikipedia.org/wiki/Vincenty%27s_formulae#Direct_Method

好像有人已经对javascript进行了翻译:http : //www.movable-type.co.uk/scripts/latlong-vincenty-direct.html。幸运的你!

完成任务:

  • 确定您希望最终结果有多粗(顶点数,称为n)。
  • 将360度分为n个片段。
  • 构建一个多边形(对于范围(i)中的i:polygon.add(vincenty_direct(start_point,i * 360 / n,distance)))
  • 事后,可能会解决一些投影和平面化的烦恼:
    • 如果使用几乎可以肯定的典型Web地图投影,则生成的多边形如果接近极点,则会在垂直方向上极大地拉伸。
    • 同样,如果结果多边形越过国际日期线,它会真的很烂。

干杯!


1
Vincenty方法已经在utils命名空间-dev.openlayers.org/apidocs/files/OpenLayers/…中添加到OpenLayers中,并且您的解释(尤其是方位参数)可以清除此问题。谢谢!
geographika,2010年

:)让我知道“烦恼”有多烦人。理想情况下,修复将已经是OpenLayers的一部分,并且可以正常工作,但是我不确定。
Dan S.

3

OpenLayers仅允许使用平面距离绘制圆

要获得测地线圆,可以在ESRI的几何服务中使用缓冲操作。

...如果单位是英尺或米之类的线性单位,则执行测地线缓冲

一个免费的可访问这里


感谢您提供有用的链接-我将查看是否可以调用该服务并更新JavaScript中的功能。我唯一关心的就是依赖可以随时关闭的Web服务。我认为测地线的缓冲点将是准确的/真实的10公里圆?
geographika,2010年

该圆应该是准确的,但是,我会使用您的测量工具对其进行检查。我认为几何服务是标准arcgis服务器安装的一部分,因此,如果该服务退休,则应该在网上提供更多选择。google.com/...
柯克Kuykendall
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.