Odległość od kodu pocztowego

0

Witam, szukam rozwiązania pewnego problemu. Otóż chciałbym dodać na swojej stronie internetowej możliwość wyszukiwania obiektów z bazy danych za pomocą kodu pocztowego. Załóżmy, że mam w swojej bazie 100 obiektów z danymi teleadresowymi w Polsce. Chciałbym aby użytkownik mógł wejść na stronę i wyszukać obiekty w promieniu X kilometrów od kodu pocztowego który poda. Myślałem aby wykorzystać do tego Google Maps Api, jednak nie znalazłem tam takiej funkcjonalności. Czy ktoś ma jakiś pomysł na wykonanie takiego zadania? Pozdrawiam.

2

W Pythonie takie coś idzie napisać z użyciem http://sourceforge.net/projects/py-googlemaps/

Stawiałem aplikację webową na tym module i ładnie czytało dane z map google ;) Całość stała na Google App Engine. Ale myślę, że dałbyś radę to postawić na dowolnym serwerze z obsługą Pythona.

Przykład:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from googlemaps import GoogleMaps

gmaps = GoogleMaps()
directions = gmaps.directions("30-233, Polska", "35-001, Polska") # address, destination
km = float(directions['Directions']['Distance']['meters'])/1000.
time = directions['Directions']['Duration']['seconds']/60

print ("odleglosc: %f km; czas: %d min"%(km,time))

W tym przykładzie dostajemy odległość i czas podróży z Rzeszowa do Krakowa, na podstawie kodów pocztowych. Można to rozbudować o pobranie odległości między podanym kodem pocztowym, a wszystkimi kodami z bazy i odsianie wyników większych niż X kilometrów. Na dłuższą metę, aby przyspieszyć przydałoby się przepisać dane z Google do swojej bazy. Albo w ogóle zrobić skrypt, które wszystkie kody pocztowe w Polsce przeleci i zrzuci do bazy, żeby strona nagminnie nie korzystała z Google.

0

Można to rozbudować o pobranie odległości między podanym kodem pocztowym, a wszystkimi kodami z bazy i odsianie wyników większych niż X kilometrów.

Właśnie nad takim sposobem myślałem, jednak tutaj pojawia się problem - kodów w bazie danych jest kilkadziesiąt tysięcy, więc takie odsiewanie trwałoby wieczność i mocno zamulałoby serwer. Myślałem też nad takim skryptem: użytkownik podaje kod pocztowy, np. 11-111, skrypt dodaje i odejmuje po 1 numerze do kodu sprawdzając w ten sposób okoliczne kody i ich odległość. Przykładowo skrypt sprawdza odległość kodów 11-109, 11-110, 11-112, 11-113, 11-114, i tak dalej ze 20 razy. Jednak ten sposób też nie jest dobry, gdyż kody nie zmieniają się zawsze co 1, czasami zmieniają się o inne liczby, przykładowo jest: 11-111 a następnie 11-120.

Sposobem na "odciążenie" pomysłu z "odsiewaniem" jest klasyfikacja kodów do poszczególnych okręgów, np. kody z przedziału 00-xxx do 09-xxx to okręg warszawski i odsiewanie mogłoby działać tylko w zakresie tego okręgu, jednak to rozwiązanie również nie jest pozbawione wad, bo:

  1. Pomimo podziału na okręgi baza kodów wciąż jest bardzo pokaźna i "ciężka",
  2. Występuje problem pogranicza okręgów - czyli tam gdzie okrąg się kończy wyszukiwanie nie będzie w promieniu koła.

Myślałem jeszcze nad stworzeniem bota który powoli będzie tworzył na podstawie map Google bazę danych odległości od danego kodu (czyli jakie kody pocztowe znajdują się w promieniu np. 10 km od kodu który jest sprawdzany), ale to chyba zbyt czasochłonne, no i baza też byłaby gigantyczna. Sprawa niby prosta, ale wymyślenie rozwiązania stwarza mi wiele problemu :)

0

po prostu pobierz współrzędne geograficzne wszystkich kodów pocztowych (góra 100 000 rekordów - to nie jest dużo), potem w zapytaniu możesz przeliczyć współrzędne na ilość kilometrów i jeszcze w nim pobrać listę okolicznych miast.

tutaj: http://www.kodypocztowe.yoyo.pl/ masz na przykład listę kodów pocztowych z miastami i ulicami
jeden kod jest przypisany do wielu ulic więc ciężko określić "lokalizację" kodu pocztowego - możesz wyliczyć środek obszaru, ale dla takiego zastosowania jak powyżej (znajdowanie miejsc w odległości do 10 km) powinno wystarczyć wzięcie losowego punktu

1 użytkowników online, w tym zalogowanych: 0, gości: 1