Wenn Sie eine Routenkarte vor dem Hintergrund einer Karte erstellen möchten, haben Sie sie selbst kopiert und in das Excel-Rasterpapier des Geographical Institute-Kartenkachels eingefügt. Dies ist jedoch eine sehr mühsame Aufgabe. Lassen Sie Python dies tun. Ich habe es gemacht.
Details sind in hier beschrieben, aber kurz gesagt, die vom National Land Research Institute erstellte topografische Karte kann als Kachelbild verwendet werden. Das ist. Das Kachelbild hat Koordinatenwerte, und dieses Mal erhalte ich eine Karte des gewünschten Gebiets, indem ich es spezifiziere. Bitte überprüfen Sie die Koordinatenwerte auf der Seite zur Bestätigung der Kachelkoordinaten des National Land Research Institute.
Importieren Sie zunächst die erforderlichen Bibliotheken.
Bitte installieren Sie es bei Bedarf.
(zB pip install request
)
chiriinMap.py
import cv2
import numpy as np
import os
import requests
Definieren Sie die Funktion zum Abrufen und Speichern des Kachelbilds wie folgt: Unten wird ein Ordner namens "Kachel" vorbereitet und im aktuellen Verzeichnis gespeichert. Übrigens ist es nur für ein Blatt Es ist so.
chiriinMap.py
def get_tile(z, x, y):
"""
Geben Sie dieses Mal die URL an, um die Standardkarte abzurufen.
Speichern Sie das Kartenkachelbild des Geographical Institute entsprechend den angegebenen Koordinaten.
"""
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)
Die vorherige Funktion "get_tile" kann nur eine Kartenkachel abrufen. Versuchen Sie daher, den gesamten Bereich abzurufen. Wenn das gewünschte Bild für die Zukunft bereits vorhanden ist, wird es übersprungen. Wenn jedoch seit der letzten Erfassung zu viel Zeit vergangen ist, wurde die Karte möglicherweise aktualisiert. In diesem Fall ist es besser, das Bild zu löschen. Im nächsten Abschnitt werden wir mehrere Kachelbilder zu einem kombinieren, sodass Sie möglicherweise jedes Mal einzelne Bilder löschen möchten. Das überlasse ich dir.
chiriinMap.py
def get_tile_area(north_west, south_east):
"""
Erhalten Sie das Kachelbild, nachdem Sie die Kachelkoordinaten des nordwestlichen Endes und des südöstlichen Endes angegeben haben.
"""
assert north_west[0] == south_east[0], "Überprüfen Sie die Zoomstufe 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])
Die Verlegearbeiten, die viel Zeit in Anspruch genommen haben, können wie folgt überwunden werden. Fühlen Sie sich frei, das letzte Bild umzubenennen.
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)
Ich werde es versuchen.
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)
Es ist so. Es ist die Itoshima-Halbinsel in der Präfektur Fukuoka. Wie viele Stunden würde es dauern, um es manuell zu tun ... Sie können es damit genießen. Übrigens ist dieses Bild ungefähr 30 MB groß. Wenn es Ihnen nichts ausmacht, die Bildqualität zu verringern, können Sie die Größe verringern.
Kartenbild: Nationales Landforschungsinstitut
Recommended Posts