Répandre les tuiles de la carte de l'Institut géographique avec Python

Contexte

Si vous souhaitez créer une carte d'itinéraire sur l'arrière-plan d'une carte, vous avez l'habitude de la copier et de la coller sur le papier quadrillé Excel de la tuile de la carte de l'Institut géographique, mais c'est une tâche très gênante, alors laissez Python le faire. Je l'ai fait.

Qu'est-ce que la tuile de carte d'enquête géographique?

Les détails sont décrits dans ici, mais en bref, la carte topographique créée par l'Institut national de recherche foncière peut être utilisée comme une image en mosaïque. C'est. L'image de la tuile a des valeurs de coordonnées, et cette fois j'obtiendrai une carte de la zone que je veux en la spécifiant. Veuillez vérifier les valeurs des coordonnées sur la page de confirmation des coordonnées des tuiles de l'Institut national de recherche foncière.

Obtenir une image de tuile

Tout d'abord, importez les bibliothèques requises. Veuillez l'installer si nécessaire. (par exemple, «demandes d'installation pip»)

chiriinMap.py


import cv2
import numpy as np
import os
import requests

Définissez la fonction pour obtenir et enregistrer l'image de la vignette comme suit: Ci-dessous, un dossier appelé «tile» est préparé et enregistré dans le répertoire courant. Au fait, ce n'est que pour une feuille 15_28250_13142.jpg C'est comme ça.

chiriinMap.py


def get_tile(z, x, y):
    """
Cette fois, spécifiez l'URL pour obtenir la carte standard.
Enregistrez l'image de la tuile de la carte de l'Institut géographique correspondant aux coordonnées données.
    """
    url = "https://cyberjapandata.gsi.go.jp/xyz/std/{}/{}/{}.png ".format(z, x, y)
    file_name = "tile/{}_{}_{}.jpg ".format(z, x, y)
    
    response = requests.get(url)
    image = response.content
    
    with open(file_name, "wb") as aaa:
        aaa.write(image)

Obtenir l'image de la vignette en spécifiant la zone

La fonction précédente get_tile ne peut obtenir qu'une seule tuile de carte, essayez donc d'obtenir la zone entière. Pour l'avenir, si l'image que vous souhaitez existe déjà, elle sera ignorée. Cependant, si trop de temps s'est écoulé depuis la dernière acquisition, la carte peut avoir été mise à jour, donc dans ce cas, il est préférable de supprimer l'image. Dans la section suivante, nous combinerons plusieurs images de tuiles en une seule, vous voudrez peut-être supprimer des images individuelles à chaque fois. Je vous laisse cela.

chiriinMap.py


def get_tile_area(north_west, south_east):
    """
Après avoir spécifié les coordonnées de la tuile de l'extrémité nord-ouest et de l'extrémité sud-est, acquérez l'image de tuile.
    """
    assert north_west[0] == south_east[0], "Vérifiez le niveau de zoom z."
    zoom = north_west[0]
    im_v_lst = []
    for i in range(south_east[1]-north_west[1]+1):
        for j in range(south_east[2]-north_west[2]+1):
            filepath = path = "tile/{}_{}_{}.jpg ".format(zoom, i+north_west[1], j+north_west[2])
            if os.path.exists(filepath) == True:
                continue
            get_tile(zoom, i+north_west[1], j+north_west[2])

Combinez les images de tuiles de la zone en une seule image

Les travaux de pose qui ont pris énormément de temps peuvent être surmontés comme suit. N'hésitez pas à renommer la dernière image.

chiriinMap.py


def cat_tile(north_west, south_east):
    zoom = north_west[0]
    im_v_lst = []
    for i in range(south_east[2]-north_west[2]+1):
        im_h_lst = []
        for j in range(south_east[1]-north_west[1]+1):
            path = "tile/{}_{}_{}.jpg ".format(zoom, j+north_west[1], i+north_west[2])
            im1 = cv2.imread(path,-1)
            im_h_lst.append(im1)
        im_h = cv2.hconcat(im_h_lst)
        im_v_lst.append(im_h)
    im_v = cv2.vconcat(im_v_lst)
    cv2.imwrite("tile/tile.png ", im_v)

Essayer

J'essaierai.

chiriinMap.py


north_west = (15, 28223, 13124)
south_east = (15, 28244, 13144)
get_tile_area(north_west, south_east)
cat_tile(north_west, south_east)

tile.png

C'est comme ça. C'est la péninsule d'Itoshima dans la préfecture de Fukuoka. Combien d'heures faudrait-il pour le faire manuellement ... Vous pouvez en profiter avec ça. À propos, cette image fait environ 30 Mo en l'état. Si cela ne vous dérange pas de réduire la qualité de l'image, vous voudrez peut-être réduire la taille.

La source

Image de la carte: Institut national de recherche foncière

Recommended Posts

Répandre les tuiles de la carte de l'Institut géographique avec Python
Trouver des erreurs en Python
Obtenir l'API arXiv en Python
Python dans le navigateur: la recommandation de Brython
Enregistrez le fichier binaire en Python
Frappez l'API Sesami en Python
Obtenez le chemin du bureau en Python
Carte auto-organisée dans la version Python NumPy
Obtenez le chemin du script en Python
[Python] Ajuster la norme de la carte des couleurs
Accédez à l'API Web en Python
J'ai écrit la file d'attente en Python
Calculer le mois précédent en Python
Examiner la classe d'un objet avec python
Obtenez le chemin du bureau en Python
Obtenez le nom d'hôte en Python
Accéder à l'API Twitter avec Python
La première étape de Python Matplotlib
J'ai écrit la pile en Python
Maîtriser le module lowref en Python
Apprenez le modèle de conception "Prototype" avec Python
Apprenez le modèle de conception "Builder" avec Python
Charger le SDK Python distant avec IntelliJ
Spécifiez la couleur dans la carte 2D matplotlib
Vérifiez le comportement du destroyer en Python
Apprenez le modèle de conception "Flyweight" en Python
Essayez d'utiliser l'API Kraken avec Python
Apprenez le modèle de conception "Observer" en Python
Apprenez le modèle de conception "Memento" avec Python
Ecrire le test dans la docstring python
Apprenez le modèle de conception "Commande" en Python
Prenez la somme logique de List en Python (fonction zip)
Tweet à l'aide de l'API Twitter en Python
Apprenez le modèle de conception "Visiteur" avec Python
Essayez d'imaginer les données d'élévation du National Land Research Institute avec Python
Apprenez le modèle de conception "Bridge" avec Python
Vérifiez si l'URL existe en Python
Apprenez le modèle de conception "Mediator" avec Python
Associez l'ensemble de tables dans les modèles de python.py
Apprenez le modèle de conception "Décorateur" avec Python
Exécuter l'interpréteur Python dans le script
Le résultat de l'installation de python sur Anaconda
Qu'est-ce que "mahjong" dans la bibliothèque Python? ??
Lisez le fichier ligne par ligne avec Python
Lisez le fichier ligne par ligne avec Python
MongoDB avec Python pour la première fois
Apprenez le modèle de conception "Iterator" avec Python
Principes de base pour exécuter NoxPlayer en Python
Ouvrez un fichier Excel en Python et coloriez la carte du Japon
Apprenez le modèle de conception «Stratégie» avec Python
Apprenez le modèle de conception "Composite" avec Python
Résolvez le problème maximum de sous-tableau en Python
À la recherche du FizzBuzz le plus rapide en Python
Apprenez le modèle de conception "État" en Python
Obtenir la liste de codes EDINET en Python
Apprenez le modèle de conception "Adapter" avec Python
Installez le module Python dans n'importe quel répertoire
[Python] Lire la ligne spécifiée dans le fichier
[Python] Combine tous les éléments dans un tableau
Affichage des données d'informations de position en Python --Essayez de tracer avec la bibliothèque d'affichage de carte (folium) -