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正则用法的简单实例
Jun 21 Python
Python基于多线程操作数据库相关问题分析
Jul 11 Python
对Tensorflow中的变量初始化函数详解
Jul 27 Python
Python实现的读取文件内容并写入其他文件操作示例
Apr 09 Python
python的set处理二维数组转一维数组的方法示例
May 31 Python
python函数修饰符@的使用方法解析
Sep 02 Python
python 默认参数相关知识详解
Sep 18 Python
python中必要的名词解释
Nov 20 Python
python文件处理fileinput使用方法详解
Jan 02 Python
pytorch逐元素比较tensor大小实例
Jan 03 Python
Django用户认证系统如何实现自定义
Nov 12 Python
Python调用ffmpeg开源视频处理库,批量处理视频
Nov 16 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
WAR3重制版DOTA 5V5初体验
2020/04/09 DOTA
php更改目录及子目录下所有的文件后缀的代码
2010/09/24 PHP
php生成无限栏目树
2017/03/16 PHP
jQuery实现密保互斥问题解决方案
2013/08/16 Javascript
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
2013/10/01 Javascript
js鼠标及对象坐标控制属性详细解析
2013/12/14 Javascript
验证码在IE中不刷新而谷歌等浏览器正常的解决方案
2014/03/18 Javascript
一款由jquery实现的整屏切换特效
2014/09/15 Javascript
JS+CSS实现滑动切换tab菜单效果
2015/08/25 Javascript
Javascript实现汉字和拼音互转的终极方案
2016/10/19 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
JQuery统计input和textarea文字输入数量(代码分享)
2016/12/29 Javascript
微信小程序实战之运维小项目
2017/01/17 Javascript
如何正确理解javascript的模块化
2017/03/02 Javascript
浅谈vue的iview列表table render函数设置DOM属性值的方法
2017/09/30 Javascript
分析JavaScript数组操作难点
2017/12/18 Javascript
JS计算两个时间相差分钟数的方法示例
2018/01/10 Javascript
javascript与PHP动态往类中添加方法对比
2018/03/21 Javascript
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
浅谈python中的数字类型与处理工具
2017/08/02 Python
python使用suds调用webservice接口的方法
2019/01/03 Python
python学生管理系统学习笔记
2019/03/19 Python
python基于celery实现异步任务周期任务定时任务
2019/12/30 Python
python 使用while循环输出*组成的菱形实例
2020/04/12 Python
Python实现疫情通定时自动填写功能(附代码)
2020/05/27 Python
Python网页解析器使用实例详解
2020/05/30 Python
python中altair可视化库实例用法
2021/01/26 Python
梅西酒窖:Macy’s Wine Cellar
2018/01/07 全球购物
农场厂长岗位职责
2013/12/28 职场文书
家长会学生家长演讲稿
2013/12/29 职场文书
大学生求职信范文应怎么写
2014/01/01 职场文书
事业单位接收函
2014/01/10 职场文书
技校学生个人职业生涯规划范文
2014/03/03 职场文书
公安机关党的群众路线教育实践活动剖析材料
2014/10/10 职场文书
MySQL中VARCHAR与CHAR格式数据的区别
2021/05/26 MySQL