Ich werde nach langer Zeit versuchen, ein GIS-Meister zu werden. Ich bin nicht meine Hauptaufgabe, also habe ich das Gefühl, ich werde es vermasseln, wenn ich die Chance dazu bekomme.
Seit ich von der Existenz von Geohash erfahren habe, nutze ich es, indem ich seine nützlichen Funktionen ausnütze.
Erstellen Sie eine Gruppe von Geohash-Zeichenfolgen, die Japan abdecken, und sammeln Sie Daten für jedes Netz. Ich habe alles getan. Wenn die Datenmenge groß ist, müssen Sie Daten in einem bestimmten Bereich abrufen Es war zu bequem, Geohash als Standard zu verwenden.
Es wurde auch vorgeschlagen, diese Eigenschaften zu nutzen und zur Anonymisierung zu verwenden. Mit k Anonymisierung + Geohash soll ein Geohash-Netz auf einem Niveau verwendet werden, das unter bestimmten Bedingungen k erfüllt Etwas wie. → Ich wage es nicht, einen Link zu setzen.
Vor kurzem wurde darüber gesprochen, ob so etwas wie ein Netz verwendet werden soll. Dann dachte ich darüber nach, Geohash voranzutreiben http://qiita.com/kochizufan/items/2fe5f4c9f74636d22ddb Quadkey ist besser als Geohash! Ich habe einen entsprechenden Artikel gefunden.
In diesem Artikel werde ich also über Quadkey und den später beschriebenen Open Location Code sprechen. Während der tatsächlichen Nutzung der Bibliothek Beschreiben Sie unter dem Gesichtspunkt, ob es wie ein Netz verwendet werden kann.
Inoto Goro Stil Es scheint für den Kachelindex von Bing Maps verwendet zu werden. Dies ist das offizielle Erscheinungsbild von MS. https://msdn.microsoft.com/en-us/library/bb259689.aspx
Obwohl es sich um einen Kachelindex handelt, wird es zu einem Netz, wenn Sie die Positionen der vier Ecken der Kachel einnehmen. Wie bei Geohash können Sie einen Schlüssel pro Netz generieren. Eine Schlüsselfigur ist eine Ebene. Das war's. Es scheint, dass es fast genauso verwendet werden kann. Der Schlüssel wird aus dem Index der Kachel generiert, der sich ebenfalls auf der obigen Site befindet. Mit anderen Worten, der Schlüssel wird durch einmaliges Konvertieren der Positionsinformationen in den Kachelindex generiert. Ebenso kann der Bereich durch Konvertieren des Schlüssels in den Kachelindex ermittelt werden. Daher werden auch Benutzer, die "Kachel? Ich weiß nicht, was Sie suchen, ist ein Netz" sagen, einmal auf den Kachelindex aufmerksam gemacht. Es ist ein bisschen nervig.
Das ist fantastisch. Da es in vier Teile unterteilt ist, wird es in quaternären Zahlen ausgedrückt. Der Schlüssel besteht ebenfalls aus 0-3. Die maximale Stufe beträgt 20. Ich finde die Korngröße nicht schlecht. Als Geohash-Gläubiger dachte ich: "Oh, ich habe verloren." In Bezug auf die Vielseitigkeit hatte ich den Eindruck, dass es komplett Quadkey war.
Die URL dieses Bildes lautet
@2017 Microsoft
Unten.
https://t0.ssl.ak.dynamic.tiles.virtualearth.net/comp/ch/13300211231022?mkt=ja-JP&it=G,BX,L,LA&shading=hill&og=94&n=z&c4w=1
13300211231022 Dies ist der Quad-Schlüssel für diese Kachel.
Es ist auch fest in der URL enthalten.
Die kaiserliche Residenz hat keine tiefe Bedeutung. Herzlichen Glückwunsch zu Ihrem Engagement, falls vorhanden. Das ist es.
Python hat ein Paket namens Quadkey, aber es funktioniert in meiner Umgebung nicht, wahrscheinlich wegen Python3. Ich habe dies verwendet, weil es mit dem Handelspaket funktioniert.
Ich werde es kurz schreiben.
#Handelsware importieren
import mercantile
#Holen Sie sich die Position in 4 Richtungen von der Quad-Taste
def make_bounds_by_quadkey(t_quadkey):
#Holen Sie sich den Kachelindex von Quadkey
t_tile = mercantile.quadkey_to_tile(t_quadkey)
#Holen Sie sich die Endpunkte in 4 Richtungen aus dem Kachelindex
t_box = mercantile.bounds(t_tile.x, t_tile.y,t_tile.z)
return t_box
if __name__ == "__main__":
out_str=[]
#Kopfzeile
out_str.append("south,east,north,west,Quadkey,zoom")
#Quadkey-Elternarray zum Abrufen des Bereichs
#Kind ist Zoom_append_Automatisch generieren und mit der Länge des Bereichs hinzufügen
t_quadkeys=[
"13300211231022"
]
#Berechnen Sie den Breiten- und Längengradbereich von Quadkey
for t_quadkey in t_quadkeys:
t_box = make_bounds_by_quadkey(t_quadkey)
print([t_quadkey,t_box])
#Sie können es so nehmen
#['13300211231022',
# LngLatBbox(west=139.74609375, south=35.67514743608467,
# east=139.76806640625, north=35.6929946320988)]
#Weil es ein Prinzip ist, leicht verständlich zu schreiben
bounds_str = str(t_box.south) + "," + str(t_box.east) + "," + str(t_box.north) + ","+ str(t_box.west)
#Zoomstufe=Anzahl der Zeichen in Quadkey
t_zoom=len(t_quadkey)
out_str.append(bounds_str+","+t_quadkey+","+str(t_zoom))
#Ausgabe
f = open("quadkey_bounds.csv", 'w')
f.write("\n".join(out_str) + "\n")
f.close()
Lassen Sie uns die CSV visualisieren, die herauskam. Sie können es visualisieren, indem Sie 4 Punkte aus Süd, Ost, Nord und West machen. → Die Visualisierungsmethode entfällt. Ich habe mein eigenes OSM + Openlayers-Tool erstellt.
Das Ziel ist der obige Code 13300211231022.
BingMap | Von Quadkey konvertieren und visualisieren |
---|---|
@2017 Microsoft |
@OpenStreetMap |
Die linke ist für eine Kachel und die rechte ist der Bereich, der vom grünen Rahmen aus der Quad-Taste konvertiert wird. Es besteht kein Zweifel, dass die Bereiche im Vergleich gleich sind. BingMaps, Quadkey Level 14. Ich benutze es ~~.
Dies passiert, wenn Sie den Pegel auf 15 einstellen. Schreiben Sie den Teil t_quadkeys = ~ der obigen Quelle neu.
t_quadkeys=[
"133002112310220",
"133002112310221",
"133002112310222",
"133002112310223"
]
Fügen Sie am Ende einfach 0 bis 3 hinzu. Die folgende Abbildung wird visualisiert.
Auf diese Weise wird es in vier Teile geteilt. Mit Geohash ist es beim Erhöhen des Levels schwierig, es manuell zu erhöhen. Wenn Sie den Quadkey in 4 Teile teilen, können Sie es sich manuell leisten. Es gibt Fälle wie "Ich möchte ein anderes Level erhöhen und möchte ein Netz für diesen Teil!" Weil es eine mögliche Anfrage für die Datenanalyse ist Ich denke, dass es kein kleiner Verdienst ist, dies intuitiv tun zu können.
Quadkey, das ist gut. Ich war glücklich, aber Google entwickelt auch eine GeoCoding-Methode. Es stellt sich heraus, dass es nicht ignoriert werden kann.
Inoto Goro Stil
Open Location Code (OLC), ein Code, der jeden Punkt auf der Welt genau bestimmt plus+codes https://plus.codes/ → Lassen Sie uns das Raster aus dem Menü einschalten Und Google Map. https://japan.cnet.com/article/35068908/
Die Position kann durch Angabe auf Türpositionsebene codiert werden. Die Code-Hierarchie wird unten bestimmt.
Hierarchie | Reichweite |
---|---|
region code | Identifizieren Sie eine Reichweite von ca. 100 km² |
city code | Identifizieren Sie eine 5 km² große Fläche |
neighbourhood code | Identifizieren Sie eine Fläche von 250 Quadratmetern |
building cod | Identifizieren Sie eine Fläche von 14 Quadratmetern |
door | Kleinere Reichweite |
5 Stufen. Grob als die 20 Stufen von Quadkey, Wenn Sie eine Ebene vertiefen, wird sie in 400 unterteilt, sodass sie weniger vielseitig ist. Aber
Wie dies verwendet wird, hängt von der Art des Dienstes ab. Wenn Google "Stadtcode in diesem Bereich" sagt, ist dies möglicherweise "OK".
Die Bibliothek von OLC ist auf Github für die Öffentlichkeit zugänglich. https://github.com/google/open-location-code
Lassen Sie uns den Vorgang einfach mithilfe der Python-Bibliothek überprüfen. Holen Sie sich openlocationcode.py vom obigen Github und Erstellen Sie das folgende Skript und führen Sie es aus. → Ein Netz einer Stadt in der Nähe des Kaiserpalastes und seiner Kindergegend Dies ist der Prozess zu erwerben.
import openlocationcode
if __name__ == "__main__":
#Lage in der Nähe des Kaiserpalastes
latitude=35.68407104
longitude=139.7570801
PAIR_CODE_LENGTH_=10
#Wird beim Generieren von untergeordnetem Code verwendet
CODE_ALPHABET_ = '23456789CFGHJMPQRVWX'
out_str=[]
out_str.append("south,east,north,west,Quadkey,zoom")
#Weniger als 10 führen zu einem Fehler
length_list = [10]
code_list = []
for ll in length_list:
tcode = openlocationcode.encode(latitude, longitude, ll)
print(tcode)
code_list.append(tcode)
#Zielcodeliste dekodieren
neighbourhood_list= []
use_child = True
for cl in code_list:
#Schneiden Sie bis zum Gebäude
split_tcode = cl.split("+")
#Wenn Sie mit Stadt schneiden, setzen Sie die letzten beiden Zeichen auf 00
city_code = split_tcode[0][0:6]
neighbourhood_list.append(city_code +"00+")
#CODE, um alle Nachbarschaft zu bekommen_ALPHABET_ * CODE_ALPHABET_Zu generieren und hinzuzufügen
if use_child:
for ca1 in range(len(CODE_ALPHABET_)):
for ca2 in range(len(CODE_ALPHABET_)):
neighbourhoodcode=city_code +CODE_ALPHABET_[ca1]+CODE_ALPHABET_[ca2]
neighbourhood_list.append(neighbourhoodcode+"+")
#dekodieren
for nc in neighbourhood_list:
decode = openlocationcode.decode(nc)
print(decode)
#Nimmt die erforderlichen Daten aus der CodeArea-Klasse und gibt sie aus
bounds_str = str(decode.latitudeLo) + "," + str(decode.longitudeLo) + "," + str(decode.latitudeHi) + ","+ str(decode.longitudeHi)
t_zoom=decode.codeLength
out_str.append(bounds_str+","+nc+","+str(t_zoom))
##Ausgabe
f = open("quadkey_bounds_olc.csv", 'w')
f.write("\n".join(out_str) + "\n")
f.close()
city | neighbourhood |
---|---|
Ist es schwierig mit dieser Größe zu verwenden? Zum Beispiel scheint es bei der Suche nach Daten im Bereich der Stadt eine beträchtliche Anzahl von Treffern zu geben. Die Nachbarschaftsebene ist zu klein, sodass Sie in mehreren Bereichen suchen müssen.
Jeder ist anders und jeder ist gut. Ich möchte sagen, dass Quadkeys Vielseitigkeit aufgrund seiner Natur gut zu sein scheint. Selbst wenn es als Datenschutzmaßnahme auf die k-Anonymisierung angewendet wird, ist es bei Geohash ein Netz von jeweils 32-mal Im Vergleich zur Bewertung kann es möglich sein, mit einem kleineren Netz auszudrücken, indem mit dem Vierfachen jedes Netzes bewertet wird. Ich denke, dass die Benutzer der Daten auch lächeln. Zum Zeitpunkt der Suche kann eine Zeichenfolgenübereinstimmung verwendet werden, es kann jedoch eine numerische Übereinstimmung verwendet werden. Die Leistung zum Zeitpunkt der Suche kann beeinträchtigt werden ... Umgekehrt beinhaltet die Codierung Mercator-ähnliche Berechnungen Es scheint langsamer zu sein als Geohash, das einfach aus Längen- und Breitengraden abgeleitet wird. Immerhin gibt es einen Teil, der einmal in einen Kachelindex konvertiert werden muss. Sie können ihn umbrechen, aber er fühlt sich nutzlos an ...
Geohash ist so populär geworden, dass es mehr Informationen und Bibliotheken als andere hat. Das ist alles.
OLC ist schwierig zu verwenden, aber wenn Sie die Position auf Türebene fein codieren möchten. Ich frage mich, ob ich es als Netz verwenden kann. Aber im Vergleich zu den beiden Besten gibt es Bedenken wie "Welches Level soll ich für diesen Service verwenden?" Da es fast nicht vorhanden ist, ist es je nach Anwendung eine gute Wahl.
Es gibt auch ein sechseckiges Netz namens Geohex, das ich nicht vorstellen konnte. http://geogames.net/geohex/v3 Es sieht schön aus. Aber ich kann keine vollständige Eltern-Kind-Beziehung haben, Je nach Level wird es ein anderes Netz sein. Auch, ob es visualisiert oder Daten erfasst werden Ein Quadrat ist praktisch, weil es flexibel ist. Sie können Polygon visualisieren, indem Sie es im WKT-Format halten oder nach GIS suchen. Es kostet Geld Wenn Sie Polygon trotzdem verwenden möchten, können Sie Polygon aus Präfekturen oder Polygon aus Bezirken verwenden. Ich möchte detaillierte verwenden. Es ist eine sehr vielversprechende Option, wenn Sie sie zum Positionieren von Spielen verwenden.
Ich verstehe die Größe von Quadkey. Ich werde es von nun an verwenden. Aber ich interessiere mich auch für OLC, und es gibt keine Erklärung für die Konvertierungslogik. Deshalb frage ich mich, ob ich mir die Quelle ansehen sollte. Ich denke.
Recommended Posts