-
反向地理编码
2016-03-21 08:21:51使用Google提供的Geocoding API完成反向地理编码 Google提供的反向地理编码接口为: http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=true_or_false 其中,sensor=true_...一.使用Google提供的Geocoding API完成反向地理编码
Google提供的反向地理编码接口为:
http://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&sensor=true_or_false
其中,sensor=true_or_false表示这条请求是否来自于某个设备的位置传感器,通常指定成false.
二.对经纬度进行解析
基本步骤:先发送一个HTTP请求到谷歌服务器,然后对返回的JSON数据进行解析
public static final int SHOW_LOCATION = 0; // 显示经纬度 private void showLocation(final Location location) { new Thread(new Runnable() { @Override public void run() { try { //组装反向地理编码的接口地址 StringBuilder url = new StringBuilder(); url.append("http://maps.googleapis.com/maps/api/geocode/json?latlng="); url.append(location.getLatitude()).append(","); url.append(location.getLongitude()); url.append("&sensor=false"); // HttpClient是一个接口,无法创建实例,通常情况下创建一个DefaultHttpClient对象 HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(url.toString()); // 在请求消息头中指定语言,保证服务器会返回中文数据 httpGet.addHeader("Accept-Language", "zh-CN"); HttpResponse httpResponse = httpClient.execute(httpGet); if (httpResponse.getStatusLine().getStatusCode() == 200) { HttpEntity entity = httpResponse.getEntity(); String response = EntityUtils.toString(entity, "utf-8"); JSONObject jsonObject = new JSONObject(response); // 获取results节点下的位置信息 JSONArray resultArray = jsonObject .getJSONArray("results"); if (resultArray.length() > 0) { JSONObject subObject = resultArray.getJSONObject(0); String address = subObject .getString("formatted_address"); Message message = new Message(); message.what = SHOW_LOCATION; message.obj = address;//使用obj字段来携带一个Object对象 handler.sendMessage(message); } } } catch (Exception e) { e.printStackTrace(); } } }).start(); } //异步消息处理机制,在主线程中更新UI private Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case SHOW_LOCATION: String currentPosition = (String) msg.obj; positionTextView.setText(currentPosition); break; default: break; } } };
-
Android-Verso-离线反向地理编码
2019-08-13 05:49:59Verso - 离线反向地理编码 -
通过ArcGIS JavaScript API创建 标准地理编码和反向地理编码
2017-10-19 14:45:54反向地理编码确定地图上给出点的地址。本例展示了如何通过ArcGIS JavaScript API做反向地理编码。 反向地理编码和常规的地理编码请求都使用Locator类和ArcGIS Server geocode service。 调用 ...描述
反向地理编码确定地图上给出点的地址。本例展示了如何通过ArcGIS JavaScript API做反向地理编码。
反向地理编码和常规的地理编码请求都使用Locator类和ArcGIS Server geocode service。 调用 locationToAddress方法(和常规的地理编码相反addressToLocations)进行反向地理编码。下面的监听器捕获鼠标单击事件并为单击的点调用locationToAddress方法:
dojo.connect(map, "onClick", function(evt) {
map.graphics.clear();
locator.locationToAddress(evt.mapPoint, 100);
});
onLocationToAddressComplete事件的监听器传递最好的AddressCandidate给一个回调函数。然后回调函数结合候选的点和图形并增加到地图里。函数也使用 InfoTemplate格式化一个单击图形显示的InfoWindow。注意为了定位信息窗口,地址结果的地图点必须被转换为一个屏幕点。
var screenPnt = map.toScreen(candidate.location);
map.infoWindow.show(screenPnt,map.getInfoWindowAnchor(screenPnt));
为了保持信息窗口总是可见的,信息窗口位于锚点所在的四分之一地图的相反方向。例如,如果点位于地图右上角,信息窗口显示在点的左下方。
-
LMGeocoder:使用Google Geocoding API和Apple iOS Geocoding Framework进行地理编码和反向地理编码的简单...
2021-02-04 10:02:31LMGeocoder是使用Google Geocoding API和Apple iOS Geocoding Framework进行地理编码和反向地理编码的简单包装。 产品特点 地理编码和反向地理编码的包装,以及基于块的编码。 同时使用Google Geocoding API和Apple... -
geonames-api:针对地名索引的地理编码和反向地理编码的API-源码
2021-02-16 05:09:34地理编码和反向地理编码的一个宁静的API 地名数据库。 快速开始 默认情况下,加载cities500 。 要更改默认数据集,请将GEONAMES_DATA环境变量设置为GEONAMES_DATA任何值: cities15000 (220万)人口> 15000或首都... -
FCCurrentLocationGeocoder:iOS Geocoder,用于使用基于块的语法进行正向地理编码和反向地理编码用户的...
2021-02-04 09:58:48位于LocationManager和CLGeocoder之上的iOS Geocoder使用基于块的语法对用户的当前位置进行正向地理编码和反向地理编码。 它也可以用于对用户的大概位置(总是国家,几乎总是城市)进行地理编码,而无需征求许可... -
android 反向地理编码
2016-09-24 10:59:49学习了一下反向地理编码,但是服务器无响应总是505错误 下面主要代码: package com.adolph.locationtesttwo; import android.content.Context; import android.location.Location; import android.location....学习了一下反向地理编码,但是服务器无响应总是504错误
下面主要代码:
package com.adolph.locationtesttwo; import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Handler; import android.os.Message; import android.os.StrictMode; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.TextView; import android.widget.Toast; import android.util.Log; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import org.json.JSONArray; import org.json.JSONObject; import java.util.List; public class MainActivity extends AppCompatActivity { private TextView positionTextView; private LocationManager loacationManager; private String provider; public static final int SHOW_LOCATION = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); positionTextView = (TextView)findViewById(R.id.position_text_view); loacationManager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);// 获取的是位置服务 //获取所有可用的位置提供器 List<String> providerList = loacationManager.getProviders(true);//得到所有可用的位置提供器 if (providerList.contains(LocationManager.GPS_PROVIDER)){ provider = LocationManager.GPS_PROVIDER; }else if (providerList.contains(LocationManager.NETWORK_PROVIDER)){ provider= LocationManager.NETWORK_PROVIDER; }else{ Toast.makeText(this,"No location provider to use",Toast.LENGTH_SHORT).show(); return; } Location location = loacationManager.getLastKnownLocation(provider);//获取到记录当前位置信息的Location对象了 if (location != null){ //显示当前设备的位置信息 showLocation(location); } loacationManager.requestLocationUpdates(provider,5000,1,locationListener);//实现位置实时更新 } protected void onDestroy(){ super.onDestroy(); if (loacationManager != null){ //关闭程序时将监听器移除 loacationManager.removeUpdates(locationListener); } } LocationListener locationListener = new LocationListener(){ //当坐标改变时触发此函数,如果Provider传进相同的坐标,它就不会被触发 @Override public void onStatusChanged(String provider, int status, Bundle extras) { } // Provider被enable时触发此函数,比如GPS被打开 @Override public void onProviderEnabled(String provider) { } // Provider被disable时触发此函数,比如GPS被关闭 @Override public void onProviderDisabled(String provider) { } // Provider的在可用、暂时不可用和无服务三个状态直接切换时触发此函数 @Override public void onLocationChanged(Location location) { // 更新当前设备的位置信息 showLocation(location); } }; private void showLocation(final Location location) { new Thread(new Runnable() { @Override public void run() { try { // 组装反向地理编码的接口地址 StringBuilder url = new StringBuilder(); url.append("http://maps.googleapis.com/maps/api/geocode/json?latlng="); url.append(location.getLatitude()).append(","); url.append(location.getLongitude()); url.append("&sensor=false"); Log.i("xxx",url.toString()); HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(url.toString()); // 在请求消息头中指定语言,保证服务器会返回中文数据 httpGet.addHeader("Accept-Language", "zh-CN"); HttpResponse httpResponse = httpClient.execute(httpGet); Log.d("xxx","11"); String q = httpResponse.getStatusLine().getStatusCode()+"w"; Log.i("xxx",q); if (httpResponse.getStatusLine().getStatusCode() == 200) { Log.d("xxx","12"); HttpEntity entity = httpResponse.getEntity(); String response = EntityUtils.toString(entity, "utf-8"); JSONObject jsonObject = new JSONObject(response); // 获取results节点下的位置信息 JSONArray resultArray = jsonObject.getJSONArray ("results"); if (resultArray.length() > 0) { JSONObject subObject = resultArray. getJSONObject(0); // 取出格式化后的位置信息 String address = subObject.getString ("formatted_address"); Log.i("xxx",address); Message message = new Message(); message.what = SHOW_LOCATION; message.obj = address; handler.sendMessage(message); } } Log.d("xxx","13"); } catch (Exception e) { e.printStackTrace(); } } }).start(); } private Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case SHOW_LOCATION: String currentPosition = (String) msg.obj; positionTextView.setText(currentPosition); break; default: break; } } }; // private void showLocation(Location location) { // String currentPosition = "latitude is " + location.getLatitude() + "\n" // + "longitude is " + location.getLongitude(); // positionTextView.setText(currentPosition); // } }
-
opencage:用于OpenCage API的R包-正向和反向地理编码-源码
2021-02-05 14:48:04opencage:用于OpenCage API的R包-正向和反向地理编码 -
MapKit之地理编码和反向地理编码(CLGeocoder、CLPlacemark)
2016-06-27 13:48:59地理编码和反向地理编码 CLGeocoder类主要提供的服务是在具体经纬度信息和用户位置信息之间的转换。 CLGeocoder将根据请求的所有信息决定返回什么类型的信息。比如:如果用户是在高速上快速移动,可能返回...地理编码和反向地理编码CLGeocoder类主要提供的服务是在具体经纬度信息和用户位置信息之间的转换。CLGeocoder将根据请求的所有信息决定返回什么类型的信息。比如:如果用户是在高速上快速移动,可能返回整个区域的名称,而不是用户通过小公园的名称。应用应该明白怎样使用地理编码,因为地理编码对于每一个app都是有频率限制的,如果在较短的时间内进行太多的请求,可能会导致请求失败(当使用超过了最大的限制,地理编码将会返回应该错误对象kCLErrorNetwork)。下面有一些相关的使用规则:
1)对于任意的用户行为,最多只发送一次请求。2)如果用户执行的多次请求涉及到相同的位置,应该重用最初的地理编码请求结果,而不是开始一个新的请求。如:http://stackoverflow.com/questions/32041454/what-is-the-best-way-to-load-static-objects-in-an-ios-app存储到本地,下次直接使用。3)当想要自动更新用户的当前位置时(如:用户正在移动),要注意:仅仅是当用户已经移动一段距离并且有一段合理的时间才发起一个新的编码请求。例如:不应该在每分钟发送超过一个的编码请求。4)不要每次在用户不能够立马看到结果的时候,又开始一个编码请求。当应用处于后台绘制inactive状态不要进行请求操作。由于 ios 的地图必须根据精度和纬度来完成,因此如果需要让程序根据地址进行定位判断,则需要先把地址解析成精度,纬度.两个基本的概念:
地理编码:把普通用户能够看懂的字符串地址转换成为精度,纬度.
反向地理编码:把精度,纬度转换成普通的字符串地址.
iOS为我们提供了3个方法来进行地理编码,一个方法进行反向地理编码,如下://reverse geocode requests 反向地理编码根据给定的经纬度得到对应的地址。当地理/反地理编码完成时,就会调用CLGeocodeCompletionHandler,可以获取到CLPlacemark对象. CLGeocodeCompletionHandler:这个block传递2个参数:error:当编码出错时(比如编码不出具体的信息)有值,placemarks:里面装着CLPlacemark对象publicfunc reverseGeocodeLocation(location: CLLocation, completionHandler: CLGeocodeCompletionHandler)//forward geocode requests 地理编码 根据给定的字符串进行请求,解析得到对应字符串地址的经纬度信息。publicfunc geocodeAddressDictionary(addressDictionary: [NSObject : AnyObject], completionHandler: CLGeocodeCompletionHandler)
publicfunc geocodeAddressString(addressString: String, completionHandler: CLGeocodeCompletionHandler)
//该方法跟前面方法差不多,区别在于多了一个CLRegion参数,该参数代表某个区域,这样可以提高编码解析的准确性。
publicfunc geocodeAddressString(addressString: String, inRegion region: CLRegion?, completionHandler: CLGeocodeCompletionHandler)CLPlacemark类:CLPlacemark它存储了给定精度和纬度对应的地标数据。该对象包含了以下信息:publicinit(placemark: CLPlacemark)//使用一个CLPlacemark初始化一个CLPlacemark
@NSCopyingpublicvar location: CLLocation? { get }//返回值封装了CLPlacemark对象代表的精度和纬度信息.
@NSCopyingpublicvar region: CLRegion? { get }//对应placemark的地理区域
@available(iOS9.0, *)
@NSCopyingpublicvar timeZone: NSTimeZone? { get } //对应placemark的时区
publicvar addressDictionary: [NSObject : AnyObject]? { get }//返回值封装了CLPlacemark所代表的地址详情信息.
// address dictionary properties
publicvar name: String? { get } //返回CLPlacemark所代表的地址名称.
publicvar thoroughfare: String? { get } //所在地址的道路名
publicvar subThoroughfare: String? { get } //所在地址的下级道路名
publicvar locality: String? { get } //所在地址的城市名,市
publicvar subLocality: String? { get } //下一级城市名, 区
publicvar administrativeArea: String? { get } //返回CLPlacemark所代表行政区域
publicvar subAdministrativeArea: String? { get } //返回CLPlacemark所代表次级行政区
publicvar postalCode: String? { get } //代表所在地址的邮编
publicvar ISOcountryCode: String? { get } //代表地址所在国家的代码.中国:CN
publicvar country: String? { get } // 代表地址所在国家
publicvar inlandWater: String? { get } //河流名称
publicvar ocean: String? { get } //与Placemark相关的海洋publicvar areasOfInterest: [String]? { get } //与Placemark相关区域的兴趣点小Demo,实现地理编码和反向地理编码的基本功能:输入地址字符串得到对应的位置信息,输入给定的经纬度得到对应的地址。代码如下:import UIKit import CoreLocation class FourViewController: UIViewController { //MARK:地理编码相关 @IBOutletweakvar addressTextField: UITextField! @IBOutletweakvar longtitudeLabel: UILabel! @IBOutletweakvar latitudeLabel: UILabel! @IBOutletweakvar detailAddressLabel: UILabel! //MARK:反地理编码相关 @IBOutletweakvar longtitudeTextField: UITextField! @IBOutletweakvar latitudeTextField: UITextField! @IBOutletweakvar reverseDetailAddressLabel: UILabel! lazyvar geocoder: CLGeocoder = { let geocoder: CLGeocoder = CLGeocoder() return geocoder }() overridefunc viewDidLoad() { super.viewDidLoad() view.backgroundColor = UIColor.whiteColor() } //MARK:地理编码地名 -> 经纬度说白了就是输入地址得到对应的位置信息,包括精度维度. @IBActionfunc geocode(sender: AnyObject) { //1:获得输入的地址并进行是否有内容判断 iflet address = self.addressTextField.textwhere address != "" { //MARK:方法一:直接传入字符串地址 self.geocoder.geocodeAddressString(address, completionHandler: { (placeMarks, error) in if (error != nil || (placeMarks?.count == 0)) { self.detailAddressLabel.text = "您输入的地址找不到!"; }else{ //编码成功(找到了具体的位置信息),打印输出查询到的所有地标信息 for placeMark in placeMarks!{ print("name = \(placeMark.name),country = \(placeMark.locality),postalCode = \(placeMark.postalCode),ISOcountryCode = \(placeMark.ISOcountryCode)") } //显示第一个地标信息 CLPlacemark代表了定位的所有信息。 let firstPlaceMark = placeMarks!.first self.detailAddressLabel.text = firstPlaceMark!.name iflet location = firstPlaceMark!.location?.coordinate{ self.latitudeLabel.text = "\(location.latitude)" self.longtitudeLabel.text = "\(location.longitude)" } } }) } } //MARK:反地理编码经纬度 -> 地名 @IBActionfunc reverseGeocode(sender: AnyObject) { ifself.longtitudeTextField.text != "" && self.latitudeTextField.text != ""{ let location = CLLocation(latitude:CLLocationDegrees(self.latitudeTextField.text!)!, longitude: CLLocationDegrees(self.longtitudeTextField.text!)!) self.geocoder.reverseGeocodeLocation(location, completionHandler: { (placeMarks, error) in if (error != nil || (placeMarks?.count == 0)) { self.reverseDetailAddressLabel.text = "您输入的地址找不到!"; print("\(error?.userInfo)") }else{ //编码成功,输出查询到的所有地标信息 for placeMark in placeMarks!{ print("name = \(placeMark.name),country = \(placeMark.locality),postalCode = \(placeMark.postalCode),ISOcountryCode = \(placeMark.ISOcountryCode)") } //显示最前面的地标信息 CLPlacemark代表了定位的所有信息。 let firstPlaceMark = placeMarks!.first self.reverseDetailAddressLabel.text = firstPlaceMark!.name } }) } } overridefunc touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { self.view.endEditing(true) } }
功能效果图如下: -
求教:安卓 百度的反向地理编码
2016-02-24 08:42:09可以定位到经纬度,但是根据经纬度进行反向地理编码的方法不会,求大神教 -
反向地理编码用法
2012-06-01 13:33:22与地图打交道时,有时需要查找经纬度获取地理信息,MapKit提供了一种工具--反向地理编码 MKReverseGeocoder MKReverseGeocoder *reverseGeocoder =[[[MKReverseGeocoder alloc] initWithCoordinate:self.mapView.... -
反向地理编码用法
2011-05-30 09:41:00与地图打交道时,有时需要查找经纬度获取地理信息,MapKit提供了一种工具--反向地理编码 MKReverseGeocoder <br />MKReverseGeocoder *reverseGeocoder =[[[MKReverseGeocoder alloc] initWithCoordinate... -
Flutter-Geocoding:使用flutter,dart,mapbox和flutter-mapbox-gl插件的正向和反向地理编码实现-源码
2021-02-15 09:03:59Flutter地理编码 使用flutter,dart,mapbox和flutter-mapbox-gl插件的正向和反向地理编码实现 -
geo-golang:转到库以访问地理编码和反向地理编码API-源码
2021-02-03 14:32:26以Go的方式开发的地理编码服务,既习惯又优雅,而不仅仅是golang。 该产品旨在向任何地理编码服务开放。 基于此, MapQuest 这里 每个客户在〜50 LoC中实现。 它使您仅需更改一条线路即可从一项服务切换到另一项... -
带有Yahoo API的Android反向地理编码– PlaceFinder
2020-04-02 10:08:05在我之前的教程( 基于Android的基于... 该过程被称为反向地理编码 ,它是的逆过程地理编码 ,其中涉及找到相关联的地理坐标从其他地理数据,例如街道地址(通常表示为纬度和经度),或邮政编码(邮政代码)。 为... -
使用Python进行地理编码和反向地理编码
2020-09-06 23:28:21A snapshot of the map visualization (clustered locations) created using Folium 使用Folium创建的地图可视化快照(聚集位置) 反向地理编码 (Reverse Geocoding) Reverse geocoding, on the other hand, converts... -
《iOS组件与框架——iOS SDK高级特性剖析》——第2章,第2.5节地理编码和反向地理编码...
2017-05-02 15:26:00本节书摘来自异步社区《iOS组件与框架——iOS SDK高级特性剖析》一书中的第2章,第2.5节地理编码和反向地理编码,作者 【美】Kyle Richter , Joe Keeley,更多章节内容可以访问云栖社区“异步社区”公众号查看 ... -
雅虎财经api_带有Yahoo API的Android反向地理编码– PlaceFinder
2020-04-27 15:35:52雅虎财经api 在我之前的教程( 基于Android的基于... 该过程被称为反向地理编码 ,它是的逆过程地理编码 ,其中涉及找到相关联的地理坐标从其他地理数据,例如街道地址(通常表示为纬度和经度),或邮政编码(邮政... -
处理反向地理编码响应
2019-06-10 12:18:28<p>I have got one reverse geocoding script which returns a city name on the basis of latitude & longitude.It works fine whenever we tried to see the result only for one city.... -
IOS-OC-高德地图-反向地理编码 - 坐标转位置
2016-11-29 10:06:24// 3.0 反向地理编码 AMapReGeocodeSearchRequest *regeo = [[AMapReGeocodeSearchRequest alloc] init]; regeo.location = [AMapGeoPoint locationWithLatitude:coordinate.latitude longitude:coordinat -
Google Geocoding API---地理编码与反向地理编码
2013-02-01 10:45:28什么是地理编码 地理编码是将地址(如“1600 Amphitheatre Parkway, Mountain View, CA”)转换为地理坐标(如纬度 37.423021 和经度 -122.083739)的过程,您可以根据该地理坐标放置标记或定位地图。Google ... -
geocoder_Android Geocoder反向地理编码
2020-07-14 04:24:52Android Geocoder反向地理编码项目结构 (Android Geocoder Reverse Geocoding Project Structure) We’ll need the google maps and google places api. So let’s add them in the build.gradle file as shown ... -
iOS CLGeocoder 反向地理编码
2014-07-15 22:20:50//反向地理编码 completionHandler:^(NSArray *placemarks, NSError *error) { if (!error && [placemarks count] > 0) { NSDictionary *dict = [[placemarks objectAtIndex:0] addressDictionary]; NSLog(@... -
在PHP中使用Nominatim进行反向地理编码
2018-05-04 19:11:10<p>I am trying to perform some reverse geocoding in php. Unfortunately, I am getting an error. <pre><code>$lon = 100.753; $lat = 13.69362; ...function getAddress($RG_Lat,$RG_Lon) ... </div> -
ios 集成百度地图(获取定位,反向地理编码)
2018-10-16 16:29:16} #pragma mark ----反向地理编码 - (void)reverseGeoCodeWithLatitude:(NSString *)latitude withLongitude:(NSString *)longitude { //发起反向地理编码检索 CLLocationCoordinate2D coor; coor.latitude = ... -
反向地理编码-显示位置信息
2016-10-06 14:59:09//开始反向组装地理编码的接口地址。 StringBuilder url =new StringBuilder() ; url .append ( "http://maps.googleapis.com/maps/api/geocode/json?latlng=" ) ; url .append (location .getLatitude ()) .... -
iOS 高德地图反向地理编码 onReGeocodeSearchDone 不回调
2016-06-28 11:35:07//实现逆地理编码的回调函数 - (void)onReGeocodeSearchDone:(AMapReGeocodeSearchRequest *)request response:(AMapReGeocodeSearchResponse *)response { if(response.regeocode != nil) { //通过... -
反向地理编码一组坐标
2010-04-09 23:36:04<p>I have sets of co-ordinates in the following format (-33.9,18.6) <p>How do I go about getting the name of the nearest town or Country for those co-ords?...<p>EDIT: Am trying the ...
收藏数
189
精华内容
75