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.
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/)
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
Record #469: ['Préfecture de Tochigi', '', '', '', 'Ville d'Utsunomiya']
J'ai pu obtenir le nom de la municipalité.
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