地图篇-02.地理编码,-02地理编码【分分快三计划

作者:分分快三计划

 

  当我们要在App实现功能:输入地名,编码为经纬度,实现导航功能。

地理编码和反地理编码到这里就结束了,希望能帮到大家,如果有什么地方不足或者有错误的话请告诉我,我会第一时间纠正.谢谢...

地图篇-02.地理编码(GeoCoding/ReverseGeoCoding) 上一节给大家简单介绍了一下获取用户位置,用经纬度表示位置...

德地图 JS API 使用前的准备工作请参考官方网站说明: https://lbs.amap.com/api/javascript-api/guide/abc/prepare

iOS 原生地图地理编码与反地理编码,ios地图编码地理

 

地图篇-02.地理编码(GeoCoding/ReverseGeoCoding)

上一节给大家简单介绍了一下获取用户位置,用经纬度表示位置.这一节我们来讲讲地理编码.

首先,我们要知道什么是地理编码

概念:

  地理编码:指的是将统计资料或是地址信息建立空间坐标关系的过程,称为地理编码.实现了将中文地址或地名描述转换为经纬度表示在地图上(地球表面上)功能。

  反地理编码:实现了将地图上(地球表面上)的经纬度转换为中文地址或地名描述.

编码前准备:

  在写代码之前,在storyboard中拖几个控件,如下图:

分分快三计划 1

分分快三计划 2

分分快三计划 3分分快三计划 4

拖好这些控件之后,一定要记得初始化tabBarController,下图

分分快三计划 5

完成以上步骤之后,我们就要开始写代码了

因为要将两个UIViewController显示在视图上,所以创建两个类,并且关联上

分分快三计划 6

分分快三计划 7

关联好了之后就把我们需要的控件,拖入到相应的类中

分分快三计划 8

分分快三计划 9

现在就可以开始写代码了(重点):

首先,导入头文件   

#import <CoreLocation/CoreLocation.h>,上一小节中说过,这个头文件如果有很多类都要用到,可以写一个pch文件,这里简单说一下方法:

分分快三计划 10

完成上一步你会发现CoreLocation在类中还是不能用,不要急,还有下一步:

分分快三计划 11

分分快三计划 12

 

上代码:

地理编码(GeoCoding):

 1 //
 2 //  GeocodViewController.m
 3 //  地理编码
 4 //
 5 //  Created by admin on 16/5/21.
 6 //  Copyright © 2016年 KXZDJ. All rights reserved.
 7 //
 8 
 9 #import "GeocodViewController.h"
10 
11 @interface GeocodViewController ()
12 @property (weak, nonatomic) IBOutlet UITextField *addressFiled;
13 @property (weak, nonatomic) IBOutlet UILabel *latitudeLabel;
14 @property (weak, nonatomic) IBOutlet UILabel *lontitudeLabel;
15 @property (weak, nonatomic) IBOutlet UITextView *detailTextView;
16 
17 @end
18 
19 @implementation GeocodViewController
20 - (IBAction)geoCode:(id)sender {
21     
22     //创建地理编码对象
23     CLGeocoder *geo = [[CLGeocoder alloc] init];
24     
25     //地理编码
26     [geo geocodeAddressString:self.addressFiled.text completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
27         //判断placemarks如果没有值或者error存在,就打印错误信息
28         if (placemarks.count == 0 || error) {
29             NSLog(@"%@",error);
30             return;
31         }
32         
33         //获取地标
34         CLPlacemark *cpl = [placemarks lastObject];
35         
36         //纬度
37         CLLocationDegrees latitude = cpl.location.coordinate.latitude;
38         
39         //经度
40         CLLocationDegrees longtitude = cpl.location.coordinate.longitude;
41         
42         //赋值(注意经纬度是double类型)
43         self.latitudeLabel.text = [NSString stringWithFormat:@"%f",latitude];
44         self.lontitudeLabel.text = [NSString stringWithFormat:@"%f",longtitude];
45         
46         //定义一个临时字符串接收获取到的地址名字
47         NSString *tempStr = @"";
48         
49         //遍历placemarks,获取当前坐标位置
50         for (CLPlacemark *cpl in placemarks) {
51             //这里为什么要追加字符串呢?因为placemarks是一个数组,里面有很多重名的地方(比如:上海有个南京路步行街,成都有个春熙路步行街,当用户输入步行街的时候,这两个都会显示出来,如果不追加的话,就只会显示一个)
52             tempStr = [tempStr stringByAppendingString:[NSString stringWithFormat:@"%@n",cpl.name]];
53         }
54         
55         //赋值给self.detailTextView
56         self.detailTextView.text = tempStr;
57         
58         
59     }];
60 }
61 
62 - (void)viewDidLoad {
63     [super viewDidLoad];
64     
65 }
66 
67 
68 @end

运行效果图:

分分快三计划 13

现在大家应该理解placemarks和代码中拼接字符串的意义所在了.

反地理编码(ReverseGeoCoding):

 1 //
 2 //  ReverseCodeViewController.m
 3 //  地理编码
 4 //
 5 //  Created by admin on 16/5/21.
 6 //  Copyright © 2016年 KXZDJ. All rights reserved.
 7 //
 8 
 9 #import "ReverseCodeViewController.h"
10 
11 
12 @interface ReverseCodeViewController ()
13 @property (weak, nonatomic) IBOutlet UITextField *latitudeLabel;
14 @property (weak, nonatomic) IBOutlet UITextField *longtitudeLabel;
15 @property (weak, nonatomic) IBOutlet UITextView *detailTextView;
16 
17 @end
18 
19 @implementation ReverseCodeViewController
20 
21 - (void)viewDidLoad {
22     [super viewDidLoad];
23     
24 }
25 - (IBAction)reverseCode:(id)sender {
26     //创建地理编码
27     CLGeocoder *reverseCode = [[CLGeocoder alloc] init];
28     
29     //纬度
30     CLLocationDegrees latitude = [self.latitudeLabel.text doubleValue];
31     
32     //经度
33     CLLocationDegrees longitude = [self.longtitudeLabel.text doubleValue];
34     
35     //创建地理位置
36     CLLocation *local = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude];
37     
38     //反地理编码
39     [reverseCode reverseGeocodeLocation:local completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
40         //判断placemarks如果没有值或者error存在,就打印错误信息
41         if (placemarks.count == 0 || error) {
42             NSLog(@"地理编码失败");
43             return;
44         }
45         
46         NSLog(@"%ld",placemarks.count);
47         
48         //获取地址
49         CLPlacemark *cpl = [placemarks lastObject];
50         NSLog(@"%@",cpl.name);
51         
52         //赋值给detailTextView
53         self.detailTextView.text = cpl.name;
54     }];
55     
56     
57 }
58 
59 @end

运行效果图:

分分快三计划 14

在反地理编码的时候要注意了:

1.如果输入的经纬度,在地图上是存在的,但是编码失败,不要着急,那是因为系统会自动判定你在哪个国家,然后你只被允许访问这个国家内的经纬度.

2.反地理编码的时候大家可能会发现,数组里面只有一个值,这就印证了一个具体的经纬度的唯一性.

 

 

  那么,我需要用到原生地图中的地理编码功能,而在Core Location中主要包含了定位、地理编码(包括反编码)功能。

 

 

在文件中导入

 

#import <CoreLocation/CoreLocation.h>

 

地理编码:

/**
 地理编码
 */
- (void)geocoder {

    CLGeocoder *geocoder=[[CLGeocoder alloc]init];

    NSString *addressStr = @"广东省深圳市宝安区";//位置信息

    [geocoder geocodeAddressString:addressStr completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        if (error!=nil || placemarks.count==0) {
            return ;
        }
        //创建placemark对象
        CLPlacemark *placemark=[placemarks firstObject];
        //经度
        NSString *longitude =[NSString stringWithFormat:@"%f",placemark.location.coordinate.longitude];
        //纬度
        NSString *latitude =[NSString stringWithFormat:@"%f",placemark.location.coordinate.latitude];

        NSLog(@"经度:%@,纬度:%@",longitude,latitude);

    }];

}

 

 

 

地理反编码:

 

/**
 地理反编码
 */
- (void)reverseGeocoder{
    //创建地理编码对象
    CLGeocoder *geocoder=[[CLGeocoder alloc]init];

    //经度
    NSString *longitude = @"113.23";
    //纬度
    NSString *latitude = @"23.16";


    //创建位置
    CLLocation *location=[[CLLocation alloc]initWithLatitude:[latitude floatValue] longitude:[longitude floatValue]];


    //反地理编码
    [geocoder reverseGeocodeLocation:location completionHandler:^(NSArray<CLPlacemark *> * _Nullable placemarks, NSError * _Nullable error) {
        //判断是否有错误或者placemarks是否为空
        if (error !=nil || placemarks.count==0) {
            NSLog(@"%@",error);
            return ;
        }
        for (CLPlacemark *placemark in placemarks) {
            //详细地址
            NSString *addressStr = placemark.name;
            NSLog(@"详细地址1:%@",addressStr);
            NSLog(@"详细地址2:%@",placemark.addressDictionary);
            NSLog(@"详细地址3:%@",placemark.locality);
        }

    }];
}

 

Demo:

 

地图篇-02.地理编码,-02地理编码【分分快三计划】。/**

 *  Author:Jn

 *  GitHub:

 *  cnblogs:

 *  QQ:1294405741

 */

原生地图地理编码与反地理编码,ios地图编码地理 当我们要在App实现功能:输入地名,编码为经纬度,实现导航功能。 那么,我需要用...

地图篇-02.地理编码,-02地理编码

方法写好了,调用很简单了:

根据地名实现地图标记定位,主要依赖高德地图的:地理编码与逆地理编码。下面来看具体的实现代码:

分分快三计划 15

  1. 效果图

 

  1. 地图篇-02.地理编码,-02地理编码【分分快三计划】。HTML (地图容器)

  1. JAVASCRIPT

    function markLocation(mapId, address) {

     AMap.plugin('AMap.Geocoder', function() {
         var geocoder = new AMap.Geocoder();            
         geocoder.getLocation(address, function(status, result) {
             if (status === 'complete' && result.info === 'OK') {
    
                 // 经纬度                      
                 var lng = result.geocodes[0].location.lng;
                 var lat = result.geocodes[0].location.lat;
    
                 // 地图实例
                 var map = new AMap.Map(mapId, {
                     resizeEnable: true, // 允许缩放
                     center: [lng, lat], // 设置地图的中心点
                     zoom: 15        // 设置地图的缩放级别,0 - 20
                 });
    
                 // 添加标记
                 var marker = new AMap.Marker({
                     map: map,
                     position: new AMap.LngLat(lng, lat),   // 经纬度
                 });
             } else {
                 console.log('定位失败!');
             }
         });
     });
    

    }

 

// 传入地图容器ID 和 地名
markLocation('container', '湖北省武汉市');

本文由分分快三计划发布,转载请注明来源

关键词: 分分快三计划