Jugement interne / externe avec Python: obtenez le nom de la ville / ville / village à partir des informations de latitude / longitude de n'importe quel point

Chose que tu veux faire

J'ai créé un programme pour obtenir le nom de la ville, du village et du village de ce point uniquement à partir des informations de latitude et de longitude de n'importe quel point. Il y a deux points: lire le fichier de forme et juger si le point est à l'intérieur ou à l'extérieur.

Quoi préparer

J'ai utilisé deux types de modules, pyshp et Sympy (installés avec pip). ・ Pyshp (utilisé pour lire les fichiers shp) ・ Sympy (utilisé pour le jugement interne / externe) ・ Fichier de forme des limites municipales (Référence: https://www.esrij.com/products/japan-shp/)

Créer et exécuter un programme

Le code source est le suivant.

import shapefile
from sympy.geometry import Point, Polygon
#
LONG=140.0
LAT=36.5
RPOINT=Point(LONG,LAT)  #➀ Définition du point cible de jugement
#
src=shapefile.Reader('.\\shp\\japan_ver821.shp',encoding='SHIFT-JIS')  #Lecture de fichier
SRS=src.shapeRecords()  #➁ lecture des données shp
for srs in SRS:
    shp=srs.shape   #➁ Acquisition d'informations sur les fonctionnalités
    rec=srs.record  #➁ Acquisition d'informations sur les attributs
    box=shp.bbox    #➁ Obtenez le rectangle qui entoure chaque objet
    #
    #➂ Si le point cible est dans le rectangle, effectuez un jugement interne / externe plus détaillé
    if box[0]<LONG<box[2] and box[1]<LAT<box[3]:  
        pnt=shp.points  #➃ Obtenez les coordonnées de chaque objet
        points=[]       #➃ Extraire les nœuds de chaque objet
        for pp in pnt:   
            points.append((pp[0],pp[1]))
        poly=Polygon(*points)   #➃ Créez des données polygonales sympy
        #
        if poly.encloses_point(RPOINT):  #➃ Conduire un jugement interne / externe
            print(rec)                   #➄ Sortie des informations sur la ville / ville / village
            break

Les processus suivants sont exécutés dans l'ordre. ① Définition du point cible de jugement ② Lire les données shp ③ Vérifiez s'il existe un point cible de jugement dans la plage rectangulaire de chaque objet ④ ③ S'il y a un point cible dans la plage, effectuez un jugement interne / externe plus détaillé ⑤ Sortie des informations d'attribut lorsque le jugement interne / externe est réussi

Résultat d'exécution
Record #469: ['Préfecture de Tochigi', '', '', '', 'Ville d'Utsunomiya']

J'ai pu obtenir le nom de la municipalité.

※point important※

Cette méthode ne semble pas fonctionner si les données shp contiennent des polygones en forme d'anneau constitués de deux courbes fermées ou plus. Dans un tel cas, nous vous serions reconnaissants de bien vouloir vous référer à ce qui suit. https://qiita.com/Pooh-A/items/6b4fcb15a790f6ee6e79

Recommended Posts

Jugement interne / externe avec Python: obtenez le nom de la ville / ville / village à partir des informations de latitude / longitude de n'importe quel point
Itérateur qui peut balayer vers l'avant à partir du milieu de la séquence
Existence du point de vue de Python
Obtenez le produit direct de séquences de longueur indéfinie dans une séquence spécifique.
Jugement interne / externe avec Python: obtenez le nom de la ville / ville / village à partir des informations de latitude / longitude de n'importe quel point
Obtenir des statistiques, etc. à partir de l'échantillon extrait
Notes d'apprentissage depuis le début de Python 1
Omettre la nomenclature depuis le début de la chaîne
Notes d'apprentissage depuis le début de Python 2
Obtenez des informations de localisation (latitude et longitude) à partir de l'adresse. Géocodage en Python ~ Géocodeur et pydams ~
Comment obtenir la valeur en pixels du point à partir de l'image satellite en spécifiant la latitude et la longitude
De l'introduction de JUMAN ++ à l'analyse morphologique du japonais avec Python
Liste des dépêches en cas de catastrophe du service d'incendie de la ville de Sapporo [Python]
Trouvez la distance (en tenant compte de la rondeur de la terre) de la latitude et de la longitude.
Trouvez le waypoint à partir de la latitude et de la longitude (en tenant compte de la rondeur de la terre).
Créez un programme de jugement de compatibilité avec le module aléatoire de python.
PhytoMine-I a essayé d'obtenir les informations génétiques de la plante avec Python
[Version terminée] Essayez de connaître le nombre d'habitants de la ville à partir de la liste d'adresses avec Python