2009-01-23 11 views
45

मैं देशांतर/अक्षांश के आधार पर एक का पता पाने के लिए कोशिश कर रहा हूँ। ऐसा लगता है कि इस तरह कुछ काम करना चाहिए? विधि जियोकोडर (लोकेल) प्रकार savemaplocationएंड्रॉयड: रिवर्स जियोकोडिंग - getFromLocation

किसी भी सहायता के लिए मददगार होगा अपरिभाषित है:

Geocoder myLocation = Geocoder(Locale.getDefault()); 
    List myList = myLocation.getFromLocation(latPoint,lngPoint,1); 

मुद्दा यह है कि मैं बार आ रही है है। धन्यवाद।


धन्यवाद, मैं संदर्भ, स्थान एक करने की कोशिश की पहले, और कि विफल और (मैं एक है कि सिर्फ वातावरण कहा था देखा था) अन्य निर्माताओं में से कुछ देख रहा था। भले ही,

यह काम नहीं किया, के रूप में मैं अभी भी हो रही है: विधि जियोकोडर (संदर्भ, लोकेल) प्रकार savemaplocation के लिए अपरिभाषित है

मेरे पास हैं: आयात android.location.Geocoder;

उत्तर

62

निम्नलिखित कोड का टुकड़ा (अक्षां और एलएनजी युगल इस बिट से ऊपर घोषित कर रहे हैं) मेरे लिए यह कर रही है:

Geocoder geocoder = new Geocoder(this, Locale.getDefault()); 
List<Address> addresses = geocoder.getFromLocation(lat, lng, 1); 
+1

मैंने यह भी कोशिश की, हर बार जब मैं पता सूची देखने की कोशिश करता हूं, तो यह बाहर निकलता है। निशचित तौर पर मालूम नहीं कया हो रहा है। मैं एक या दो दिन में एक नए ऐप के साथ कोशिश करूँगा यह देखने के लिए कि मैं क्या पा सकता हूं। – Chrispix

+4

मुझे स्थिति की स्थिति के लिए यह बहुत उपयोगी पाया गया: http://blogoscoped.com/archive/2008-12-15-n14.html –

+1

... मुझे भी मेरे मैनिफेस्ट में निम्नलिखित दो अनुमतियां मिली हैं: <उपयोग -प्रमिशन एंड्रॉइड: नाम = "android.permission.INTERNET" /> <उपयोग-अनुमति एंड्रॉइड: नाम = "android.permission.ACCESS_FINE_LOCATION" /> जब मैंने उनमें से एक को याद किया (जिसे याद नहीं किया जा सकता) ऐप ने वास्तव में एक असफल त्रुटि फेंक दी। –

34

ऐसा लगता है जैसे कि यहां क्या हो रहा दो बातें।

1) आपने कन्स्ट्रक्टर को कॉल करने से पहले new कीवर्ड को याद किया है।

2) पैरामीटर आप जियोकोडर निर्माता में गुजर रहे हैं सही नहीं है। आप Locale में गुजर रहे हैं जहां यह Context की अपेक्षा कर रहा है।

वहाँ दो Geocoder कंस्ट्रक्टर्स, जो दोनों के एक Context की आवश्यकता होती है, और एक भी ले जा रहा एक Locale:

Geocoder(Context context, Locale locale) 
Geocoder(Context context) 

समाधान

एक वैध संदर्भ में गुजरती हैं और new शामिल करने के लिए अपने कोड को संशोधित करें और आपको जाने के लिए अच्छा होना चाहिए।

Geocoder myLocation = new Geocoder(getApplicationContext(), Locale.getDefault()); 
List<Address> myList = myLocation.getFromLocation(latPoint, lngPoint, 1); 

नोट

आप अभी भी समस्या हो रही है यह एक permissioning मुद्दा हो सकता है। जियोकोडिंग लुकअप करने के लिए इंटरनेट का उपयोग करती है, इसलिए आपके एप्लिकेशन को आपके मेनिफेस्ट में INTERNET उपयोग-अनुमति टैग की आवश्यकता होगी।

अपने मेनिफेस्ट के manifest नोड के भीतर निम्न उपयोग-अनुमति नोड जोड़ें।

<uses-permission android:name="android.permission.INTERNET" /> 
+0

धन्यवाद, मुझे लगता है कि मैं बहुत देर हो चुकी कल रात, यकीन नहीं क्या मेरी नई हुआ काम कर रहा था। मुझे लगता है कि मैं इसे मूल रूप से भूल गया था, इसे वापस रख दिया जब मेरे पास केवल लोकेल था, और फिर जब मैं वापस गया, तो इसे दोबारा भूल गया .. मैं इसकी सराहना करता हूं .. – Chrispix

+0

कोई चिंता नहीं, मैंने इसे पहली बार नहीं देखा :) –

2

ठीक है, मैं अभी भी स्टंप हूं। तो यहां अधिक कोड है।

मेरा नक्शा छोड़ने से पहले, मैं SaveLocation(myMapView,myMapController); पर कॉल करता हूं यह मेरी जिओकोडिंग जानकारी को कॉल करने के लिए समाप्त होता है।

लेकिन getFromLocation के बाद से एक IOException फेंक कर सकते हैं, मैं SaveLocation कॉल करने के लिए निम्नलिखित करना था

try 
{ 
    SaveLocation(myMapView,myMapController); 
} 
catch (IOException e) 
{ 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

तो मैं यह कह IOExceptions फेंकता द्वारा SaveLocation बदलना होगा:

public void SaveLocation(MapView mv, MapController mc) throws IOException{ 
    //I do this : 
    Geocoder myLocation = new Geocoder(getApplicationContext(), Locale.getDefault()); 
    List myList = myLocation.getFromLocation(latPoint, lngPoint, 1); 
//... 
    } 

और यह दुर्घटनाओं हर बार।

+0

अनुमति अनुमति हो सकती है। जियोकोडर लुकअप करने के लिए इंटरनेट का उपयोग करता है ताकि आपको इंटरनेट उपयोग-अनुमति की आवश्यकता हो। विवरण के साथ जवाब अद्यतन किया गया। –

+0

मैपिंग के लिए मेरे पास इंटरनेट अनुमतियां हैं। बहुत अजीब क्यों यह असफल रहता है। मुझे एक लॉगकैट प्राप्त करने दें। – Chrispix

+0

यह अपवाद है जो मुझे मिल रहा है: java.lang.IllegalArgumentException: अक्षांश == 3.2945512E7 – Chrispix

0

मैंने सुना है कि जियोकोडर गाड़ी ओर है। मैंने हाल ही में एक उदाहरण एप्लिकेशन रखा है जो लेट/लांग से स्थान देखने के लिए Google की http geocoding सेवा का उपयोग करता है। इसे यहां

http://www.smnirven.com/?p=39

40

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

जियोकोडर कॉल प्रक्रिया, एक सहायक वर्ग

public static void getAddressFromLocation(
     final Location location, final Context context, final Handler handler) { 
    Thread thread = new Thread() { 
     @Override public void run() { 
      Geocoder geocoder = new Geocoder(context, Locale.getDefault()); 
      String result = null; 
      try { 
       List<Address> list = geocoder.getFromLocation(
         location.getLatitude(), location.getLongitude(), 1); 
       if (list != null && list.size() > 0) { 
        Address address = list.get(0); 
        // sending back first address line and locality 
        result = address.getAddressLine(0) + ", " + address.getLocality(); 
       } 
      } catch (IOException e) { 
       Log.e(TAG, "Impossible to connect to Geocoder", e); 
      } finally { 
       Message msg = Message.obtain(); 
       msg.setTarget(handler); 
       if (result != null) { 
        msg.what = 1; 
        Bundle bundle = new Bundle(); 
        bundle.putString("address", result); 
        msg.setData(bundle); 
       } else 
        msg.what = 0; 
       msg.sendToTarget(); 
      } 
     } 
    }; 
    thread.start(); 
} 

यहाँ में स्थित किया जा सकता है अपने यूआई गतिविधि में इस जियोकोडर प्रक्रिया करने के लिए कॉल है:

getAddressFromLocation(mLastKownLocation, this, new GeocoderHandler()); 

और हैंडलर में परिणाम दिखाने के लिए आपका यूआई:

private class GeocoderHandler extends Handler { 
    @Override 
    public void handleMessage(Message message) { 
     String result; 
     switch (message.what) { 
     case 1: 
      Bundle bundle = message.getData(); 
      result = bundle.getString("address"); 
      break; 
     default: 
      result = null; 
     } 
     // replace by what you need to do 
     myLabel.setText(result); 
    } 
} 

अपनेमें निम्नलिखित अनुमति देना न भूलें

<uses-permission android:name="android.permission.INTERNET" /> 
+0

कोड – John

+0

को अनुकूलित करने के लिए निर्दोष, महान आधार काम करता है यह सही है और एंड्रॉइड 'NetworkOnMainThreadException' के माध्यम से होगा। वैकल्पिक रूप से, कोई भी – Nezam

+0

करने के लिए एक सरल 'AsyncTask' का उपयोग भी कर सकता है रिवर्स geocoded पता कई बार प्रकट होता है। मुझे नहीं पता क्यों? –

4

पहले स्थान और स्थान प्रबंधक वर्ग का उपयोग करके अक्षांश और देशांतर प्राप्त करें। अब नीचे के लिए शहर जाओ कोड का प्रयास करें, को संबोधित जानकारी

double latitude = location.getLatitude(); 
double longitude = location.getLongitude(); 
Geocoder gc = new Geocoder(this, Locale.getDefault()); 
try { 
    List<Address> addresses = gc.getFromLocation(lat, lng, 1); 
    StringBuilder sb = new StringBuilder(); 
    if (addresses.size() > 0) { 
     Address address = addresses.get(0); 
     for (int i = 0; i < address.getMaxAddressLineIndex(); i++) 
      sb.append(address.getAddressLine(i)).append("\n"); 
      sb.append(address.getLocality()).append("\n"); 
      sb.append(address.getPostalCode()).append("\n"); 
      sb.append(address.getCountryName()); 
    } 

शहर की जानकारी sb में है। अब एसबी को स्ट्रिंग में परिवर्तित करें (sb.toString() का उपयोग कर)।

+0

धन्यवाद इससे मदद मिली! – morty346

7

इस का कारण यह न के बराबर बैकएंड सेवा है:

जियोकोडर वर्ग एक बैकएंड सेवा है कि कोर एंड्रॉयड ढांचे में शामिल नहीं है की आवश्यकता है। यदि प्लेटफ़ॉर्म में कोई बैकएंड सेवा नहीं है तो जियोकोडर क्वेरी विधियां एक खाली सूची लौटाएंगी।

+0

यह सही उत्तर है। अन्य उत्तर w/o बैकएंड काम नहीं करेंगे। – ajeh

0

उपयोग इस

Geocoder geocoder = new Geocoder(this, Locale.getDefault()); 
List<Address> addresses = geocoder.getFromLocation(lat, lng, 1); 
संबंधित मुद्दे