2016-06-17 7 views
5

मैं जगह पाने के लिए एक जगह पिकर के इरादे का उपयोग कर रहा हूं। अब मैं अलग-अलग रूप में पते को देश, शहर, पिनकोड, राज्य के रूप में सहेजना चाहता हूं। मैं इसे जगह पिकर के पते से कैसे प्राप्त कर सकता हूं?देश पिकर के पते से शहर कैसे प्राप्त करें?

कोड:

public class NameOfBusinessFragment extends Fragment { 

    int PLACE_PICKER_REQUEST = 1; 
    int RESULT_OK = -1; 
    PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder(); 
    EditText category,location; 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      View view = inflater.inflate(R.layout.fragment_name_of_business, 
        container, false); 

      location = (EditText)view.findViewById(R.id.location); 

      location.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        try { 

         startActivityForResult(builder.build(getActivity()), PLACE_PICKER_REQUEST); 
        } 
        catch (GooglePlayServicesRepairableException e) 
        { 
         Toast.makeText(getActivity(),"ServiceRepaire Exception",Toast.LENGTH_SHORT).show(); 
        } 
        catch (GooglePlayServicesNotAvailableException e) 
        { 
         Toast.makeText(getActivity(),"SeerviceNotAvailable Exception",Toast.LENGTH_SHORT).show(); 
        } 
       } 
      }); 

      return view; 
     } 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == PLACE_PICKER_REQUEST) { 
      if (resultCode == RESULT_OK) { 
       Place place = PlacePicker.getPlace(data, getActivity()); 
       String toastMsg = String.format("Place: %s", place.getName()); 


       Toast.makeText(getActivity(), toastMsg, Toast.LENGTH_LONG).show(); 
       location.setText(place.getName()); 
      } 
     } 
    } 
} 

यह मैं कैसे जगह पिकर और जगह का नाम onActivityResult हो रही कार्यान्वित है। क्या मैं इसे रिवर्स जियोकोड या कुछ का उपयोग कर सकता हूं? क्या कोई इस से मेरी मदद कर सकता है? धन्यवाद।

उत्तर

2

मुझे लगता है कि प्लेस क्लास का उपयोग करके सीधे संभव नहीं है, लेकिन आप इसे अक्षांश और देशांतर से शुरू करने के लिए Google से पूछ सकते हैं।

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == PLACE_PICKER_REQUEST) { 
     if (resultCode == RESULT_OK) { 
      // get place data 
      Place place = PlacePicker.getPlace(data, getActivity()); 

      // ask for geolocation data 
      Geocoder gcd = new Geocoder(this, Locale.getDefault()); 
      List<Address> addresses = null; 
      try { 
       addresses = gcd.getFromLocation(place.getLatLng().latitude, place.getLatLng().longitude, 1); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      if (addresses.size() > 0) { 
       String toastMsg = String.format("Place: %s", addresses.get(0).getLocality() + " - " + addresses.get(0).getCountryName() + " - " + addresses.get(0).getCountryCode()); 
       Toast.makeText(getActivity(), toastMsg, Toast.LENGTH_LONG).show(); 


       // NOW SET HERE CORRECT DATA 
       //location.setText(place.getName()); 

      } 
     } 
    } 
} 
+0

'जिओकोडर' विश्वसनीय नहीं है। ज्यादातर समय यह शून्य आता है .. –

0

बेस्ट अपनी समस्या को हल करने के लिए उपयोग कर रहा है Geocoder अक्षांश और देशांतर से, लेकिन अगर किसी भी कारण से पता पाने के लिए आप का उपयोग करने के लिए इसे निम्नलिखित तरीके को आप मदद कर सकते हैं नहीं करना चाहते हैं जिस तरह से: अपने onActivityResult विधि का एक उदाहरण नीचे ।

हालांकि यह 100% विश्वसनीय नहीं है जब तक कि आप उन विस्तृत जानकारी प्रदान नहीं करते हैं, तब तक आप इसका उपयोग कर सकते हैं। यह कुछ यादृच्छिक मामलों के लिए सही परिणाम नहीं दे सकता है लेकिन अधिकांश के लिए काम करता है।

public void getAddressDetails(Place place) { 
     if (place.getAddress() != null) { 
      String[] addressSlice = place.getAddress().toString().split(", "); 
      country = addressSlice[addressSlice.length - 1]; 
      if (addressSlice.length > 1) { 
       String[] stateAndPostalCode = addressSlice[addressSlice.length - 2].split(" "); 
       if (stateAndPostalCode.length > 1) { 
        postalCode = stateAndPostalCode[stateAndPostalCode.length - 1]; 
        state = ""; 
        for (int i = 0; i < stateAndPostalCode.length - 1; i++) { 
         state += (i == 0 ? "" : " ") + stateAndPostalCode[i]; 
        } 
       } else { 
        state = stateAndPostalCode[stateAndPostalCode.length - 1]; 
       } 
      } 
      if (addressSlice.length > 2) 
       city = addressSlice[addressSlice.length - 3]; 
      if (addressSlice.length == 4) 
       stAddress1 = addressSlice[0]; 
      else if (addressSlice.length > 3) { 
       stAddress2 = addressSlice[addressSlice.length - 4]; 
       stAddress1 = ""; 
       for (int i = 0; i < addressSlice.length - 4; i++) { 
        stAddress1 += (i == 0 ? "" : ", ") + addressSlice[i]; 
       } 
      } 
     } 
     if(place.getLatLng()!=null) 
     { 
      latitude = "" + place.getLatLng().latitude; 
      longitude = "" + place.getLatLng().longitude; 
     } 
    } 
0

यदि आप प्लेस ऑब्जेक्ट पता (सड़क, शहर, देश, आदि) के घटक अलग करना चाहते हैं, तो आपके पास दो विकल्प हैं।

  1. Place.getLatLng() का उपयोग करें। फिर, अक्षांश और देशांतर geocode रिवर्स।
  2. पते को पार्स करें।

अब, एक पता पार्स करना बहुत आसान नहीं है। लेकिन, अक्षांश और देशांतर geocoding रिवर्स सटीक नहीं है। मैं पते का विश्लेषण करने का सुझाव देता हूं। वहाँ अच्छी पता पार्सिंग सेवाएं हैं, और कुछ पता डेटाबेस के खिलाफ पते को भी मान्य करते हैं। (मेरा सुझाव है SmartyStreets। आप SmartyStreets demo पृष्ठ पर जाने के लिए, ड्रॉप डाउन से "मुक्त अवस्था का पता" का चयन करें, फिर देखें कि किस तरह की जानकारी वापस आता है जब आप कोई पता खोजें।)


यहाँ क्यों रिवर्स है geocoding एक खराब समाधान हो सकता है। जब आप जियोकोड को उलटते हैं, तो आप अक्षांश और देशांतर लेते हैं और एल्गोरिदमिक रूप से किसी पते पर मेल खाते हैं। कुछ एल्गोरिदम निकटतम वास्तविक पते के अक्षांश और देशांतर से मेल खाते हैं। इस मामले में, पता आपके स्थान का पता नहीं हो सकता है। दूसरी तरफ, कुछ एल्गोरिदम एक ऐसे पते का अनुमान लगाते हैं जो उचित रूप से अक्षांश और देशांतर में फिट होगा। इस मामले में, पता वास्तविक पता नहीं हो सकता है। एक और जटिलता getLatLng() के लिए the documentation में बताया गया है:

स्थान जरूरी प्लेस, या किसी विशेष प्रवेश या निकास बिंदु के केंद्र नहीं है, लेकिन कुछ मनमाने ढंग से जगह की भौगोलिक सीमा तक भीतर चुना बिंदु।

क्योंकि अक्षांश और देशांतर स्थान की भौगोलिक सीमा के भीतर मनमाना बिंदु हैं, भरोसेमंद रिवर्स-जियोकोडिंग एल्गोरिदम बनाना मुश्किल है।

लेकिन, आपको सटीकता की परवाह नहीं है। यदि यह मामला है & emdash; कि आप एक ऐसा पता चाहते हैं जो "पर्याप्त निकट है," रिवर्स जियोकोडिंग एक अच्छा विकल्प हो सकता है।


एक और बात गौर करने योग्य

स्थिर प्लेस getPlace (आशय आशय, संदर्भ संदर्भ) यह विधि अब मान्य किया गया था। इसके बजाय GetPlace (संदर्भ, इरादा) का उपयोग करें।

मुझे लगता है कि आप अपनी लाइन बदल दिया जाना चाहिए:

Place place = PlacePicker.getPlace(data, getActivity()); 
इस के साथ

:

Place place = PlacePicker.getPlace(getActivity(), data); 

पूर्ण प्रकटीकरण: मैं SmartyStreets के लिए काम करते हैं।

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