我在Android应用程序中使用地理编码API。我必须从地址中找到latitude
和longitude
,但对于某些地址,我没有收到任何latitude
和longitude
。是否有可能从稍微错误的地址获取近似latitude
和longitude
?
为了更好地理解我的代码,我得到IOException,因为geocoder.getFromLocationName(locationAddress, 1)
返回null:
这是我的代码:
public void getAddressFromLocation(final String locationAddress,
final Context context, final Handler handler) {
Thread thread = new Thread() {
@Override
public void run() {
Geocoder geocoder = new Geocoder(context, Locale.getDefault());
String result = null;
// String latlong="";
try {
List addressList = geocoder.getFromLocationName(locationAddress, 1);
if (addressList != null && addressList.size() > 0) {
Address address = (Address) addressList.get(0);
StringBuilder sb = new StringBuilder();
sb.append(address.getLatitude()).append("_");
sb.append(address.getLongitude());
result = sb.toString();
}
} catch (IOException e) {
}
}
我传递此879 manania road kapuni kapuni 4851
它给出了null。如果我在manania road kapuni kapuni 4851
中放弃它,我的观点是geocoder
应自动找到约lat
和long
。
答案 0 :(得分:0)
试试这个,
进行休息Api(HttpGet)调用我使用了asyntask。我将获得json响应并解析它以获得lat和lng
public LatLng getLatLng(JSONObject jsonObject) {
Double lon = new Double(0);
Double lat = new Double(0);
try {
lon = ((JSONArray) jsonObject.get("results")).getJSONObject(0).getJSONObject("geometry").getJSONObject("location").getDouble("lng");
lat = ((JSONArray) jsonObject.get("results")).getJSONObject(0).getJSONObject("geometry").getJSONObject("location").getDouble("lat");
} catch (JSONException e) {
e.printStackTrace();
}
return new LatLng(lat, lon);
}
class GetLatLngTask extends AsyncTask<String, String, JSONObject>{
String address = null;
String name = null;
@Override
protected JSONObject doInBackground(String... address) {
strCompleteAddress = address[0];
name = address[1];
HttpGet httpGet = new HttpGet("http://maps.google.com/maps/api/geocode/json?address=" + address+ "ka&sensor=false");
HttpClient client = new DefaultHttpClient();
HttpResponse response;
StringBuilder stringBuilder = new StringBuilder();
try {
response = client.execute(httpGet);
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) {
e.printStackTrace();
}
return jsonObject;
}
@Override
protected void onPostExecute(JSONObject jsonObject) {
super.onPostExecute(jsonObject);
LatLng latLng = getLatLng(jsonObject);
}
}
你在onPostExecute中有latnLng。
答案 1 :(得分:0)
我处理此问题的方法是使用Googles AutoComplete API,您可以在用户输入时查询。将根据输入的内容显示地址列表。
然后,用户可以看到要从中选择的有效地址列表,或者他们可以看到他们输入的内容返回了0个地址,因此他们需要检查他们输入的内容。
当用户点击其中一个有效地址时,您可以使用您想要的服务对地址进行地理编码。