J'essaierai de devenir un maître SIG après un long moment. Je ne suis pas mon travail principal, alors j'ai l'impression que je vais le foutre si j'en ai l'occasion.
Depuis que j'ai appris l'existence de Geohash, je l'utilise en profitant de ses fonctionnalités pratiques.
Créez un groupe de chaînes de caractères Geohash couvrant le Japon et collectez des données pour chaque maillage. J'ai rien fait. Si la quantité de données est importante, vous devez récupérer des données dans une certaine plage, donc Il était trop pratique d'utiliser Geohash comme standard.
Il a également été proposé de profiter de ces caractéristiques et de les utiliser pour l'anonymisation. Avec k anonymisation + Geohash, on dit utiliser un maillage Geohash à un niveau qui satisfait k sous certaines conditions Quelque chose comme. → Je n'ose pas mettre de lien.
Récemment, il a été question d'utiliser quelque chose comme un maillage. Puis j'ai pensé à pousser Geohash http://qiita.com/kochizufan/items/2fe5f4c9f74636d22ddb Quadkey est meilleur que Geohash! J'ai trouvé un article à cet effet.
Donc, dans cet article, je parlerai de Quadkey et du code de localisation ouvert décrit plus loin. En utilisant réellement la bibliothèque Décrivez du point de vue "s'il peut être utilisé comme un maillage".
Le style Inoto Goro Il semble être utilisé pour l'index des tuiles de Bing Maps. C'est l'apparence officielle de MS. https://msdn.microsoft.com/en-us/library/bb259689.aspx
Bien qu'il s'agisse d'un index de mosaïque, si vous prenez les positions des quatre coins de la mosaïque, cela devient un maillage. Comme Geohash, vous pouvez générer une clé par maillage, Un personnage clé est un niveau. Je vois. Il semble qu'il puisse être utilisé à peu près de la même manière. La clé est générée à partir de l'index de la vignette, qui se trouve également sur le site ci-dessus. En d'autres termes, la clé est générée en convertissant une fois les informations de position en index de tuile. De même, la plage peut être prise en convertissant la clé en index de tuile. Par conséquent, même les utilisateurs qui disent "tuile? Je ne sais pas, ce que tu recherches est un maillage" sont une fois informés de l'index des tuiles. C'est un peu ennuyeux.
C'est fantastique. Puisqu'il est divisé en quatre, il est exprimé en nombres quaternaires. La clé est également composée de 0-3. Le niveau maximum est de 20. Je pense que la granulométrie n'est pas mauvaise. En tant que croyant Geohash, j'ai pensé: "Oh, j'ai perdu." En termes de polyvalence, j'ai eu l'impression que c'était complètement Quadkey.
L'URL de cette image est
@2017 Microsoft
Au dessous de.
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 Il s'agit de la touche Quad pour cette tuile.
Il est également fermement intégré dans l'URL.
La résidence impériale n'a pas de sens profond. Félicitations pour votre engagement, le cas échéant. C'est tout.
Python a un package appelé quadkey, mais il ne fonctionne pas dans mon environnement, probablement à cause de Python3. J'ai utilisé ceci parce que cela fonctionne avec le package mercantile.
Je vais l'écrire brièvement.
#Importer du mercantile
import mercantile
#Obtenez la position dans 4 directions à partir de la touche quad
def make_bounds_by_quadkey(t_quadkey):
#Obtenir l'index des tuiles de quadkey
t_tile = mercantile.quadkey_to_tile(t_quadkey)
#Obtenez les points de terminaison dans 4 directions à partir de l'index des tuiles
t_box = mercantile.bounds(t_tile.x, t_tile.y,t_tile.z)
return t_box
if __name__ == "__main__":
out_str=[]
#Ligne d'en-tête
out_str.append("south,east,north,west,Quadkey,zoom")
#Tableau parent à quatre touches pour récupérer la plage
#L'enfant est zoom_append_Générer et ajouter automatiquement avec la longueur de la plage
t_quadkeys=[
"13300211231022"
]
#Calculez la plage de latitude et de longitude à partir de Quadkey
for t_quadkey in t_quadkeys:
t_box = make_bounds_by_quadkey(t_quadkey)
print([t_quadkey,t_box])
#Tu peux le prendre comme ça
#['13300211231022',
# LngLatBbox(west=139.74609375, south=35.67514743608467,
# east=139.76806640625, north=35.6929946320988)]
#Parce que c'est un principe d'écrire de manière facile à comprendre
bounds_str = str(t_box.south) + "," + str(t_box.east) + "," + str(t_box.north) + ","+ str(t_box.west)
#Le niveau de zoom=Nombre de caractères dans Quadkey
t_zoom=len(t_quadkey)
out_str.append(bounds_str+","+t_quadkey+","+str(t_zoom))
#production
f = open("quadkey_bounds.csv", 'w')
f.write("\n".join(out_str) + "\n")
f.close()
Visualisons le CSV qui est sorti. Vous pouvez le visualiser en faisant 4 points du sud, de l'est, du nord et de l'ouest. → La méthode de visualisation est omise. J'ai créé mon propre outil OSM + Openlayers.
La cible est le code ci-dessus 13300211231022.
BingMap | Convertissez à partir de Quadkey et visualisez |
---|---|
@2017 Microsoft |
@OpenStreetMap |
La gauche est pour une tuile, et la droite est la plage convertie à partir de la touche Quad par le cadre vert. Il ne fait aucun doute que les fourchettes sont les mêmes lorsqu'on les compare. BingMaps, niveau Quadkey 14. Je l'utilise ~~.
C'est ce qui se passe lorsque vous réglez le niveau sur 15. Réécrivez la partie t_quadkeys = ~ de la source ci-dessus.
t_quadkeys=[
"133002112310220",
"133002112310221",
"133002112310222",
"133002112310223"
]
Ajoutez simplement 0 à 3 à la fin. La figure ci-dessous est visualisée.
De cette façon, il est divisé en quatre. Avec Geohash, lors de l'élévation du niveau, il est difficile de le monter manuellement, Si vous divisez Quadkey en 4 parties, vous pouvez vous le permettre manuellement. Il y a des cas comme "Je veux élever un autre niveau et je veux un maillage pour cette partie!" Parce qu'il s'agit d'une éventuelle demande d'analyse de données Je pense que pouvoir le faire intuitivement n'est pas un petit mérite.
Quadkey, c'est bien. J'étais content, mais Google développe également une méthode de GeoCoding, Il s'avère que cela ne peut pas être ignoré.
Le style Inoto Goro
Open Location Code (OLC), un code qui repère chaque point du globe plus+codes https://plus.codes/ → Allumons la grille depuis le menu Et Google Map. https://japan.cnet.com/article/35068908/
La position peut être codée en la spécifiant au niveau de la position de la porte. La hiérarchie des codes est déterminée ci-dessous.
hiérarchie | intervalle |
---|---|
region code | Identifiez une plage d'environ 100 km carrés |
city code | Identifiez une zone carrée de 5 km |
neighbourhood code | Identifier une superficie de 250 m2 |
building cod | Identifier une surface de 14m carrés |
door | Gamme plus petite |
5 étapes. Grossier que les 20 étapes de Quadkey, Si vous approfondissez une couche, elle sera divisée en 400, donc elle sera moins polyvalente. Mais
La manière de l'utiliser dépend de la nature du service. Lorsque Google dit "code de ville dans cette plage", cela peut être "OK".
La bibliothèque d'OLC est ouverte au public sur Github. https://github.com/google/open-location-code
Vérifions l'opération facilement à l'aide de la bibliothèque python. Obtenez openlocationcode.py à partir du github ci-dessus et Créez et exécutez le script suivant. → Un maillage d'une ville à proximité du palais impérial et de son quartier enfant C'est le processus à acquérir.
import openlocationcode
if __name__ == "__main__":
#Emplacement près du palais impérial
latitude=35.68407104
longitude=139.7570801
PAIR_CODE_LENGTH_=10
#Utilisé lors de la génération de code enfant
CODE_ALPHABET_ = '23456789CFGHJMPQRVWX'
out_str=[]
out_str.append("south,east,north,west,Quadkey,zoom")
#Moins de 10 entraînera une erreur
length_list = [10]
code_list = []
for ll in length_list:
tcode = openlocationcode.encode(latitude, longitude, ll)
print(tcode)
code_list.append(tcode)
#décoder la liste de codes cibles
neighbourhood_list= []
use_child = True
for cl in code_list:
#Couper le bâtiment
split_tcode = cl.split("+")
#Si vous coupez avec la ville, définissez les deux derniers caractères sur 00
city_code = split_tcode[0][0:6]
neighbourhood_list.append(city_code +"00+")
#CODE pour obtenir tout le quartier_ALPHABET_ * CODE_ALPHABET_Pour générer et ajouter
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+"+")
#décoder
for nc in neighbourhood_list:
decode = openlocationcode.decode(nc)
print(decode)
#Obtenez les données requises de la classe CodeArea et sortez-les
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))
##production
f = open("quadkey_bounds_olc.csv", 'w')
f.write("\n".join(out_str) + "\n")
f.close()
city | neighbourhood |
---|---|
Est-ce difficile à utiliser avec cette taille? Par exemple, lors de la recherche de données dans la plage de villes, il semble qu'il y aura un nombre considérable de résultats, Le niveau du quartier est trop petit, vous devez donc effectuer une recherche dans plusieurs plages.
Tout le monde est différent et tout le monde est bon. Je voudrais dire que la polyvalence de Quadkey semble bonne en raison de sa nature. Même s'il est appliqué à l'anonymisation k comme mesure de confidentialité, avec Geohash c'est un maillage de 32 fois chacun Par rapport à l'évaluation, il peut être possible d'exprimer avec un maillage plus petit en évaluant avec 4 fois chaque maillage. Je pense que les utilisateurs des données sourient également. Au moment de la recherche, une correspondance de chaîne de caractères peut être utilisée, mais une correspondance numérique peut être utilisée. Les performances au moment de la recherche peuvent sortir ... À l'inverse, le codage implique des calculs de type Mercator, donc Il semble être plus lent que Geohash, qui est simplement dérivé de la latitude et de la longitude. Après tout, il y a une partie à convertir en index de tuiles une fois, vous pouvez l'envelopper, mais cela semble inutile ...
Geohash est devenu si populaire qu'il a plus d'informations et de bibliothèques que d'autres. C'est à peu près ça.
OLC est difficile à utiliser, mais si vous souhaitez coder finement la position au niveau de la porte. Je me demande si je peux l'utiliser comme maillage. Mais par rapport aux deux premiers, il y a des inquiétudes comme "Quel niveau dois-je utiliser pour ce service?" Puisqu'il est presque inexistant, c'est un bon choix en fonction de l'application.
Il existe également un maillage hexagonal appelé Geohex, que je n'ai pas pu présenter. http://geogames.net/geohex/v3 C'est beau. Mais je ne peux pas avoir une relation parent-enfant complète, Selon le niveau, ce sera un maillage différent. Aussi, qu'il soit visualisé ou que les données soient acquises Un carré est pratique car il est flexible. Vous pouvez visualiser Polygon en le tenant au format WKT ou en recherchant un SIG. Ça coûte de l'argent Si vous souhaitez quand même utiliser Polygon, vous pouvez utiliser Polygon des préfectures ou Polygon des districts. Je veux en utiliser des détaillés. C'est une option très prometteuse si vous l'utilisez pour positionner des jeux.
Je comprends la grandeur de Quadkey. Je vais l'utiliser à partir de maintenant. Mais je suis également intéressé par OLC, et il n'y a aucune explication de la logique de conversion, donc je me demande si je devrais regarder la source. Je pense.
Recommended Posts