1# 地理编码转化与逆地理编码转化开发指导 2 3## 场景概述 4 5使用坐标描述一个位置,非常准确,但是并不直观,面向用户表达并不友好。系统向开发者提供了以下两种转化能力。 6 7- 地理编码转化:将地理描述转化为具体坐标。 8 9- 逆地理编码转化能力:将坐标转化为地理描述。 10 11其中地理编码包含多个属性来描述位置,包括国家、行政区划、街道、门牌号、地址描述等等,这样的信息更便于用户理解。 12 13## 接口说明 14 15进行坐标和地理编码信息的相互转化,所使用的接口说明如下,详细信息参见:[Location Kit](../../reference/apis-location-kit/js-apis-geoLocationManager.md)。 16 17**表3** 地理编码转化与逆地理编码转化接口介绍 18 19| 接口名 | 功能描述 | 20| -------- | -------- | 21| [isGeocoderAvailable(): boolean;](../../reference/apis-location-kit/js-apis-geoLocationManager.md#geolocationmanagerisgeocoderavailable) | 判断地理编码与逆地理编码服务是否可用。 | 22| [getAddressesFromLocation(request: ReverseGeoCodeRequest, callback: AsyncCallback<Array<GeoAddress>>): void](../../reference/apis-location-kit/js-apis-geoLocationManager.md#geolocationmanagergetaddressesfromlocation) | 调用逆地理编码服务,将坐标转换为地理描述,使用callback回调异步返回结果。 | 23| [getAddressesFromLocationName(request: GeoCodeRequest, callback: AsyncCallback<Array<GeoAddress>>): void](../../reference/apis-location-kit/js-apis-geoLocationManager.md#geolocationmanagergetaddressesfromlocationname) | 调用地理编码服务,将地理描述转换为具体坐标,使用callback回调异步返回结果。 | 24 25## 开发步骤 26 27> **说明:** 28> 地理编码与逆地理编码功能需要访问后端服务,请确保设备联网,以进行信息获取。 29 301. 导入geoLocationManager模块,所有与地理编码转化&逆地理编码转化能力相关的功能API,都是通过该模块提供的。 31 32 ```ts 33 import { geoLocationManager } from '@kit.LocationKit'; 34 ``` 35 362. 查询地理编码与逆地理编码服务是否可用。 37 - 调用isGeoServiceAvailable查询地理编码与逆地理编码服务是否可用,如果服务可用再继续进行步骤3。如果服务不可用,说明该设备不具备地理编码与逆地理编码能力,请勿使用相关接口。 38 39 ```ts 40 import { geoLocationManager } from '@kit.LocationKit'; 41 try { 42 let isAvailable = geoLocationManager.isGeocoderAvailable(); 43 } catch (err) { 44 console.error("errCode:" + JSON.stringify(err)); 45 } 46 ``` 47 483. 获取转化结果。 49 - 调用getAddressesFromLocation,把坐标转化为地理位置信息。应用可以获得与此坐标匹配的[GeoAddress](../../reference/apis-location-kit/js-apis-geoLocationManager.md#geoaddress)(地理编码地址信息)列表,应用可以根据实际使用需求,读取相应的参数数据。 50 51 ```ts 52 let reverseGeocodeRequest:geoLocationManager.ReverseGeoCodeRequest = {"latitude": 31.12, "longitude": 121.11, "maxItems": 1}; 53 try { 54 geoLocationManager.getAddressesFromLocation(reverseGeocodeRequest, (err, data) => { 55 if (err) { 56 console.log('getAddressesFromLocation err: ' + JSON.stringify(err)); 57 } else { 58 console.log('getAddressesFromLocation data: ' + JSON.stringify(data)); 59 } 60 }); 61 } catch (err) { 62 console.error("errCode:" + JSON.stringify(err)); 63 } 64 ``` 65 66 - 调用getAddressesFromLocationName把位置描述转化为坐标。 67 68 ```ts 69 let geocodeRequest:geoLocationManager.GeoCodeRequest = {"description": "上海市浦东新区xx路xx号", "maxItems": 1}; 70 try { 71 geoLocationManager.getAddressesFromLocationName(geocodeRequest, (err, data) => { 72 if (err) { 73 console.log('getAddressesFromLocationName err: ' + JSON.stringify(err)); 74 } else { 75 console.log('getAddressesFromLocationName data: ' + JSON.stringify(data)); 76 } 77 }); 78 } catch (err) { 79 console.error("errCode:" + JSON.stringify(err)); 80 } 81 ``` 82 83 应用可以获得与位置描述相匹配的[GeoAddress](../../reference/apis-location-kit/js-apis-geoLocationManager.md#geoaddress)(地理编码地址信息)列表,其中包含对应的坐标数据。 84 85 如果需要查询的位置描述可能出现多地重名的请求,可以设置[GeoCodeRequest](../../reference/apis-location-kit/js-apis-geoLocationManager.md#geocoderequest),通过设置一个经纬度范围,以高效地获取期望的准确结果。