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自动代码解读1.0
Jan 12 Python
运行django项目指定IP和端口的方法
May 14 Python
Tensorflow卷积神经网络实例
May 24 Python
python自动发送邮件脚本
Jun 20 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
Jun 18 Python
Django命名URL和反向解析URL实现解析
Aug 09 Python
详解一种用django_cache实现分布式锁的方式
Sep 01 Python
python Dijkstra算法实现最短路径问题的方法
Sep 19 Python
Python 使用type来定义类的实现
Nov 19 Python
Python创建一个元素都为0的列表实例
Nov 28 Python
python 画函数曲线示例
Dec 04 Python
PyCharm第一次安装及使用教程
Jan 08 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 加密与解密的斗争
2009/04/17 PHP
php函数的常用方法及注意之处小结
2011/07/10 PHP
phpword插件导出word文件时中文乱码问题处理方案
2014/08/19 PHP
php实现统计网站在线人数的方法
2015/05/12 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
js下用层来实现select的title提示属性
2010/02/23 Javascript
js 点击按钮弹出另一页,选择值后,返回到当前页
2010/05/26 Javascript
javascript中sort()的用法实例分析
2015/01/30 Javascript
jquery实现页面加载效果
2017/02/21 Javascript
微信扫码支付零云插件版实例详解
2017/04/26 Javascript
设置cookie指定时间失效(实例代码)
2017/05/28 Javascript
jQuery实现节点的追加、替换、删除、复制功能示例
2017/07/11 jQuery
一个因@click.stop引发的bug的解决
2019/01/08 Javascript
微信小程序入口场景的问题集合与相关解决方法
2019/06/26 Javascript
[02:45]DOTA2英雄敌法师基础教程
2013/11/25 DOTA
Python3.x版本中新的字符串格式化方法
2015/04/24 Python
python3 对list中每个元素进行处理的方法
2018/06/29 Python
python正则表达式之对号入座篇
2018/07/24 Python
Python用字典构建多级菜单功能
2019/07/11 Python
python单线程下实现多个socket并发过程详解
2019/07/27 Python
Python 求数组局部最大值的实例
2019/11/26 Python
Python 日期与时间转换的方法
2020/08/01 Python
python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境
2020/12/14 Python
7款设计巧妙的css3飘带状3D立体效果的导航菜单和表单窗口
2013/02/04 HTML / CSS
CSS3中Animation动画属性用法详解
2016/07/04 HTML / CSS
HTML5实现经典坦克大战坦克乱走还能发出一个子弹
2013/09/02 HTML / CSS
荷兰和比利时时尚鞋店:Van Dalen
2018/04/23 全球购物
Wolford法国官网:奥地利奢侈内衣品牌
2020/08/11 全球购物
电大物流学生的自我评价
2013/10/25 职场文书
共产党员公开承诺书范文
2014/03/28 职场文书
高中班级口号
2014/06/09 职场文书
合法的离婚协议书范本
2014/10/23 职场文书
保密工作整改报告
2014/11/06 职场文书
2016感恩父亲节主题广播稿
2015/12/18 职场文书
创业计划书之农家乐
2019/10/09 职场文书
Python深度学习之实现卷积神经网络
2021/06/05 Python