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文件操作整理汇总
Oct 21 Python
Python制作CSDN免积分下载器
Mar 10 Python
Python最基本的输入输出详解
Apr 25 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
May 31 Python
Django的Modelforms用法简介
Jul 27 Python
利用python实现汉字转拼音的2种方法
Aug 12 Python
Python 实现自动导入缺失的库
Oct 29 Python
matplotlib绘制多个子图(subplot)的方法
Dec 03 Python
Spring实战之使用util:命名空间简化配置操作示例
Dec 09 Python
基于Python3.7.1无法导入Numpy的解决方式
Mar 09 Python
keras模型保存为tensorflow的二进制模型方式
May 25 Python
python logging模块的使用详解
Oct 23 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中使用XML
2006/10/09 PHP
十天学会php之第三天
2006/10/09 PHP
关于session在PHP5的配置文件中的详细设置参数说明
2011/04/20 PHP
php中使用parse_url()对网址进行解析的实现代码(parse_url详解)
2012/01/03 PHP
php数据访问之增删改查操作
2016/05/09 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
2016/11/22 PHP
PHP实现获取第一个中文首字母并进行排序的方法
2017/05/09 PHP
详解php协程知识点
2018/09/21 PHP
newxtree.js代码
2007/03/13 Javascript
JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码
2013/09/30 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
详谈JavaScript内存泄漏
2014/11/14 Javascript
jQuery+AJAX实现网页无刷新上传
2015/02/22 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
2016/04/21 Javascript
jquery点击切换背景色的简单实例
2016/08/25 Javascript
学习Node.js模块机制
2016/10/17 Javascript
js实现移动端导航点击自动滑动效果
2017/07/18 Javascript
node.js支持多用户web终端实现及安全方案
2017/11/29 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
微信小程序开发之点击按钮退出小程序的实现方法
2019/04/26 Javascript
ant design vue嵌套表格及表格内部编辑的用法说明
2020/10/28 Javascript
[00:23]魔方之谜解锁款式
2018/12/20 DOTA
python使用rsa加密算法模块模拟新浪微博登录
2014/01/22 Python
python 与GO中操作slice,list的方式实例代码
2017/03/20 Python
Python编程实现二叉树及七种遍历方法详解
2017/06/02 Python
python八大排序算法速度实例对比
2017/12/06 Python
Python3实现的反转单链表算法示例
2019/03/08 Python
Python实现微信中找回好友、群聊用户撤回的消息功能示例
2019/08/23 Python
详解numpy.ndarray.reshape()函数的参数问题
2020/10/13 Python
CSS3实现王者匹配时的粒子动画效果
2019/04/12 HTML / CSS
Java面试中常遇到的问题,也是需要注意的几点
2013/08/30 面试题
解释一下ruby中的特殊方法与特殊类
2013/02/26 面试题
书法培训心得体会
2014/01/05 职场文书
创先争优一句话承诺
2014/05/29 职场文书
2016年元旦致辞
2015/08/01 职场文书