![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 379 Pomógł: 0 Dołączył: 18.08.2004 Ostrzeżenie: (0%) ![]() ![]() |
Mam taka sytuacje. Mam w bazie powiedzmy 4 obiekty, ktore sa punktami na mapie o 2 wspolrzednych (liczone wg rownoleznikow i poludnikow):
id wsp1 wsp2 1 54 18 2 50 19 3 33 44 4 51 25 I teraz chce zrobic tak by znalezc obiekt ktory jest najblizszy obiektowi nr 1, czyli robie operacje:
To dla obiektu nr 2 odleglosc 450km I teraz mam pytanie. Jak mozna zrobic to w miare wydajnie by operacja sparwdzila 1500 obiektow, ustawila wyniki wedlugug odleglosci i wybrala ten o najmniejszej odleglosci od punktu a. Liczenie nie musi byc z Ortodroma, bo nie potrzebuje sprawdzic jaka dokladnie odlegosc jest, ale to ktory obiekt jest najblizej -------------------- |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Poczytaj o algorytmie zamiatania płaszczyzny.
Ale wydaje mi się, że w twoim przypadku najlepszym rozwiązaniem byłoby stworzenie tabeli obległości pomiędzy każdym z punktów (albo chociaż z ich częścią). Odpowiednio założyć indexy i masz bardzo szybko wynik. -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Opiekunowie Postów: 3 855 Pomógł: 317 Dołączył: 4.01.2005 Skąd: że ![]() |
Ja stawiam na algorytm Dijkstra. Sprawdź tu.
-------------------- Jak poprawnie zadać pytanie | Jak poprawnie zatytułować wątek
Najczęstsze błędy | Błędy E_NOTICE | PHP FAQ | FAQ PHPedia | SQL-Injection | Logowanie i sesje | Hashowanie haseł | Server - od czego zacząć ? | Manual PHP Alternatywne Forum dla Ekspertów Nie pomagam na PW, nie mam GG |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 379 Pomógł: 0 Dołączył: 18.08.2004 Ostrzeżenie: (0%) ![]() ![]() |
Chlopaki, przemyslalem sprawe i tzreba to zrobic tak, ze:
- wyciagam z bazy tabele z id i wspolrzednymi i dla kazdej z osobna obliczam odleglosc, wrzucajac jendoczesnie id i obliczona odleglosc w tymczasowa tablice - sortuje tablice - wybieram punkt o najmniejszej odleglosci i wpisuje w rekord wzgledem ktorego byla obliczana odleglosc. W ten sposob dla kazdego rekordu odleglosc liczona by byla tylko raz. Co jakies 2-3 meisiace by sie to aktualizowalo i tyle. Tylko teraz mam prosbe o pomoc w napisaniu skrypciku: Mamtak
Jak teraz wyniki z petli wrzucac do tablicy w php? tablica ma 2 kolumny: id i odleglosc wyliczona z powyzszego wzoru -------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 127 Pomógł: 32 Dołączył: 8.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
uśmiałem się, ktoś tu chyba spał na matematyce ![]()
A wyliczanie najbliższego najbliższego punktu można zrobić po prostu w samym tylko zapytaniu SQL... ![]() ![]() Ten post edytował altruista2 17.02.2010, 18:56:53 -------------------- Jeśli Ci pomogłem kliknij pomógł. W ten sposób temat zaświeci się na żółto i użytkownicy którzy pomagają nie będą musieli niepotrzebnie klikać. Dziękuję.
"Pomaganie" |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 379 Pomógł: 0 Dołączył: 18.08.2004 Ostrzeżenie: (0%) ![]() ![]() |
Ktos chyba spal na geografii i nie wie ze ziemia jest kula.
-------------------- |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 127 Pomógł: 32 Dołączył: 8.02.2010 Ostrzeżenie: (0%) ![]() ![]() |
To co za problem zapisywać współrzędne geograficzne jako X,Y?
Wtedy całe zapytanie wygląda tak:
Prawda że proste? Jest tylko problem kuli ale wtedy wykonujemy to samo zapytanie, tylko odejmujemy od $x, $y granicę płaszycny i wykonujemy drugie zapytanie. A jeśli chcesz się trzymać tego :
To wpisz to do mojego zapytania zamiast:
Tutaj masz funkcje matematyczne w MySQL: http://dev.mysql.com/doc/refman/5.0/en/mat...-functions.html Być możę będziesz wtedy musiał w bazie również trzymać szerokości w radianach aby to szybciej działało ![]() Ten post edytował altruista2 17.02.2010, 19:17:17 -------------------- Jeśli Ci pomogłem kliknij pomógł. W ten sposób temat zaświeci się na żółto i użytkownicy którzy pomagają nie będą musieli niepotrzebnie klikać. Dziękuję.
"Pomaganie" |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 94 Pomógł: 16 Dołączył: 24.07.2009 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Może warto zainteresować się tym:
http://dev.mysql.com/doc/refman/5.0/en/spa...extensions.html |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 18.07.2025 - 02:55 |