![]() |
![]() ![]() |
![]() |
![]()
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.
|
|
|
![]()
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 (IMG:style_emoticons/default/biggrin.gif)
A wyliczanie najbliższego najbliższego punktu można zrobić po prostu w samym tylko zapytaniu SQL... (IMG:style_emoticons/default/smile.gif) (IMG:style_emoticons/default/smile.gif) Ten post edytował altruista2 17.02.2010, 18:56:53 |
|
|
![]()
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 (IMG:style_emoticons/default/smile.gif) Ten post edytował altruista2 17.02.2010, 19:17:17 |
|
|
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 00:31 |