我目前正在开发一个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