我不明白为什么这两个图书馆提供了不同的结果。
const CATA = {
lat: 57.312004,
lng: 25.289825
};
const PK = {
lat: 57.307953,
lng: 25.295025
};
const tCATA = turf.point([CATA.lat, CATA.lng]);
const tPK = turf.point([PK.lat, PK.lng]);
const tDistance = turf.distance(tCATA, tPK, { units: "meters" });
const gCATA = new google.maps.LatLng(CATA);
const gPK = new google.maps.LatLng(PK);
const gDistance = google.maps.geometry.spherical.computeDistanceBetween(
gCATA,
gPK
);
console.log(tDistance, gDistance); // 707.249063108749, 548.7294775022126CodeSandbox:https://codesandbox.io/s/boring-hawking-b7uwh
好吧,有一件事可能是,土耳其人对地球使用不同的半径(6371008.8),而不是谷歌(6378137)。但是,即使为computeDistanceBetween提供了草坪半径,结果在大约150米时仍有差异。
但是,假设computeDistanceBetween尊重radius参数,我假设Google也依赖Haversine,就像草坪一样。
发布于 2020-03-11 19:58:41
如果正确使用,这两个函数实际上返回相同的值!
显然,turfjs --因为它是基于GeoJSON的--使用LngLat格式而不是LatLng。在turf.point定义中转换它们解决了这个问题,并修复了我所拥有的所有相关内容。
参考:https://macwright.org/lonlat/
地理空间(地图)软件的一个令人沮丧的不一致性是坐标顺序。坐标通常表示为数组,如
[-87.73, 41.83],而不是对象,如{ lng: -87.73, lat: 41.83 }。这就让开发人员来决定-87.73是经度还是纬度。一种选择是在芝加哥,另一种选择是在南极洲深处。 在经度、地理空间格式的纬度顺序方面存在着一些共识,但对于图书馆和软件来说,仍然是一片混乱。这取决于开发人员是否意识到这个问题,并阅读必要的文档,并在必要时翻转坐标,以便在不同的系统之间进行转换。
https://stackoverflow.com/questions/60639183
复制相似问题