简单的路径规划案例分享

异步潮涌
• 阅读 2475

本文大纲

  1. 项目背景
  1. 集成准备
  1. 主要代码
  1. 成果展示

一、 本项目用到的功能点:

  地图服务(Map Kit)给您提供一套地图开发调用的SDK,地图数据覆盖超过200个国家和地区,支持数百种语言,方便您轻松地在应用中集成地图相关的功能,全方位提升用户体验。

  关键字搜索:通过指定的关键字和可选的地理范围,查询诸如旅游景点、企业和学校之类的地点。

  路径规划: 是一套以HTTPS形式提供的步行、骑行、驾车路径规划以及行驶距离计算接口,通过JSON格式返回路径查询数据,提供路径规划能力。

二、 集成准备

  1. AGC账号注册,项目创建

(1)注册成为开发者

注册地址:

https://developer.huawei.com/consumer/cn/service/josp/agc/index.html?ha_source=hms1

(2)创建应用,添加sha256,开启map/site开关,下载json文件

  1. 集成Map + Site SDK

(1)将“agconnect-services.json”文件拷贝到应用级根目录下

  • 在“allprojects > repositories”中配置HMS Core SDK的Maven仓地址。
  • 在“buildscript > repositories”中配置HMS Core SDK的Maven仓地址。
  • 果App中添加了“agconnect-services.json”文件则需要在“buildscript > dependencies”中增加agcp配置。
buildscript {
     repositories {
         maven { url 'https://developer.huawei.com/repo/' }
         google()
         jcenter()
     }
     dependencies {
         classpath 'com.android.tools.build:gradle:3.3.2'
         classpath 'com.huawei.agconnect:agcp:1.3.1.300'
     }
 }
 
 allprojects {
     repositories {
         maven { url 'https://developer.huawei.com/repo/' }
         google()
         jcenter()
     }
 }

(2)在“dependencies ”中添加如下编译依赖

dependencies {
     implementation 'com.huawei.hms:maps:{version}'
     implementation 'com.huawei.hms:site:{version}'
 }

(3)在文件头添加配置

apply plugin: 'com.huawei.agconnect'

(4)在android中配置签名。将生成签名证书指纹生成的签名文件复制到您工程的app目录下,并在“build.gradle”文件中配置签名。

signingConfigs {
    release {
        // 签名证书
            storeFile file("**.**")
            // 密钥库口令
            storePassword "******"
            // 别名
            keyAlias "******"
            // 密钥口令
            keyPassword "******"
            v2SigningEnabled true
        v2SigningEnabled true
    }
}
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        debuggable true
    }
    debug {
        debuggable true
    }
}

三、 项目中用到的主要代码及功能

  1. 文本搜索:通过实现Site Kit中的textSearch功能实现文本内容搜索并展示出来。
SearchResultListener<TextSearchResponse> resultListener = new SearchResultListener<TextSearchResponse>() {
     // Return search results upon a successful search.
     @Override
     public void onSearchResult(TextSearchResponse results) {
         List<Site> siteList;
         if (results == null || results.getTotalCount() <= 0 || (siteList = results.getSites()) == null
                 || siteList.size() <= 0) {
             resultTextView.setText("Result is Empty!");
             return;
         }
 
         mFirstAdapter.refresh(siteList);
 
         StringBuilder response = new StringBuilder("\n");
         response.append("success\n");
         int count = 1;
         AddressDetail addressDetail;
         Coordinate location;
         Poi poi;
         CoordinateBounds viewport;
         for (Site site : siteList) {
             addressDetail = site.getAddress();
             location = site.getLocation();
             poi = site.getPoi();
             viewport = site.getViewport();
             response.append(String.format(
                     "[%s] siteId: '%s', name: %s, formatAddress: %s, country: %s, countryCode: %s, location: %s, poiTypes: %s, viewport is %s \n\n",
                     "" + (count++), site.getSiteId(), site.getName(), site.getFormatAddress(),
                     (addressDetail == null ? "" : addressDetail.getCountry()),
                     (addressDetail == null ? "" : addressDetail.getCountryCode()),
                     (location == null ? "" : (location.getLat() + "," + location.getLng())),
                     (poi == null ? "" : Arrays.toString(poi.getPoiTypes())),
                     (viewport == null ? "" : viewport.getNortheast() + "," + viewport.getSouthwest())));
         }
         resultTextView.setText(response.toString());
         Log.d(TAG, "onTextSearchResult: " + response.toString());
     }
 
     // Return the result code and description upon a search exception.
     @Override
     public void onSearchError(SearchStatus status) {
         resultTextView.setText("Error : " + status.getErrorCode() + " " + status.getErrorMessage());
     }
 };
 // Call the place search API.
 searchService.textSearch(request, resultListener);
  1. 步行路径规划:通过调用Map Kit 中的API接口实现数据回调并呈现在地图上。点击可获取API文档
NetworkRequestManager.getWalkingRoutePlanningResult(latLng1, latLng2,
        new NetworkRequestManager.OnNetworkListener() {
            @Override
            public void requestSuccess(String result) {
                generateRoute(result);
            }

            @Override
            public void requestFail(String errorMsg) {
                Message msg = Message.obtain();
                Bundle bundle = new Bundle();
                bundle.putString("errorMsg", errorMsg);
                msg.what = 1;
                msg.setData(bundle);
                mHandler.sendMessage(msg);
            }
        });

四、 项目成果展示

简单的路径规划案例分享

欲了解更多详情,请参阅:
华为开发者联盟官网:https://developer.huawei.com/consumer/cn/hms?ha_source=hms1
获取开发指导文档:https://developer.huawei.com/consumer/cn/doc/development?ha_source=hms1
参与开发者讨论请到Reddit社区:https://www.reddit.com/r/HuaweiDevelopers/
下载demo和示例代码请到Github:https://github.com/HMS-Core
解决集成问题请到Stack Overflow:https://stackoverflow.com/questions/tagged/huawei-mobile-services?tab=Newest


原文链接:
https://developer.huawei.com/consumer/cn/forum/topic/0202436666167160224?fid=18
作者:胡椒

点赞
收藏
评论区
推荐文章
Easter79 Easter79
3年前
vue 中使用高德地图, 地图选点
功能简述:网页版高德地图开发,主要支持地图选点(没做导航),搜索选点.(功能类似微信与好友聊天中的选择位置,发送位置,如下图)!(https://img2018.cnblogs.com/blog/1195136/201904/119513620190423112130558812176871.png)第一步:先成为高德地图的开发
Stella981 Stella981
3年前
LeafLet 简单使用
Leaflet使用最近在Angular项目中,用到了地图,由于种种原因放弃了百度地图api使用,最后选择了leaflet,简单介绍一下。介绍:Leaflet是一个为移动设备设计的交互式地图的开源的javascript库,并只有38k,包含了大多数开发者需要的地图特点。准备:下载leaflet文件
Stella981 Stella981
3年前
Google Map 开发(三):Google Map 地点搜索功能
开发国内应用当我们需要使用到地图时,首选肯定是高德地图或者百度地图,这是因为它们的地图功能足够强大,对于开发人员来说,更是因为API封装的完善和简单的调用实现,扩展功能强大。如果要开发全球通用的APP,需要集成地图,我们难免会对需要使用的地图SDK进行一番调研,百度和高德并没有全世界范围的地图数据,在亚洲或许还能使用以下,对于需要全球范围内都要
上海张律师 上海张律师
1个月前
鸿蒙地图功能开发【2. 申请Profile文件】##地图开发##
​如果使用鸿蒙的MapKit能力进行地图开发的话,需要在后台的API管理里面打开“地图服务”。如果是在原有项目上增加的话,那么……你需要去申请一个新的Profile文件我们按照新项目的流程去走注:新项目的意思是没有创建过Profile文件,而不是说在Dev
上海张律师 上海张律师
1个月前
鸿蒙地图功能开发【3. 代码开发】##地图开发##
​在完成了前期准备工作之后,就可以正式进入到代码开发的工作中,在官方文档中,相关的代码是很全的,从支持的功能上来看,相比于三方SDK更加全面。基本项目中包含的地图展示、marker、路径规划等都是包括的那么最基本的就是先展示地图首先是导入MapKitk的相
鸿蒙小林 鸿蒙小林
1个月前
《仿盒马》app开发技术分享-- 定位获取(25)
技术栈Appgalleryconnect开发准备上一节我们实现了地址管理页面的数据查询和展示,接下来我们要实现的功能是地址添加相关的,我们想实现的功能是地图选点,那么在地图选点之前我们要做的就是先获取用户当前的定位。获取定位后我们拿到经纬度和其他信息,然后
鸿蒙小林 鸿蒙小林
1个月前
《仿盒马》app开发技术分享-- 原生地图展示(26)
技术栈Appgalleryconnect开发准备上一节我们实现了获取当前用户的位置,并且成功的拿到了经纬度,这一节我们就要根据拿到的经纬度,结合我们其他的知识点来实现地图的展示。功能分析地图的展示,我们需要在管理中心先给我们对应的应用开启地图api功能,否
鸿蒙小林 鸿蒙小林
1个月前
《仿盒马》app开发技术分享-- 地图选点(27)
技术栈Appgalleryconnect开发准备上一节我们实现了地图的简单展示,这一节我们要实现的内容是,根据展示的地图,实现当前定位功能,当前位置的poi地址功能,以及列表的展示,给地图添加标记,展示自己的当前定位功能分析要想实现这些功能,首先我们需要在
GeorgeGcs GeorgeGcs
1个月前
【HarmonyOS】鸿蒙应用实现调用系统地图导航或路径规划
鸿蒙开发能力HarmonyOSSDK应用服务鸿蒙金融类应用(金融理财前言在涉及地图业务中,调用地图导航和路径规划是三方应用中较为常见的功能。若只是子业务需要地图导航效果,整个APP内部集成地图去实现导航或者路径规划,会造成SDK集成冗余。毕竟很重。所以该效
不是海碗 不是海碗
2年前
微信小程序实现一键查询全国快递物流地图轨迹
通过本教程,用户可以输入快递单号,点击查询按钮,然后跳转到显示页面,在该页面上展示物流轨迹的地图信息。这个功能可以方便用户了解快递的实时位置和运输轨迹,提升用户体验和便利性。你可以根据实际需求进行扩展和优化,使其更适合你的小程序应用。
上海张律师 上海张律师
1个月前
鸿蒙地图功能开发【1. 开发准备】##地图开发##
​对于地图功能的开发,有以下三种思路1.使用鸿蒙官方的MapKit进行开发2.使用第三方地图的SDK(例如高德地图、百度地图)3.做一个基于h5的地图页面,通过Web组件去引入对于这三种方案,每一种都有自己的特点原生的MapKit,目前来看文档是最全面的也