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获取网页状态码示例
Mar 30 Python
Python使用Flask框架同时上传多个文件的方法
Mar 21 Python
Python日志模块logging简介
Apr 13 Python
在java中如何定义一个抽象属性示例详解
Aug 18 Python
Django Admin 实现外键过滤的方法
Sep 29 Python
Python反射和内置方法重写操作详解
Aug 27 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
Dec 19 Python
Django框架 查询Extra功能实现解析
Sep 04 Python
python爬虫 Pyppeteer使用方法解析
Sep 28 Python
python元组和字典的内建函数实例详解
Oct 22 Python
Pytorch实验常用代码段汇总
Nov 19 Python
python unittest单元测试的步骤分析
Aug 02 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 开源框架22个简单简介
2009/08/24 PHP
php自动给文章加关键词链接的函数代码
2012/11/29 PHP
php编程每天必学之验证码
2016/03/03 PHP
CI框架整合widget(页面格局)的方法
2016/05/17 PHP
thinkPHP交易详情查询功能详解
2016/12/02 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
基于php解决json_encode中文UNICODE转码问题
2020/11/10 PHP
Jquery 基础学习笔记之文档处理
2009/05/29 Javascript
javascript中用星号表示预录入内容的实现代码
2011/01/08 Javascript
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
2011/01/12 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
Bootstrap中的Panel和Table全面解析
2016/06/13 Javascript
ES6中的rest参数与扩展运算符详解
2017/07/18 Javascript
vue params、query传参使用详解
2017/09/12 Javascript
angular中ui calendar的一些使用心得(推荐)
2017/11/03 Javascript
使用classList来实现两个按钮样式的切换方法
2018/01/24 Javascript
JS中如何轻松遍历对象属性的方式总结
2019/08/06 Javascript
nodejs和react实现即时通讯简易聊天室功能
2019/08/21 NodeJs
layui给下拉框、按钮状态、时间赋初始值的方法
2019/09/10 Javascript
如何解决jQuery 和其他JS库的冲突
2020/06/22 jQuery
JSON stringify方法原理及实例解析
2020/10/23 Javascript
vue实现一个获取按键展示快捷键效果的Input组件
2021/01/13 Vue.js
[05:23]DOTA2-DPC中国联赛2月1日Recap集锦
2021/03/11 DOTA
Python利用turtle库绘制彩虹代码示例
2017/12/20 Python
Series和DataFrame使用简单入门
2019/11/13 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
2020/06/23 Python
Reebok官方旗舰店:美国知名健身品牌锐步
2019/01/07 全球购物
俄罗斯卫浴采暖及维修用品超级市场:Dkrussia
2020/05/12 全球购物
平面网站制作专科生的自我评价分享
2013/12/11 职场文书
小学数学教学反思
2014/02/02 职场文书
企业负责人任命书
2014/06/05 职场文书
研究生导师评语
2014/12/31 职场文书
pandas DataFrame.shift()函数的具体使用
2021/05/24 Python
电脑只能进入安全模式无法正常启动的解决办法
2022/04/08 数码科技
Pandas 数据编码的十种方法
2022/04/20 Python
MySql中的json_extract函数处理json字段详情
2022/06/05 MySQL