2010-11-12 11 views
6

मैं कुछ जियोकॉर्डिनेट कैलक्यूशन में सहायता करने के लिए मूवबल-टाइप वेबसाइट का उपयोग कर रहा हूं और यह बहुत उपयोगी रहा है, हालांकि, मेरे पास दो निर्देशांक के बीच मध्य बिंदु की गणना में एक बग है। मेरे परिणाम की उम्मीद के करीब है, लेकिन पर्याप्त बंद नहीं:दो निर्देशांक के बीच भौगोलिक मिडपॉइंट

posA = {47.64570362, -122.14073746} 
posB = {47.64316917, -122.14032175} 

अपेक्षित परिणाम (चल प्रकार कैलकुलेटर से लिया गया) = 47 ° 38'40 "N, 122 ° 08'26" डब्ल्यू = {47.644444, -122.140556} मेरी परिणाम :

private Geocoordinate MidPoint(Geocoordinate posA, Geocoordinate posB) 
{ 
    Geocoordinate midPoint = new Geocoordinate(); 

    double dLon = DegreesToRadians(posB.Longitude - posA.Longitude); 
    double Bx = Math.Cos(DegreesToRadians(posB.Latitude)) * Math.Cos(dLon); 
    double By = Math.Cos(DegreesToRadians(posB.Latitude)) * Math.Sin(dLon); 

    midPoint.Latitude = RadiansToDegrees(Math.Atan2(Math.Sin(DegreesToRadians(posA.Latitude)) + Math.Sin(DegreesToRadians(posB.Latitude)), 
       Math.Sqrt((Math.Cos(DegreesToRadians(posA.Latitude)) + Bx) * (Math.Cos(DegreesToRadians(posA.Latitude))) + Bx) + By * By)); 

    midPoint.Longitude = posA.Longitude + RadiansToDegrees(Math.Atan2(By, Math.Cos(DegreesToRadians(posA.Latitude)) + Bx)); 

    return midPoint; 
} 

मैं निजी तरीकों में से एक जोड़े को डिग्री और रेडियन और वापस बीच रूपांतरण करने के लिए मिल गया है: {49.6054801645915, -122.14052959995759}

यहाँ मेरी कोड है। ईजी।

private double DegreeToRadian(double angle) 
{ 
    return Math.PI * angle/180.0; 
} 

मैं काम नहीं कर सकता कि मेरे परिणाम लैट मूल्य पर दो डिग्री से क्यों बंद हैं। कोई विचार?

धन्यवाद

+0

मेरी ** पूरे ** डिग्री बंद (जैसा कि आप उम्मीद '34.8954' लेकिन' मिल 29.8954') या ** अनुमानित ** (जैसा कि आप उम्मीद '34.8954' लेकिन मिल' 29.7836')? – Brad

+0

मुझे पूरा यकीन नहीं है कि क्या आप पृथ्वी की सतह पर एक साधारण क्षेत्र या एलीस्पोसाइड क्षेत्र के रूप में विचार कर रहे हैं। पिछली बार मैंने डब्ल्यू/लैम्बर्ट के कानून [जावा कार्यान्वयन का उपयोग करके] काम किया था और यह सटीक रूप से काम करना प्रतीत होता था। – anirvan

+0

धन्यवाद। यह लैट पर 2 डिग्री से बाहर है, और लोन बहुत अधिक जगह पर है। मैं इस वेबसाइट पर मिड-पॉइंट गणना के लिए सूत्र का उपयोग कर रहा हूं, सी # http://www.movable-type.co.uk/scripts/latlong.html – Stevieboy84

उत्तर

7

आपने कुछ कोष्ठक गलत रखे हैं। मैंने कोड में जगह चिह्नित की।

private Geocoordinate MidPoint(Geocoordinate posA, Geocoordinate posB) 
{ 
    Geocoordinate midPoint = new Geocoordinate(); 

    double dLon = DegreesToRadians(posB.Longitude - posA.Longitude); 
    double Bx = Math.Cos(DegreesToRadians(posB.Latitude)) * Math.Cos(dLon); 
    double By = Math.Cos(DegreesToRadians(posB.Latitude)) * Math.Sin(dLon); 

    midPoint.Latitude = RadiansToDegrees(Math.Atan2(
       Math.Sin(DegreesToRadians(posA.Latitude)) + Math.Sin(DegreesToRadians(posB.Latitude)), 
       Math.Sqrt(
        (Math.Cos(DegreesToRadians(posA.Latitude)) + Bx) * 
        (Math.Cos(DegreesToRadians(posA.Latitude)) + Bx) + By * By))); 
       // (Math.Cos(DegreesToRadians(posA.Latitude))) + Bx) + By * By)); // Your Code 

    midPoint.Longitude = posA.Longitude + RadiansToDegrees(Math.Atan2(By, Math.Cos(DegreesToRadians(posA.Latitude)) + Bx)); 

    return midPoint; 
} 
+0

:(मैं बस इसे पोस्ट करने वाला था। अच्छा पकड़ – Jere

+0

धन्यवाद !!! मैंने सोचा कि यह कुछ आसान होगा, मुझे नहीं पता कि मुझे यह कैसे याद आया! तुम एक स्टार हो! – Stevieboy84

+0

मुझे खुशी है मैं मदद कर सका :) – PetPaulsen

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