Internes / externes Urteil mit Python: Erhalten Sie den Namen der Stadt / des Dorfes aus den Breiten- / Längengradinformationen eines beliebigen Punktes

Was du machen willst

Ich habe ein Programm erstellt, um den Namen der Stadt, des Ortes und des Dorfes dieses Punktes nur aus den Breiten- und Längengradinformationen eines Punktes zu ermitteln. Es gibt zwei Punkte: Lesen der Formdatei und Beurteilen, ob sich der Punkt innerhalb oder außerhalb befindet.

Was vorzubereiten?

Ich habe zwei Arten von Modulen verwendet, pyshp und Sympy (mit pip installiert). ・ Pyshp (zum Lesen von SHP-Dateien) ・ Sympy (wird für die interne / externe Beurteilung verwendet) ・ Formdatei der Gemeindegrenzen (Referenz: https://www.esrij.com/products/japan-shp/)

Erstellen Sie ein Programm und führen Sie es aus

Der Quellcode lautet wie folgt.

import shapefile
from sympy.geometry import Point, Polygon
#
LONG=140.0
LAT=36.5
RPOINT=Point(LONG,LAT)  #➀ Beurteilung des Zielpunkts
#
src=shapefile.Reader('.\\shp\\japan_ver821.shp',encoding='SHIFT-JIS')  #Datei lesen
SRS=src.shapeRecords()  #➁ shp Daten lesen
for srs in SRS:
    shp=srs.shape   #➁ Erfassung von Funktionsinformationen
    rec=srs.record  #➁ Erfassung von Attributinformationen
    box=shp.bbox    #➁ Holen Sie sich das Rechteck, das jedes Objekt umgibt
    #
    #➂ Wenn sich der Zielpunkt innerhalb des Rechtecks befindet, führen Sie eine detailliertere interne / externe Beurteilung durch
    if box[0]<LONG<box[2] and box[1]<LAT<box[3]:  
        pnt=shp.points  #➃ Holen Sie sich Koordinateninformationen zu jedem Objekt
        points=[]       #➃ Extrahieren Sie die Knoten jedes Objekts
        for pp in pnt:   
            points.append((pp[0],pp[1]))
        poly=Polygon(*points)   #➃ Erstellen Sie Sympy-Polygondaten
        #
        if poly.encloses_point(RPOINT):  #➃ Führen Sie ein internes / externes Urteil durch
            print(rec)                   #➄ Stadt- / Dorfinformationen ausgeben
            break

Die folgenden Prozesse werden der Reihe nach ausgeführt. ① Beurteilung des Zielpunkts ② Shp-Daten lesen ③ Überprüfen Sie, ob sich innerhalb des rechteckigen Bereichs jedes Objekts ein Beurteilungszielpunkt befindet ④ ③ Wenn sich innerhalb des Bereichs ein Zielpunkt befindet, führen Sie eine detailliertere interne / externe Beurteilung durch ⑤ Attributinformationen ausgeben, wenn die interne / externe Beurteilung erfolgreich ist

Ausführungsergebnis
Record #469: ['Präfektur Tochigi', '', '', '', 'Utsunomiya Stadt']

Ich konnte den Namen der Gemeinde erfahren.

※wichtiger Punkt※

Diese Methode scheint nicht zu funktionieren, wenn die shp-Daten Donut-förmige Polygone enthalten, die aus zwei oder mehr geschlossenen Kurven bestehen. In einem solchen Fall würden wir uns freuen, wenn Sie sich auf Folgendes beziehen könnten. https://qiita.com/Pooh-A/items/6b4fcb15a790f6ee6e79

Recommended Posts

Internes / externes Urteil mit Python: Erhalten Sie den Namen der Stadt / des Dorfes aus den Breiten- / Längengradinformationen eines beliebigen Punktes
Iterator, der von der Mitte der Sequenz aus vorwärts scannen kann
Existenz aus Sicht von Python
Erhalten Sie das direkte Produkt von Sequenzen unbestimmter Länge innerhalb einer bestimmten Sequenz.
Internes / externes Urteil mit Python: Erhalten Sie den Namen der Stadt / des Dorfes aus den Breiten- / Längengradinformationen eines beliebigen Punktes
Erhalten Sie Statistiken usw. aus der extrahierten Probe
Notizen vom Anfang von Python 1 lernen
Lassen Sie die Stückliste am Anfang der Zeichenfolge weg
Notizen vom Anfang von Python 2 lernen
Informationen zum Standort (Breiten- und Längengrad) erhalten Sie von der Adresse. Geocode in Python ~ Geocoder und Pydams ~
So erhalten Sie den Pixelwert des Punkts aus dem Satellitenbild, indem Sie den Breiten- und Längengrad angeben
Von der Einführung von JUMAN ++ bis zur morphologischen Analyse von Japanisch mit Python
Liste der Katastrophenfälle der Feuerwehr von Sapporo City [Python]
Finden Sie die Entfernung von Breite und Länge (unter Berücksichtigung der Rundheit der Erde).
Finden Sie den Wegpunkt aus dem Breiten- und Längengrad (unter Berücksichtigung der Rundheit der Erde).
Erstellen Sie ein Kompatibilitätsbewertungsprogramm mit dem Zufallsmodul von Python.
PhytoMine-I hat versucht, mit Python die genetischen Informationen der Pflanze zu erhalten
[Abgeschlossene Version] Versuchen Sie, die Anzahl der Einwohner der Stadt anhand der Adressliste mit Python herauszufinden