【问题标题】:Comparing two street addresses or Latitude Longitude numbers比较两个街道地址或纬度经度数字
【发布时间】:2018-05-18 10:11:48
【问题描述】:

背景:我正在尝试使用谷歌地图 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 位,但比较不正确。每个将是 lat/lng 下面将被四舍五入。

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

【问题讨论】:

  • 've tried comparing only 3 decimal places for each latitude and longitude, 没关系。为什么那行不通?
  • 您还要求解决两个问题。最好只专注于比较纬度、经度。
  • 伪代码:delta = abs(deliveryLatitude - endLatitude) + abs(deliveryLongitude - endLongitude)。为您拥有的每个 json 文件创建一个增量,按升序对它们进行排序,以首先列出最接近的匹配项。没有?
  • 比较浮点值通常不是通过检查相等性来完成,而是通过检查它们是否在彼此之间的某个小值 epsilon 内。或者您可以使用一些地理空间库来计算它们在地球表面上的距离。

标签: java android google-maps


【解决方案1】:

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

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

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

或者这个java函数

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

      • 有趣,我以前从未听说过 geoHash。根据您的第二个建议,将坐标四舍五入不是检查它们是否足够接近彼此的更快方法吗?
      • @GeorgeK 这会更容易,但我认为不太准确。
      猜你喜欢
      • 2015-12-06
      • 2010-09-14
      • 2018-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多