比较两个街道地址或经纬度数字



背景:我正在尝试使用谷歌地图API,我已经到了可以从json文件中获取数据的地步。我正在尝试使用 json 文件的信息更新我的数据集,但我遇到了困难。

你会从谷歌的json文件中得到一个地址范围或街道和一个纬度经度,我需要检查哪个地址对应于哪个json地址。

json 文件将包含多个代码块,如下所示:

"distance" : {
"text" : "999 ft",
"value" : 999
},
"duration" : {
"text" : "999 min",
"value" : 999
},
"end_address" : "3722-3788 Street, City, ST 11111, USA",
"end_location" : {
"lat" : 40.0000000,
"lng" : 100.0000000
},

我的数据将具有纬度、经度和一个地址,我可以在其中进行比较以查看我的地址是否是 JSON 地址的一部分。问题是,我的数据将准确显示房屋地址的位置,而Google的(上图)将具有大致/他们居住的街道。

问题:我的数据有时会具有 40.0005001 的经度、99.799999 的纬度(接近但不相等)和地址 3750 Street, City, ST 11111, USA(在边界内,但不完全相同)。

问:如何检查我的 JSON end_address是否与我的实际地址足够接近?我不需要确切的门牌号,主要是正确的街道名称等(注意:我们将要比较的所有字段都是字符串,但如果需要,可以转换为双精度。

我尝试只比较每个纬度和经度的小数点后 3 位,但它没有正确进行比较。每个将是纬度/液化天然气,下面将四舍五入。

if (deliveryLatitude == endLatitude && deliveryLongitude == endLongitude) {

如果数据存储在某个数据库服务器上,请检查地理空间支持。您可能具有内置函数来查询应该非常有效的地理空间数据。

我能想到的最简单的解决方案是检查某个点A是否足够接近地球上的某个点B。因此,您将 A 点和 B 点传递给此:

https://stackoverflow.com/a/16794680/9810761

或者这个 Java 函数

https://stackoverflow.com/a/3694410/9810761

并检查距离是否低于某个阈值/ε,例如 10 米 - 尝试一下。

您应该将确切的值四舍五入到一定程度,以检查Google的近似值是否匹配。对值进行多少舍入取决于所需的结果的准确性。四舍五入越多,准确性损失越大。

你可以使用 JavaScript 的 floor() 方法。

对于这类任务,geoHash非常有用。您可以使用几个开源geoHash库。例如。

  • 点 A(x1,y1), geohash = abcdef
  • 点 B(x2,y2) geohash = abcdoz

geoHash 的主要思想是:geoHash 开头的文字越多相同 - 这些点就越接近。

或者,您可以计算这两点之间的距离并定义它们之间的距离。例如ESRI geometry API有地球上距离计算的方法

最新更新