ol3 - 计算epsg 3857中的真实米

时间:2015-04-16 09:19:17

标签: javascript openlayers-3

我使用ol3作为地图服务。

我制作了一个linestring,其中有两个坐标为[[0,0],[0,1000]]的点,并使用vincenty公式计算距离。这导致了1000米,这是准确的。

但是,当我另一个linestring例如[[4052627,3971934],[4052627,3972934]] vincenty距离大约850米时。

我不知道我忘记了什么。有什么方法可以纠正吗?我想计算epgs:给定真实距离的3857米(单位)。

3 个答案:

答案 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 FactorEast/West Scale Factor

在我的计划中,我忽略了East/West Scale Factors,因为它很小。

一旦我计算了比例因子,实际距离几乎等于scale_factor * epgs_3857_distence