मैं पते से अक्षांश और देशांतर कैसे खोज सकता हूं?


111

मैं Google मानचित्र में एक पते का स्थान दिखाना चाहता हूं।

Google मानचित्र API का उपयोग करके मुझे किसी पते का अक्षांश और देशांतर कैसे मिलेगा?


मेरे पास एक ही मुद्दा था कि मेरे हल को यहां देखें stackoverflow.com/a/19170557/2621050
Bruno Pinto

जवाबों:


139
public GeoPoint getLocationFromAddress(String strAddress){

Geocoder coder = new Geocoder(this);
List<Address> address;
GeoPoint p1 = null;

try {
    address = coder.getFromLocationName(strAddress,5);
    if (address==null) {
       return null;
    }
    Address location=address.get(0);
    location.getLatitude();
    location.getLongitude();

    p1 = new GeoPoint((double) (location.getLatitude() * 1E6),
                      (double) (location.getLongitude() * 1E6));

    return p1;
    }
}

strAddressपता रखने वाला एक तार है। addressचर परिवर्तित पतों रखती है।


1
यह "java.io.IOException सेवा उपलब्ध नहीं है"
कंधा

3
सेवा तक पहुँचने में सक्षम होने के लिए आपको सही अनुमतियों की आवश्यकता है। # <उपयोग-अनुमति एंड्रॉइड: नाम = "android.permission.ACCESS_COARSE_LOCATION" /> <उपयोग-अनुमति एंड्रॉइड: नाम = "android.permission.INTERNET" />
फ़्लो

जो android api वर्जन आप एप्लीकेशन का निर्माण कर रहे हैं उसके लिए आपको google api उपलब्ध होना चाहिए जो कि मैंने google api 8 के साथ बनाया है। चेक करें कि google api फोल्डर आपके प्रोजेक्ट में है। और अपने मैनिफ़ेस्ट फ़ाइल ऐड में पुस्तकालय com.google.android.maps
ud_an

1
मैंने पहले ही उन अनुमति दे दी और लाइब्रेरी को शामिल कर लिया ... मैं नक्शा दृश्य प्राप्त कर सकता हूं ... यह जियोकोड पर IOException को फेंकता है ...
कंधा

6
नीचे @NayAneshGupte द्वारा उत्तर देखें, मुझे नहीं लगता GeoPointकि नए पुस्तकालयों में कोई वर्ग है। इसके बजाय उपयोग करें LatLngstackoverflow.com/a/27834110/2968401
user2968401

80

अपडेट किए गए API के साथ Ud_an का समाधान

नोट : LatLng वर्ग Google Play Services का हिस्सा है।

अनिवार्य :

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

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

अद्यतन: यदि आपके पास एसडीके 23 और उससे अधिक का लक्ष्य है, तो सुनिश्चित करें कि आप स्थान के लिए रनटाइम अनुमति का ध्यान रखते हैं।

public LatLng getLocationFromAddress(Context context,String strAddress) {

    Geocoder coder = new Geocoder(context);
    List<Address> address;
    LatLng p1 = null;

    try {
        // May throw an IOException
        address = coder.getFromLocationName(strAddress, 5);
        if (address == null) {
            return null;
        }

        Address location = address.get(0);
        p1 = new LatLng(location.getLatitude(), location.getLongitude() );

    } catch (IOException ex) {

        ex.printStackTrace();
    }

    return p1;
}

2
धन्यवाद, यह मेरे लिए काम करता था, ऊपर समाधान काम नहीं कर रहा था।
रिजवान सोहैब

1
जियोकोडर को इंस्टेंट करते समय आपको संदर्भ को पास करना चाहिए जियोकोडर कोडर = नया जियोकोडर (यह); या नए Geocoder (getApplicationContext) getActivity () नहीं मिला जैसा कि उत्तर में बताया गया है।
the_Martian

1
@Quantumdroid ऊपर कोड टुकड़ा में लिखा है। अन्यथा आप बिल्कुल सही हैं। यह संदर्भ है।
नयनेश गुप्ते

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

1
महान समाधान। अमान्य पता / ज़िपकोड दर्ज करने पर IOException को कॉल किया जाएगा। आप उस त्रुटि से बच सकते हैंif(address.size() <1){//show a Toast}else{//put rest of code here}
बजे

51

यदि आप अपना पता Google मानचित्र में रखना चाहते हैं तो निम्नलिखित का उपयोग करने का आसान तरीका है

Intent searchAddress = new  Intent(Intent.ACTION_VIEW,Uri.parse("geo:0,0?q="+address));
startActivity(searchAddress);

या

यदि आपको अपने पते से लंबे समय तक प्राप्त करने की आवश्यकता है, तो निम्नलिखित के लिए Google स्थान एपि का उपयोग करें

निम्नलिखित की तरह HTTP कॉल की प्रतिक्रिया के साथ एक JSONObject देता है कि एक विधि बनाएँ

public static JSONObject getLocationInfo(String address) {
        StringBuilder stringBuilder = new StringBuilder();
        try {

        address = address.replaceAll(" ","%20");    

        HttpPost httppost = new HttpPost("http://maps.google.com/maps/api/geocode/json?address=" + address + "&sensor=false");
        HttpClient client = new DefaultHttpClient();
        HttpResponse response;
        stringBuilder = new StringBuilder();


            response = client.execute(httppost);
            HttpEntity entity = response.getEntity();
            InputStream stream = entity.getContent();
            int b;
            while ((b = stream.read()) != -1) {
                stringBuilder.append((char) b);
            }
        } catch (ClientProtocolException e) {
        } catch (IOException e) {
        }

        JSONObject jsonObject = new JSONObject();
        try {
            jsonObject = new JSONObject(stringBuilder.toString());
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return jsonObject;
    }

अब पास है कि JSONObject getLatLong () विधि निम्न की तरह

public static boolean getLatLong(JSONObject jsonObject) {

        try {

            longitute = ((JSONArray)jsonObject.get("results")).getJSONObject(0)
                .getJSONObject("geometry").getJSONObject("location")
                .getDouble("lng");

            latitude = ((JSONArray)jsonObject.get("results")).getJSONObject(0)
                .getJSONObject("geometry").getJSONObject("location")
                .getDouble("lat");

        } catch (JSONException e) {
            return false;

        }

        return true;
    }

मुझे आशा है कि यह आपको दूसरों को nd करने में मदद करता है .. !! धन्यवाद..!!


1
दुर्भाग्य से यह समाधान कुछ मोबाइल ऑपरेटरों के मोबाइल कनेक्शन के साथ काम नहीं करता है: अनुरोध हमेशा OVER_QUERY_LIMIT देता है । वे मोबाइल ऑपरेटर NAT ओवरलोडिंग का उपयोग करते हैं, एक ही IP को कई उपकरणों को असाइन करते हैं ...
Umberto

@UmbySlipKnot क्या आप OVER_QUERY_LIMIT के बारे में अधिक बता सकते हैं? वो क्या है? धन्यवाद।
FariborZ

7

निम्न कोड google apiv2 के लिए काम करेगा:

public void convertAddress() {
    if (address != null && !address.isEmpty()) {
        try {
            List<Address> addressList = geoCoder.getFromLocationName(address, 1);
            if (addressList != null && addressList.size() > 0) {
                double lat = addressList.get(0).getLatitude();
                double lng = addressList.get(0).getLongitude();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } // end catch
    } // end if
} // end convertAddress

जहां पता स्ट्रिंग है (123 परीक्षण Rd सिटी स्टेट ज़िप) जिसे आप LatLng में बदलना चाहते हैं।


3

इस तरह आप अक्षांश और देशांतर का पता लगा सकते हैं जहाँ हमने मानचित्र पर क्लिक किया है।

public boolean onTouchEvent(MotionEvent event, MapView mapView) 
{   
    //---when user lifts his finger---
    if (event.getAction() == 1) 
    {                
        GeoPoint p = mapView.getProjection().fromPixels(
            (int) event.getX(),
            (int) event.getY());

        Toast.makeText(getBaseContext(), 
             p.getLatitudeE6() / 1E6 + "," + 
             p.getLongitudeE6() /1E6 , 
             Toast.LENGTH_SHORT).show();
    }                            
    return false;
} 

यह अच्छा काम करता है।

स्थान का पता प्राप्त करने के लिए हम जियोकोडर वर्ग का उपयोग कर सकते हैं।


1

ऊपर कंधा समस्या का उत्तर:

यह "java.io.IOException सेवा उपलब्ध नहीं है" फेंकता है। मैंने पहले ही उन अनुमति दे दी है और इसमें पुस्तकालय शामिल है ... मुझे मानचित्र दृश्य मिल सकता है ... यह जियोकोड पर IOException को फेंकता है ...

मैंने सिर्फ कोशिश के बाद एक पकड़ IOException जोड़ दी और इसने समस्या को हल कर दिया

    catch(IOException ioEx){
        return null;
    }

0
Geocoder coder = new Geocoder(this);
        List<Address> addresses;
        try {
            addresses = coder.getFromLocationName(address, 5);
            if (addresses == null) {
            }
            Address location = addresses.get(0);
            double lat = location.getLatitude();
            double lng = location.getLongitude();
            Log.i("Lat",""+lat);
            Log.i("Lng",""+lng);
            LatLng latLng = new LatLng(lat,lng);
            MarkerOptions markerOptions = new MarkerOptions();
            markerOptions.position(latLng);
            googleMap.addMarker(markerOptions);
            googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng,12));
        } catch (IOException e) {
            e.printStackTrace();
        }

1
वह अशक्त जाँच कुछ भी नहीं कर रही है।
AjahnCharles 16

0
public void goToLocationFromAddress(String strAddress) {
    //Create coder with Activity context - this
    Geocoder coder = new Geocoder(this);
    List<Address> address;

    try {
        //Get latLng from String
        address = coder.getFromLocationName(strAddress, 5);

        //check for null
        if (address != null) {

            //Lets take first possibility from the all possibilities.
            try {
                Address location = address.get(0);
                LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());

                //Animate and Zoon on that map location
                mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
                mMap.animateCamera(CameraUpdateFactory.zoomTo(15));
            } catch (IndexOutOfBoundsException er) {
                Toast.makeText(this, "Location isn't available", Toast.LENGTH_SHORT).show();
            }

        }


    } catch (IOException e) {
        e.printStackTrace();
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.