[PYTHON] Donnez les données de séquence de points de latitude et de longitude et essayez d'identifier la route à partir des données d'OpenStreetMap

Bonjour. Données OpenStreetMap importées dans mongodb (en utilisant goosm), donc en tant qu'application, sur la route Compte tenu des "données de séquence de points de latitude" (en bleu ci-dessous) qui se déplaçaient, j'ai considéré le problème de l'identification de la route (en vert). Exporté au format geojson.

Cependant, les données de chemin OpenStreetMap (autoroute) doivent être une simple arête (ligne) avec un sommet aux deux extrémités.

printgeojson.jpg

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from __future__ import print_function
import simplejson
import textwrap
from pymongo import MongoClient

client = MongoClient('localhost')

def queryNear(coord, radius):
    return ({"geometry": {"$near": {"$maxDistance": radius, "$geometry": {"type": "Point", "coordinates": coord}}}}, {"_id": 1, "geometry.coordinates": 1, "nodes": 1})

def printgeojson(type, coordinates):
    fmtstr = """\
    {
    "type": "Feature",
    "geometry": {"type": %s, "coordinates": %s},
    "properties": {}
    }"""
    fmtstr = textwrap.dedent(fmtstr)
    print(fmtstr % (type, coordinates), end='')
    return 0

def printNodes(tracks):
    nodes = []
    colnodes = client['osm_nodes']['data']
    prepend = ''
    for coord in tracks:
        results = colnodes.find(*queryNear(coord, radius))
        for r in results:
            if r['_id'] not in nodes:
                nodes.append(r['_id'])
                print(prepend, end='')
                printgeojson("Point", r['geometry']['coordinates'])
                prepend = ',\n'
    return nodes

def printEdges(tracks, nodes):
    edges = []
    coledges = client['osm_edges']['data']
    prepend = ''
    for coord in tracks:
        results = coledges.find(*queryNear(coord, radius))
        for r in results:
            if r['_id'] not in edges and set(r['nodes']).issubset(nodes):
                edges.append(r['_id'])
                print(prepend, end='')
                printgeojson("LineString", r['geometry']['coordinates'])
                prepend = ',\n'
    return edges

def main():
    radius = 30.0
    tracks = [[lon0, lat0], [lon1, lat1], ...] # <==Donner des données de séquence de points de latitude et de longitude
    nodes = printNodes(tracks, radius)
    edges = printEdges(tracks, radius, nodes)
    exit(0)

if __name__ == '__main__':
    main()

Recommended Posts

Donnez les données de séquence de points de latitude et de longitude et essayez d'identifier la route à partir des données d'OpenStreetMap
Obtenez l'adresse à partir de la latitude et de la longitude
Apprenez les données comptables et essayez de prédire les comptes à partir du contenu de la description lors de la saisie des journaux
Trouvez la distance (en tenant compte de la rondeur de la terre) de la latitude et de la longitude.
Trouvez le waypoint à partir de la latitude et de la longitude (en tenant compte de la rondeur de la terre).
Essayez de convertir les coordonnées de latitude / longitude et du monde entre elles avec python
[GPS] Calculez la distance, l'angle azimutal et l'angle d'élévation à partir de la latitude et de la longitude GPS à l'aide de pyproj
[Rust] Lire les données csv de latitude et de longitude pour trouver la distance entre deux points
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
Modifiez le point décimal de la journalisation de, à.
Récupération des données de MacNote3 et migration vers Write
Télécharger les tuiles de l'Institut géographique à partir de la latitude et de la longitude
Essayez de créer une table d'enregistrement de bataille avec matplotlib à partir des données de "Schedule-kun"
Obtenez des informations de localisation (latitude et longitude) à partir de l'adresse. Géocodage en Python ~ Géocodeur et pydams ~
Essayez de configurer SSH (Exscript) du logiciel au routeur
Essayez de configurer NETCONF (ncclient) du logiciel au routeur
Envoyer les données du journal du serveur vers Splunk Cloud
Essayez de diviser les données Twitter en SPAM et HAM
Environ 200 données de latitude et de longitude pour les hôpitaux de Tokyo
Essayez de déchiffrer les données de connexion stockées dans Firefox
Python --Lisez des données à partir d'un fichier de données numériques pour trouver des matrices, des valeurs propres et des vecteurs propres distribués co-distribués