python放射線法では、検出点がエリア外の接長方形内にあるかどうかを判定します。
本論文の例では、python放射線法の判定断点が区域内にあるかどうかの具体的なコードを共有します。参考にしてください。具体的な内容は以下の通りです。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date : 2018-10-07 15:49:37
# @Author : Sheldon ([email protected])
# @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))
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。