阿爾伯特,我覺得你的問題是,你的代碼無法正常工作。在這裏,下面的代碼非常適合我。我想你錯過了URIUtil.encodeQuery
將你的字符串轉換爲URI。
我正在使用gson庫,下載它並將其添加到您的路徑。
要獲得gson解析的類,您需要轉到jsonschema2pojo。只需在您的瀏覽器上觸發http://maps.googleapis.com/maps/api/geocode/json?address=Sayaji+Hotel+Near+balewadi+stadium+pune&sensor=true,獲取結果並將其粘貼到本網站上。它會爲你生成你的pojo。您可能還需要添加一個annotation.jar。
相信我,這很容易得到工作。不要感到沮喪。
try {
URL url = new URL(
"http://maps.googleapis.com/maps/api/geocode/json?address="
+ URIUtil.encodeQuery("Sayaji Hotel, Near balewadi stadium, pune") + "&sensor=true");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
String output = "", full = "";
while ((output = br.readLine()) != null) {
System.out.println(output);
full += output;
}
PincodeVerify gson = new Gson().fromJson(full, PincodeVerify.class);
response = new IsPincodeSupportedResponse(new PincodeVerifyConcrete(
gson.getResults().get(0).getFormatted_address(),
gson.getResults().get(0).getGeometry().getLocation().getLat(),
gson.getResults().get(0).getGeometry().getLocation().getLng())) ;
try {
String address = response.getAddress();
Double latitude = response.getLatitude(), longitude = response.getLongitude();
if (address == null || address.length() <= 0) {
log.error("Address is null");
}
} catch (NullPointerException e) {
log.error("Address, latitude on longitude is null");
}
conn.disconnect();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
地址解析HTTP的作品,我只是放了一槍,下面
{
"results" : [
{
"address_components" : [
{
"long_name" : "Pune",
"short_name" : "Pune",
"types" : [ "locality", "political" ]
},
{
"long_name" : "Pune",
"short_name" : "Pune",
"types" : [ "administrative_area_level_2", "political" ]
},
{
"long_name" : "Maharashtra",
"short_name" : "MH",
"types" : [ "administrative_area_level_1", "political" ]
},
{
"long_name" : "India",
"short_name" : "IN",
"types" : [ "country", "political" ]
}
],
"formatted_address" : "Pune, Maharashtra, India",
"geometry" : {
"bounds" : {
"northeast" : {
"lat" : 18.63469650,
"lng" : 73.98948670
},
"southwest" : {
"lat" : 18.41367390,
"lng" : 73.73989109999999
}
},
"location" : {
"lat" : 18.52043030,
"lng" : 73.85674370
},
"location_type" : "APPROXIMATE",
"viewport" : {
"northeast" : {
"lat" : 18.63469650,
"lng" : 73.98948670
},
"southwest" : {
"lat" : 18.41367390,
"lng" : 73.73989109999999
}
}
},
"types" : [ "locality", "political" ]
}
],
"status" : "OK"
}
結果編輯
在「答案不包含足夠detail`
從所有的研究你期待谷歌地圖有一個地方,地區,城市的每一個組合的參考。但事實仍然是,Google地圖在其自身的環境中包含地理位置和反向地理位置。你不能指望它有像Sayaji Hotel, Near balewadi stadium, pune
這樣的組合。網絡谷歌地圖將爲您找到它,因爲它使用更廣泛的Search
富谷歌後端。 google api的唯一反向地址從他們自己的api收到。對我來說,這似乎是一個合理的工作方式,考慮到我們的印度廣播系統是多麼複雜,第二個十字路口可以從第1跨路:)
GeoCoder不是完美的科學。請記住。例如,我想要「Wadgaon sheri」,它向我展示了靠近EON IT公園的Kharadi主路。所以我在地址上加了「郵局」。而不是「wadgaon sheri」我使用PIN碼。長話短說,不要指望Geocodeing爲你做魔術。機會是你使用的任何API最終都會得到相同的結果,因爲他們也會使用地理編碼。 – Siddharth