正地理编码与逆地理编码功能需要访问后端服务,请确保设备联网,以进行信息获取。
使用经纬度坐标描述一个位置,非常准确,但是并不直观,面向用户表达并不友好。系统向开发者提供了以下两种转化能力。
正地理编码:将地理编码转化为具体经纬度坐标。
逆地理编码:将具体的经纬度坐标转化为地理编码。
其中地理编码包含多个属性来描述位置信息,包括国家、行政区划、街道、门牌号、地址描述等等,这样的信息更便于用户理解。
进行经纬度坐标和地理编码的相互转化,所使用的接口说明如下,详细信息参见Location Kit API参考:@ohos.geoLocationManager (位置服务)。
| 接口名 | 功能描述 |
|---|---|
| isGeocoderAvailable(): boolean | 判断地理编码与逆地理编码服务是否可用。 |
| getAddressesFromLocation(request: ReverseGeoCodeRequest, callback: AsyncCallback<Array<GeoAddress>>): void | 调用逆地理编码服务,将坐标转换为地理描述,使用callback回调异步返回结果。 |
| getAddressesFromLocationName(request: GeoCodeRequest, callback: AsyncCallback<Array<GeoAddress>>): void | 调用地理编码服务,将地理描述转换为具体坐标,使用callback回调异步返回结果。 |
正地理编码与逆地理编码功能需要访问后端服务,请确保设备联网,以进行信息获取。
导入geoLocationManager模块,所有与正地理编码和逆地理编码能力相关的功能API,都是通过该模块提供的。
- import { geoLocationManager } from '@kit.LocationKit';
查询正地理编码与逆地理编码服务是否可用。
调用isGeocoderAvailable查询正地理编码与逆地理编码服务是否可用,如果服务可用再继续进行步骤3。如果服务不可用,说明该设备不具备地理编码与逆地理编码能力,请勿使用相关接口。
- import { geoLocationManager } from '@kit.LocationKit';
- try {
- let isAvailable = geoLocationManager.isGeocoderAvailable();
- } catch (err) {
- console.error("errCode:" + JSON.stringify(err));
- }
获取转化结果。
调用getAddressesFromLocation,把经纬度坐标转化为地理编码(即位置信息)。应用可以获得与此坐标匹配的GeoAddress(地理编码地址信息)列表,应用可以根据实际使用需求,读取相应的参数数据。
- let reverseGeocodeRequest:geoLocationManager.ReverseGeoCodeRequest = {"latitude": 31.12, "longitude": 121.11, "maxItems": 1};
- try {
- geoLocationManager.getAddressesFromLocation(reverseGeocodeRequest, (err, data) => {
- if (err) {
- console.error('getAddressesFromLocation err: ' + JSON.stringify(err));
- } else {
- console.info('getAddressesFromLocation data: ' + JSON.stringify(data));
- }
- });
- } catch (err) {
- console.error("errCode:" + JSON.stringify(err));
- }
调用getAddressesFromLocationName把地理编码(即位置信息)转化为经纬度坐标。
- let geocodeRequest:geoLocationManager.GeoCodeRequest = {"description": "上海市浦东新区xx路xx号", "maxItems": 1};
- try {
- geoLocationManager.getAddressesFromLocationName(geocodeRequest, (err, data) => {
- if (err) {
- console.error('getAddressesFromLocationName err: ' + JSON.stringify(err));
- } else {
- console.info('getAddressesFromLocationName data: ' + JSON.stringify(data));
- }
- });
- } catch (err) {
- console.error("errCode:" + JSON.stringify(err));
- }
应用可以获得与位置信息相匹配的GeoAddress(地理编码地址信息)列表,其中包含对应的坐标数据。
如果需要查询的位置信息可能出现多地重名的请求,可以设置GeoCodeRequest,通过设置一个经纬度范围,以高效地获取期望的准确结果。