2

저는 파이썬을 사용하고 있으며지도상의 폴리곤의 위도와 경도 (도 단위)를 정의했습니다. 내 목표는 좌표의 일반 지점 P이 이러한 다각형 내에 있는지 확인하는 것입니다. 따라서 해당 조건을 점검하고 점이 다각형의 내부 또는 외부에있는 경우 True 또는 False을 반환하는 기능을 갖고 싶습니다. 결과가 False지오 - 포인트가 파이썬의 폴리곤 내부 또는 외부에 있는지 확인하십시오.

질문 될 수 있도록이 예에서

enter image description here

지점은 외부입니다 : 내 목표에 도달 할 수있는 라이브러리/패키지가 있습니까? 그렇다면 어느 것이 좋습니다? 그것을 사용하는 방법에 대한 작은 예제를 줄 수 있습니까? 여기

는 지금까지 작성한 코드입니다 :

다각형 내가 cartopy 사용하고 난 다음 코드 줄 썼다 관심 지점 플롯하기 위해
import numpy as np 

# Define vertices of polygon (lat/lon) 
v0 = [7.5, -2.5] 
v1 = [2, 3.5] 
v2 = [-2, 4] 
v3 = [-5.5, -4] 
v4 = [0, -10] 
lats_vect = np.array([v0[0],v1[0],v2[0],v3[0],v4[0]]) 
lons_vect = np.array([v0[1],v1[1],v2[1],v3[1],v4[1]]) 

# Point of interest P 
x, y = -6, 5 # x = Lat, y = Lon 

## START MODIFYING FROM HERE; DO NOT MODIFY POLYGON VERTICES AND DATA TYPE 
# Check if point of interest falls within polygon boundaries 
# If yes, return True 
# If no, return falls 

:

import cartopy.crs as ccrs 
import matplotlib.pyplot as plt 
ax = plt.axes(projection=ccrs.PlateCarree()) 
ax.stock_img() 

# Append first vertex to end of vector to close polygon when plotting 
lats_vect = np.append(lats_vect, lats_vect[0]) 
lons_vect = np.append(lons_vect, lons_vect[0]) 
plt.plot([lons_vect[0:-1], lons_vect[1:]], [lats_vect[0:-1], lats_vect[1:]], 
     color='black', linewidth=1, 
     transform=ccrs.Geodetic(), 
     ) 

plt.plot(y, x, 
     '*',   # marker shape 
     color='blue', # marker colour 
     markersize=8 # marker size 
     ) 

plt.show() 

:

  • 점은 큰 CI에 의해 서로 연결되어 rcles!
  • 가 나는 internt에서 연구하고 좀 비슷한 질문을 찾는 결국 like this one하지만 나는 그들이 이후로 성공을 내가 가지고 있지 않은 .shp 모든 파일을 사용할 수 없었다.
+0

이 알고리즘을 Python https://wrf.ecse.rpi.edu//Research/Short_Notes/pnpoly로 변환 해보십시오.html # C 코드 – arboreal84

+0

python에는 아무것도 수행하는 패키지가 없습니다. 미리 만들어진 모듈이 적습니다. 패키지는 일반적으로 커뮤니티에 의해 제공됩니다. – Uriel

+1

다각형은 항상 볼록합니까? –

답변

3

다음은 내 문제의 가능한 해결책입니다.

  1. 지리적 좌표는 올바르게 저장해야합니다. 지점 내부 (True) 또는 외부 (False) 인 경우
  2. np.array([[Lon_A, Lat_A], [Lon_B, Lat_B], [Lon_C, Lat_C]]) 다각형
  3. 만들기를 다각형을 테스트
  4. 사용 polygon.contains(point)을 테스트 할 수있는 지점을 만듭니다.

    from shapely.geometry import Point 
    from shapely.geometry.polygon import Polygon 
    
    lons_lats_vect = np.column_stack((lons_vect, lats_vect)) # Reshape coordinates 
    polygon = Polygon(lons_lats_vect) # create polygon 
    point = Point(y,x) # create point 
    print(polygon.contains(point)) # check if polygon contains point 
    

    : 여기

코드의 누락 된 부분 다각형 분명히 계정 큰 사이클을 고려하지 않고, 따라서 많은 세그먼트에 따라서 증가를 가장자리를 분할 할 필요가있다 정점의 수

+0

위도와 경도를 쓰는 것이 좋습니다. 여기 논리는 잘못된 것이 아니라 미안한 것보다 안전합니다. – Zahran

관련 문제