精华内容
下载资源
问答
  • 反向地理编码

    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;
    			}
    		}
    	};
    


    展开全文
  • Verso - 离线反向地理编码
  • 反向地理编码确定地图上给出点的地址。本例展示了如何通过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进行地理编码和反向地理编码的简单包装。 产品特点 地理编码和反向地理编码的包装,以及基于块的编码。 同时使用Google Geocoding API和Apple...
  • 地理编码和反向地理编码的一个宁静的API 地名数据库。 快速开始 默认情况下,加载cities500 。 要更改默认数据集,请将GEONAMES_DATA环境变量设置为GEONAMES_DATA任何值: cities15000 (220万)人口> 15000或首都...
  • 位于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包-正向和反向地理编码
  • 地理编码和反向地理编码  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)
        }
    }

    功能效果图如下:

      

    展开全文
  • 可以定位到经纬度,但是根据经纬度进行反向地理编码的方法不会,求大神教
  • 反向地理编码用法

    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地理编码 使用flutter,dart,mapbox和flutter-mapbox-gl插件的正向和反向地理编码实现
  • 以Go的方式开发的地理编码服务,既习惯又优雅,而不仅仅是golang。 该产品旨在向任何地理编码服务开放。 基于此, MapQuest 这里 每个客户在〜50 LoC中实现。 它使您仅需更改一条线路即可从一项服务切换到另一项...
  • 在我之前的教程( 基于Android的基于... 该过程被称为反向地理编码 ,它是的逆过程地理编码 ,其中涉及找到相关联的地理坐标从其他地理数据,例如街道地址(通常表示为纬度和经度),或邮政编码(邮政代码)。 为...
  • A 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节地理编码和反向地理编码,作者 【美】Kyle Richter , Joe Keeley,更多章节内容可以访问云栖社区“异步社区”公众号查看 ...
  • 雅虎财经api 在我之前的教程( 基于Android的基于... 该过程被称为反向地理编码 ,它是的逆过程地理编码 ,其中涉及找到相关联的地理坐标从其他地理数据,例如街道地址(通常表示为纬度和经度),或邮政编码(邮政...
  • <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....
  • // 3.0 反向地理编码    AMapReGeocodeSearchRequest *regeo = [[AMapReGeocodeSearchRequest alloc] init];  regeo.location = [AMapGeoPoint locationWithLatitude:coordinate.latitude longitude:coordinat
  • 什么是地理编码 地理编码是将地址(如“1600 Amphitheatre Parkway, Mountain View, CA”)转换为地理坐标(如纬度 37.423021 和经度 -122.083739)的过程,您可以根据该地理坐标放置标记或定位地图。Google ...
  • Android 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(@...
  • <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>
  • } #pragma mark ----反向地理编码 - (void)reverseGeoCodeWithLatitude:(NSString *)latitude withLongitude:(NSString *)longitude { //发起反向地理编码检索 CLLocationCoordinate2D coor; coor.latitude = ...
  • //开始反向组装地理编码的接口地址。 StringBuilder url =new StringBuilder() ; url .append ( "http://maps.googleapis.com/maps/api/geocode/json?latlng=" ) ; url .append (location .getLatitude ()) ....
  • //实现逆地理编码的回调函数 - (void)onReGeocodeSearchDone:(AMapReGeocodeSearchRequest *)request response:(AMapReGeocodeSearchResponse *)response { if(response.regeocode != nil) { //通过...
  • <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 ...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 189
精华内容 75
关键字:

反向地理编码