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时区设置方法与pytz查询时区教程
Nov 27 Python
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
May 02 Python
python中星号变量的几种特殊用法
Sep 07 Python
python中的随机函数小结
Jan 27 Python
Python中pillow知识点学习
Apr 30 Python
对python捕获ctrl+c手工中断程序的两种方法详解
Dec 26 Python
使用python实现简单五子棋游戏
Jun 18 Python
python爬取盘搜的有效链接实现代码
Jul 20 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
Jan 19 Python
python_mask_array的用法
Feb 18 Python
Python如何用filter函数筛选数据
Mar 05 Python
Python中requests库的用法详解
Jun 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如何得到当前页和上一页的地址?
2006/11/27 PHP
PHP Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
浅析PHP微信支付通知的处理方式
2014/05/25 PHP
thinkphp3.2同时连接两个数据库的简单方法
2019/08/13 PHP
php libevent 功能与使用方法详解
2020/03/04 PHP
jQuery源码分析-03构造jQuery对象-源码结构和核心函数
2011/11/14 Javascript
JQuery仿小米手机抢购页面倒计时效果
2014/12/16 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
JS与HTML结合实现流程进度展示条思路详解
2017/09/03 Javascript
原生JS实现多个小球碰撞反弹效果示例
2018/01/31 Javascript
nodejs 简单实现动态html的方法
2018/05/12 NodeJs
微信小程序云开发之使用云数据库
2019/05/17 Javascript
使用Vue CLI创建typescript项目的方法
2019/08/09 Javascript
vue中使用GraphQL的实例代码
2019/11/04 Javascript
Quasar Input:type=&quot;number&quot; 去掉上下小箭头 实现加减按钮样式功能
2020/04/09 Javascript
[42:52]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
[59:30]完美世界DOTA2联赛PWL S3 access vs LBZS 第二场 12.20
2020/12/23 DOTA
python dict remove数组删除(del,pop)
2013/03/24 Python
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
python中的五种异常处理机制介绍
2014/09/02 Python
在python中以相同顺序shuffle两个list的方法
2018/12/13 Python
pandas对dataFrame中某一个列的数据进行处理的方法
2019/07/08 Python
Python爬虫之Spider类用法简单介绍
2020/08/04 Python
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
俄罗斯皮肤健康中心:Pharmacosmetica.ru
2020/02/22 全球购物
英国设计师珠宝网站:Joshua James Jewellery
2020/03/01 全球购物
PHP数据运算类型都有哪些
2013/11/05 面试题
我的求职计划书
2014/01/10 职场文书
2014村党支部书记党建工作汇报材料
2014/11/02 职场文书
观看《杨善洲》宣传教育片心得体会
2016/01/23 职场文书
什么是检讨书?检讨书的格式及范文
2019/11/05 职场文书
Canvas跟随鼠标炫彩小球的实现
2021/04/11 Javascript
MySQL 5.7常见数据类型
2021/07/15 MySQL
常用的MongoDB查询语句的示例代码
2021/07/25 MongoDB
win11开机发生死循环重启怎么办?win11开机发生死循环重启解决方法
2022/08/05 数码科技