[PYTHON] Geben Sie Breiten- und Längengradpunktsequenzdaten an und versuchen Sie, die Straße anhand von OpenStreetMap-Daten zu identifizieren

Hallo. Importierte OpenStreetMap-Daten in mongodb (unter Verwendung von goosm) als Anwendung unterwegs Angesichts der "Breitengrad-Sequenzsequenzdaten" (blau unten), die sich entlang bewegten, dachte ich über das Problem der Identifizierung der Straße (grün) nach. Im Geojson-Format exportiert.

Die OpenStreetMap-Wegedaten (Autobahn) müssen jedoch eine einfache Kante (Linie) mit einem Scheitelpunkt an beiden Enden sein.

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], ...] # <==Geben Sie Breiten- und Längengradpunktsequenzdaten an
    nodes = printNodes(tracks, radius)
    edges = printEdges(tracks, radius, nodes)
    exit(0)

if __name__ == '__main__':
    main()

Recommended Posts

Geben Sie Breiten- und Längengradpunktsequenzdaten an und versuchen Sie, die Straße anhand von OpenStreetMap-Daten zu identifizieren
Holen Sie sich die Adresse von Längen- und Breitengrad
Lernen Sie Buchhaltungsdaten kennen und versuchen Sie, Konten aus dem Inhalt der Beschreibung vorherzusagen, wenn Sie Journale eingeben
Finden Sie die Entfernung von Breite und Länge (unter Berücksichtigung der Rundheit der Erde).
Finden Sie den Wegpunkt aus dem Breiten- und Längengrad (unter Berücksichtigung der Rundheit der Erde).
Versuchen Sie, Breiten- / Längen- und Weltkoordinaten mit Python ineinander umzuwandeln
[GPS] Berechnen Sie Entfernung, Azimutwinkel und Höhenwinkel aus GPS-Breiten- und Längengrad mit pyproj
[Rust] Lesen Sie CSV-Daten von Breiten- und Längengraden, um den Abstand zwischen zwei Punkten zu ermitteln
[Python] Lesen von Daten aus CIFAR-10 und CIFAR-100
Ändern Sie den Dezimalpunkt der Protokollierung von, nach.
Abrufen von Daten von MacNote3 und Migrieren zu Write
Laden Sie die Kacheln des Geographical Institute von Längen- und Breitengrad herunter
Versuchen Sie, mit matplotlib aus den Daten von "Schedule-kun" eine Kampfaufzeichnungstabelle zu erstellen.
Informationen zum Standort (Breiten- und Längengrad) erhalten Sie von der Adresse. Geocode in Python ~ Geocoder und Pydams ~
Versuchen Sie, SSH (Exscript) von der Software auf den Router einzustellen
Versuchen Sie, NETCONF (ncclient) von der Software zum Router einzustellen
Senden Sie Protokolldaten vom Server an Splunk Cloud
Versuchen Sie, Twitter-Daten in SPAM und HAM zu unterteilen
Ungefähr 200 Breiten- und Längengraddaten für Krankenhäuser in Tokio
Versuchen Sie, die in Firefox gespeicherten Anmeldedaten zu entschlüsseln
Python - Lesen Sie Daten aus einer numerischen Datendatei, um die verteilte, gemeinsam verteilte Matrix, Eigenwerte und Eigenvektoren zu finden