我使用ol3作为地图服务。
我用坐标:linestring做了两个点:[[0,0],[0,1000]],用vincenty公式计算了距离。这导致1000米,什么是准确的。
但是当我再做一次linestring时,例如[[4052627,3971934],[4052627,3972934]],vincenty的距离大约是850米。
我不知道我在这里忘了什么。有办法纠正吗?我想计算出在给定的实际距离下,epgs:3857米(单位)。
发布于 2015-05-31 13:10:43
经过大量的搜索,我找到了这个PDF文档:
网络墨卡托:非共形,非墨卡托
有一种叫做Point Scale Factor的东西--根据网络墨卡托的投影方式--它有两个值,一个不像普通的墨卡托、North/South Scale Factor和East/West Scale Factor。
在我的程序中,我忽略了East/West Scale Factors,因为它太小了。
一旦我计算出标度因子,实际距离几乎等于scale_factor * epgs_3857_distence
发布于 2015-04-16 15:59:07
您可以使用ol.sphere.haversineDistance
var c1 = [4052627, 3971934];
var c2 = [4052627,3972934];
var wgs84Sphere = new ol.Sphere(6378137);
var length = wgs84Sphere.haversineDistance(
ol.proj.transform(c1, 'EPSG:3857', 'EPSG:4326'),
ol.proj.transform(c2, 'EPSG:3857', 'EPSG:4326'));
// 833.12 m发布于 2015-04-16 10:48:25
距离是很棘手的。坐标系统的地图单位以米为单位(如epsg:3857)这一事实并不意味着你可以直接测量米的距离。请参阅预测,并查看其中有多少具有“等距”属性。
我建议您使用turf.js来计算精确的大地距离:distance.html
https://stackoverflow.com/questions/29670384
复制相似问题