2011-01-11 18 views
23

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

midPoint(12.870672,77.658964,12.974831,77.60935); 
    public static void midPoint(double lat1,double lon1,double lat2,double lon2) 
    { 
    double dLon = Math.toRadians(lon2-lon1); 
     double Bx = Math.cos(lat2) * Math.cos(dLon); 
     double By = Math.cos(lat2) * Math.sin(dLon); 
     double lat3 = Math.atan2(Math.sin(lat1)+Math.sin(lat2),Math.sqrt((Math.cos(lat1)+Bx)*(Math.cos(lat1)+Bx) + By*By)); 
     double lon3 = lon1 + Math.atan2(By, Math.cos(lat1) + Bx); 
     System.out.print(lat3 +" " + lon3); 
    } 

दिया जाता है मुझे यकीन है कि whethe dLon सही है या नहीं नहीं कर रहा हूँ है। तो कृपया मुझे इसे समझने में लोगों की मदद करें। पीएसआई को मिडपॉइंट

उत्तर

62

आपको रेडियंस में कनवर्ट करने की आवश्यकता है। यह निम्नलिखित में बदलें:

public static void midPoint(double lat1,double lon1,double lat2,double lon2){ 

    double dLon = Math.toRadians(lon2 - lon1); 

    //convert to radians 
    lat1 = Math.toRadians(lat1); 
    lat2 = Math.toRadians(lat2); 
    lon1 = Math.toRadians(lon1); 

    double Bx = Math.cos(lat2) * Math.cos(dLon); 
    double By = Math.cos(lat2) * Math.sin(dLon); 
    double lat3 = Math.atan2(Math.sin(lat1) + Math.sin(lat2), Math.sqrt((Math.cos(lat1) + Bx) * (Math.cos(lat1) + Bx) + By * By)); 
    double lon3 = lon1 + Math.atan2(By, Math.cos(lat1) + Bx); 

    //print out in degrees 
    System.out.println(Math.toDegrees(lat3) + " " + Math.toDegrees(lon3)); 
} 
+0

धन्यवाद आप अपनी मदद के लिए :-) – Allwyn

+0

सूत्र के लिए धन्यवाद। ! –

+0

हाय @ डोगबेन मुझे एक मदद की ज़रूरत है। http://stackoverflow.com/questions/11758582/find-if-the-current-location-is-along-a-straight-line-drawn-between-two-points – RVG

1

के अक्षांश और देशांतर को खोजने की आवश्यकता है, आपको रेडियंस को अन्य सूत्रों में उपयोग किए जाने वाले लैट और लॉन मानों को भी परिवर्तित करने की आवश्यकता है। आप इसे पेज के नीचे के कोड ~ 3/5 वें कोड में देख सकते हैं। सुराग कोसाइन दूरी सूत्र के गोलाकार कानून के अंत में दिया गया था:

(नोट यहाँ और बाद के सभी कोड के टुकड़े में है कि, सादगी के लिए मैं रेडियंस में डिग्री से रूपांतरण दिखाई नहीं है, पूरा संस्करणों के लिए नीचे देखें)।

-1

मेरे पिछले काम मैं एक ट्रैकिंग मॉड्यूल बना दिया है और मैं इस सूत्र का उपयोग कर रहा था 2 निर्देशांकों के बीच दूरी की गणना करने के लिए।

//Location lat and lon 
double locLat = -23.548333; 
double locLon = -46.636111; 

//Destination lat and lon 
double dstLat = -22.902778; 
double dstLon = -43.206667; 

double arcoAB = 90 - (dstLat); 
double arcoAC = 90 - (locLat); 

double difLon = locLon - (dstLon); 

double cosA = Math.cos(Math.toRadians(arcoAC)) * Math.cos(Math.toRadians(arcoAB)) + Math.sin(Math.toRadians(arcoAC)) * Math.sin(Math.toRadians(arcoAB)) * Math.cos(Math.toRadians(difLon)); 
double acosCosA = Math.toDegrees(Math.acos(cosA)); 

double raio = 2 * Math.PI * 6371; 
double distance = (raio * acosCosA)/360; 

return distance; //Distance in KM, convert to anything else (miles, meters..) if you need.. 

आप 2.

आह से मध्य दूरी विभाजित बिंदु प्राप्त कर सकते हैं, यह एक और सूत्र भी काम करता है:

double dLat = Math.toRadians(dstLat - locLat); 
double dLon = Math.toRadians(dstLon - locLon); 

double a = Math.sin(dLat/2) * Math.sin(dLat/2) 
      + Math.cos(Math.toRadians(locLat)) * Math.cos(Math.toRadians(dstLat)) 
      * Math.sin(dLon/2) * Math.sin(dLon/2); 
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 
double d = 6371 * c; 

return d; //Distance in KM 
+1

लेकिन मुझे अक्षांश और देशांतर की आवश्यकता है मध्यबिंदु उसको कैसे करे? – Allwyn

+0

@scooby क्या आपको इसके लिए कोई समाधान मिला? – JgdGuy

4

Android Google Maps Utilities साथ और भी आसान:

LatLngBounds bounds = new LatLngBounds(start, dest); 
bounds.getCenter(); 
+0

अच्छी तरह से काम करता है, और मुझे कुछ कोडिंग बचाया। धन्यवाद। – dazed

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