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中用于转换字母为小写的lower()方法使用简介
May 19 Python
Python实现选择排序
Jun 04 Python
Python操作csv文件实例详解
Jul 31 Python
Python编程实现微信企业号文本消息推送功能示例
Aug 21 Python
python3+PyQt5 数据库编程--增删改实例
Jun 17 Python
python命令 -u参数用法解析
Oct 24 Python
python图形开发GUI库pyqt5的基本使用方法详解
Feb 14 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
May 15 Python
简单的命令查看安装的python版本号
Aug 28 Python
使用Python webdriver图书馆抢座自动预约的正确方法
Mar 04 Python
详解python的内存分配机制
May 10 Python
Python Django ORM连表正反操作技巧
Jun 13 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.ini中文版
2006/10/09 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
2015/04/17 PHP
Laravel 自带的Auth验证登录方法
2019/09/30 PHP
phpstudy2020搭建站点的实现示例
2020/10/30 PHP
javascript 模式设计之工厂模式详细说明
2010/05/10 Javascript
分享一道笔试题[有n个直线最多可以把一个平面分成多少个部分]
2012/10/12 Javascript
Labelauty?jQuery单选框/复选框美化插件分享
2015/09/26 Javascript
jQuery Real Person验证码插件防止表单自动提交
2015/11/06 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
2016/04/07 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
2016/11/10 Javascript
[js高手之路]寄生组合式继承的优势详解
2017/08/28 Javascript
javascript计算渐变颜色的实例
2017/09/22 Javascript
微信小程序时间轴实现方法示例
2019/01/14 Javascript
[04:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster 选手采访
2021/03/11 DOTA
Python中你应该知道的一些内置函数
2017/03/31 Python
python和ruby,我选谁?
2017/09/13 Python
Python利用turtle库绘制彩虹代码示例
2017/12/20 Python
Python logging管理不同级别log打印和存储实例
2018/01/19 Python
Python装饰器原理与用法分析
2018/04/30 Python
浅谈Python 敏感词过滤的实现
2019/08/15 Python
python中format函数如何使用
2020/06/22 Python
python如何删除文件、目录
2020/06/23 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
selenium自动化测试入门实战
2020/12/21 Python
HTML5轻松实现全屏视频背景的示例
2018/04/23 HTML / CSS
ghd澳大利亚官方网站:英国最受欢迎的美发工具品牌
2018/05/21 全球购物
美国鲍勃商店:Bob’s Stores
2018/07/22 全球购物
德国受欢迎的旅游和休闲网站:lastminute.de
2019/09/23 全球购物
计算机应用专业毕业生求职信
2013/10/24 职场文书
园林毕业生自我鉴定范文
2013/12/29 职场文书
骨干教师考核方案
2014/05/09 职场文书
博士生导师推荐信
2014/07/08 职场文书
党员评议个人总结
2014/10/20 职场文书
培训后的感想
2015/08/07 职场文书
《刷子李》教学反思
2016/02/20 职场文书
js中Map和Set的用法及区别实例详解
2022/02/15 Javascript