2011-03-29 12 views
10

मैं एक तीर आदेश एक विशिष्ट स्थान की ओर इंगित करने के लिए ओरिएंटेशन सेंसर का उपयोग करता है को लागू करने की कोशिश कर रहा हूँ की ओर इंगित करने के लिए। Google Places इस तीर को प्रत्येक स्थान के लिए ListView में लागू करता है।उन्मुखीकरण सेंसर का उपयोग करते हुए एक विशिष्ट स्थान

मैं दिगंश पाने में कामयाब रहे है, लेकिन एक स्थान को देखते हुए, मैं कोण की आवश्यकता की गणना करने के लिए आगे बढ़ना करने के लिए कैसे पता नहीं है। इसके अलावा, मुझे वास्तविक उत्तर और चुंबकीय उत्तर से रूपांतरण करने की आवश्यकता है। क्या किसी के पास इस तरह के कार्यान्वयन का एक उदाहरण है?

अग्रिम धन्यवाद।

उत्तर

22

मैं इसे हल किया।

float azimuth = // get azimuth from the orientation sensor (it's quite simple) 
Location currentLoc = // get location from GPS or network 
// convert radians to degrees 
azimuth = Math.toDegrees(azimuth); 
GeomagneticField geoField = new GeomagneticField(
      (float) currentLoc.getLatitude(), 
      (float) currentLoc.getLongitude(), 
      (float) currentLoc.getAltitude(), 
      System.currentTimeMillis()); 
azimuth += geoField.getDeclination(); // converts magnetic north to true north 
float bearing = currentLoc.bearingTo(target); // (it's already in degrees) 
float direction = azimuth - bearing; 

आप दिशा को इंगित करने के एक तीर या कुछ और आकर्षित करने के लिए जा रहे हैं, canvas.rotate (-direction) का उपयोग करें। हम नकारात्मक तर्क देते हैं क्योंकि कैनवास घूर्णन विरोधी घड़ी के होते हैं।

+3

आप डिग्री दिगंश परिवर्तित करने को आसान बनाने में कर सकते हैं: 'दिगंश = दिगंश * 180/(नाव) Math.PI;' – srgtuszy

+4

यह और भी आसान है कि है कि उपयोग Math.toDegrees (दिगंश) – Ge3ng

+1

currentLoc.bearingTo (लक्ष्य); लक्ष्य पैरामीटर क्या है ???? – mhdjazmati

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