मेरा लक्ष्य डेटाबेस में आस-पास की इकाइयों को खोजने के लिए mysql POINT (lat, long) का उपयोग करना है। मैं इस ट्यूटोरियल http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL के नीचे कुछ ऐसा करने की कोशिश कर रहा हूं।POINT का उपयोग कर MySQL स्पेक्ट्रियल दूरी - काम नहीं कर रहा
तालिका::
CREATE TABLE mark (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) DEFAULT NULL,
loc POINT NOT NULL,
SPATIAL KEY loc (loc)
) ENGINE=MyISAM;
कुछ परीक्षण-डेटा सम्मिलित करना:
INSERT INTO mark (loc,name) VALUES (POINT(59.388433,10.415039), 'Somewhere 1');
INSERT INTO mark (loc,name) VALUES (POINT(63.41972,10.39856), 'Somewhere 2');
दूरी समारोह की घोषणा:
DELIMITER $$
CREATE FUNCTION `distance`
(a POINT, b POINT)
RETURNS double DETERMINISTIC
BEGIN
RETURN
round(glength(linestringfromwkb(linestring(asbinary(a),
asbinary(b)))));
END $$
DELIMITER;
फ़ंक्शन का उपयोग करने की कोशिश कर यहाँ मैं क्या मिल गया है है पूर्व खोज करने के लिए .:
SELECT name, distance(mark.loc, GeomFromText(' POINT(31.5 42.2) ')) AS cdist
FROM mark
ORDER BY
cdist limit 10;
या:
SELECT DISTINCT
dest.name,
distance(orig.loc, dest.loc) as sdistance
FROM
mark orig,
mark dest
having sdistance < 10
ORDER BY
sdistance limit 10;
समस्या मैं हो रही है: त्रुटि 1367 (22007): अवैध गैर ज्यामितीय 'aswkb (एक @ 0)' पार्स करने के दौरान पाई गई मूल्य, या त्रुटि 1416 (22003): GEOMETRY फ़ील्ड
पर आपके द्वारा भेजे गए डेटा से ज्यामिति ऑब्जेक्ट प्राप्त नहीं हो सकता है, मुझे यह पता लगाना नहीं है कि इसे कैसे हल किया जाए। महत्वपूर्ण बात यह है कि 'दूरी' फ़ंक्शन गतिशील रूप से उपयोग किया जा सकता है। Find the distance between two points in MYSQL. (using the Point Datatype)
यह मेरा mysql संस्करण mysql वर 14.14 Distrib 5.5.23, लिनक्स (x86_64) के लिए उपयोग कर रहा है ReadLine 5.1
आशा किसी विशेषज्ञता मेरी मदद कर सकते हैं:
मैं भी इस समाधान की कोशिश की है। चीयर्स!
कोशिश 'दौर (glength मीटर में आता है (एस्टेक्स्ट (बी)))))) – acraig5075
@ acraig5075 - सुझाव के लिए धन्यवाद, मैं लगभग उसी परिणाम के साथ समाप्त हुआ। – OMA