如何筛选与指定带半径地理点相交的带半径点集合
判断两个带半径的经纬度圆是否重叠的方法
核心就看两个圆心的距离和两个半径的关系,步骤很直接:
- 先算出两个圆心(你的数据点和指定点)之间的直线距离
d,单位统一用公里(和半径保持一致) - 对比
d和两个半径的和、差:- 如果
d > r指定 + r数据:两个圆完全分离,没有重叠 - 如果
d < |r指定 - r数据|:其中一个圆完全被另一个包含,属于有重叠(如果你的需求是只要有交集就算,这种情况要保留) - 剩下的情况(
|r指定 - r数据| ≤ d ≤ r指定 + r数据):两个圆相交,存在重叠区域
- 如果
拿你给的例子来说:
- 指定点半径23公里,行1数据点半径10公里:
只要两个圆心距离≤33公里(23+10),并且≥13公里(23-10),就是相交;如果距离<13公里,行1的圆直接被指定圆包住,也算符合条件;距离>33公里就可以排除。 - 行2数据点半径3公里:
圆心距离≤26公里(23+3)且≥20公里(23-3)时相交;距离<20公里时被包含;距离>26公里就没有重叠。
关于你提到的预存四点多边形:
如果是用空间数据库处理大量数据,可以先把每个圆转成外接正方形(四点多边形),先做一次空间范围过滤,把明显不沾边的圆先排除,再对剩下的做精确的距离+半径判断,能提升处理效率。但如果数据量不大,直接算距离对比就行,不用折腾多边形。
内容的提问来源于stack exchange,提问作者Ahhk
相关产品推荐
相关产品推荐

