Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: odległości między miastami
Forum PHP.pl > Inne > Hydepark
kacper2003
Witam,
na alegro przy wyszukiwaniu mamy możliwość określenia szukania miejscowosci, ktora leży nie więcej niż x kilometrów od nas.
Jako gość podaje wówczas kod pocztowy mojego miasta. Wówczas wyszukiwarka znajduje produkty, które nie leżą w miastach dalej niż zadana odległość. Dziala to szybko

Jak oni to robią? Mają bazę, w ktorej trzymają odleglosci między każdym kodem pocztowym czy jakoś inaczej? Skoro dziala to szybko to wydaje mi sie, iz wlasnie mają kazdy kod z kazdym, ale mogę sie mylić. Może ktoś z Was wie cos wiecej?

z góry dziękuje
Method
kod poocztowy to nie przypadkowy numer.
Na allegro dostepne sa mapy kodow pocztowych zobacz ile tego jest. Wcale nie tak duzo jakby sie wydawało

Wytłuszczone w tabelce zostały kody wydzielone w całości dla głównych miast.
Okręg nr 0 warszawski 00-xxx 01-xxx 02-xxx 03-xxx 04-xxx 05-xxx 06-xxx 07-xxx 08-xxx 09-xxx
Okręg nr 1 olsztyński 10-xxx 11-xxx 12-xxx 13-xxx 14-xxx 15-xxx 16-xxx 17-xxx 18-xxx 19-xxx
Okręg nr 2 lubelski 20-xxx 21-xxx 22-xxx 23-xxx 24-xxx 25-xxx 26-xxx 27-xxx 28-xxx 29-xxx
Okręg nr 3 krakowski 30-xxx 31-xxx 32-xxx 33-xxx 34-xxx 35-xxx 36-xxx 37-xxx 38-xxx 39-xxx
Okręg nr 4 katowicki 40-xxx 41-xxx 42-xxx 43-xxx 44-xxx 45-xxx 46-xxx 47-xxx 48-xxx 49-xxx
Okręg nr 5 wrocławski 50-xxx 51-xxx 52-xxx 53-xxx 54-xxx 55-xxx 56-xxx 57-xxx 58-xxx 59-xxx
Okręg nr 6 poznański 60-xxx 61-xxx 62-xxx 63-xxx 64-xxx 65-xxx 66-xxx 67-xxx 68-xxx 69-xxx
Okręg nr 7 szczeciński 70-xxx 71-xxx 72-xxx 73-xxx 74-xxx 75-xxx 76-xxx 77-xxx 78-xxx
Okręg nr 8 gdański 80-xxx 81-xxx 82-xxx 83-xxx 84-xxx 85-xxx 86-xxx 87-xxx 88-xxx 89-xxx
Okręg nr 9 łódzki 90-xxx 91-xxx 92-xxx 93-xxx 94-xxx 95-xxx 96-xxx 97-xxx 98-xxx 99-xxx
znajac kierunek i odleglosc od miasta satelity od miasta glownego w okregu da rade obliczyc odgleglosc.

Jak zbudowane sa kody też ci powie: http://pl.wikipedia.org/wiki/Kod_pocztowy

Ale można na podstawie kodów pocztowych odczytywać również wspolrzedne geograficzne i obliczac odleglosc.
kacper2003
Dzięki za informacje, przejrze sobie te "mapy".

Cytat
znajac kierunek i odleglosc od miasta satelity od miasta glownego w okregu da rade obliczyc odgleglosc.

hmmm....
zalóżmy ze mamy sytuacje

1 2 3 4

1 - glowne miasto mojego miasta
2 - moje miast
3 - docelowe miast
4 - glowne miasto docelowego miasta
No i odleglosc jest taka:
4-1 - odleglosc od glownych miast
2-1 - odleglosc od mojego miasta do glownego
3-4 - odleglosc od docelowego do glownego

4-1 - 2-1 - 3-4 - odleglosc szukana.
Na tym schemacie widze ze 2 jest po prawej 1 i ze dwa jest po lewej 3 i 4 i wiem jak odejmowwac.
Ale przeciez rozlozenia miast bedą rozne. Skad mam znac te wzajemne kierunki?
Mozna je poznac np. poprzez wspolrzedne geograficzne. ok. ale jak robie wyszukiwarke i wale zapytanie ktore wyszukiwac mi bedzie miasta z zadanej odleglosci to chyba nie bede w zapytaniu sie bawil w jakies warunki i kosmiczne wyliczanie tego w locie w zapytaniu. Allegro tak robi czy jest tu moze jakis sprytny haczyk, ktorego nie widze?
wookieb
A wzor na odleglosc punktow w ukladzie wspolrzednych? To jest to samo. Kodów pocztowych nie jest wcale koszmarnie wielka ilosc wiec odleglosc mozna obliczac bez problemu w locie.
Poza tym bierz uwage ze wyniki takich zapytan moga byc cachowane. Tzn przechowywac w zapytaniu tylko odpowiednie miasta a potem w zapytaniu co do produktow dac "produkty WHERE miasto IN ([tutaj miasta])"
Zobacz sobie wzor na odleglosc 2 punktow w ukladzie wspolrzednych.
kacper2003
ale odleglosc w ukladzie wspolrzednych da nam odleglosc w linii prostej. Oboje wiemy ze w realu linia prosta a faktyczna odleglosc mogą sie "ździebko" różnić. Roznice mogą być dość duze.

Dodatkowo w duzym miescie jedna poczta moze lezec na skraju miasta i nie wiem czy moge zaokrąglac jej wspolrzedne do calego miasta - juz na tym zaokragleniu da nam pare ladnych kilometrow bledu.

Chyba ze dramatyzuje i bledy takie mozna przyjac?
mike
Zacznijmy od tego że na podstawie samych kodów to nic nie osiągniesz.
Nie ma w nich informacji na temat położenia. Musisz zdobyć bazę danych współrzędnych geograficznych dla kodów pocztowych.
Jak ostatnio zbierałem bazę kodów to wyszło mi ok. 22 000, liczbę tą możesz ograniczyć trochę bo większość miast ma kilka kodów ale nie zmienia to faktu, że potrzebujesz współrzędnych.

Jeśli chodzi o liczenie odległości rzeczywistej po drodze to zapomnij o tym. Dane potrzebne to takiej operacji są bardzo drogie (setki tysięcy złotych) a i tak musiałbyś napisać sobie oprogramowanie, które wyszukuje Ci najkrótszą drogę na tych danych.
Pozostaje Ci liczenie w linii prostej.

Cytat(wookieb @ 9.10.2008, 10:10:42 ) *
Zobacz sobie wzor na odleglosc 2 punktow w ukladzie wspolrzednych.
A wiesz że do tego potrzeba ... współrzędnych tongue.gif
wookieb
http://www.bazy.hoga.pl/cennik.asp#bazy
mike
No, kupujesz bazę więc dane masz. Później pozostaje jeszcze zainteresowanie się kartografią.
Tępy wzór na odległość dwóch punktów w prostokątym układzie współrzędnych nie jest dobrym wyjściem bo nie bierze pod uwagę krzywizny Ziemi. Należy skorzystać z odworowania kartograficznego, które uwiarygodni wyniki obliczeń. Najczęściej stosowanym odwzorowaniem kartograficznym w nawigacji jest odwzorowanie Merkatora i tym polecam się zainteresować.

Jednym słowem: królowa nauk żądzi :-)
michalkjp
Cytat(mike @ 9.10.2008, 10:24:05 ) *
A wiesz że do tego potrzeba ... współrzędnych tongue.gif


Współrzędne byłyby mile widziane.

Gdyby mi ktoś mógł jeszcze wytłumaczyć, co chce za pomocą tego osiągnąć. Liczenie odległości między miastami w linii prostej może mieć znaczenie dla transportu lotniczego, ale w transporcie drogowym linie między miastami nie są takie proste.

W miarę dokładną odległość między miastami można by było spróbować wyciągnąć z map Google.


Cytat(mike @ 9.10.2008, 10:24:05 ) *
Tępy wzór na odległość dwóch punktów w prostokątym układzie współrzędnych nie jest dobrym wyjściem bo nie bierze pod uwagę krzywizny Ziemi.

Chyba tylko w transporcie lotniczym wykorzystuje się krzywiznę ziemi – w innych wypadkach chyba nie ma tak dużego znaczenia smile.gif
mike
Cytat(michalkjp @ 9.10.2008, 10:45:59 ) *
Chyba tylko w transporcie lotniczym wykorzystuje się krzywiznę ziemi – w innych wypadkach chyba nie ma tak dużego znaczenia smile.gif
Przez prawie dwa lata pisałem oprogramowanie dla branzy telematycznej i uwierz mi, że nie masz racji tongue.gif
Wszędzie w tych zagadnieniach stosuje się odwzorowania kartograficzne i uwzględnia krzywiznę Ziemi.

A jeśli chodzi o odległości w linii prostej to oczywiste jest, że nie są one precyzyjne ale przynajmniej dają pewne wyobrażenie.
michalkjp
Cytat(mike @ 9.10.2008, 10:52:40 ) *
Przez prawie dwa lata pisałem oprogramowanie dla branzy telematycznej i uwierz mi, że nie masz racji tongue.gif

W telemetrii?




Cytat(mike @ 9.10.2008, 10:52:40 ) *
A jeśli chodzi o odległości w linii prostej to oczywiste jest, że nie są one precyzyjne ale przynajmniej dają pewne wyobrażenie.


Wyobrażenie i owszem, ale bardzo często mylne. Już wolałbym mieć długość drogi bez poprawki na krzywiznę ziemi niż odległość z punktu A do B smile.gif
mike
Cytat(michalkjp @ 9.10.2008, 11:02:45 ) *
W telemetrii?
Telematyka i telemetria to są dwie różne rzeczy.
Doświadczenie, które posiadam jest związane z zagadnieniami telematyki w transporcie. Telemetria to inna bajka.
Cytat(michalkjp @ 9.10.2008, 11:02:45 ) *
Wyobrażenie i owszem, ale bardzo często mylne. Już wolałbym mieć długość drogi bez poprawki na krzywiznę ziemi niż odległość z punktu A do B smile.gif
Funkcjonalności typu "znajdź coś w promieniu X" osiągniesz i "niestety" tyle.
No chyba, że stać Cię na bardzo drogie dane, na podstawie, których obliczysz sobie "prawdziwą" odległość. Tylko czy warto? winksmiley.jpg
michalkjp
Cytat(mike @ 9.10.2008, 11:11:18 ) *
Telematyka i telemetria

Musiałem coś _źle_ wpisać w Google, bo zastanawiałem się czym się zajmowałeś i nie znalazłem nic o telematyce. Pewnie literówka.
wookieb
No wiec jeżeli zależy ci na dokładnej odległości to juz ci bedzie potrzebna baza odleglosci pomiedzy niektorymi miastami. A wtedy bedziesz to wyliczac odpowiednim algorytmem. Chyba ze mike podpowie co innego.
empathon
Proponuję odczytać miejscowość z kodu pocztowego i wyliczyć odległość z pomoc Google Maps API.
wookieb
Cytat(empathon @ 9.10.2008, 12:19:42 ) *
Proponuję odczytać miejscowość z kodu pocztowego i wyliczyć odległość z pomoc Google Maps API.


A jak znajdzie wszystkie miejscowości w jakims tam promieniu??
mike
Cytat(wookieb @ 9.10.2008, 12:26:43 ) *
A jak znajdzie wszystkie miejscowości w jakims tam promieniu??
Pomoc Google > Dyskusje > Mapy > Wyszukiwanie miast położonych w promieniu x od miast A, x - zadany promień w km, A - miasto źródłowe
kacper2003
@mike nie moge skorzystac w wyszukiwaniu z google maps, bo by wyszykiwanie trwalo ruski miesiac.
co innego, gdybym juz wszystkie odleglosci miedzy kazdym miastem mial w bazie (wyliczone na boku przy pomocy google maps), wowczas zapytanie to betka. Ale chyba nie moge tak wszystkiego rzucic do bazy bo sie zapcha?
Ile tych kodow jest? 10tys? to wtedy max kombinacji to 10tys do kwadratu?
empathon
Google API nie jest wcale takie wolne.

10 tys rekordów to pykuś dla bazy.
Zapisujesz odległości dla każdej miejscowości względem jednego wybranego punktu - odległość i miara kątowa. Z tego możesz wyliczyć odległość pomiędzy dowolnymi dwoma punktami czy wybrać miejscowości spełniające odpowiednie kryterium.
kacper2003
10tys to wiem ze pikus.
10tys do kwadratu = 100 mln ... winksmiley.jpg

Cytat
Zapisujesz odległości dla każdej miejscowości względem jednego wybranego punktu - odległość i miara kątowa. Z tego możesz wyliczyć odległość pomiędzy dowolnymi dwoma punktami czy wybrać miejscowości spełniające odpowiednie kryterium.
Nie czaje. w ten sposob wylicze chyba odleglosc miedzy punkem A i B poprzez miasto C. Chyba ze do czegos ma sluzyc ta miara kątowa a ja o czyms nie wiem.
empathon
Cytat(kacper2003 @ 9.10.2008, 13:12:42 ) *
10tys to wiem ze pikus.
10tys do kwadratu = 100 mln ... winksmiley.jpg

W polsce są 892 miasta.

Cytat(kacper2003 @ 9.10.2008, 13:12:42 ) *
Nie czaje. w ten sposob wylicze chyba odleglosc miedzy punkem A i B poprzez miasto C. Chyba ze do czegos ma sluzyc ta miara kątowa a ja o czyms nie wiem.

Podstawy matematyki.
kacper2003
Cytat
W polsce są 892 miasta.
Prawie kazde miasto ma conajmniej po kilka kodow pocztowych, mowiac 10tys mialem na mysli wlasnie kody.
Czy w tych 892 liczysz tez wioski?

No ok, mozna sprowadzic kody do miast i bedzie faktycznie mniej

Cytat
Podstawy matematyki.
Masz racje. zmylil mnie fakt, ze ja myslalem o faktycznej drodze a nie o linii prostej, ktora zapewne ty miales na mysli. No i znowu linia prosta da nam przeklamanie i wracamy do punktu wyjscia.

Orientuje sie ktos jak to dokladnie zrobione jest chociazby na alegro?
athabus
Nie wiem jak jest to na allegro, ale obstawiam że to jednak linia prosta. Odległość po drogach jest dość trudna do obliczenia - popatrz na mapę - nie ma czegoś takiego jak 1 trasa więc trzeba najpierw jakąś trasę wyznaczyć - tu z kolei programy biorą pod uwagę jakość dróg, tępo przejazdu itp. To są dość skomplikowane obliczenia.
Zresztą pytanie czy użytkownik musi znać dokładną odległość po drogach... ale to już zależy od zastosowania.

Jeśli chciałbyś mieć dokładne ilości po drogach to raczej trzeba by stworzyć bazę odległości między miastami/wsiami itp, bo obliczenie w locie odległości po drogach, było by kosmicznym wyzwaniem dla skryptu. Oczywiście wszystko da się zoptymalizować i wszystko da się przyspieszyć, ale taki skrypt byłby i tak zasobożerny - pytanie więc czy na prawdę warto się męczyć czy lepiej przyjąć przelicznik np. że odległość drogowa = 1,2 odległości w linii prostej. Wydaje mi się, że większość użytkowników allegro raczej nie zwraca uwagi czy to faktyczna odległość czy jakieś tam przybliżenie.
bim2
Nie przekombinuj trochę. Każdy i tak patrzy na oko ile kilosów jest od miasta. Jak > 80km to nie jadę, jak mniej to mogę się karnąć. :] I chyba w każdego użytkownika internetu rozumowanie o odległościach dróg bardziej tyczy się lini prostej.
TomASS
Koledzy, a jak odległość liczy google maps? A GPSy samochodowe itp...? Przecież nikt nie trzyma odległości z każdego punktu do każdego innego - wystarczą odległości do sąsiednich kodów pocztowych.... jako że w Polsce na dzień dzisiejszy mamy ok 22 548 kody pocztowe, a każdy z nich ile ma sąsiednich kodów? 5-10! Dajmy 20! wychodzi niedużo - bo 240 000 rekordów. Dodać do tego zmyślny algorytm grafowy (Dijkstra, Bellman, Floyd itp...) i mamy co potrzebujemy.
athabus
TomASS nie wiem jak liczy Google ale gps'y liczą po trasie jaką wyznaczą. W tym przypadku nie ma problemu, bo gps ma wbudowaną mapę i po wyznaczeniu trasy po prostu oblicza jej długość. W przypadku skryptu raczej nie masz mapy więc nie da się wyznaczyć właściwej trasy... Z tego wynika, że najlepszym sposobem są współrzędne geograficzne 2 punktów + trochę matematyki. Zabawa z kodami i sąsiadami imho nie ma sensu bo jest to tylko komplikowanie prostych rzeczy.
kacper2003
No dobra, skoro liczac odleglosc na zasadzie znanej odleglosci do jednego miasta i kątow, to rownie dobrze mozna policzyc odleglosci na podstawie wspolrzednych geograficznych - bedzie prosciej.
W obu przypadkach wyniki będą przyblizone (linia prosta a nie faktyczna odleglosc). Dobrze rozumuje?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.