坐标核查——判断点是否在多边形内

坐标核查——判断点是否在多边形内(PNPOLY算法)

提出问题

最近开始了实习,前两天导师提出了一个问题,让我试着用自己的思路去解决它。
问题是这样的:由于采集到的基站的经纬度坐标信息不准确,导致生成的可视化坐标图里,基站标到海里去了
问题
试想这样的bug让用户看到也太丑了8。

解决思路

所以解决思路就是:没有思路。我的意思是,哪里出错点哪里。

由于对具体的业务实现不是十分的了解,我不知道通过什么标准来判断这个坐标是否错误。我只好根据所知问题中的“坐标在海里”为出发点去思考解决办法。那就是先判断这个点是不是在海里
我觉得至少需要两个参数:
1. 待核查的点的坐标;
2. 标准范围坐标集。

至于实现方法嘛。很真实,百度谷歌先走起来。
经过搜索引擎的充电,我了解到了一个实现方法:PNPOLY算法。这个算法可以判断一个坐标点是否在一个多边形范围内,因为地图上的区域就是一个不规则多边形,所以这个算法正好适合我解题。

PNPOLY算法

该算法各个博客论坛已经有很多大牛讲解和实现了,比如:https://www.jianshu.com/p/3187832cb6cc
https://blog.csdn.net/qq_36706625/article/details/89160721
算法的核心思想大概是这么个意思:
过一点做射线,若该射线和多边形的交点为偶数,则证明该点不在图形内部。
也就是说如果它在图形内部,射线只出不进,交点数必然是奇数个;若在外部,有进有出或者不相交,交点个数必然是偶数。
在这里插入图片描述
表达能力有限,请谅解。

边界坐标集获取

网上找很多省行政区域坐标集,但是都不怎么实用,误差过大。自己试着通过解析地图网页的HTTPresponse来获得,发现更不实用。原因是涉及到了海岸线的省份的行政区域包括了海上的一部分
海南省的一部分(还有三沙)
无奈之下我只好先手动获取一个边界坐标集,通过百度地图API+JavaScript+右手实现。
这样的脚本网上可以找到很多,由于忘记我的是从哪里copy来的,无法给出原文链接,所以这里就不贴了。
获取到的坐标集是一个txt文本,每一行就是一个顶点的坐标,每个坐标的经纬度以英文逗号进行分隔。

python实现

为什么用python?
。。。因为现在电脑里只有python和Java的环境,而Java打包成.exe文件太麻烦,上次打包失败了,而python的就很简单。

事先说明:核心算法也不是我写的,它来自:
https://www.cnblogs.com/devli/p/10448780.html
我只是解读了一下然后修改了点,拿来主义万岁。

class Point:
    lng = ''
    lat = ''
 
    def __init__(self, lng, lat):
        self.lng = lng
        self.
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值