device-location-geocoding.md 4.5 KB
Newer Older
Z
zengyawen 已提交
1 2 3 4 5
# (逆)地理编码转化


## 场景介绍

6
使用坐标描述一个位置,非常准确,但是并不直观,面向用户表达并不友好。系统向开发者提供了以下两种转化能力。
Z
zengyawen 已提交
7

8 9 10 11 12
- 地理编码转化:将地理描述转化为具体坐标。

- 逆地理编码转化能力:将坐标转化为地理描述。

其中地理编码包含多个属性来描述位置,包括国家、行政区划、街道、门牌号、地址描述等等,这样的信息更便于用户理解。
Z
zengyawen 已提交
13 14 15 16


## 接口说明

17
进行坐标和地理编码信息的相互转化,所使用的接口说明如下,详细信息参见:[位置服务](../reference/apis/js-apis-geoLocationManager.md)
Z
zengyawen 已提交
18 19 20 21 22

  **表1** 地理编码转化能力和逆地理编码转化能力的API功能介绍

| 接口名 | 功能描述 | 
| -------- | -------- |
23 24 25 26 27
| isGeocoderAvailable(): boolean; | 判断(逆)地理编码服务状态。 | 
| getAddressesFromLocation(request: ReverseGeoCodeRequest, callback: AsyncCallback<Array<GeoAddress>>): void | 调用逆地理编码服务,将坐标转换为地理描述,使用callback回调异步返回结果。 | 
| getAddressesFromLocation(request: ReverseGeoCodeRequest): Promise<Array<GeoAddress>> | 调用逆地理编码服务,将坐标转换为地理描述,使用Promise方式异步返回结果。 | 
| getAddressesFromLocationName(request: GeoCodeRequest, callback: AsyncCallback<Array<GeoAddress>>): void | 调用地理编码服务,将地理描述转换为具体坐标,使用callback回调异步返回结果。 | 
| getAddressesFromLocationName(request: GeoCodeRequest): Promise<Array<GeoAddress>> | 调用地理编码服务,将地理描述转换为具体坐标,使用Promise方式异步返回结果。 | 
Z
zengyawen 已提交
28 29 30 31 32 33 34


## 开发步骤

> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> GeoConvert需要访问后端服务,请确保设备联网,以进行信息获取。

35
1. 导入geoLocationManager模块,所有与(逆)地理编码转化能力相关的功能API,都是通过该模块提供的。
Z
zengyawen 已提交
36
     
37
   ```ts
38
   import geoLocationManager from '@ohos.geoLocationManager';
Z
zengyawen 已提交
39 40
   ```

L
liu-binjun 已提交
41 42 43
2. 查询geoCoder服务是否可用。
   - 调用isGeoServiceAvailable查询geoCoder服务是否可用,如果服务可用再继续进行步骤3。
        
44
      ```ts
45 46 47 48 49 50
      import geoLocationManager from '@ohos.geoLocationManager';
      try {
          var isAvailable = geoLocationManager.isGeocoderAvailable();
      } catch (err) {
          console.error("errCode:" + err.code + ",errMessage:" + err.message);
      }
L
liu-binjun 已提交
51 52 53
      ```

3. 获取转化结果。
Z
zengyawen 已提交
54 55
   - 调用getAddressesFromLocation,坐标转化地理位置信息。
        
56
      ```ts
Z
zengyawen 已提交
57
      var reverseGeocodeRequest = {"latitude": 31.12, "longitude": 121.11, "maxItems": 1};
58 59 60 61 62 63 64 65 66 67 68
      try {
          geoLocationManager.getAddressesFromLocation(reverseGeocodeRequest, (err, data) => {
              if (err) {
                  console.log('getAddressesFromLocation err: ' + JSON.stringify(err));
              } else {
                  console.log('getAddressesFromLocation data: ' + JSON.stringify(data));
              }
          });
      } catch (err) {
          console.error("errCode:" + err.code + ",errMessage:" + err.message);
      }
Z
zengyawen 已提交
69 70
      ```

71
      参考接口API说明[位置服务](../reference/apis/js-apis-geoLocationManager.md),应用可以获得与此坐标匹配的GeoAddress列表,应用可以根据实际使用需求,读取相应的参数数据。
Z
zengyawen 已提交
72 73
   - 调用getAddressesFromLocationName位置描述转化坐标。
        
74
      ```ts
Z
zengyawen 已提交
75
      var geocodeRequest = {"description": "上海市浦东新区xx路xx号", "maxItems": 1};
76 77 78 79 80 81 82 83 84 85 86
      try {
          geoLocationManager.getAddressesFromLocationName(geocodeRequest, (err, data) => {
              if (err) {
                  console.log('getAddressesFromLocationName err: ' + JSON.stringify(err));
              } else {
                  console.log('getAddressesFromLocationName data: ' + JSON.stringify(data));
              }
          });
      } catch (err) {
          console.error("errCode:" + err.code + ",errMessage:" + err.message);
      }
Z
zengyawen 已提交
87 88
      ```

89
      参考接口API说明[位置服务](../reference/apis/js-apis-geoLocationManager.md),应用可以获得与位置描述相匹配的GeoAddress列表,其中包含对应的坐标数据,请参考API使用。
Z
zengyawen 已提交
90 91

      如果需要查询的位置描述可能出现多地重名的请求,可以设置GeoCodeRequest,通过设置一个经纬度范围,以高效地获取期望的准确结果。