Próbuję utworzyć skrypt w języku Python, który przyjmie adres jako dane wejściowe i wypisze jego szerokość i długość geograficzną lub szerokości i długości w przypadku wielu dopasowań, podobnie jak Nominatim.Którą strukturę danych należy użyć do geokodowania?
Tak, to możliwe wejścia i wyjścia mogą być: -
- w: Nowym Jorku, USA => Out: New York (łac: x1 lon: y1)
- W : New York => Out: New York (łac: x1 lon: y1)
- w: Pearl Street, Nowy Jork, USA => Out: Pearl Street (łac: x2 lon: y2)
- w: Pearl Street, USA => Out: Pearl Street (łac: x2 lon: y2), Pearl Street (łac: x3 lon: y3)
- w: Pearl Street => Out: Pearl Street (łac: x2 lon: y2), Pearl Street (łac: x3 lon: y3)
- w: 103 Alkazam, Nowy Jork, USA => Out: Nowy Jork (lat: x1 dług: y1)
W 6 powyżej, Nowy Jork został zwrócony, ponieważ nie znaleziono żadnego miejsca o adresie 103 Alkazam, New York, USA
, ale mógł przynajmniej znaleźć New York, USA
.
Początkowo myślałem o stworzeniu drzewa reprezentującego relację hierarchiczną, w której rodzeństwo jest sortowane alfabetycznie. Mogło być tak: -
GLOBAL
|
---------------------------------------------
| | ...
USA
---------------
| | ...
CALIFORNIA NEW YORK
| |
----------- -------------
| |.. | |....
PEARL STREET PEARL STREET
Ale problem był użytkownik może dostarczyć niepełny adres jak w 2, 4 i 5.
Więc następny myśli używając drzewa wyszukiwania i przechowywać w pełni kwalifikowana adres w każdym węźle. Ale to też jest bardzo złe, ponieważ: -
- Spowoduje to przechowywanie wysoce nadmiarowych danych w każdym węźle. Ponieważ będzie to naprawdę duże dane, więc ochrona przestrzeni ma znaczenie.
- Nie będzie w stanie wykorzystać faktu, że użytkownik zawęził obszar wyszukiwania.
Mam jedno dodatkowe wymaganie . Muszę wykryć błędy pisowni. Sądzę, że trzeba będzie traktować je jako osobny problem i traktować każdy węzeł jako generyczne łańcuchy.
Aktualizacja 1
Trochę opracowanie. Dane wejściowe byłyby listą, w której pozycja na niższym indeksie jest elementem nadrzędnym elementu o wyższym indeksie; i oczywiście mogą, ale nie muszą być bezpośrednim rodzicem lub dzieckiem. Tak więc dla zapytania 1 dane wejściowe to ["USA", "NEW YORK"]
. Tak więc idealnie jest, że USA, New York
nie zwraca wyniku.
Użytkownik powinien mieć możliwość zlokalizowania budynku, jeśli ma on adres, a nasze dane są tak szczegółowe.
Update 2 (Pominięcie Case)
Jeśli użytkownik pyta Pearl Street, USA
, więc nasz algo powinien być w stanie zlokalizować adres ponieważ wie Pearl Street
ma New York
Jako rodzic i USA
jest jego rodzicem.
Update 3 (nadwyżka Case)
Załóżmy zapytań użytkowników dla 101 C, Alley A, Pearl Street, New York
. Załóżmy również, że nasze dane znają 101 C
, ale nie o Alley A
. Zgodnie z nim 101 C
jest bezpośrednim dzieckiem Pearl Street
. Nawet w tym przypadku powinno być możliwe zlokalizowanie adresu.
Czy są więc jedyne rzeczy z ulicami lokalizacji, czy to są ulice i miasta/miasta, czy też są ulokowane na ulicach (np.63 Perłowa ulica), ulice i miasta/miasta, czy coś więcej? – gbulmer
Może to być mieszkanie nr, ulica, miasto, stan, kraj. Brakuje jakiejkolwiek części. – AppleGrew
Myślę, że tag [missing-data] byłby tutaj odpowiedni. – moooeeeep