سؤال

أنا أحاول الحصول على عنوان استنادا إلى طويلة/lat.يبدو أن شيئا من هذا القبيل يجب أن تعمل ؟

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

القضية هي أن أظل الحصول على :طريقة القالب(لغة) غير معرف على نوع savemaplocation

أي مساعدة سوف يكون مفيدا.شكرا لك.


شكرا يا حاولت السياق لغة واحدة أولا ، و التي فشلت وكان يبحث في بعض المنشئات (كنت قد رأيت أحد أن ذكر فقط لغة).بغض النظر ،

لم تنجح ، كما أنا لا يزال الحصول على :طريقة القالب(السياق ، لغة) غير معرف على نوع savemaplocation

لدي :استيراد الروبوت.موقع.القالب;

هل كانت مفيدة؟

المحلول

وفيما يلي مقتطف الشفرة يفعل ذلك بالنسبة لي (خطوط الطول والغاز الطبيعي المسال والزوجي أعلنت فوق هذا بت):

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

نصائح أخرى

وهنا هو المثال رمز الكامل باستخدام الموضوع ومعالج للحصول على الجواب ترميز المناطق الجغرافية دون عرقلة واجهة المستخدم.

وترميز المناطق الجغرافية في إجراء المكالمة، يمكن أن يكون موجودا في فئة مساعد

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();
}

وهنا هو الدعوة إلى هذا الإجراء ترميز المناطق الجغرافية في حياتك آخر UI:

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);
    }   
}

لا تنسى أن تضع إذن التالية في Manifest.xml بك

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

يبدو أن هناك اثنين من الأشياء يحدث هنا.

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" />

والسبب في ذلك هو غير موجودة خدمة الخلفية:

<اقتباس فقرة>   <اقتباس فقرة>     

والطبقة ترميز المناطق الجغرافية تتطلب خدمة الخلفية التي لم يتم تضمينها في إطار الروبوت الأساسية. فإن طرق الاستعلام ترميز المناطق الجغرافية بإرجاع قائمة فارغة إذا كان هناك أي خدمة الخلفية في المنصة.

  

أولا الحصول خطوط الطول والعرض باستخدام الموقع والطبقة LocationManager. الآن حاول رمز أدناه للحصول على الحصول على المدينة، وعنوان من المعلومات

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.toString ()).

حسنا، أنا لا تزال الحيرة. حتى هنا هو رمز أكثر.

وقبل أن أترك خريطتي، أدعو SaveLocation(myMapView,myMapController); هذا هو ما ينتهي يدعو المعلومات الترميز الجغرافي بلدي.

ولكن منذ getFromLocation يمكن بطرح IOException، واضطررت الى القيام بما يلي للاتصال SaveLocation

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

وبعد ذلك لا بد لي من تغيير SaveLocation بالقول انها رميات IOExceptions:

 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);
//...
    }

وتحطم كل مرة.

ولقد سمعت أن ترميز المناطق الجغرافية على الجانب عربات التي تجرها الدواب. كنت مؤخرا قد وضعت معا على تطبيق مثال يستخدم خدمة الترميز الجغرافي HTTP جوجل لبحث الموقع من خطوط الطول / العرض. لا تتردد في التحقق من ذلك هنا

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

استخدم هذا

Geocoder geocoder = new Geocoder(this, Locale.getDefault());
List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top