ol3 - 计算 epsg 3857 中的实际米数

ol3 - calculate real meters in epgs 3857

我使用 ol3 作为地图服务。

我用坐标 [[0,0],[0,1000]] 的两个点制作了一个 linestring 并使用 vincenty 公式计算了距离。结果是1000米,什么是准确的。

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

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

距离很棘手。坐标系的地图单位以米为单位(如 epsg:3857)这一事实并不意味着您可以直接以米为单位测量距离。查看 https://en.wikipedia.org/wiki/List_of_map_projections,看看其中有多少人拥有 "equidistant" 属性。

我建议您使用turf.js来计算准确的大地距离:http://turfjs.org/static/docs/module-turf_distance.html

您可以使用 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

经过大量搜索,我找到了这个 PDF 文档:

Web 墨卡托: 非正形、非墨卡托

有一种叫做 Point Scale Factor 的东西 - 根据 web 墨卡托投影的方式 - 它有两个值,不像普通的墨卡托,North/South Scale FactorEast/West Scale Factor.

在我的程序中我忽略了 East/West Scale Factors 因为它太小了。

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