Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc
Comunitatea PHP Romania
 

Zip radius
Vezi mesajul original

 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> PHP Avansat
Subiectul anterior :: Subiectul următor  
Autor Mesaj
un_guru



Data înscrierii: 25/Iul/2004
Mesaje: 153
Locație: Miecurea Ciuc

Trimis: Mie Oct 27, 2004 11:00 pm    Titlul subiectului: Zip radius  

Am o baza de date ce contine codurile zip ale localitatilor din us, de forma
(zip, longitudin, latitudine, oras,...) ...si vreu sa caut toate orasele care se afla la o anumita distanta de un oras(zip) dat.
Stiu sa-l fac in php, adica sa pun php-ul sa calculeze, dar nu e deloc eficient ... peste 40000 de inregistrari. Vreu sa fac calculul in mysql intr-un singur query. Sau poate aveti alte solutii ...
Dau o bere :wink:
Sus  
ExcalIbvr



Data înscrierii: 02/Mai/2004
Mesaje: 1107
Locație: Oradea

Trimis: Joi Oct 28, 2004 8:20 am    Titlul subiectului:  

Cum te-ai gandit tu sa calculezi? Ti-ai facut o structura de graf si folosesti algoritmi dedicati sau babeste?
Sus  
arond



Data înscrierii: 11/Mar/2004
Mesaje: 580
Locație: 127.0.0.1

Trimis: Joi Oct 28, 2004 1:01 pm    Titlul subiectului:  

Problema se reduce la a putea exprima distanta(latitudine1,longitudine1, latitudine2,longitudine2) intr-o expresie SQL.

S-ar putea sa te ajute MySQL spatial extensions (http://dev.mysql.com/doc/mysql/en/Spatial_extensions_in_MySQL.html).

De asemenea, daca-ti permit conditiile, poti folosi MySQL 5.0 - se pot crea stored procedures/functions -> definesti functia distanta() cu manuta ta pentru ca apoi sa o folosesti in query.

A treia idee ar fi sa folosesti o structura arborescenta, gen BSP (binary space partitioning) prin care poti sa elimini repede toate punctele care nu-s intr-un patrat cu centrul in punctul central si de latura 2*r, unde r e raza cercului de interes... dupa care sa procesezi doar punctele din patratul respectiv (asta iti va reduce mult numarul de calcule necesare). Cauta dupa engine-uri grafice 3d (acolo vei gasi informatii detaliate despre BSP).

Numa' bune.
Sus  
stealth



Data înscrierii: 21/Iun/2004
Mesaje: 304
Locație: Timisoara

Trimis: Vin Oct 29, 2004 12:29 pm    Titlul subiectului:  

SELECT oras FROM tabel WHERE SQRT(POWER((69.1*(latitudine+tabel.latitudine)),2)+POWER((53*(longitudine+tabel.longitudine)),2))=distanta;

tabel=tabelul tau.
latitudine = latitudinea de referinta.
longitudine= longitudinea de referinta.

NU AM TESTAT. Teoretic ar trebui sa mearga. Asta e formula :D.
Pentru o mai mare acuratete poti incerca asa:

SQRT(POWER((69.1*(latitudine-tabel.latitudine)),2)+POWER((53*(longitudine-tabel.longitudine)* COS(tabel.latitudine/57.3)),2))=distanta;
Sus  
un_guru



Data înscrierii: 25/Iul/2004
Mesaje: 153
Locație: Miecurea Ciuc

Trimis: Vin Oct 29, 2004 3:45 pm    Titlul subiectului:  

am reusit:
an style="color: #000000"><?php SELECT city,zip FROM zip_codes  where (DEGREES(acos(sin(RADIANS($latitudine)) * sin(RADIANS(latitude)) + cos(RADIANS($latitudine)) * cos(RADIANS(latitude)) * cos(RADIANS($longitudine -longitude))))*69.09)<50  GROUP BY city LIMIT 0,100; 
$latitudine, $longitudine - latitudine,longitudine de referinta
latitude, longitude - campurile respective din baza de date
daca intreaba cineva, baza de date se descarca gratis de la :
http://www.cfdynamics.com/cfdynamics/zipbase/zip_codes.zip
Sus  
PHPRomania Bot
Bot Member


Data înscrierii: 27/Dec/2007
Mesaje: 1
Locaţie: Server Google
Trimis: Mie Dec 26, 2007 7:01 pm   Titlul subiectului: Ad  

Sus  
 
       Pagina de start a forumului Forum PHP Romania - Discutii despre PHP, MySQL, Javascript, AJAX, etc -> PHP Avansat
Pagina 1 din 1


Powered by phpBB 2.0.22 © 2001, 2002 phpBB Group
Varianta în limba română: Romanian phpBB online community