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实现ftp客户端示例分享
Feb 17 Python
在RedHat系Linux上部署Python的Celery框架的教程
Apr 07 Python
Python打印scrapy蜘蛛抓取树结构的方法
Apr 08 Python
利用Python的装饰器解决Bottle框架中用户验证问题
Apr 24 Python
Python如何通过subprocess调用adb命令详解
Aug 27 Python
Python基本socket通信控制操作示例
Jan 30 Python
Python变量访问权限控制详解
Jun 29 Python
简单了解python PEP的一些知识
Jul 13 Python
Django实现WebSSH操作物理机或虚拟机的方法
Nov 06 Python
python3 求约数的实例
Dec 05 Python
如何解决安装python3.6.1失败
Jul 01 Python
python获取时间戳的实现示例(10位和13位)
Sep 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
PHPShop存在多个安全漏洞
2006/10/09 PHP
php中cookie的作用域
2008/03/27 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
2015/04/03 PHP
详解yii2使用多个数据库的案例
2017/06/16 PHP
Laravel使用PHPQRCODE实现生成带有LOGO的二维码图片功能示例
2017/07/07 PHP
seaJs的模块定义和模块加载浅析
2014/06/06 Javascript
使用JavaScript+canvas实现图片裁剪
2015/01/30 Javascript
js 获取元素在页面上的偏移量的方法汇总
2015/04/13 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
2015/08/26 Javascript
jQuery满屏焦点图左右滚动特效代码分享
2015/09/07 Javascript
js判断鼠标位置是否在某个div中的方法
2016/02/26 Javascript
React应用中使用Bootstrap的方法
2017/08/15 Javascript
React Native中导航组件react-navigation跨tab路由处理详解
2017/10/31 Javascript
Angular4.0动画操作实例详解
2019/05/10 Javascript
微信小程序转发事件实现解析
2019/10/22 Javascript
RxJS在TypeScript中的简单使用详解
2020/04/13 Javascript
[03:58]2014DOTA2国际邀请赛 龙宝赛后解密DK获胜之道
2014/07/14 DOTA
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python3 中把txt数据文件读入到矩阵中的方法
2018/04/27 Python
详解python3中zipfile模块用法
2018/06/18 Python
浅谈django orm 优化
2018/08/18 Python
python使用matplotlib画饼状图
2018/09/25 Python
Python模拟登入的N种方式(建议收藏)
2020/05/31 Python
Python+Kepler.gl实现时间轮播地图过程解析
2020/07/20 Python
python如何利用Mitmproxy抓包
2020/10/10 Python
Django 实现图片上传和下载功能
2020/12/31 Python
瑞典的玛丽小姐:Miss Mary of Sweden
2019/02/13 全球购物
入党申请自荐书范文
2014/02/11 职场文书
四风专项整治工作情况汇报
2014/10/28 职场文书
校本课程教学计划
2015/01/19 职场文书
中学生自我评价2015
2015/03/03 职场文书
优秀大学生自荐信
2015/03/26 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
python通过函数名调用函数的几种方法总结
2021/06/07 Python
JavaScript实现贪吃蛇游戏
2021/06/16 Javascript
简单聊聊TypeScript只读修饰符
2022/04/06 Javascript