2015-10-11 82 views
0

当大量地址被转换为经纬度& lng时,有时结果为空。 我认为这个原因是使用这个URL太多,所以得到空值。 我该如何解决这个问题才能得到正确的经纬度& lng?有时候获得经纬度和纬度为空的谷歌地图api json

String transformerUrl = "http://maps.google.com/maps/api/geocode/json?address=%s&language=zh-TW&sensor=false&region=tw"; 

private String readAll(Reader rd) throws IOException { 
    StringBuilder sb = new StringBuilder(); 
    int cp; 
    while ((cp = rd.read()) != -1) { 
     sb.append((char) cp); 
    } 
    return sb.toString(); 
} 

public String[] getLocationInfoByAddress(String address) 
     throws IOException, JSONException { 

    String[] latLngStr = new String[2]; 

    String encodeAddress = URLEncoder.encode(address, "Utf-8"); 
    String formatAddress = String.format(transformerUrl, encodeAddress); 
    InputStream is = new URL(formatAddress).openConnection().getInputStream(); 
    try { 
     BufferedReader rd = new BufferedReader(new InputStreamReader(is, 
       Charset.forName("UTF-8"))); 
     String jsonText = readAll(rd); 
     //System.out.println(jsonText); 

     try { 
      JSONArray arr = new JSONObject(jsonText) 
        .getJSONArray("results"); 
      for (int i = 0; i < arr.length(); ++i) { 
       if (arr.getJSONObject(i).get("geometry") != null) { 
        Object lat = arr.getJSONObject(i).getJSONObject("geometry").getJSONObject("location").get("lat"); 
        Object lng = arr.getJSONObject(i).getJSONObject("geometry").getJSONObject("location").get("lng") ; 

        latLngStr[0] = lat.toString(); 
        latLngStr[1] = lng.toString(); 

        break; 
       } 
      } 
     } catch (JSONException e) { 
     } 


    } finally { 
     is.close(); 
    } 

    return latLngStr; 
} 

回答

0

在使用结果之前检查返回的Status

Google地图地理编码Web服务受限于配额和速率限制。如果您不遵守这些规定,您将获得OVER_QUERY_LIMIT的状态。

如果您的网址中没有包含key(我在您的问题中没有看到),为您的请求添加密钥可能会允许您拥有自己的独立配额(只有在共享时才真正适用)服务器)。

如果这没有帮助,则需要限制您的请求以符合配额/费率限制。有关于如何在StackOverflow上执行该操作的问题。

+0

我得到了这个“OVER_QUERY_LIMIT”。所以任何解决方案来解决它?先谢谢你。 – WhiteBanana

+0

看到我更新的答案 – geocodezip

+0

谢谢!我会搜索一些关于油门请求的内容。我认为这是一个很酷的方式。 – WhiteBanana

相关问题