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.
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/)
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
Record #469: ['Präfektur Tochigi', '', '', '', 'Utsunomiya Stadt']
Ich konnte den Namen der Gemeinde erfahren.
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