我使用ol3
作为地图服务。
我制作了一个linestring
,其中有两个坐标为[[0,0],[0,1000]]
的点,并使用vincenty公式计算距离。这导致了1000米,这是准确的。
但是,当我另一个linestring
例如[[4052627,3971934],[4052627,3972934]]
vincenty距离大约850米时。
我不知道我忘记了什么。有什么方法可以纠正吗?我想计算epgs:给定真实距离的3857米(单位)。
答案 0 :(得分:2)
您可以使用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
答案 1 :(得分:0)
距离很棘手。坐标系的地图单位以米为单位(如epsg:3857)并不意味着您可以直接以米为单位测量距离。请参阅https://en.wikipedia.org/wiki/List_of_map_projections,看看其中有多少人具有“等距”属性。
我建议您使用turf.js来计算准确的大地距离:http://turfjs.org/static/docs/module-turf_distance.html
答案 2 :(得分:0)
经过大量搜索,我发现了这份PDF文档:
Web Mercator: Non-Conformal, Non-Mercator
有一种叫做Point Scale Factor
的东西 - 根据web Mercator的投射方式 - 它有两个值,而不是普通的墨卡托,North/South Scale Factor
和East/West Scale Factor
。
在我的计划中,我忽略了East/West Scale Factors
,因为它很小。
一旦我计算了比例因子,实际距离几乎等于scale_factor * epgs_3857_distence