python射线法判断检测点是否位于区域外接矩形内


Posted in Python onJune 28, 2019

本文实例为大家分享了python射线法判断点是否位于区域内的具体代码,供大家参考,具体内容如下

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date : 2018-10-07 15:49:37
# @Author : Sheldon (thisisscret@qq.com)
# @Blog : 谢耳朵的派森笔记
# @Link : https://www.cnblogs.com/shld/
# @Version : 0.0.1

def isinpolygon(point,vertex_lst:list, contain_boundary=True):
 #检测点是否位于区域外接矩形内
 lngaxis, lataxis = zip(*vertex_lst)
 minlng, maxlng = min(lngaxis),max(lngaxis)
 minlat, maxlat = min(lataxis),max(lataxis)
 lng, lat = point
 if contain_boundary:  
  isin = (minlng<=lng<=maxlng) & (minlat<=lat<=maxlat)
 else:
  isin = (minlng<lng<maxlng) & (minlat<lat<maxlat)
 return isin

def isintersect(poi,spoi,epoi):
 #输入:判断点,边起点,边终点,都是[lng,lat]格式数组
 #射线为向东的纬线
 #可能存在的bug,当区域横跨本初子午线或180度经线的时候可能有问题
 lng, lat = poi
 slng, slat = spoi
 elng, elat = epoi
 if poi == spoi:
  #print("在顶点上")
  return None
 if slat==elat: #排除与射线平行、重合,线段首尾端点重合的情况
  return False
 if slat>lat and elat>lat: #线段在射线上边
  return False
 if slat<lat and elat<lat: #线段在射线下边
  return False
 if slat==lat and elat>lat: #交点为下端点,对应spoint
  return False
 if elat==lat and slat>lat: #交点为下端点,对应epoint
  return False
 if slng<lng and elat<lat: #线段在射线左边
  return False
 #求交点
 xseg=elng-(elng-slng)*(elat-lat)/(elat-slat)
 if xseg == lng:
  #print("点在多边形的边上")
  return None
 if xseg<lng: #交点在射线起点的左侧
  return False
 return True #排除上述情况之后

def isin_multipolygon(poi,vertex_lst, contain_boundary=True): 
 # 判断是否在外包矩形内,如果不在,直接返回false 
 if not isinpolygon(poi, vertex_lst, contain_boundary):
  return False
 sinsc = 0  
 for spoi, epoi in zip(vertex_lst[:-1],vertex_lst[1::]):
  intersect = isintersect(poi, spoi, epoi)
  if intersect is None:
   return (False, True)[contain_boundary]
  elif intersect:
   sinsc+=1   
 return sinsc%2==1


if __name__ == '__main__':
 vertex_lst = [[0,0],[1,1],[1,2],[0,2],[0,0]]
 poi = [0.82,0.75]
 print(isin_multipolygon(poi,vertex_lst, contain_boundary=True))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python创建日历实例
Aug 21 Python
11个并不被常用但对开发非常有帮助的Python库
Mar 31 Python
Python实现批量压缩图片
Jan 25 Python
python实现简单淘宝秒杀功能
May 03 Python
朴素贝叶斯Python实例及解析
Nov 19 Python
python判断一个对象是否可迭代的例子
Jul 22 Python
Python3中urlencode和urldecode的用法详解
Jul 23 Python
python绘制玫瑰的实现代码
Mar 02 Python
Python 如何反方向迭代一个序列
Jul 28 Python
Python3 ffmpeg视频转换工具使用方法解析
Aug 10 Python
python中Pexpect的工作流程实例讲解
Mar 02 Python
Django 实现jwt认证的示例
Apr 30 Python
python 列表转为字典的两个小方法(小结)
Jun 28 #Python
numpy和pandas中数组的合并、拉直和重塑实例
Jun 28 #Python
使用Python画股票的K线图的方法步骤
Jun 28 #Python
连接pandas以及数组转pandas的方法
Jun 28 #Python
python3实现猜数字游戏
Dec 07 #Python
浅谈Pandas Series 和 Numpy array中的相同点
Jun 28 #Python
python3使用腾讯企业邮箱发送邮件的实例
Jun 28 #Python
You might like
不用数据库的多用户文件自由上传投票系统(2)
2006/10/09 PHP
用PHP+MySql编写聊天室
2006/10/09 PHP
php中通过正则表达式下载内容中的远程图片的函数代码
2012/01/10 PHP
关于php循环跳出的问题
2013/07/01 PHP
Yii实现简单分页的方法
2016/04/29 PHP
PHP实现的激活用户注册验证邮箱功能示例
2017/06/06 PHP
在JavaScript中实现命名空间
2006/11/23 Javascript
JavaScript 常见对象类创建代码与优缺点分析
2009/12/07 Javascript
jQuery AJAX 调用WebService实现代码
2010/03/24 Javascript
jquery获取特定name所有选中的checkbox,支持IE9标准模式
2013/03/18 Javascript
JavaScript中的prototype.bind()方法介绍
2014/04/04 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
Angularjs自定义指令实现三级联动 选择地理位置
2017/02/13 Javascript
JS中把函数作为另一函数的参数传递方法(总结)
2017/06/28 Javascript
详解React 16 中的异常处理
2017/07/28 Javascript
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
jQuery实现的页面弹幕效果【测试可用】
2018/08/17 jQuery
策略模式实现 Vue 动态表单验证的方法
2019/09/16 Javascript
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[04:00]黄浦江畔,再会英雄——完美世界DOTA2 TI9应援视频
2019/07/31 DOTA
Python获取任意xml节点值的方法
2015/05/05 Python
pandas中Timestamp类用法详解
2017/12/11 Python
儿童python练习实例
2018/05/27 Python
python Web开发你要理解的WSGI &amp; uwsgi详解
2018/08/01 Python
详解python statistics模块及函数用法
2019/10/27 Python
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
Python同时处理多个异常的方法
2020/07/28 Python
Pycharm 2020.1 版配置优化的详细教程
2020/08/07 Python
马来西亚与新加坡长途巴士售票网站:BusOnlineTicket.com
2018/11/05 全球购物
公司培训心得体会
2014/01/03 职场文书
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
小学生运动会报道稿
2014/09/12 职场文书
求职自我推荐信
2015/03/24 职场文书
导游词之宁夏贺兰山岩画
2019/11/08 职场文书
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL
html解决浏览器记住密码输入框的问题
2023/05/07 HTML / CSS