2016-04-22 70 views
0

我正在用地圖創建應用程序並面臨一個問題。 我在我的Fragment和AutoCompleteTextView中有一個mapView。當我從自動完成中選擇任何城市時,它應該在地圖上顯示爲一個標記。如何從Google Geocoding API json獲取LatLng數據?

這是代碼,它在真正的三星Galaxy S3和Galaxy S6模擬器上運行良好,但不適用於魅族MX5。 正如我發現的那樣,Geocoder無法在每臺設備上正常運行,因此Google Geocoding API提供了一個解決方案。我得到了Json的答案,但不知道如何從JSON獲取LatLang和FeatureName。 JSON的

例子:http://maps.google.com/maps/api/geocode/json?address=London&sensor=true

我是一個新的到Android,對不起,如果不是都清楚了。

atvFrom.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      locationFrom = atvFrom.getText().toString(); 
      List<Address> addressListFrom = null; 
      Geocoder geocoder = new Geocoder(getActivity()); 

      try { 
       if (markerFrom[0] != null) {markerFrom[0].remove();} 
       addressListFrom = geocoder.getFromLocationName(locationFrom, 1); 

       if (addressListFrom != null) { 
        Address addressFrom = addressListFrom.get(0); 
        latLngFrom[0] = new LatLng(addressFrom.getLatitude(), addressFrom.getLongitude()); 
        tripFrom = addressListFrom.get(0).getFeatureName(); 

        markerFrom[0] = googleMap.addMarker(new MarkerOptions().position(latLngFrom[0]).title("From")); 
        googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLngFrom[0])); 

        if (markerTo[0]!=null) { 
         if (line[0] !=null) {line[0].remove();} 
         line[0] = googleMap.addPolyline(new PolylineOptions().add(latLngFrom[0], latLngTo[0]).width(5).color(Color.BLUE)); 
        } 

       } else { 
        MyGeocoder myGeocoder = new MyGeocoder(FragmentMap.this); 
        myGeocoder.execute(locationFrom); 
        try { 
         JSONObject jObj = new JSONObject(myGeocoder.jsonResult); 
         String Status = jObj.getString("status"); 
         if (Status.equalsIgnoreCase("OK")) { 
          JSONArray Results = jObj.getJSONArray("results"); 
          // how to get LatLng and FeatureName from json? 
          // dont know what to do here 

         } 
        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 

      } catch (IOException e) { 
       //e.printStackTrace(); 
       Toast.makeText(getActivity(), "Error", Toast.LENGTH_SHORT).show(); 
      } 
     } 
    }); 

回答

0

您需要瀏覽Json對象以達到location。這是你需要怎麼做

try { 
    JSONObject jObj = new JSONObject(myGeocoder.jsonResult); 
    String Status = jObj.getString("status"); 
    if (Status.equalsIgnoreCase("OK")) { 
     JSONArray results = jObj.getJSONArray("results"); 
     JSONObject item = results.getJSONObject(0);//read first item of results 
     JSONObject geometry = item.getJSONObject("geometry");//location is inside geometry object 
     JSONObject location = geometry.getJSONObject("location"); 
     double latitude = location.getDouble("lat"); 
     double longitude = location.getDouble("lng"); 
     //or 
     LatLng latLng = new LatLng(latitude, longitude); 
    } 
} catch (JSONException e) { 
    e.printStackTrace(); 
} 

,並檢查地理編碼所有腦幹上的設備,可以撥打下面的方法

使用isPresent()方法來確定一個地理編碼實現是否存在。

if(Geocoder.isPresent()){ 
    //exists 
} 

happyCoding;

相關問題