地址编码
地理编码指的是将地址信息建立空间坐标关系的过程。又可分为正向地理编码和反向地理编码。
1.地理编码(即地址转坐标)
地理编码,又称为地址匹配,是从已知的地址描述到对应的经纬度坐标的转换过程。该功能适用于根据用户输入的地址确认用户具体位置的场景,常用于配送人员根据用户输入的具体地址找地点。
地址的定义: 首先,地址肯定是一串字符,内含国家、省份、城市、城镇、乡村、街道、门牌号码、屋邨、大厦等建筑物名称。按照由大区域名称到小区域名称组合在一起的字符。一个有效的地址应该是独一无二的。注意:针对大陆、港、澳地区的地理编码转换时可以将国家信息选择性的忽略,但省、市、城镇等级别的地址构成是不能忽略的。
注意:不要将该功能与POI关键字搜索混用。
- POI关键字搜索,是根据关键词找到现实中存在的地物点(POI)。
- 地理编码是依据当前输入,根据标准化的地址结构(省/市/区或县/乡/村或社区/商圈/街道/门牌号/POI)进行各个地址级别的匹配,以确认输入地址对应的地理坐标,只有返回的地理坐标匹配的级别为POI,才会对应一个具体的地物(POI)。
(1)构造 FMGeoCodeSearch
对象,并设置代理。 FMGeoCodeSearch
对象的构造需要根据 http://map.botaisoft.com/apis
初始化。
// 初始化编码对象,并设置代理
FMGeoCodeSearch *search = [[FMGeoCodeSearch alloc] initWithBaseUrl:http://map.botaisoft.com/apis];
search.delegate = self;
(2)设置地理编码查询参数,构造 FMGeoCodeLocationSearchOption
对象。其中 FMGeoCodeLocationSearchOption
对象的 cityName
和 address
是必设参数,不能为空。然后进行地理位置检索。
// 请求参数类 FMGeoCodeLocationSearchOption
FMGeoCodeLocationSearchOption *option = [[FMGeoCodeLocationSearchOption alloc] init];
option.cityName = self.cityField.text;
option.address = self.addressField.text;
// 发起地理位置检索
BOOL flag = [search geoCode:option];
if(flag)
{
NSLog(@"geo检索发送成功");
}
else
{
NSLog(@"geo检索发送失败");
}
(3)在回调中处理数据,当检索成功时,会进到 onGetGeoCodeResult
回调函数中,通过解析 searchResult
对象把检索结果在地图上绘制点展示出来。
- (void)onGetGeoCodeResult:(FMGeoCodeSearch *)searcher result:(FMGeoCodeSearchResult *)searchResult errorCode:(FMGeoCodeSearchErrorCode)errorCode
{
}
2.逆地理编码(即坐标转地址)
逆地理编码,又称地址解析服务,是指从已知的经纬度坐标到对应的地址描述(如行政区划、街区、楼层、房间等)的转换。常用于根据定位的坐标来获取该地点的位置详细信息,与定位功能是黄金搭档。
(1)构造 FMGeoCodeSearch
对象,并设置代理。 FMGeoCodeSearch
对象的构造需要根据 http://map.botaisoft.com/apis
初始化。
// 初始化编码对象,并设置代理
FMGeoCodeSearch *search = [[FMGeoCodeSearch alloc] initWithBaseUrl:http://map.botaisoft.com/apis];
search.delegate = self;
(2)设置地理编码查询参数,构造 FMReverseGeoCodeLocationSearchOption
对象。其中 FMReverseGeoCodeLocationSearchOption
对象的 location
是必设参数,不能为空。然后进行反向地理编码检索。
// 请求参数类 FMReverseGeoCodeLocationSearchOption
FMReverseGeoCodeLocationSearchOption *option = [[FMReverseGeoCodeLocationSearchOption alloc] init];
option.location = CLLocationCoordinate2DMake([self.latField.text floatValue], [self.lonField.text floatValue]);
// 发起反向地理编码检索
BOOL flag = [search reverseGeoCode:option];
if(flag)
{
NSLog(@"反geo检索发送成功");
}
else
{
NSLog(@"反geo检索发送失败");
}
(3)在回调中处理数据,当检索成功时,会进到 onGetReverseGeoCodeResult
回调函数中,通过解析 searchResult
对象把检索结果在地图上绘制点展示出来。
- (void)onGetReverseGeoCodeResult:(FMGeoCodeSearch *)searcher result:(FMReverseGeoCodeSearchResult *)searchResult errorCode:(FMGeoCodeSearchErrorCode)errorCode
{
}