写点什么

如何通过经纬度坐标获取附近的地址信息?

作者:HMS Core
  • 2022 年 8 月 31 日
    上海
  • 本文字数:1643 字

    阅读完需:约 5 分钟

经纬度是确定每个地点位置的精确坐标,使用坐标描述一个位置,非常准确但是并不直观,面向用户表达并不友好。HMS Core定位服务提供了逆地理编码功能,可以通过纬度获取附近地点的详细地址,将坐标转化为地理描述。例如,在电商 App 的地图里标定一个点,就可以显示具体位置;打车、外卖 App 里拖动地图或者点击地图上的某一点,定位标能够选择附近合适的上车地址或者外卖地址;在物流配送 App 中,需要很精确直观的描述物流车辆所在的线路以及物流配送点,使用逆地理编码功能通过回传的经纬度坐标,来确认车辆位置。


HMS Core定位服务逆地理编码功能拥有强大的地址理解能力,使用更加本地化位置的表达方式,准确率高达 90%,支持 79 种语言,低至 200ms 的时延。


Demo 演示

开发步骤

集成准备

注册成为开发者


在开发应用前需要在华为开发者联盟网站上注册成为开发者并完成实名认证,具体方法请参见帐号注册认证。


创建应用


参见创建项目创建应用完成应用的创建。


生成并配置签名证书指纹


签名证书指纹用于校验应用的真实性,您需要根据签名证书在本地生成签名证书指纹,并在应用上架前将签名证书指纹配置到 AppGallery Connect。


具体操作步骤见官网


集成 SDK


针对 Android Studio 开发环境,华为提供了 Maven 仓集成方式的 SDK 包。在开始开发前,您需要将 SDK 集成到您的 Android Studio 开发环境中。


具体操作步骤见官网

开发步骤

1. 创建地理编码服务客户端


在您的项目中使用到地理编码服务的 GeocoderActivity 中的 onClick()方法中创建一个GeocoderService实例,通过该实例调用地理编码相关接口。


Locale locale = new Locale("zh", "CN");GeocoderService geocoderService = LocationServices.getGeocoderService(GeocoderActivity.this, locale);
复制代码


2. 获取逆地理编码信息


如果您希望应用获取逆地理编码信息,可以使用定位服务中的 GeocoderService 对象提供的getFromLocation()接口。该接口会根据您设置的GetFromLocationRequest请求信息返回一个包含位置信息的 List<HWLocation>对象。


2.1. 设置逆地理编码请求参数。


// 参数一:纬度// 参数二:经度// 参数三:返回结果最大数量 // 请传入合理的地区经纬度,否则没有相关地理信息返回。如果是非中国地区,请传入非中国地区的经纬度,且确保经纬度是准确的。GetFromLocationRequest getFromLocationRequest = new GetFromLocationRequest(39.985071, 116.501717, 5);
复制代码


2.2. 调用getFromLocation()接口,获取逆地理编码信息。


private void getReverseGeocoding() {    //初始化GeocoderService对象    if (geocoderService == null) {        geocoderService = new GeocoderService(this, new Locale("zh", "CN"));    }    geocoderService.getFromLocation(getFromLocationRequest)            .addOnSuccessListener(new OnSuccessListener<List<HWLocation>>() {                @Override                public void onSuccess(List<HWLocation> hwLocation) {                    // TODO:接口调用成功的处理                    if (null != hwLocation && hwLocation.size() > 0) {                        Log.d(TAG, "hwLocation数据集数量: " + hwLocation.size());                        Log.d(TAG, "CountryName: " + hwLocation.get(0).getCountryName());                        Log.d(TAG, "City: " + hwLocation.get(0).getCity());                        Log.d(TAG, "Street: " + hwLocation.get(0).getStreet());                    }                }            })            .addOnFailureListener(new OnFailureListener() {                @Override                public void onFailure(Exception e) {                    // TODO:接口调用失败的处理                }            });}
复制代码


2.3. Log 日志为:



了解更多详情>>


访问华为开发者联盟官网


获取开发指导文档


华为移动服务开源仓库地址:GitHubGitee


关注我们,第一时间了解 HMS Core 最新技术资讯~

发布于: 刚刚阅读数: 4
用户头像

HMS Core

关注

HMS Core技术团队。 2022.06.16 加入

分享最新的技术干货,带来最全的能力应用场景,更新热门开发者圈子活动。与开发者一起,同成长,共精彩。

评论

发布
暂无评论
如何通过经纬度坐标获取附近的地址信息?_定位_HMS Core_InfoQ写作社区