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 strip lstrip rstrip使用方法
Sep 06 Python
Python socket编程实例详解
May 27 Python
在python3环境下的Django中使用MySQL数据库的实例
Aug 29 Python
Python绘制3D图形
May 03 Python
python 统计列表中不同元素的数量方法
Jun 29 Python
Python socket实现的简单通信功能示例
Aug 21 Python
深入理解Django自定义信号(signals)
Oct 15 Python
opencv3/C++实现视频读取、视频写入
Dec 11 Python
python实现的Iou与Giou代码
Jan 18 Python
Django在Model保存前记录日志实例
May 14 Python
Django rest framework如何自定义用户表
Jun 09 Python
python数据处理之Pandas类型转换
Apr 28 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
中国站长站 For Dede4.0 采集规则
2007/05/27 PHP
php实现多张图片上传加水印技巧
2013/04/18 PHP
MacOS 安装 PHP的图片裁剪扩展Tclip
2015/03/25 PHP
yii2框架中使用下拉菜单的自动搜索yii-widget-select2实例分析
2016/01/09 PHP
php读取出一个文件夹及其子文件夹下所有文件的方法示例
2017/06/15 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
PHP receiveMail实现收邮件功能
2018/04/25 PHP
CentOS7.0下安装PHP5.6.30服务的教程详解
2018/09/29 PHP
javascript 解决表单仍然提交即使监听处理函数返回false
2010/03/14 Javascript
ASP.NET中使用后端代码注册脚本 生成JQUERY-EASYUI的界面错位的解决方法
2010/06/12 Javascript
js的hasownproperty使用示例
2014/03/02 Javascript
js实现感应鼠标图片透明度变化的方法
2015/02/20 Javascript
在for循环中length值是否需要缓存
2015/07/27 Javascript
举例说明JavaScript中的实例对象与原型对象
2016/03/11 Javascript
关于网页中的无缝滚动的js代码
2016/06/09 Javascript
深入解析Javascript闭包的功能及实现方法
2016/07/10 Javascript
vue.js指令v-model实现方法
2016/12/05 Javascript
jquery实现多次上传同一张图片
2017/01/09 Javascript
webpack多入口多出口的实现方法
2018/08/17 Javascript
Vue2.0生命周期的理解
2018/08/20 Javascript
JS实现可切换图片的幻灯切换效果示例
2019/05/24 Javascript
python实现的阳历转阴历(农历)算法
2014/04/25 Python
python基于socket实现网络广播的方法
2015/04/29 Python
深入解析Python中的descriptor描述器的作用及用法
2016/06/27 Python
Python3中类、模块、错误与异常、文件的简易教程
2017/11/20 Python
python3实现微型的web服务器
2019/09/03 Python
Wiggle美国:英国骑行、跑步、游泳、铁人三项商店
2018/10/27 全球购物
惠普新加坡官方商店:HP Singapore
2020/04/17 全球购物
必须要使用游标的SQL语句有那些
2012/05/07 面试题
自我鉴定的范文
2013/10/03 职场文书
房地产管理毕业生自荐信
2013/11/04 职场文书
奶茶店创业计划书范文
2014/01/17 职场文书
《藤野先生》教学反思
2014/02/19 职场文书
工程类专业自荐信范文
2014/03/09 职场文书
爱心捐书倡议书
2015/04/27 职场文书
MySQL EXPLAIN输出列的详细解释
2021/05/12 MySQL