A class for handling geocoding and reverse geocoding. Geocoding is the process of transforming a street address or other description of a location into a (latitude, longitude) coordinate. Reverse geocoding is the process of transforming a (latitude, longitude) coordinate into a (partial) address. The amount of detail in a reverse geocoded location description may vary, for example one might contain the full street address of the closest building, while another might contain only a city name and postal code. The Geocoder class requires a backend service that is not included in the core android framework. The Geocoder query methods will return an empty list if there no backend service in the platform. Use the isPresent() method to determine whether a Geocoder implementation exists.
https://developers.google.com/maps/documentation/geocoding/
http://stackoverflow.com/questions/9272918/service-not-available-in-geocoder
package com.example.android.location;
import java.util.List;
import java.util.Locale;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.json.JSONArray;
import org.json.JSONObject;
import android.annotation.SuppressLint;
import android.content.Context;
import android.location.Address;
import android.location.Geocoder;
import android.location.Location;
import android.net.http.AndroidHttpClient;
import android.os.AsyncTask;
import android.util.Log;
public class GeocoderHelper {
private static final AndroidHttpClient ANDROID_HTTP_CLIENT = AndroidHttpClient.newInstance(GeocoderHelper.class.getName());
private boolean running = false;
@SuppressLint("NewApi")
public void fetchCityName(final Context contex, final Location location) {
if (running)
return;
new AsyncTask<Void, Void, String>() {
protected void onPreExecute() {
running = true;
};
@Override
protected String doInBackground(Void... params) {
String cityName = null;
if (Geocoder.isPresent()) {
try {
Geocoder geocoder = new Geocoder(contex, Locale.getDefault());
List<Address> addresses = geocoder.getFromLocation(location.getLatitude(),
location.getLongitude(), 1);
if (addresses.size() > 0) {
cityName = addresses.get(0).getLocality();
}
} catch (Exception ignored) {
// after a while, Geocoder start to trhow
// "Service not availalbe" exception. really weird since
// it was working before (same device, same Android
// version etc..
}
}
if (cityName != null) // i.e., Geocoder succeed
{
return cityName;
} else // i.e., Geocoder failed
{
return fetchCityNameUsingGoogleMap();
}
}
// Geocoder failed :-(
// Our B Plan : Google Map
private String fetchCityNameUsingGoogleMap() {
String googleMapUrl = "http://maps.googleapis.com/maps/api/geocode/json?latlng="
+ location.getLatitude() + "," + location.getLongitude()
+ "&sensor=false&language=zh-CN";
try {
JSONObject googleMapResponse = new JSONObject(ANDROID_HTTP_CLIENT.execute(new HttpGet(googleMapUrl),
new BasicResponseHandler()));
// many nested loops.. not great -> use expression instead
// loop among all results
JSONArray results = (JSONArray) googleMapResponse.get("results");
for (int i = 0; i < results.length(); i++) {
// loop among all addresses within this result
JSONObject result = results.getJSONObject(i);
if (result.has("address_components")) {
JSONArray addressComponents = result.getJSONArray("address_components");
// loop among all address component to find a
// 'locality' or 'sublocality'
for (int j = 0; j < addressComponents.length(); j++) {
JSONObject addressComponent = addressComponents.getJSONObject(j);
if (result.has("types")) {
JSONArray types = addressComponent.getJSONArray("types");
// search for locality and sublocality
String cityName = null;
for (int k = 0; k < types.length(); k++) {
if ("locality".equals(types.getString(k)) && cityName == null) {
if (addressComponent.has("long_name")) {
cityName = addressComponent.getString("long_name");
} else if (addressComponent.has("short_name")) {
cityName = addressComponent.getString("short_name");
}
}
if ("sublocality".equals(types.getString(k))) {
if (addressComponent.has("long_name")) {
cityName = addressComponent.getString("long_name");
} else if (addressComponent.has("short_name")) {
cityName = addressComponent.getString("short_name");
}
}
}
if (cityName != null) {
return cityName;
}
}
}
}
}
} catch (Exception ignored) {
ignored.printStackTrace();
}
return null;
}
protected void onPostExecute(String cityName) {
running = false;
if (cityName != null) {
// Do something with cityName
Log.i("GeocoderHelper", cityName);
}
};
}.execute();
}
}
相关推荐
将Excel 中的文字地址转换成经纬度坐标(BD-09)。调用的百度地图的Geocoder API,使用代码前需要自己先注册一下相应的AK。
ol-geocoder, OpenLayers的Geocoder Nominatim OpenLayers控制编码器 用于 的编码器扩展。 需要 OpenLayers或者更高。 演示你可以在这里看到演示或者在 jsFiddle,如果你愿意。 还有一个用于创建自定义提供程序插件...
Laravel开发-geocoder .zip
$adapter, '<MAXMIND_API_KEY>', $service, $useSsl ), new \Geocoder\Provider\ArcGISOnline( $adapter, $sourceCountry, $useSsl ), ]); $geocoder->registerProvider( new \Geocoder\...
java用geocoder相关jar文件,编译时需要导入这些jar包
前端项目-esri-leaflet-geocoder,ESRI地理编码实用程序和传单搜索插件。
前端项目-perliedman-leaflet-control-geocoder,可扩展的地理编码,内置支持nomingim、bing、google、mapbox、photon、what3words、mapquest、mapzen,此处
楼主实战,根据自身需求加在对应位置即可————————————————强调!强调!强调!,里面代码功能只包含...当点击获取坐标功能按钮,实时获取经纬度传输到文本框,然后通过Geocoder工具进行逆向地理编码。
Java Geocoder关于PinPoint地理编码项目Java Geocoder是基于Java,Spring,Hibernate,PostgreSQL,美国人口普查数据和辛苦工作建立的开源地理编码服务! 通过添加Geocoder模块,该应用程序分为多个层:控制器,服务...
导入package:geocoder/geocoder.dart ,然后使用Geocoder.local来访问设备系统提供的地理编码服务。 例子: import 'package:geocoder/geocoder.dart' ; // From a query final query = "1600 Amphiteatre Parkway...
此 Geocoder 具有与 android.location.Geocoder 类似的 API,但它是独立于设备的实现并提供更丰富的 Address 对象。 有关更多详细信息,请参阅示例项目。 最低 API 级别 7 将此添加到 build.gradle 依赖项中,将 ...
适用于Google Maps API的Node.js Batch Geocoder 例子 var Geocoder = require ( "../lib/batch-geocoder" ) , geocoder = new Geocoder ( "./geocode-cache.csv" ) ; geocoder . on ( "finish" , function ( ...
OpenCage地理编码器 地理编码API的Ruby...geocoder = OpenCage :: Geocoder . new ( api_key : 'your-api-key-here' ) 对地址或地名进行地理编码 results = geocoder . geocode ( '82 Clerkenwell Road, London' )
演示了如何使用边界框对Android Geocoder进行编码时出现的问题。 AOSP问题-https: id 75575 gmaps-api-issue- id=7142 用法: 运行项目 输入搜索字词(或使用默认字词) 点击“使用边界框运行Geocoder”以使用...
地理名称地理编码器一个Solr SearchComponent,用于根据一组预先初始化的地理... 运行索引器: java -cp geonames-geocoder-0.0.1.jar in.geocoder.component.geocoder.util.Indexer US.txt 试用查询: 执照Apache 2.0
import 'react-map-gl-geocoder/dist/mapbox-gl-geocoder.css' 或者 标头中的链接标签: < link href =' ...
资源分类:Python库 所属语言:Python 资源全名:django-geocoder-0.2.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
Mapbox GL Geocoder ...import '@mapbox/mapbox-gl-geocoder/dist/mapbox-gl-geocoder.css' ; ... const geocoder = new MapboxGeocoder ( { accessToken : mapboxgl . accessToken , mapboxgl : mapboxgl } )
资源来自pypi官网。 资源全名:geocoder-1.33.0-py2.py3-none-any.whl