Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Porównywanie współrzędnych, Zabawa z Google Maps Api i bazą danych
Master Miko
post
Post #1





Grupa: Zarejestrowani
Postów: 530
Pomógł: 0
Dołączył: 15.01.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Witam.

Mam problem z zaprojektowaniem tabeli sql z miejscowościami i ich współrzędnymi. Mogę je zapisywać do bazy danych w dowolnym formacie, ale nie mam pojęcia jak ułożyć te tabele, żeby nie zabić mysql'a.

Problem wygląda tak: posiadam współrzędne punktu (używam Google Maps Api, ale to bez znaczenia) w postaci $x i $y. Teraz chciałbym stworzyć systemik, który podawałby najbliższą miejscowość od tych współrzędnych z tabeli mysql. Powiedzmy szkic tabel wyglądałby tak:


id_dzielnicy | id_miasta | nazwa_dzielnicy | współrzędne x | współrzędne y

id_miasta | nazwa_miasta | dodatkowe opcje np. co do markera (ta tabela mniej istotna

W php mam wartości współrzędnych punktu. ($x i $y)


I teraz problem bo nie wiem, czy tak jest dobrze i nie mam pojęcia jak w sql zabrać się za pytanie, żeby znajdował te najbliższe punkty...

Proszę o pomoc. Jeśli coś niejasne - wyjaśnię.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
konys
post
Post #2





Grupa: Zarejestrowani
Postów: 100
Pomógł: 7
Dołączył: 5.11.2005

Ostrzeżenie: (0%)
-----


Teoretycznie powinno się to liczyć według promienia
  1. SELECT * FROM wspolrzedne ORDER BY SQRT(POW(db_x - punkt_x, 2) + POW(db_y - punkt_y, 2)) LIMIT 1

Chociaż ciut szybciej działa według wartości bezwzględnej różnicy współrzędnych:
  1. SELECT * FROM wspolrzedne ORDER BY ABS(db_x - punkt_x) + ABS(db_y - punkt_y)
Go to the top of the page
+Quote Post
osiris
post
Post #3





Grupa: Zarejestrowani
Postów: 121
Pomógł: 15
Dołączył: 19.07.2007

Ostrzeżenie: (0%)
-----


Jesli nie pobieramy informacji o roznicy odleglosci pomiedzy dwoma punktami (tylko uzywamy jej do sortowania) to mozna pominac pierwiastkowanie dzieki czemu znacznie przyspieszymy obliczenia, czyli zamiast:
  1. SELECT * FROM wspolrzedne ORDER BY SQRT(POW(db_x - punkt_x, 2) + POW(db_y - punkt_y, 2)) LIMIT 1

uzyc:
  1. SELECT * FROM wspolrzedne ORDER BY POW(db_x - punkt_x, 2) + POW(db_y - punkt_y, 2) LIMIT 1


Ten post edytował osiris 19.07.2007, 15:44:43
Go to the top of the page
+Quote Post
morty86
post
Post #4





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 19.02.2008

Ostrzeżenie: (10%)
X----


Cytat(osiris @ 19.07.2007, 15:43:39 ) *
Jesli nie pobieramy informacji o roznicy odleglosci pomiedzy dwoma punktami (tylko uzywamy jej do sortowania) to mozna pominac pierwiastkowanie dzieki czemu znacznie przyspieszymy obliczenia

Należy pamiętać, że Ziemia jest kulą, więc dwa punkty, które są bardzo blisko siebie w okolicach bieguna liczone tą metodą będą od siebie oddalone tak samo jak np. dwa punkty po przeciwnej stronie kuli ziemskiej na równiku. Zapytanie, jakie należy zadać do SQLa jest z tego powodu nieco bardziej skomplikowane:
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 12:37