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:

DELIMITER $$

CREATE PROCEDURE geodist_otp (
	IN userid INT,
	IN dist INT
) 
BEGIN
	DECLARE mylon DOUBLE;
	DECLARE mylat DOUBLE;
	DECLARE lon1 FLOAT;
	DECLARE lon2 FLOAT;
	DECLARE lat1 FLOAT;
	DECLARE lat2 FLOAT;
	-- get the original lon and lat for the userid
	SELECT longitude, latitude INTO mylon, mylat FROM users WHERE id=userid LIMIT 1;
	-- calculate lon and lat for the rectangle:
	SET lon1 = mylon-dist/ABS(COS(RADIANS(mylat))*69);
	SET lon2 = mylon+dist/ABS(COS(RADIANS(mylat))*69);
	SET lat1 = mylat-(dist/69);
	SET lat2 = mylat+(dist/69);
	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;
END $$
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:

CREATE TABLE IF NOT EXISTS `atm_otp` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fulladdress` varchar(300) NOT NULL,
  `latitude` decimal(10,0) NOT NULL,
  `longitude` decimal(10,0) NOT NULL,
  `update_date` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=1 ;

-- --------------------------------------------------------

--
-- Table structure for table `users`
--

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `device` varchar(300) DEFAULT NULL,
  `visit` datetime DEFAULT NULL,
  `latitude` decimal(10,0) DEFAULT NULL,
  `longitude` decimal(10,0) DEFAULT NULL,
  PRIMARY KEY (`id`)
) 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