高德地图基本开发流程

来源:互联网 发布:红酒网络销售好做吗 编辑:程序博客网 时间:2024/05/23 18:31
地图如今已经离不开我们大家的生活了 ,作为开发者来说 ,能够尽可能开发一款完善的地图也是至关重要的
因此我对高德地图进行了一些研究,
下面我将 把我对高德地图的研究分享给大家微笑

1.在高德应用管理后台创建新应用,获取AppKey
在这里我们会看到以下界面,它会让我们填入发布板SHA1值,那么这个SHA1值如何获取呢

SHA1的获取:
打开cmd命令在cmd控制台上 依次输入
cd .android
keytool -list -v -keystore debug.keystore
android
即可得到SHA1值,如下:

提交之后便会获取到AppKey



2.在高德地图开发平台上下载Android地图SDK,在libs 报下导入so库及jar包


2.在build.gradle加入以下

sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}

compile files('libs/AMap_Location_V3.4.0_20170427.jar')
compile files('libs/AMap_Search_V5.1.0_20170517.jar')
compile files('libs/Android_Map3D_SDK_V5.1.0_20170518.jar')
3.在清单文件中加权限和配置AppKey

<!--允许程序打开网络套接字-->
<uses-permissionandroid:name="android.permission.INTERNET"/>
<!--允许程序设置内置sd卡的写权限-->
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--允许程序获取网络状态-->
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--允许程序访问WiFi网络信息-->
<uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>
<!--允许程序读写手机状态和身份-->
<uses-permissionandroid:name="android.permission.READ_PHONE_STATE"/>
<!--允许程序访问CellID或WiFi热点来获取粗略的位置-->
<uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/>

配置AppKey
<meta-dataandroid:name="com.amap.api.v2.apikey"android:value="a530a2c6fa8f40ed4a486745d20c1ebe"/>
<serviceandroid:name="com.amap.api.location.APSService"></service>

4.在xml中写mapview 控件
<com.amap.api.maps.MapView
android:layout_width="368dp"
android:layout_height="495dp"
android:id="@+id/mapview"
tools:layout_editor_absoluteY="8dp"
tools:layout_editor_absoluteX="8dp"></com.amap.api.maps.MapView>

5.在avtivity 中显示定位蓝点
mapview= (MapView) findViewById(R.id.mapview);
//在activity执行onCreate时执行mMapView.onCreate(savedInstanceState),创建地图
mapview.onCreate(savedInstanceState);// 此方法须覆写,虚拟机需要在很多情况下保存地图绘制的当前状态。
//初始化地图控制器对象
if(aMap==null) {
aMap=mapview.getMap();
}

myLocationStyle=newMyLocationStyle();//初始化定位蓝点样式类myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//连续定位、且将视角移动到地图中心点,定位点依照设备方向旋转,并且会跟随设备移动。(1秒1次定位)如果不设置myLocationType,默认也会执行此种模式。
myLocationStyle.interval(2000);//设置连续定位模式下的定位间隔,只在连续定位模式下生效,单次定位模式下不会生效。单位为毫秒。
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);//连续定位、蓝点不会移动到地图中心点,定位点依照设备方向旋转,并且蓝点会跟随设备移动。
aMap.setMyLocationStyle(myLocationStyle);//设置定位蓝点的Styl
// aMap.getUiSettings().setMyLocationButtonEnabled(true);设置默认定位按钮是否显示,非必需设置。
aMap.setMyLocationEnabled(true);// 设置为true表示启动显示定位蓝点,false表示隐藏定位蓝点并不进行定位,默认是false。

@Override
protected voidonDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),销毁地图
mapview.onDestroy();
}

@Override
protected voidonResume() {
super.onResume();
//在activity执行onResume时执行mMapView.onResume (),重新绘制加载地图
mapview.onResume();
}

@Override
protected voidonPause() {
super.onPause();
//在activity执行onPause时执行mMapView.onPause (),暂停地图的绘制
mapview.onPause();
}

6.POI检索
query=newPoiSearch.Query(et_point,"",et_city);
//keyWord表示搜索字符串,
//第二个参数表示POI搜索类型,二者选填其一,选用POI搜索类型时建议填写类型代码,码表可以参考下方(而非文字)
//cityCode表示POI搜索区域,可以是城市编码也可以是城市名称,也可以传空字符串,空字符串代表全国在全国范围内进行搜索
query.setPageSize(10);// 设置每页最多返回多少条poiitem
// query.setPageNum(currentPage);//设置查询页码
poiSearch=newPoiSearch(this,query);
poiSearch.setOnPoiSearchListener(this);
poiSearch.searchPOIAsyn();

@Override
public voidonPoiSearched(PoiResult poiResult,inti) {
aMap.clear();
ArrayList<PoiItem> pois = poiResult.getPois();
for(PoiItem poiItem : pois) {
LatLonPoint latLonPoint = poiItem.getLatLonPoint();
LatLng latLng =newLatLng(latLonPoint.getLatitude(), latLonPoint.getLongitude());
MarkerOptions markerOption =newMarkerOptions().position(latLng).title(poiItem.toString()).snippet("去吃吧");
aMap.addMarker(markerOption);
}
}

7.点击覆盖物并规划线路(要在源码中复制几个类)

aMap.setOnMarkerClickListener(newAMap.OnMarkerClickListener() {
@Override
public booleanonMarkerClick(Marker marker) {
//获取起点经纬度
Location myLocation =aMap.getMyLocation();
//获取终点经纬度
LatLng position = marker.getPosition();
LatLonPoint from=newLatLonPoint(myLocation.getLatitude(),myLocation.getLongitude());
LatLonPoint to=newLatLonPoint(position.latitude,position.longitude);
RouteSearch.FromAndTo fromAndTo =newRouteSearch.FromAndTo(from,to);
RouteSearch.DriveRouteQuery query =newRouteSearch.DriveRouteQuery(fromAndTo, RouteSearch.DRIVING_MULTI_CHOICE_AVOID_CONGESTION_NO_HIGHWAY,null,null,"");
RouteSearch routeSearch =newRouteSearch(MainActivity.this);
routeSearch.setRouteSearchListener(MainActivity.this);
routeSearch.calculateDriveRouteAsyn(query);
return false;
}
});


@Override
public voidonDriveRouteSearched(DriveRouteResult result,interrorCode) {
aMap.clear();// 清理地图上的所有覆盖物
if(errorCode == AMapException.CODE_AMAP_SUCCESS) {
if(result !=null&& result.getPaths() !=null) {
if(result.getPaths().size() >0) {
finalDrivePath drivePath = result.getPaths()
.get(0);
DrivingRouteOverlay drivingRouteOverlay =newDrivingRouteOverlay(
this,aMap, drivePath,
result.getStartPos(),
result.getTargetPos(),null);
drivingRouteOverlay.setNodeIconVisibility(false);//设置节点marker是否显示
drivingRouteOverlay.setIsColorfulline(true);//是否用颜色展示交通拥堵情况,默认true
drivingRouteOverlay.removeFromMap();
drivingRouteOverlay.addToMap();
drivingRouteOverlay.zoomToSpan();

}else if(result !=null&& result.getPaths() ==null) {
ToastUtil.show(this, R.string.no_result);
}

}else{
ToastUtil.show(this, R.string.no_result);
}
}else{
ToastUtil.showerror(this.getApplicationContext(), errorCode);
}

}

哈哈 到此结束了 ,以后有空在写,如果哪里写的不对还请各位大神指点