我期待创建一个MySQL查询,查找世界指定区域内的所有记录.每个记录包含一个点(lat / lon),我有指定区域的右上角(lat / lon)和左下角(lat / lon).
有了这些信息,我该如何找到合适的记录?
解决方法:
LAT1 = MIN(右上角,左下角)
LAT2 = MAX(右上拉,左下拉)
LON1 = MIN(右上lon,左下lon)
LON2 = MAX(右上lon,左下lon)
SELECT fields
FROM points
WHERE lat BETWEEN LAT1 AND LAT2
AND lon BETWEEN LON1 AND LON2
这样,如果您将Prime Meridian或赤道与您的盒子交叉,查询应该处理.
要处理第180个子午线(或反子午线),您需要将右侧线圈与左侧线圈进行比较,检查右侧数字是否为负数,左侧数字是否为正数.如果是这样,那么你已经越过了第180个子午线.您的查询必须看起来像这样:
SELECT fields
FROM points
WHERE lat BETWEEN LAT1 AND LAT2
AND (lon BETWEEN -180 AND LON1 OR lon BETWEEN LON2 AND 180)
不过,我宁可不去想如何处理一个位于行星顶部或底部的盒子. =)
标签:mysql,latitude-longitude 来源: https://codeday.me/bug/20190902/1793667.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。