[PYTHON] Ziel GIS Master # 3 Ich habe die netzartige Geokodierungsmethode untersucht

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.

Ich dachte, Geohash sei der einzige, der am stärksten ist

Seit ich von der Existenz von Geohash erfahren habe, nutze ich es, indem ich seine nützlichen Funktionen ausnütze.

■ Praktischer Grund

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.

■ Natürlich gibt es Schwächen

■ Tatsächlich gibt es viele ähnliche Dinge

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.

Quadkey, gibt es so etwas?

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.

Aber Quadkey ist quadratisch und in vier Teile geteilt

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.

■ Wird tatsächlich in Bing Maps verwendet

Die URL dieses Bildes lautet 13300211231022.jfif @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.

■ Versuchen Sie, den Breiten- und Längengrad von Quadkey zu ermitteln

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
13300211231022.jfif@2017 Microsoft qiita.png @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 ~~.

■ Siehe auch das Niveau des Kindes

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. qiita2.png

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.

Googles Open Location Code, hey, also komm

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/

■ Was ist das?

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

Es ist vielleicht besser, sich so schnell entschieden zu haben, wenn Sie sich Sorgen machen, welches Niveau Sie senken möchten.

Wie dies verwendet wird, hängt von der Art des Dienstes ab. Wenn Google "Stadtcode in diesem Bereich" sagt, ist dies möglicherweise "OK".

■ Versuchen Sie es trotzdem.

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
qiita3.png qiita4.png

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.

Zusammenfassung (Seien Sie vorsichtig, weil es super subjektiv ist)

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.

damit

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

Ziel GIS Master # 3 Ich habe die netzartige Geokodierungsmethode untersucht
Ziel GIS Master # 2 Durchsuchen Sie nahe gelegene Straßen mit hoher Geschwindigkeit mit R-Tree
Ich berührte PyAutoIt für einen Moment
Ich habe ein Dash-Docset für Holoviews erstellt
Ich habe eine Bibliothek für versicherungsmathematische Versicherungen erstellt