Essayez d'importer dans la base de données en manipulant ShapeFile d'informations numériques sur les terres nationales avec Python

ShapeFile est un format de données pour stocker des informations sur la position et la forme des données spatiales et ses informations d'attribut. Le fichier avec l'extension .shp fourni avec le téléchargement à partir des informations numériques des terres nationales, etc. est applicable.

Cette fois, le but est de lire ce ShapeFile avec Python et de le stocker dans Spatialite.

Détails du fichier ShapeFile

ShapeFile se compose de trois fichiers. Il existe trois fichiers: le fichier principal, le fichier d'index et le fichier d'attributs. Ces noms de fichiers seront les mêmes à l'exception de l'extension.

■ Fichier principal: counties.shp ■ Fichier d'index: counties.shx ■ Fichier d'attributs: counties.dbf

Les données spatiales sont stockées dans le fichier principal. Le fichier d'index est un index qui facilite l'accès à chaque donnée spatiale. Le fichier d'attributs stocke les valeurs d'attribut.

Veuillez vous référer à ce qui suit pour les spécifications de ces détails.

** Fiche technique du fichier Shape ** http://www.esrij.com/cgi-bin/wp/wp-content/uploads/documents/shapefile_j.pdf

Manipuler ShapeFile en Python

Les bibliothèques suivantes doivent être utilisées pour faire fonctionner ShapeFile en Python.

https://github.com/GeospatialPython/pyshp

** Méthode d'installation ** Placez shapefile.py dans n'importe quel dossier et importez-le.

Cette bibliothèque peut être utilisée avec la série python2.4-3.x.

Exemple d'opération d'informations numériques sur les terres nationales

Dans cet exemple, exploitons N02-05-g_RailroadSection.shp des informations sur l'itinéraire ferroviaire des informations numériques terrestres nationales.

** Information numérique terrestre nationale Données ferroviaires ** http://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N02-v2_2.html

# -*- coding: utf-8 -*-
import os
import sys
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/pyshp')
import shapefile

sf = shapefile.Reader('original_data\\N02-05_GML\\N02-05\\N02-05-g_RailroadSection.shp')
shapeRecs = sf.iterShapeRecords()
for sr in shapeRecs:
  #Contient des valeurs d'attribut
  print ('attribute:' , sr.record)

  #Type de type
  #NULL = 0
  #POINT = 1
  #POLYLINE = 3
  #POLYGON = 5
  #MULTIPOINT = 8
  #POINTZ = 11
  #POLYLINEZ = 13
  #POLYGONZ = 15
  #MULTIPOINTZ = 18
  #POINTM = 21
  #POLYLINEM = 23
  #POLYGONM = 25
  #MULTIPOINTM = 28
  #MULTIPATCH = 31
  print ('shapeType:' ,sr.shape.shapeType)

  #Liste des points de coordonnées
  print ('points:', sr.shape.points)

  #Où diviser les points pour MultiLing et MultiPolygon
  print ('parts:' ,sr.shape.parts)

iterShapeRecords () analyse les fichiers shp depuis le début. À ce stade, une seule donnée est étendue dans la mémoire, elle convient donc au traitement de données volumineuses.

Toutefois, iterShapeRecord suppose que l'enregistrement suivant se trouve dans l'octet suivant de la longueur de contenu enregistrée dans l'en-tête d'enregistrement. Dans de nombreux cas, cette hypothèse peut être utilisée pour l'analyse, mais dans certains cas, cette hypothèse est incorrecte. Par exemple, exécuter le A31-12_17_GML.shp suivant entraînera une erreur.

** Informations numériques sur les terres nationales Préfecture d'Ishikawa sur la zone d'inondation estimée http://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-A31.html

Cela est dû au fait qu'il y a des déchets entre les enregistrements, il ne peut donc pas être analysé par le fichier shp seul, et il est nécessaire d'utiliser le fichier d'index.

Dans ce cas, il peut être implémenté sans utiliser iterShapeRecords comme indiqué ci-dessous.

# -*- coding: utf-8 -*-
import os
import sys
sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/pyshp')
import shapefile

sf = shapefile.Reader('original_data\\A31-12\\output\\A31-12_17_GML\\old\\A31-12_17.shp')
try:
    #Le fichier shp des informations numériques sur les terres nationales n'est pas valide et la longueur du contenu dans le fichier shp ne correspond pas à la longueur réelle.
    #Il n'y a pas d'autre choix que d'obtenir chaque enregistrement via un fichier shx
    i = 0
    while True:
        shape = sf.shape(i)
        rec = sf.record(i)
        #Contient des valeurs d'attribut
        print ('attribute:' , rec)

        #Type de type
        #NULL = 0
        #POINT = 1
        #POLYLINE = 3
        #POLYGON = 5
        #MULTIPOINT = 8
        #POINTZ = 11
        #POLYLINEZ = 13
        #POLYGONZ = 15
        #MULTIPOINTZ = 18
        #POINTM = 21
        #POLYLINEM = 23
        #POLYGONM = 25
        #MULTIPOINTM = 28
        #MULTIPATCH = 31
        print ('shapeType:' ,shape.shapeType)

        #Liste des points de coordonnées
        print ('points:', shape.points)

        #Où diviser les points pour MultiLing et MultiPolygon
        print ('parts:' , shape.parts)

        i += 1
except IndexError:
    pass

En utilisant cela, vous pouvez analyser le fichier de forme avec Python et l'importer dans spatialite.

Dans le programme suivant, les données sur les points de danger des catastrophes sédimentaires, les données sur les zones d'inondation, les données sur les rafales telles que les tornades, etc. d'informations numériques sur les terres nationales sont stockées dans la spatialite à partir du fichier Shape. https://github.com/mima3/kokudo/blob/master/kokudo_db.py

Demo http://needtec.sakura.ne.jp/kokudo/

Veuillez consulter l'article suivant pour savoir comment utiliser SPATIALITE. http://qiita.com/mima_ita/items/64f6c2b8bb47c4b5b391

Recommended Posts

Essayez d'importer dans la base de données en manipulant ShapeFile d'informations numériques sur les terres nationales avec Python
Essayez d'afficher les données ferroviaires des informations numériques des terres nationales en 3D
Utilisons les données ferroviaires des informations numériques foncières nationales
Essayez d'automatiser le fonctionnement des périphériques réseau avec Python
PhytoMine-I a essayé d'obtenir les informations génétiques de la plante avec Python
Essayez d'imaginer les données d'élévation du National Land Research Institute avec Python
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
Essayez de résoudre le diagramme homme-machine avec Python
[Calcul scientifique / technique par Python] Calcul numérique pour trouver la valeur de la dérivée (différentielle)
Lorsque vous utilisez PyQtGraph avec Python Pyside, faites attention à l'ordre d'importation
Ajoutez des informations au bas de la figure avec Matplotlib
Essayez de résoudre le problème d'affectation du médecin de formation avec Python
Essayez d'obtenir le contenu de Word avec Golang
Obtenez des informations équivalentes à l'onglet Réseau des outils de développement Chrome avec Python + Selenium
J'ai essayé de trouver l'entropie de l'image avec python
Essayez de gratter les données COVID-19 Tokyo avec Python
Essayez d'obtenir la liste des fonctions du paquet Python> os
Essayez d'afficher diverses informations utiles pour le débogage avec python
Attacher au processus Python de la destination SSH et déboguer
Essayez de visualiser les nutriments des flocons de maïs que le champion de M-1 Milkboy a dit avec Python
Essayez de déchiffrer les caractères déformés dans le nom du fichier joint avec Python
Comment obtenir les informations des organisations, Cost Explorer d'un autre compte AWS avec Lambda (python)
Récupérez la source de la page à charger indéfiniment avec python.
Essayez d'extraire les caractéristiques des données de capteur avec CNN
J'ai essayé de vérifier l'identification du locuteur par l'API de reconnaissance du locuteur d'Azure Cognitive Services avec Python. # 1
J'ai essayé de vérifier l'identification du locuteur par l'API de reconnaissance du locuteur d'Azure Cognitive Services avec Python. # 2
Essayez de calculer la position de l'émetteur à partir du modèle de propagation des ondes radio avec python [Wi-Fi, Beacon]
Premier python ② Essayez d'écrire du code tout en examinant les fonctionnalités de python
Essayez de résoudre le problème N Queen avec SA de PyQUBO
Je veux sortir le début du mois prochain avec Python
Essayez d'afficher la carte google et la carte géographique avec python
De l'introduction de JUMAN ++ à l'analyse morphologique du japonais avec Python
Essayer d'implémenter et de comprendre les arborescences de segments étape par étape (python)
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
Essayez de prédire le triplet de la course de bateaux en classant l'apprentissage
Essayez de résoudre l'itinéraire le plus court avec les données sociales Python + NetworkX +
[Python] La pierre d'achoppement de l'importation
Essayez d'exploiter Facebook avec Python
[Version terminée] Essayez de connaître le nombre d'habitants de la ville à partir de la liste d'adresses avec Python
J'ai remplacé le calcul numérique de Python par Rust et comparé la vitesse
Mettez Cabocha 0.68 dans Windows et essayez d'analyser la dépendance avec Python
Comment couper la partie inférieure droite de l'image avec Python OpenCV
Je suis abasourdi par le comportement de filter () en raison des différentes versions de Python
[Introduction à Python] Comment trier efficacement le contenu d'une liste avec le tri par liste
Paramètre pour entrer le contenu de la bibliothèque avec pytest et effectuer un test de débogage
J'ai essayé de rationaliser le rôle standard des nouveaux employés avec Python
Essayez de résoudre un problème défini de mathématiques au lycée avec Python
[Introduction à Python] Quelle est la méthode de répétition avec l'instruction continue?
Essayez d'envoyer les résultats agrégés des deux enregistrements par e-mail avec pykintone
Essayez de séparer l'arrière-plan et l'objet en mouvement de la vidéo avec OpenCV
Obtenez des informations sur la propriété en grattant avec python
Essayez de reproduire un film couleur avec Python
Essayez de vous connecter à qiita avec Python
[Python] Visualisez les informations acquises par Wireshark