ugrás a tartalomhoz

GIS avagy tavolsagszamitas MySql-ben

carstepPCE · 2010. Május. 18. (K), 13.06
Udv mindenkinek,

azzal szenvedek, hogy szeretnek egy tarolt eljaras irni mysql 5.1.37-ben, de mindenfele hiba nelkul csak annyi uzenetet kapok vissza minden fronton (log, error message), hogy Couldn't create Stored Procedure

A tarolt eljaras lenyege, hogy koordinata kozotti tavolsagot szamitsak ki, mindezt MySQL alatt. A kerdeses kod igy nez ki:
  1. DELIMITER $$  
  2.   
  3. CREATE PROCEDURE geodist_otp (  
  4.     IN userid INT,  
  5.     IN dist INT  
  6. )   
  7. BEGIN  
  8.     DECLARE mylon DOUBLE;  
  9.     DECLARE mylat DOUBLE;  
  10.     DECLARE lon1 FLOAT;  
  11.     DECLARE lon2 FLOAT;  
  12.     DECLARE lat1 FLOAT;  
  13.     DECLARE lat2 FLOAT;  
  14.     -- get the original lon and lat for the userid  
  15.     SELECT longitude, latitude INTO mylon, mylat FROM users WHERE id=userid LIMIT 1;  
  16.     -- calculate lon and lat for the rectangle:  
  17.     SET lon1 = mylon-dist/ABS(COS(RADIANS(mylat))*69);  
  18.     SET lon2 = mylon+dist/ABS(COS(RADIANS(mylat))*69);  
  19.     SET lat1 = mylat-(dist/69);  
  20.     SET lat2 = mylat+(dist/69);  
  21.     SELECT destination.*, 6537 * 2 * ASIN(SQRT( POWER(SIN((origin.latitude - destination.latitude) * PI()/180 / 2), 2) + COS(origin.latitude * PI()/180) * COS(destination.latitude * PI()/180) * POWER(SIN((origin.longitude - destination.longitude) * PI()/180 / 2), 2) )) AS distance FROM atm_otp destination, users origin WHERE origin.id=userid AND destination.longitude BETWEEN lon1 AND lon2 AND destination.latitude BETWEEN lat1 AND lat2 HAVING distance < dist ORDER BY distance LIMIT 10;  
  22. END $$  
  23. DELIMITER;  
ha valaki le tudna nekem ezt tesztelni egy sajat szerveren, hogy az an MySQL-m bugos e vagy rossz az egesz koncepcio, akkor kerem tegye meg es valaszat varom ide? :)

kiegeszito tablak:
  1. CREATE TABLE IF NOT EXISTS `atm_otp` (  
  2.   `id` int(11) NOT NULL AUTO_INCREMENT,  
  3.   `fulladdress` varchar(300) NOT NULL,  
  4.   `latitude` decimal(10,0) NOT NULL,  
  5.   `longitude` decimal(10,0) NOT NULL,  
  6.   `update_date` datetime NOT NULL,  
  7.   PRIMARY KEY (`id`)  
  8. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1 ;  
  9.   
  10. -- --------------------------------------------------------  
  11.   
  12. --  
  13. -- Table structure for table `users`  
  14. --  
  15.   
  16. CREATE TABLE IF NOT EXISTS `users` (  
  17.   `id` int(11) NOT NULL AUTO_INCREMENT,  
  18.   `device` varchar(300) DEFAULT NULL,  
  19.   `visit` datetime DEFAULT NULL,  
  20.   `latitude` decimal(10,0) DEFAULT NULL,  
  21.   `longitude` decimal(10,0) DEFAULT NULL,  
  22.   PRIMARY KEY (`id`)  
  23. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1 ;  
Udv
Sanyi
 
1

Column count of mysql.proc is wrong. Expected 20, found 16.

jaczkog · 2010. Május. 18. (K), 13.39
Hi,

Én ezt a hibát kaptam:
Column count of mysql.proc is wrong. Expected 20, found 16. The table is probably corrupted
2

Távolság

Poetro · 2010. Május. 18. (K), 13.55
Tudtommal MySQL-ben 4.1 óta van geometria számítás, a Spatial Extensions néven, és eléggé jól is működik, és a MySQL oldalán van rá példa is.
3

...

carstepPCE · 2010. Május. 18. (K), 17.36
arra, amire nekem kell teljeseggel alkalmatlan a Spatial Extensions. De tobb helyen is olvastam, hogy nem igazan alkalmazhato ket gps koordinata kozotti tavolsag szamitasara :(, de ha van jo peldad, akkor szivesen veszem.
...
Hat kicsit jobban korbeneztem, de mukodo peldat nem talaltam erre es sokan irtak, hogy sajnos nem a megfelelo tavolsagszamitast alkalmazza a MySQL, helyette ajanlottak FUNCTION illetve STORED PROCEDURE megoldasokat, de egyiket sem birtam lefuttatni / mukodesre birni. Szintaktikailag rendben van, csak 1307 hibaval elszall, ami egy altalanos hibauzenet tarolj eljarasok es fuggvenyek eseteben.

off
Par adatbaziskezelovel volt mar dolgom, ami tamogatja a tarolt eljarasokat illetve fuggvenyeket, irtam is parat, dehogy ennyire ne mukodjon ez MySQL-ben nem gondoltam volna, very dissapointed, (n)
end off

mod: ich bin ein idiot, nem volt mysql_upgrade lefuttatva

Udv
Sanyi