Vérifier si la géo-point est à l'intérieur ou à l'extérieur du polygone en Python

Je suis à l'aide de python et j'ai défini les latitudes et les longitudes (en degrés) d'un polygone sur la carte.
Mon but est de vérifier si un générique point de P de coordonnées x,y tombe à l'intérieur de ces polygones. Je voudrais donc avoir une fonction qui me permet de vérifier cette condition et retour True ou False si le point est à l'intérieur ou à l'extérieur du polygone.

Vérifier si la géo-point est à l'intérieur ou à l'extérieur du polygone en Python

Dans cet exemple, le point est à l'extérieur de sorte que le résultat serait False

Question: Est-il une bibliothèque qui permet d'atteindre mon objectif? si oui lequel me conseillez-vous? seriez-vous en mesure de donner un petit exemple sur la façon de l'utiliser?

Voici le code que j'ai écrit jusqu'à présent:

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 False

Afin de tracer le polygone et le point d'intérêt que j'ai utilisé cartopy et j'ai écrit les lignes de code suivantes:

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()  

Note:

  • points sont reliés les uns aux autres par de Grands Cercles!
  • J'ai fait des recherches dans le internt et j'ai fini par trouver des questions similaires comme celui-ci mais je n'avais pas de succès, car ils ont tous l'utilisation de .shp fichiers dont je n'ai pas.
Essayez la conversion de cet algorithme pour Python wrf.ecse.rpi.edu//Research/Short_Notes/pnpoly.html#The C Code
python n'a pas de packages qui font n'importe quoi. il a un petit nombre de pré construit des modules. les colis sont généralement fournis par la communauté.
Est le polygone toujours convexe?
En général non, il pourrait également être concave
Juste au cas où: vous pouvez toujours jeter un rayon de votre point à un point situé au milieu de toute de la du polygone à côtés. Si votre ray traverse du polygone à côtés d'un même nombre de fois, le point est à l'extérieur. Fonctionne avec des polygones convexes et concaves; fonctionne sur une surface de la sphère (et probablement toutes les 1 connecté à la surface) à l'aide d'une géodésique pour le rayon. A un bord de cas lorsqu'un rayon passe exactement par le biais d'un sommet: vous devez vérifier si les bords de l'incident au sommet sont sur le même côté de la raie.

OriginalL'auteur Federico Gentile | 2017-05-10