【发布时间】: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