检查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个坐标是不是在同一个城市的主要内容,如果未能解决你的问题,请参考以下文章
MYSQL/PHP/Postgis:检查一个坐标是不是在另一个坐标的半径内(小扭曲)