【使用地理编码器和Android Google Maps API v2获取经度和纬度】少年乘勇气,百战过乌孙。这篇文章主要讲述使用地理编码器和Android Google Maps API v2获取经度和纬度相关的知识,希望能为你提供帮助。
我正在使用Google Maps API v2 for android并且正常运行。但是,我正在尝试使用地理编码器来获取地址的经度和纬度,但没有成功。
它改变了从v2做到这一点的方式?
我正在使用传统的代码
Geocoder gc = new Geocoder(context);
//...
List<
Address>
list = gc.getFromLocationName("1600 Amphitheatre Parkway, Mountain View, CA", 1);
Address address = list.get(0);
double lat = address.getLatitude();
double lng = address.getLongitude();
//...
始终返回强制关闭,Log不解决任何问题。当使用try / catch块时,打开地图但总是使用相同的位置使用Internet权限,我已经包含在项目中COARSE_LOCATION我已经使用了位于此处和其他站点的各种代码,但没有成功。
先感谢您。
答案使用此示例url尝试此解决方案:
http://maps.google.com/maps/api/geocode/json?address=mumbai& sensor=false它使用
json
的lat/lng
以address
格式返回数据。private class DataLongOperationAsynchTask extends AsyncTask<
String, Void, String[]>
{
ProgressDialog dialog = new ProgressDialog(MainActivity.this);
@Override
protected void onPreExecute() {
super.onPreExecute();
dialog.setMessage("Please wait...");
dialog.setCanceledOnTouchOutside(false);
dialog.show();
}@Override
protected String[] doInBackground(String... params) {
String response;
try {
response = getLatLongByURL("http://maps.google.com/maps/api/geocode/json?address=mumbai&
sensor=false");
Log.d("response",""+response);
return new String[]{response};
} catch (Exception e) {
return new String[]{"error"};
}
}@Override
protected void onPostExecute(String... result) {
try {
JSONObject jsonObject = new JSONObject(result[0]);
double lng = ((JSONArray)jsonObject.get("results")).getJSONObject(0)
.getJSONObject("geometry").getJSONObject("location")
.getDouble("lng");
double lat = ((JSONArray)jsonObject.get("results")).getJSONObject(0)
.getJSONObject("geometry").getJSONObject("location")
.getDouble("lat");
Log.d("latitude", "" + lat);
Log.d("longitude", "" + lng);
} catch (JSONException e) {
e.printStackTrace();
}
if (dialog.isShowing()) {
dialog.dismiss();
}
}
}public String getLatLongByURL(String requestURL) {
URL url;
String response = "";
try {
url = new URL(requestURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(15000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("GET");
conn.setDoInput(true);
conn.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
conn.setDoOutput(true);
int responseCode = conn.getResponseCode();
if (responseCode == HttpsURLConnection.HTTP_OK) {
String line;
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
while ((line = br.readLine()) != null) {
response += line;
}
} else {
response = "";
}} catch (Exception e) {
e.printStackTrace();
}
return response;
}
希望这会对你有所帮助。
另一答案试试吧。
private void getLatLongFromAddress(String address)
{
double lat= 0.0, lng= 0.0;
Geocoder geoCoder = new Geocoder(this, Locale.getDefault());
try
{
List<
Address>
addresses = geoCoder.getFromLocationName(address , 1);
if (addresses.size() >
0)
{
GeoPoint p = new GeoPoint(
(int) (addresses.get(0).getLatitude() * 1E6),
(int) (addresses.get(0).getLongitude() * 1E6));
lat=p.getLatitudeE6()/1E6;
lng=p.getLongitudeE6()/1E6;
Log.d("Latitude", ""+lat);
Log.d("Longitude", ""+lng);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
另一答案由于HttpClient已被折旧,您可以使用Asynctask尝试以下代码(另请注意,我们需要将地址编码为URL):
public class GeoCoding extends AsyncTask<
Void, Void, Void>
{
private String address;
private static final String TAG = GeoCoding.class.getSimpleName();
JSONObject jsonObj;
String URL;
private String Address1 = "", Address2 = "", City = "", State = "", Country = "", County = "", PIN = "", Area="";
privatedouble latitude, longitude;
HttpURLConnection connection;
BufferedReader br;
StringBuilder sb ;
public GeoCoding(String address){
this.address = address;
}public String getArea(){
return Area;
}public void getAddress() {
Address1 = "";
Address2 = "";
City = "";
State = "";
Country = "";
County = "";
PIN = "";
Area ="";
try {String Status = jsonObj.getString("status");
if (Status.equalsIgnoreCase("OK")) {
JSONArray Results = jsonObj.getJSONArray("results");
JSONObject zero = Results.getJSONObject(0);
JSONArray address_components = zero.getJSONArray("address_components");
for (int i = 0;
i <
address_components.length();
i++) {
JSONObject zero2 = address_components.getJSONObject(i);
String long_name = zero2.getString("long_name");
JSONArray mtypes = zero2.getJSONArray("types");
String Type = mtypes.getString(0);
if (! TextUtils.isEmpty(long_name) || !long_name.equals(null) || long_name.length() >
0 || !long_name.equals("")) {
if (Type.equalsIgnoreCase("street_number")) {
Address1 = long_name + " ";
} else if (Type.equalsIgnoreCase("route")) {
Address1 = Address1 + long_name;
} else if (Type.equalsIgnoreCase("sublocality")) {
Address2 = long_name;
} else if (Type.equalsIgnoreCase("locality")) {
City = long_name;
} else if (Type.equalsIgnoreCase("administrative_area_level_2")) {
County = long_name;
} else if (Type.equalsIgnoreCase("administrative_area_level_1")) {
State = long_name;
} else if (Type.equalsIgnoreCase("country")) {
Country = long_name;
} else if (Type.equalsIgnoreCase("postal_code")) {
PIN = long_name;
}else if( Type.equalsIgnoreCase("neighborhood")){
Area = long_name;
}
}
}
}} catch (Exception e) {
e.printStackTrace();
}}public void getGeoPoint(){
try{
longitude = ((JSONArray)jsonObj.get("results")).getJSONObject(0)
.getJSONObject("geometry").getJSONObject("location")
.getDouble("lng");
latitude = ((JSONArray)jsonObj.get("results")).getJSONObject(0)
.getJSONObject("geometry").getJSONObject("location")
.getDouble("lat");
}catch (Exception e){
e.printStackTrace();
}}@Override
protected Void doInBackground(Void... params){
try {
StringBuilder urlStringBuilder = new StringBuilder("http://maps.google.com/maps/api/geocode/json");
urlStringBuilder.append("?address=" + URLEncoder.encode(address, "utf8"));
urlStringBuilder.append("&
sensor=false");
URL = urlStringBuilder.toString();
Log.d(TAG, "URL: " + URL);
URL url = new URL(URL);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setDoInput(true);
connection.connect();
br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
sb
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 在Android中使用Apache POI时的兼容性问题
- 在Android中,我应该使用什么来在图像上创建可移动对象()
- 使用Paperclip保存照片时,Rails app“无法分配内存”
- 如何通过ADB向Android设备发送语音命令
- Android Studio(按特定编号删除发送和接收的短信)
- 最频繁触发Android接收器()
- Android任务杀手列表
- 使用kotlin从android中的BroadcastReceiver类访问edittext
- Android BroadcastReceiver没有更新Widget