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.
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.
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 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)
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])
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)
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)
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.
Image de la carte: Institut national de recherche foncière
Recommended Posts