Ich versuche, ein Python-Skript zu erstellen, das eine Adresse als Eingabe nimmt und seinen Breiten- und Längengrad oder Breiten- und Längengrade im Falle mehrerer Übereinstimmungen ausspuckt, ganz wie Nominatim.Welche Datenstruktur soll ich für die Geocodierung verwenden?
also die möglichen Ein- und Ausgänge können sein: -
- In: New York, USA => Out: New York (lat: x1 lon: y1)
- In : in New York => Out: New York (lat: x1 lon: y1)
- In: Pearl Street, New York, USA => Out: Pearl Street (lat: x2 lon: y2)
- In: Pearl Street, USA => Out: Pearl Street (lat: x2 lon: y2), Pearl Street (lat: x3 lon: y3)
- In: Pearl Street => Out: Pearl Street (lat: x2 lon: y2), Pearl Street (lat: x3 lon: y3)
- In: 103 Alkazam, New York, USA => Heraus: New York (lat: x1 lon: y1)
In 6 oben wurde New York zurückgegeben, da kein Platz mit der Adresse 103 Alkazam, New York, USA
gefunden wurde, aber es konnte zumindest New York, USA
gefunden werden.
Ursprünglich dachte ich daran, einen Baum zu erstellen, der die Hierarchiebeziehung darstellt, in der die Geschwister alphabetisch sortiert sind. Es könnte wie gewesen: -
GLOBAL
|
---------------------------------------------
| | ...
USA
---------------
| | ...
CALIFORNIA NEW YORK
| |
----------- -------------
| |.. | |....
PEARL STREET PEARL STREET
Aber das Problem war Benutzer unvollständige Adresse, wie in 2, 4 und 5
So bieten kann, ich als nächstes dachte einen Suchbaum zu verwenden und speichern Sie die vollqualifizierten Adresse in jedem Knoten. Aber das ist auch ziemlich schlecht seit:
- Dies wird hoch redundante Daten in jedem Knoten speichern. Da dies eine wirklich große Datenmenge ist, kommt es auf den Weltraumschutz an.
- Es kann nicht die Tatsache ausnutzen, dass der Benutzer den Suchraum eingegrenzt hat.
Ich habe eine zusätzliche Anforderung. Ich muss Rechtschreibfehler erkennen. Ich denke, das muss als ein separates Problem behandelt werden und kann jeden Knoten als generische Strings behandeln.
aktualisieren 1
Etwas Ausarbeitung. Die Eingabe wäre eine Liste, in der der Artikel auf dem niedrigeren Index dem übergeordneten Artikel übergeordnet ist. und sie können natürlich nicht unmittelbar Eltern oder Kind sein. Für Abfrage 1 wäre die Eingabe also ["USA", "NEW YORK"]
. Es ist also völlig in Ordnung, dass USA, New York
kein Ergebnis liefert.
Der Benutzer sollte in der Lage sein, ein Gebäude zu finden, wenn er die Adresse hat und unsere Daten so detailliert sind.
Update 2 (Weglassen Fall)
Wenn Benutzer Pearl Street, USA
abfragt, so sollten unsere algo der Lage sein, um die Adresse zu finden, da es Pearl Street
hat New York
als Eltern wissen und USA
ist seine Eltern.
Update 3 (Surplus Fall)
Angenommen, der Benutzer-Abfragen für 101 C, Alley A, Pearl Street, New York
. Angenommen, unsere Daten kennen 101 C
aber nicht über Alley A
. Demnach ist 101 C
ein unmittelbares Kind von Pearl Street
. Auch in diesem Fall sollte es möglich sein, die Adresse zu finden.
Sind also die einzigen Dinge mit Standorten Straßen, oder ist es Straßen und Städte/Städte, oder ist es Orte auf Straßen (d. H.63 Pearl Street), Straßen und Städte/Städte oder etwas mehr? – gbulmer
Es kann Wohnung Nr., Straße, Stadt, Staat, Land sein. Irgendein Teil könnte fehlen. – AppleGrew
Ich denke, das Tag [missing-data] wäre hier angebracht. – moooeeeep