背景:我尝试使用谷歌地图API,我已经到了可以从json文件获取数据的地步。我试图用json文件的信息更新我的数据集,但我遇到了困难。
您将从Google的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地址的一部分。问题是,我的数据确切地说房屋地址在哪里,而谷歌(上图)将具有他们居住的街道。
问题:我的数据有时的经度为40.0005001,纬度为99.799999(接近但不相等),地址为3750 Street,City,ST 11111,USA(位于在界限范围内,但不完全相同)。
问:如何查看我的json的end_address是否足够接近我的实际地址?我并不完全需要门牌号码,大部分都是正确的街道名称等。(注意:我们将要比较的所有字段都是字符串,但如果需要可以转换为双倍。)
我尝试比较每个纬度和经度只有3个小数位,但它没有得到正确的比较。每个将在下面的lat / lng将被舍入。
if (deliveryLatitude == endLatitude && deliveryLongitude == endLongitude) {
答案 0 :(得分:2)
如果您的数据存储在某个数据库服务器上,请检查地理空间支持。您可能有内置函数来查询应该非常有效的地理空间数据。
我能想到的最简单的解决方案是检查某个点A是否足够接近地球上的某个点B.所以你将A点和B点传递给它:
https://stackoverflow.com/a/16794680/9810761
或这个java函数
https://stackoverflow.com/a/3694410/9810761
检查距离是否低于某个阈值/ epsilon,可能是10米 - 试验一下。
答案 1 :(得分:0)
您应该将您的确切值四舍五入到一定程度,以检查Google的近似值是否匹配。你的价值取决于你需要多少准确的结果。圆度越大,精度损失越多。
您可以使用JavaScript的floor()方法。
答案 2 :(得分:0)
对于这种任务,geoHash非常有用。您可以使用几个开源geoHash库。例如。
geoHash的主要思想是:geoHash开头的文字越多,这些点越接近。
或者您可以计算这两个点之间的距离并定义它们的距离。例如,ESRI geometry API
具有在地球上进行距离计算的方法