2010-05-28 15 views
14

मैं पृथ्वी की सतह में 2 बिंदुओं के बीच मीटर में लंबाई प्राप्त करना चाहता हूं। लेकिन GLength विधि एक अप्रत्याशित मूल्यMySQL GLength विधि द्वारा लौटाई गई इकाई क्या है?

http://dev.mysql.com/doc/refman/5.0/en/geometry-property-functions.html#function_glength

SELECT GLength(GeomFromText(
    'LINESTRING(-67.8246 -10.0073,-67.8236 -10.0082)', 4326)) 

वास्तविक परिणाम देता है

0.00134536240471071 

की उम्मीद में मूल्य मीटर:

147 

उत्तर

2

मैं एक स्रोत नहीं मिला है, लेकिन मैं इस विधि के साथ खेल रहा था और मैंने निष्कर्ष निकाला कि परिणाम मैं डब्ल्यूकेटी में इस्तेमाल एक ही इकाई में दिया गया है।

और दूरी प्लानर निर्देशांक में गणना की जाती है। एसआरआईडी को ध्यान में नहीं रखा जाता है।

+1

मुझे खेद है कि मैं इसके लिए नया हूं, लेकिन क्या हम इस 0.00134536240471071 को प्रश्न के अनुसार अपेक्षित परिणाम 147 में परिवर्तित कर सकते हैं? –

3

1 डिग्री (आपकी इनपुट इकाई) ~ = 69 मील। इसलिए, यदि आप अपने परिणामों को 69 मील तक गुणा करते हैं और फिर मीटर में कनवर्ट करते हैं, तो आपको लगभग 14 9 मीटर मिलते हैं। बिल्कुल वही नहीं जो आपने अपेक्षित था लेकिन बहुत करीब था। बेशक मुझे नहीं लगता कि सटीक रूप से दुनिया की गोलाकार प्रकृति को पुन: उत्पन्न करता है, लेकिन शायद मैं गलत हूं।

+1

नहीं, यह दुनिया की गोलाकार प्रकृति को पुन: पेश नहीं करता है। यदि आप इस विधि से ध्रुवों के पास दूरी को परिवर्तित करते हैं तो आपको अस्वीकार्य मान मिलेंगे। –

+0

यह मेरे लिए काफी सटीक है! http://geography.about.com/library/faq/blqzdistancedegree.htm – tinybyte

4

मुझे लगता है कि ओपी के लिए यह लगभग 3 साल बहुत देर हो चुकी है, लेकिन एक समान विषय पर शोध करते समय मैं इस प्रश्न में हुआ, इसलिए यहां मेरा कल्पनीय मूल्य है।

www.movable-type.co.uk/scripts/latlong.html के अनुसार पृथ्वी की सतह पर दूरी की गणना करने के 3 तरीके हैं, ये सबसे आसान से सबसे जटिल (और इस प्रकार से कम से कम सटीक) तक हैं: इक्विप्रैंग्युलर अनुमान, कोसाइन के गोलाकार कानून और हावर्सिन फॉर्मूला। साइट जावास्क्रिप्ट भी प्रदान करता है।


function _lineDistanceC(lat1, lon1, lat2, lon2) { 
    var R = 6371; // km 
    lat1 = lat1.toRad(); 
    lon1 = lon1.toRad(); 
    lat2 = lat2.toRad(); 
    lon2 = lon2.toRad(); 
    var x = (lon2-lon1) * Math.cos((lat1+lat2)/2); 
    var y = (lat2-lat1); 
    return Math.sqrt(x*x + y*y) * R; 
} 

यह एक एसक्यूएल बराबर पर मेरे प्रयास है:: इस Equirectangular सन्निकटन के लिए समारोह है


drop function if exists lineDistanceC; 
delimiter // 
CREATE FUNCTION lineDistanceC (la1 DOUBLE, lo1 DOUBLE, la2 DOUBLE, lo2 DOUBLE) RETURNS DOUBLE 
BEGIN 
    SET @r = 6371; 
    SET @lat1 = RADIANS(la1); 
    SET @lon1 = RADIANS(lo1); 
    SET @lat2 = RADIANS(la2); 
    SET @lon2 = RADIANS(lo2); 
    SET @x = (@[email protected]) * COS((@[email protected])/2); 
    SET @y = (@lat2 - @lat1); 
    RETURN (SQRT((@x*@x) + (@y*@y)) * @r); 
END 
// 
delimiter ; 

मैं पता नहीं इस सूत्र है कैसे सही है, लेकिन साइट बहुत विश्वसनीय और निश्चित रूप से लायक लगता है अधिक जानकारी के लिए एक यात्रा। प्रश्न में निर्देशांक का उपयोग करते हुए, उपर्युक्त जावास्क्रिप्ट और एसक्यूएल से परिणाम (किलोमीटर में) 0.14834420231840376 और 0.1483442023182845 हैं, जो उन्हें मिलीमीटर के अंश के समान बनाता है, लेकिन उत्सुकता से, 147 मीटर ओपी की अपेक्षा नहीं थी। का आनंद लें।

+0

यह भौगोलिक स्थानों के बीच दूरी निर्धारित करने के लिए मैंने पाया है कि यह सबसे सटीक SQL फ़ंक्शन है। मैं बस अपने POINT डेटा फ़ील्ड पर एक्स (फ़ील्डनाम), वाई (फ़ील्डनाम) का उपयोग कर रहा हूं ताकि समारोह में लेट/लोन भेज सकें। – DaveK

0

अक्षांश की डिग्री में, लगभग 6 9 मील है। देशांतर को देखते हुए, प्रति डिग्री लगभग 49 मील की दूरी पर है। जब मैं एनवाईसी और लंदन के बीच दूरी की गणना करने की कोशिश कर रहा हूं तो सही संख्या 49 है।

राउंड का चयन करें (जीएलएंडेंथ (जियोमफ्रॉमटेक्स्ट ('लाइनस्ट्रिंग (40.756054 -73.986951,51.5001524 -0.1262362)')) * 4 9;

संबंधित मुद्दे