检查2个坐标是不是在同一个城市

Posted

技术标签:

【中文标题】检查2个坐标是不是在同一个城市【英文标题】:Check if 2 coordinates are in the same city检查2个坐标是否在同一个城市 【发布时间】:2022-01-23 11:10:49 【问题描述】:

基本上,我有 2 个 LatLong 值,1 个用于根据当前位置不断更新的用户,1 个存储在数据库中。如何检查这两个坐标是否在同一个城市或州。 注意:我对坐标和比较字符串(administrative_area_level_2)都使用了谷歌地图 API https://maps.googleapis.com/maps/api/geocode/json?latlng=33.26944346171845,%2035.20463784635442&sensor=true&key=KEY 来检查用户是否在同一个城市。在 Flutter 中有更好的方法吗? 提前致谢!

【问题讨论】:

【参考方案1】:

我认为你的方法很合理。如果您不想使用 API,可以使用以下方法计算两个坐标之间的距离。使用它,您可以假设低于一定距离的人在同一个城市或州。


const convertToRadian = x => x * Math.PI / 180;

function getDistanceBetween(lat1, lat2, lng1, lng2) 
    const R = 6378137; // Earth’s mean radius in meter
    const dLat = convertToRadian(lat2 - lat1);
    const dLong = convertToRadian(lng2 - lng1);
    const a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(convertToRadian(lat1)) * Math.cos(convertToRadian(lat2)) * Math.sin(dLong / 2) * Math.sin(dLong / 2);
    const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    return R * c; // returns the distance in meter

【讨论】:

我明白了,谢谢@Salih Can。并不是我不想使用谷歌地图 API,我不喜欢比较字符串以了解用户是否在同一个城市的想法。您的解决方案解决了该问题,但我仍然无法找到使其准确的方法。

以上是关于检查2个坐标是不是在同一个城市的主要内容,如果未能解决你的问题,请参考以下文章

地理位置 - 如何检查 2 个圆圈是不是重叠

CoreData 检查多对多关系是不是包含对象

检查纬度经度是不是位于两个坐标之间的线上

MYSQL/PHP/Postgis:检查一个坐标是不是在另一个坐标的半径内(小扭曲)

如何检查一个位置坐标是不是落在android中的另一个位置坐标半径

如何检查坐标是不是在以公里为单位的半径范围内?