python射线法检测点是否位于区域外接矩形内检测方法

  • 时间:
  • 3932人关注

这篇文章主要为大家详细介绍了python射线法判断检测点是否位于区域外接矩形内,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,另外这篇文章主要知识点是关于python、射线法、python的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子资料:

本文实例为大家分享了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操作配置文件方法分享

相关内容

  • Python如何限制输出日志的大小

    这篇文章主要介绍了Python 限制输出日志的大小方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

    05-06Python限制日志大小

    阅读更多
  • python实现可视化的MD5、sha256哈希加密小工具

    这篇文章主要介绍了详解python实现可视化的MD5、sha256哈希加密小工具,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    04-07python MD5、sha256哈希加密

    阅读更多
  • Python gevent协程切换实现方法

    这篇文章主要介绍了Python gevent协程切换实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    04-07Python gevent协程切换

    阅读更多
  • python/golang实现循环链表的代码

    这篇文章主要介绍了python/golang如何实现循环链表,帮助大家更好的理解和学习循环链表的实现方法,感兴趣的朋友可以了解下

    04-07python/golang 循环链表

    阅读更多
  • 2020版Python学习路线图(附学习资料)

    这篇文章主要介绍了Python学习路线图(2020最新版),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    04-07Python学习路线图

    阅读更多
  • 自然语言处理Python进阶

    自然语言处理Python进阶

    第1章教你应用内嵌的NLTK语料库和頻率遍布。人们还将学什么是WordNet,并探寻其特性和使用方法。 第2章演试怎样从各种各样文件格式的数据库中获取文字。人们还将学习培训怎样从互联网源获

    大小:38.3 MB自然语言

    点击下载
  • Python编程之美:最佳实践指南

    Python编程之美:最佳实践指南

    这书由Python小区的高手KennethReitz进行并机构撰写,由小区数十名开发人员团体无私奉献。*的特点取决于,几近详细地小结了在Python程序编写时会采用的各种各样实践活动方法和工作经验,包含

    大小:29.3 MBPython编程

    点击下载
  • Head First Python(第2版)

    Head First Python(第2版)

    Python书就该像Python语言一样有趣,本书会带你轻松愉快地学习这种语言,并处理内置数据结构和函数,帮助你迅速成为一名Python程序员,欢迎下载

    大小:86.9 MBPython入门

    点击下载
  • Python机器学习及实践:从零开始通往Kaggle竞赛之路

    Python机器学习及实践:从零开始通往Kaggle竞赛之路

    Python机器学习及实践 面向所有对机器学习与数据挖掘的实践及竞赛感兴趣的读者,从零开始,以Python编程语言为基础,在不涉及大量数学模型与复杂编程知识的前提下,逐步带领读者熟悉并且

    大小:48.3 MB机器学习

    点击下载
  • Python程序设计开发宝典

    Python程序设计开发宝典

    本书深入剖析Python 3.5.x、Python 3.6.x及更新版本的内置对象和标准库对象高级用法,150个案例源代码和超过1000个演示性代码片段,可以作为Python程序设计教材

    大小:42.8 MBPython

    点击下载
  • 精通Python爬虫框架Scrapy

    精通Python爬虫框架Scrapy

    大小:8.6 MBPython爬虫

    点击下载
  • 深度学习入门:基于Python的理论与实现(含源码)

    深度学习入门:基于Python的理论与实现(含源码)

    本书是深度学习真正意义上的入门书,深入浅出地剖析了深度学习的原理和相关技术。书中使用Python3,尽量不依赖外部库或工具,从基本的数学知识出发,带领读者从零创建一个经典的深度学

    大小:13.6 MB深度学习

    点击下载
  • Python数据可视化

    Python数据可视化

    本书介绍了利用Python实现数据可视化。并介绍了数据、信息与知识之间的关系,想要学习Python数据可视化的同学可以下载参考一下

    大小:92.7 MBPython

    点击下载
  • Python3.6零基础入门与实战

    Python3.6零基础入门与实战

    这是一本Python 3.6入门教材,包括内容包括开发环境、数据结构、函数、面向对象、多线程等,内容详尽、示例丰富,特别适合广大Python入门读者和Python开发人员阅读

    大小:518.9 MBPython

    点击下载
  • Python Cookbook

    Python Cookbook

    《Python Cookbook(第3版)中文版》介绍了Python应用在各个领域中的一些使用技巧和方法,其主题涵盖了数据结构和算法,字符串和文本,数字、日期和时间,迭代器和生成器,文件和I/O,数据编

    大小:29.4 MBPython

    点击下载

学习笔记

23小时27分钟前回答

如何使用python 判断矩阵中每行非零个数

如下所示: # -*- coding: utf-8 -*-# @Time : 2018/5/17 15:05# @Author : Sizer# @Site : # @File : test.py# @Software: PyCharmimport timeimport numpy as np# data = np.array([# [5.0, 3.0, 4.0, 4.0, 0.0],# [3.0, 1.0, 2.0, 3.0, 3.0],# [4.0, 3.0, 4.0, 3.0, 5.0],# [3.0, 3.0, 1.0, 5.0, 4.0],# [1.0, 5.0, 5.0, 2.0, 1.0]# ])data = np.random.random((1000, 1000))print(data.shape)start_time = time.time()# avg = [float(np.mean(data[i, :])) for i in range(data.shape[0])]# print(avg)start_time = time.time()avg = []for i in range(data.shape[0]): sum = 0 cnt = 0 for rx in data[i, :]: if rx 0: sum += rx cnt += 1 if cnt 0: avg.append(sum/cnt) else: avg.append(0)end_time = time.time()print(op 1:, end_time - start_time)start_time = time.time()avg = []isexist = (data 0) * 1for i in range(data.shape[0]): sum =……

30小时13分钟前回答

Python判断字符串是否为字母或者数字方法总结

str为字符串s为字符串 str.isalnum() 所有字符都是数字或者字母 str.isalpha() 所有字符都是字母 str.isdigit() 所有字符都是数字 str.isspace() 所有字符都是空白字符、t、n、r 检查字符串是数字/浮点数方法 float部分 float(Nan)nan float(Nan)nan float(nan)nan float(INF)inf float(inf)inf float(-INF)inf float(-inf)inf 第一种:最简单 def is_number(str): try: # 因为使用float有一个例外是NaN if str==NaN: return False float(str) return True except ValueError: return Falsefloat例外示例 float(NaN) nan 使用complex() def is_number(s): try: complex(s) # for int, long, float and complex except ValueError: return False return True 综合1 def is_number(s): try: float(s) # for int, long and float except ValueError: try: complex(s) #……

43小时33分钟前回答

python判断设备联网的代码

本文实例为大家分享了python判断设备是否联网的具体代码,供大家参考,具体内容如下 直接上代码,就是用判断socket能不连上的方法来判断。 #!/usr/bin/env python# -*- coding: utf-8 -*-import socketdef isNetOK(testserver): s=socket.socket() s.settimeout(3) try: status = s.connect_ex(testserver) if status == 0: s.close() return True else: return False except Exception as e: return Falsedef isNetChainOK(testserver=(www.baidu.com,443)): isOK = isNetOK(testserver) return isOKdef isNetUSAOK(testserver=(www.google.com,443)): isOK = isNetOK(testserver) return isOKdef isNetYouTubeOK(testserver=(www.youtube.com,443)): isOK = isNetOK(testserver) return isOKdef main(): chinanet = isNetChainOK() print chinanet usanet = isNetUSAOK() print usanet youtubenet……

32小时14分钟前回答

python判断文件是否存在的方法

通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错。所以最好在做任何操作之前,先判断文件是否存在。 python中如何判断文件是否存在? 判断文件是否存在可使用os模块, 使用Try语句, 使用pathlib模块。 这里将介绍三种判断文件或文件夹是否存在的方法,分别使用os模块、Try语句、pathlib模块。 1.使用os模块 os模块中的os.path.exists()方法用于检验文件是否存在。 判断文件是否存在 import osos.path.exists(test_file.txt)#Trueos.path.exists(no_exist_file.txt)#False 或者 import osos.path.exists(test_dir)#Trueos.path.exists(no_exist_dir)#False 可以看出用os.path.exists()方法,判断文件和文件夹是一样。 其实这……