2009-12-28 28 views
5

Google के मैपिंग एपीआई के बारे में विस्तृत शोध और मजेदार सीखने के बाद, मैं एक डिजिटल एंटीना मानचित्र एप्लिकेशन बना रहा हूं। इस बिंदु पर, परियोजना योजना में अगला कदम Google मानचित्र का मेमोरी-मैप प्रतिकृति बनाना है जो उपयोगकर्ता के पते से इनपुट के आधार पर डिजिटल टीवी स्टेशनों का पता लगा रहा है। इसलिए, मैं Google मानचित्र के केंद्र के असर को बनाने और डेटाबेस परिणाम सेट से एक लैट/एलएनजी बिंदु बनाने के लिए इस गणित कोड का उपयोग कर रहा हूं।मानचित्रण मठ और जावास्क्रिप्ट

मेरा प्रश्न है: मैं डिग्री में असर दिखाने के लिए गणित कैसे पूरा कर सकता हूं?

1.21 
1.10 
1.10 
1.10 
1.10 
2.62 
-0.29 
-1.17 
0.12 
3.04 

var y = Math.sin(longitude-center.lng()) * Math.cos(latitude); 
var x = Math.cos(center.lat())*Math.sin(latitude) - Math.sin(center.lat())*Math.cos(latitude)*Math.cos(longitude-center.lng()); 
var bearing = (Math.atan2(y, x)).toFixed(2); 

मेरी गणना में लापता कुछ करने के लिए वहाँ लगता है:

इस कोड को गणित है कि निम्नलिखित सरणी परिणाम सेट देता है। डीबी टेबल दुनिया के ऊपरी पश्चिमी चतुर्भुज का प्रतिनिधित्व करने के लिए अक्षांश मानों को ऋणात्मक संख्या के रूप में धारण कर रही है।

मेरे गणित को पूरा करने के लिए कोई सुझाव लाखों न्यूरॉन्स को बचाएगा, मैंने पहले से ही एक ट्रिलियन जला दिया है।

var radLat1 = center.lat() * Math.PI/180; 
var radLat2 = latitude * Math.PI/180; 
var radLng1 = center.lng() * Math.PI/180; 
var radLng2 = longitude * Math.PI/180; 

var y = Math.sin(radLng2- radLng1) * Math.cos(radLng2); 
var x = Math.cos(radLat1)*Math.sin(radLat2) -  Math.sin(radLat1)*Math.cos(radLat2)*Math.cos(radLng2-radLng1); 
var bearing = (Math.atan2(y, x)).toFixed(2); 

यूआरएल परीक्षण परियोजना स्थल के लिए: click here

पृष्ठ के तल पर div एक परिणाम सेट लौटे है

रेडियन सुझाव डिग्री ले रहा है, मैं जावास्क्रिप्ट कोड संशोधित कर लिया है 2 सरणी से, पहले दूरी धारण करने वाला और दूसरा असर माप धारण करता है।

+0

धन्यवाद जस्टिन – rjsteward

उत्तर

6

Google मानचित्र डिग्री में निर्देशांक देता है। बेशक, ट्रिग कार्यों रेडियंस की उम्मीद है। तो अगर आप पहले रेडियंस में परिवर्तित करने के लिए चाहता हूँ:

function deg_to_rad(degrees) { 
    return degrees * Math.PI/180; 
} 

आपका गणित जैसे कि यह the Haversine formula करने के लिए कोशिश कर रहा है लग रहा है। मुझे आपके कोड को जांचने के लिए जावास्क्रिप्ट कार्यान्वयन here मिला है।

आप the FCC's DTV engineering maps के खिलाफ अपने परिणाम देख सकते हैं।

+0

हाँ, मैं एफसीसी की साइट पर ध्यान दिया है। धन्यवाद। – rjsteward

3

सेठ की मदद से, और मेरी शुरुआती सुबह मस्तिष्क का उपयोग करके (हाँ, मैं मध्यम आयु वर्ग का हूं और मैं सुबह में चालाक हूं)।

here का लिंक, जिसका मैं अध्ययन कर रहा था, और सेठ का उल्लेख किया गया, कुंजी है। मैंने ब्लॉग एंट्री पर जेएस फाइल से कोड का इस्तेमाल किया और कोड को ओओ जावास्क्रिप्ट अवधारणा से दूर एक स्क्रिप्ट पर एक स्क्रिप्ट में खराब कर दिया।

var lat1 = center.lat(); 
var lon1 = center.lng(); 
var lat2 = latitude; 
var lon2 = longitude; 

lat1 = lat1 * Math.PI/180; 
lat2 = lat2 * Math.PI/180; 
var dLon = (lon2-lon1) * Math.PI/180; 
var y = Math.sin(dLon) * Math.cos(lat2); 
var x = Math.cos(lat1)*Math.sin(lat2) - Math.sin(lat1)*Math.cos(lat2)*Math.cos(dLon); 

var bearing = Math.atan2(y, x) * 180/Math.PI; 
    if (bearing < 0){ 
      bearing = bearing + 360; 
    } 

    bearing = bearing.toFixed(0); 

stationDistance.push(distance.toFixed(1)); 
stationBearing.push(bearing); 

मैं डेमो गूगल मानचित्र here चला रहा हूँ:

यह मेरा समाधान है।

सहायता के लिए धन्यवाद और अब मैं तर्क कोड पर जा सकता हूं जो मेरे ग्राहक के ग्राहक के लिए this url पर सही उत्पाद की सिफारिश करेगा।

stackoverflow चट्टानों ....

रॉबर्ट

+0

त्रिकोणमिति चट्टानें! – Seth

+0

धन्यवाद इससे मुझे सही असर पाने में मदद मिली। –

+0

http://martinhansen.no/2011/04/14/getting-the-bearingheading-betweet-2-coordinates/ –

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