Tôi đang cố gắng tạo một tập lệnh Python sẽ lấy địa chỉ làm đầu vào và sẽ nhổ ra vĩ độ và kinh độ của nó, hoặc vĩ độ và kinh độ trong trường hợp có nhiều kết quả khớp, giống như Nominatim.Tôi nên sử dụng cấu trúc dữ liệu nào cho mã hóa địa lý?
Vì vậy, đầu vào và đầu ra có thể là: -
- Trong: New York, Hoa Kỳ => Out: New York (lat: x1 lon: y1)
- Trong : New York => Out: New York (lat: x1 lon: y1)
- Trong: đường Pearl, New York, USA => Out: Pearl Street (lat: x2 lon: y2)
- Trong: đường Pearl, USA => Out: Pearl Street (lat: x2 lon: y2), Pearl Street (lat: x3 lon: y3)
- Trong: Pearl Street => Out: Pearl Street (lat: x2 lon: y2), Pearl Street (lat: x3 lon: y3)
- Trong: 103 Alkazam, New York, USA => Out: New York (lat: x1 lon: y1)
Trong 6 ở trên, New York đã được trả lại vì không tìm thấy địa chỉ nào với địa chỉ 103 Alkazam, New York, USA
, nhưng ít nhất có thể tìm thấy New York, USA
.
Ban đầu tôi nghĩ đến việc xây dựng một cây đại diện cho mối quan hệ phân cấp nơi anh chị em được sắp xếp theo thứ tự bảng chữ cái. Nó có thể là như sau: -
GLOBAL
|
---------------------------------------------
| | ...
USA
---------------
| | ...
CALIFORNIA NEW YORK
| |
----------- -------------
| |.. | |....
PEARL STREET PEARL STREET
Nhưng vấn đề là người dùng có thể cung cấp địa chỉ không đầy đủ như trong 2, 4 và 5.
Vì vậy, tôi tiếp theo nghĩ của việc sử dụng một cây tìm kiếm và lưu trữ các đầy đủ địa chỉ trong mỗi nút. Nhưng điều này cũng khá tệ vì: -
- Điều này sẽ lưu trữ dữ liệu dư thừa cao trong mỗi nút. Vì đây sẽ là một dữ liệu thực sự lớn nên vấn đề bảo tồn không gian.
- Nó sẽ không thể tận dụng thực tế là người dùng đã thu hẹp không gian tìm kiếm.
Tôi có một yêu cầu bổ sung . Tôi cần phát hiện lỗi chính tả. Tôi đoán rằng sẽ phải được xử lý như một vấn đề riêng biệt và có thể coi mỗi nút là các chuỗi chung chung.
Cập nhật 1
Một xây dựng ít. Dữ liệu đầu vào sẽ là một danh sách, trong đó mục trên chỉ mục dưới là phụ huynh của mục trong chỉ mục cao hơn; và tất nhiên họ có thể hoặc không thể là cha mẹ hoặc con cái ngay lập tức. Vì vậy, đối với truy vấn 1, đầu vào sẽ là ["USA", "NEW YORK"]
. Vì vậy, nó là hoàn toàn tốt đẹp mà USA, New York
trả về không có kết quả.
Người dùng có thể định vị tòa nhà nếu anh ta có địa chỉ và dữ liệu của chúng tôi rất chi tiết.
Cập nhật 2 (lậu Case)
Nếu người dùng truy vấn Pearl Street, USA
, vì vậy algo của chúng tôi sẽ có thể xác định vị trí địa chỉ vì nó biết Pearl Street
có New York
như phụ huynh và USA
là mẹ của nó.
Cập nhật 3 (Thặng dư Trường hợp)
Giả sử các truy vấn người dùng cho 101 C, Alley A, Pearl Street, New York
. Ngoài ra giả sử dữ liệu của chúng tôi biết là 101 C
nhưng không biết về Alley A
. Theo số 101 C
là con ngay lập tức của Pearl Street
. Ngay cả trong trường hợp này, nó sẽ có thể xác định vị trí địa chỉ.
Vì vậy, đó là những điều duy nhất với các đường phố địa điểm, hoặc là đường phố và thị trấn/thành phố hoặc nằm trên đường phố (tức là63 Pearl đường phố), đường phố và thị trấn/thành phố, hoặc một cái gì đó nhiều hơn? – gbulmer
Nó có thể bằng phẳng, đường phố, thị trấn/thành phố, tiểu bang, quốc gia. Bất kỳ phần nào có thể bị thiếu. – AppleGrew
Tôi nghĩ rằng thẻ [thiếu dữ liệu] sẽ thích hợp ở đây. – moooeeeep