আমি কীভাবে ঠিকানা থেকে অক্ষাংশ এবং দ্রাঘিমাংশ খুঁজে পেতে পারি?


111

আমি গুগল ম্যাপে একটি ঠিকানার অবস্থান প্রদর্শন করতে চাই।

আমি গুগল ম্যাপস এপিআই ব্যবহার করে কোনও ঠিকানার অক্ষাংশ এবং দ্রাঘিমাংশ কীভাবে পেতে পারি?


আমার একই সমস্যাটি দেখুন এখানে আমার সমাধান দেখুন stackoverflow.com/a/19170557/2621050
ব্রুনো পিন্টো

উত্তর:


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" />
ফ্লো

আপনি যে অ্যান্ড্রয়েড এপিআই সংস্করণটি তৈরি করছেন তা আপনার অ্যাপ্লিকেশনটি গুগল এপিআই উপলব্ধ থাকতে হবে যা আমি গুগল এপিআই দিয়ে তৈরি করেছি 8.. আপনার প্রকল্পে গুগল এপিআই ফোল্ডার রয়েছে কিনা তা পরীক্ষা করে দেখুন। এবং আপনার ম্যানিফেস্ট ফাইলটিতে অ্যাড গ্রন্থাগারটি com.google.android.maps
ud_an

1
আমি ইতিমধ্যে এই অনুমতি দিয়েছি এবং লাইব্রেরিটি অন্তর্ভুক্ত করেছি ... আমি মানচিত্রের ভিউ পেতে পারি ... এটি জিওকোডারে আইওএক্সেপশন নিক্ষেপ করে ...
কান্ধা

6
নীচে @ নায়েশগুপ্তে উত্তরটি দেখুন, আমি মনে করি না GeoPointনতুন লাইব্রেরিতে কোনও শ্রেণি আছে। পরিবর্তে ব্যবহার LatLngstackoverflow.com/a/27834110/2968401
user2968401

80

আপডেট হওয়া এপিআই এর সাথে উদ_র সমাধান

দ্রষ্টব্য : ল্যাটল্যাং ক্লাসটি গুগল প্লে পরিষেবাদির অংশ।

বাধ্যতামূলক :

<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
জিওকডারটি ইনস্ট্যান্ট করার সময় আপনার প্রসঙ্গটি পাস করা উচিত জিওকোডার কোডার = নতুন জিওকোডার (এটি); বা নতুন জিওকোডার (getApplicationContext) getActivity () উত্তরে বর্ণিত নেই।
The_Martian

1
@ কোয়ান্টামড্রয়েড উপরের কোডটি খণ্ডে লিখিত আছে। অন্যথায় আপনি একেবারে সঠিক। এটা প্রসঙ্গ।
নয়নেশ গুপ্তে

2
সুন্দর এবং পরিষ্কার সমাধান। উত্তরের কোনওটিতেই উল্লেখ করা হয়নি যে জিওকডার সিঙ্ক্রোনাস অ্যাক্সেস ব্যবহার করে, যেমন এটি ইউআইকে ব্লক করা এড়ানোর জন্য এটি ব্যাকগ্রাউন্ড পরিষেবাতে রাখার সুপারিশ করা হয়।
The_Martian

1
দুর্দান্ত সমাধান। আইওএক্সেপশন কল করা হবে যখন অবৈধ ঠিকানা / জিপকোড প্রবেশ করা হয়। আপনি একটি সহজif(address.size() <1){//show a Toast}else{//put rest of code here}
গ্রান্টেসপো

51

আপনি যদি নিজের ঠিকানা গুগল ম্যাপে রাখতে চান তবে নীচের ব্যবহারের সহজ উপায়

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

অথবা

আপনার যদি নিজের ঠিকানা থেকে দীর্ঘতর প্রয়োজন হয় তবে নিম্নলিখিত স্থানে গুগল প্লেস এপিআই ব্যবহার করুন

নীচের মতো 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 পাস করুন

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

আমি আশা করি এটি আপনাকে অন্যকে সহায়তা করবে .. !! ধন্যবাদ..!!


1
দুর্ভাগ্যক্রমে এই সমাধানটি কিছু মোবাইল অপারেটরদের মোবাইল সংযোগ নিয়ে কাজ করে না: অনুরোধটি সর্বদা OVER_QUERY_LIMIT কে প্রদান করে । এই মোবাইল অপারেটরগুলি অনেক ডিভাইসে একই আইপি বরাদ্দ করে NAT ওভারলোডিং ব্যবহার করে ...
উম্বের্টো

@ উম্বি স্লিপকনট আপনি কীভাবে ওভিআইপিএকিউআরএলএমটি সম্পর্কে আরও ব্যাখ্যা করতে পারেন? এটা কি? ধন্যবাদ.
FariborZ

7

নিম্নলিখিত কোডটি গুগল এপিভ 2 এর জন্য কাজ করবে:

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 টেস্টিং আরডি সিটি স্টেট জিপ) আপনি ল্যাটলংতে রূপান্তর করতে চান।


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 পরিষেবাটি উপলভ্য নয়" ছুড়ে ফেলেছে আমি ইতিমধ্যে সেই অনুমতি দিয়েছি এবং লাইব্রেরিটি অন্তর্ভুক্ত করেছি ... আমি মানচিত্রের দৃশ্য পেতে পারি ... এটি জিওকোডারটিতে আইওএক্সেপশন নিক্ষেপ করে ...

আমি চেষ্টা করার পরে কেবল একটি ক্যাচ আইওএক্সেপশন যুক্ত করেছি এবং এটি সমস্যার সমাধান করেছে

    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
এই নাল চেক কিছুই করছে না।
আজাহানচারলেস

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();
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.