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 正则表达式操作指南
May 04 Python
Python中的异常处理学习笔记
Jan 28 Python
python安装教程 Pycharm安装详细教程
May 02 Python
python http基本验证方法
Dec 26 Python
python解压TAR文件至指定文件夹的实例
Jun 10 Python
Python threading的使用方法解析
Aug 28 Python
python matplotlib饼状图参数及用法解析
Nov 04 Python
python单向循环链表原理与实现方法示例
Dec 03 Python
python json load json 数据后出现乱序的解决方案
Feb 27 Python
Python远程方法调用实现过程解析
Jul 28 Python
详解用python -m http.server搭一个简易的本地局域网
Sep 24 Python
Python的轻量级ORM框架peewee使用教程
Feb 05 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
PHP中子类重载父类的方法【parent::方法名】
2016/05/06 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
2018/06/22 PHP
jQuery ajax+PHP实现的级联下拉列表框功能示例
2019/02/12 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
2019/02/14 PHP
PHP 模拟登陆功能实例详解
2019/09/10 PHP
javascript Split方法,indexOf方法、lastIndexOf 方法和substring 方法
2009/03/21 Javascript
javascript 弹出层组件(升级版)
2011/05/12 Javascript
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
js创建对象的区别示例介绍
2014/07/24 Javascript
容易造成JavaScript内存泄露几个方面
2014/09/04 Javascript
javascript实现英文首字母大写
2015/04/23 Javascript
jQuery实现的网页竖向菜单效果代码
2015/08/26 Javascript
AngularJS上拉加载问题解决方法
2016/05/23 Javascript
jQuery接受后台传递的List的实例详解
2017/08/02 jQuery
Js利用console计算代码运行时间的方法示例
2017/09/24 Javascript
详解AngularJS 过滤器的使用
2018/06/02 Javascript
Vue表单demo v-model双向绑定问题
2018/06/29 Javascript
JavaScript对象原型链原理详解
2020/02/05 Javascript
在antd Table中插入可编辑的单元格实例
2020/10/28 Javascript
Python中itertools模块用法详解
2014/09/25 Python
python简单的函数定义和用法实例
2015/05/07 Python
python脚本实现xls(xlsx)转成csv
2016/04/10 Python
Python自定义线程池实现方法分析
2018/02/07 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
Python GUI自动化实现绕过验证码登录
2020/01/10 Python
scrapy结合selenium解析动态页面的实现
2020/09/28 Python
乐天旅游香港网站:日本饭店预订
2017/11/29 全球购物
WWE美国职业摔角官方商店:WWE Shop
2018/11/15 全球购物
后勤自我鉴定
2013/10/13 职场文书
大学毕业自我评价
2014/02/02 职场文书
社区国庆节活动方案
2014/02/05 职场文书
机械设计制造及其自动化专业求职信
2014/06/17 职场文书
党员自我对照检查材料
2014/08/19 职场文书
小学班主任经验交流材料
2014/12/16 职场文书
协议书范文
2015/01/27 职场文书