5

我阅读了 h3 文档,但我不确定是否找到两个地理点之间的绝对距离是用例之一。在这个页面中有它的公式,或者谷歌地图为它提供了 API。我看到一个h3 API用于查找六边形之间的距离,但不确定如何准确或如何在不同的分辨率等下使用它。非常感谢任何示例或细节。我希望使用 h3 可以减少外部 API 的使用。

4

3 回答 3

3

你是对的,目前没有 H3 函数来计算两个地理点之间的物理距离。我们在库内部有一个函数,它将以公里为单位返回物理距离,但我们目前没有在 H3 库 API 中公开它。这个功能有一个开放的请求,很可能会在接下来的一两个月内添加。

更新:这现在可用作h3.pointDist

于 2018-11-28T17:44:50.997 回答
2

下面会有帮助吗?

const h3 = require("h3-js");

function distanceBetweenIndexCentres(h3Index1, h3Index2){
    if(!h3.h3IsValid(h3Index1) || !h3.h3IsValid(h3Index2))
        throw 'invalid h3 indexes provided'

    let index1CenterCoordinates = h3.h3ToGeo(h3Index1);
    let index2CenterCoordinates = h3.h3ToGeo(h3Index2);

    return distanceInKm(index1CenterCoordinates[0], index1CenterCoordinates[1], index2CenterCoordinates[0], index2CenterCoordinates[1])
}

function distanceInKm(lat1, lon1, lat2, lon2) {
    if ((lat1 == lat2) && (lon1 == lon2)) {
        return 0;
    }
    else {
        var radlat1 = Math.PI * lat1/180;
        var radlat2 = Math.PI * lat2/180;
        var theta = lon1-lon2;
        var radtheta = Math.PI * theta/180;
        var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
        if (dist > 1) {
            dist = 1;
        }
        dist = Math.acos(dist);
        dist = dist * 180/Math.PI;
        dist = dist * 60 * 1.1515;
        return dist * 1.609344;
    }
}


let h3Index1 = h3.geoToH3(16.750642, 78.017239, 7);
let h3Index2 = h3.geoToH3(16.806983, 78.027875, 6);
console.log('distance in km: '+distanceBetweenIndexCentres(h3Index1, h3Index2))

//prints - distance in km: 7.60193311570551
于 2020-05-17T12:42:04.583 回答
0

H3 索引距离

https://boundaries-io.com上有一个 API 可以获取两个 H3 地址(十六进制或长整数)的距离(英里)和方位。
一个示例 API 调用:给出以下 GeoJson 结果。

   /rest/v1/public/boundary/h3/zipcode/index1/89283409857ffff/index2/89283446943ffff/hex?showLineBetween=true&showPoints=false

该服务是免费的,每天 50 个电话可以给你一些快速的结果,免责声明我为这家公司工作

于 2021-08-12T03:21:45.143 回答