package com.yw.gaodedemo.overlay;
import android.content.Context;
import com.amap.api.maps.AMap;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.MarkerOptions;
import com.amap.api.maps.model.PolylineOptions;
import com.amap.api.services.busline.BusStationItem;
import com.amap.api.services.core.LatLonPoint;
import com.amap.api.services.route.BusPath;
import com.amap.api.services.route.BusStep;
import com.amap.api.services.route.Doorway;
import com.amap.api.services.route.RailwayStationItem;
import com.amap.api.services.route.RouteBusLineItem;
import com.amap.api.services.route.RouteBusWalkItem;
import com.amap.api.services.route.RouteRailwayItem;
import com.amap.api.services.route.TaxiItem;
import com.amap.api.services.route.WalkStep;
import java.util.ArrayList;
import java.util.List;
/**
* 公交路线图层类。在高德地图API里,如果需要显示公交路线,可以用此类来创建公交路线图层。如不满足需求,也可以自己创建自定义的公交路线图层。
* @since V2.1.0
*/
public class BusRouteOverlay extends RouteOverlay {
private BusPath busPath;
private LatLng latLng;
/**
* 通过此构造函数创建公交路线图层。
* @param context 当前activity。
* @param amap 地图对象。
* @param path 公交路径规划的一个路段。详见搜索服务模块的路径查询包(com.amap.api.services.route)中的类<strong> <a href="../../../../../../Search/com/amap/api/services/route/BusPath.html" title="com.amap.api.services.route中的类">BusPath</a></strong>。
* @param start 起点坐标。详见搜索服务模块的核心基础包(com.amap.api.services.core)中的类 <strong><a href="../../../../../../Search/com/amap/api/services/core/LatLonPoint.html" title="com.amap.api.services.core中的类">LatLonPoint</a></strong>。
* @param end 终点坐标。详见搜索服务模块的核心基础包(com.amap.api.services.core)中的类 <strong><a href="../../../../../../Search/com/amap/api/services/core/LatLonPoint.html" title="com.amap.api.services.core中的类">LatLonPoint</a></strong>。
* @since V2.1.0
*/
public BusRouteOverlay(Context context, AMap amap, BusPath path,
LatLonPoint start, LatLonPoint end) {
super(context);
this.busPath = path;
startPoint = AMapUtil.convertToLatLng(start);
endPoint = AMapUtil.convertToLatLng(end);
mAMap = amap;
}
/**
* 添加公交路线到地图上。
* @since V2.1.0
*/
public void addToMap() {
/**
* 绘制节点和线<br>
* 细节情况较多<br>
* 两个step之间,用step和step1区分<br>
* 1.一个step内可能有步行和公交,然后有可能他们之间连接有断开<br>
* 2.step的公交和step1的步行,有可能连接有断开<br>
* 3.step和step1之间是公交换乘,且没有步行,需要把step的终点和step1的起点连起来<br>
* 4.公交最后一站和终点间有步行,加入步行线路,还会有一些步行marker<br>
* 5.公交最后一站和终点间无步行,之间连起来<br>
*/
try {
List<BusStep> busSteps = busPath.getSteps();
for (int i = 0; i < busSteps.size(); i++) {
BusStep busStep = busSteps.get(i);
if (i < busSteps.size() - 1) {
BusStep busStep1 = busSteps.get(i + 1);// 取得当前下一个BusStep对象
// 假如步行和公交之间连接有断开,就把步行最后一个经纬度点和公交第一个经纬度点连接起来,避免断线问题
if (busStep.getWalk() != null
&& busStep.getBusLine() != null) {
checkWalkToBusline(busStep);
}
// 假如公交和步行之间连接有断开,就把上一公交经纬度点和下一步行第一个经纬度点连接起来,避免断线问题
if (busStep.getBusLine() != null
&& busStep1.getWalk() != null
&& busStep1.getWalk().getSteps().size() > 0) {
checkBusLineToNextWalk(busStep, busStep1);
}
// 假如两个公交换乘中间没有步行,就把上一公交经纬度点和下一步公交第一个经纬度点连接起来,避免断线问题
if (busStep.getBusLine() != null
&& busStep1.getWalk() == null
&& busStep1.getBusLine() != null) {
checkBusEndToNextBusStart(busStep, busStep1);
}
// 和上面的很类似
if (busStep.getBusLine() != null
&& busStep1.getWalk() == null
&& busStep1.getBusLine() != null) {
checkBusToNextBusNoWalk(busStep, busStep1);
}
if (busStep.getBusLine() != null
&& busStep1.getRailway() != null ) {
checkBusLineToNextRailway(busStep, busStep1);
}
if (busStep1.getWalk() != null &&
busStep1.getWalk().getSteps().size() > 0 &&
busStep.getRailway() != null) {
checkRailwayToNextWalk(busStep, busStep1);
}
if ( busStep1.getRailway() != null &&
busStep.getRailway() != null) {
checkRailwayToNextRailway(busStep, busStep1);
}
if (busStep.getRailway() != null &&
busStep1.getTaxi() != null ){
checkRailwayToNextTaxi(busStep, busStep1);
}
}
if (busStep.getWalk() != null
&& busStep.getWalk().getSteps().size() > 0) {
addWalkSteps(busStep);
} else {
if (busStep.getBusLine() == null && busStep.getRailway() == null && busStep.getTaxi() == null) {
addWalkPolyline(latLng, endPoint);
}
}
if (busStep.getBusLine() != null) {
RouteBusLineItem routeBusLineItem = busStep.getBusLine();
addBusLineSteps(routeBusLineItem);
addBusStationMarkers(routeBusLineItem);
if (i == busSteps.size() - 1) {
addWalkPolyline(AMapUtil.convertToLatLng(getLastBuslinePoint(busStep)), endPoint);
}
}
if (busStep.getRailway() != null) {
addRailwayStep(busStep.getRailway());
addRailwayMarkers(busStep.getRailway());
if (i == busSteps.size() - 1) {
addWalkPolyline(AMapUtil.convertToLatLng(busStep.getRailway().getArrivalstop().getLocation()), endPoint);
}
}
if (busStep.getTaxi() != null) {
addTaxiStep(busStep.getTaxi());
addTaxiMarkers(busStep.getTaxi());
}
}
addStartAndEndMarker();
} catch (Throwable e) {
e.printStackTrace();
}
}
private void checkRailwayToNextTaxi(BusStep busStep, BusStep busStep1) {
LatLonPoint railwayLastPoint = busStep.getRailway().getArrivalstop().getLocation();
LatLonPoint taxiFirstPoint = busStep1.getTaxi().getOrigin();
if (!railwayLastPoint.equals(taxiFirstPoint)) {
addWalkPolyLineByLatLonPoints(railwayLastPoint, taxiFirstPoint);
}
}
private void checkRailwayToNextRailway(BusStep busStep, BusStep busStep1) {
LatLonPoint railwayLastPoint = busStep.getRailway().getArrivalstop().getLocation();
LatLonPoint railwayFirstPoint = busStep1.getRailway().getDeparturestop().getLocation();
if (!railwayLastPoint.equals(railwayFirstPoint)) {
addWalkPolyLineByLatLonPoints(railwayLastPoint, railwayFirstPoint);
}
}
private void checkBusLineToNextRailway(BusStep busStep, BusStep busStep1) {
LatLonPoint busLastPoint = getLastBuslinePoint(busStep);
LatLonPoint railwayFirstPoint = busStep1.getRailway().getDeparturestop().getLocation();
if (!busLastPoint.equals(railwayFirstPoint)) {
addWalkPolyLineByLatLonPoints(busLastPoint, railwayFirstPoint);
}
}
private void checkRailwayToNextWalk(BusStep busStep, BusStep busStep1) {
LatLonPoint railwayLastPoint = busStep.getRailway().getArrivalstop().getLocation();
LatLonPoint walkFirstPoint = getFirstWalkPoint(busStep1);
if (!railwayLastPoint.equals(walkFirstPoint)) {
addWalkPolyLineByLatLonPoints(railwayLastPoint, walkFirstPoint);
}
}
private void addRailwayStep(RouteRailwayItem railway) {
List<LatLng> railwaylistpoint = new ArrayList<LatLng>();
List<RailwayStationItem> railwayStationIt
没有合适的资源?快使用搜索试试~ 我知道了~
高德地图 添加路线 删除路线 demo
共141个文件
xml:40个
png:35个
so:25个
5星 · 超过95%的资源 需积分: 45 36 下载量 65 浏览量
2018-04-18
11:42:08
上传
评论 2
收藏 47.4MB ZIP 举报
温馨提示
高德地图添加路线,移除路线以及更改路线颜色、宽度等操作 高德地图其他操作都很简单就没有涉及
资源推荐
资源详情
资源评论
收起资源包目录
高德地图 添加路线 删除路线 demo (141个子文件)
gradlew.bat 2KB
fileSnapshots.bin 2.78MB
fileHashes.bin 150KB
taskArtifacts.bin 112KB
localClassSetAnalysis.bin 49KB
fileSnapshotsToTreeSnapshotsIndex.bin 27KB
localJarClasspathSnapshot.bin 20KB
.gitignore 127B
.gitignore 8B
build.gradle 1KB
build.gradle 521B
settings.gradle 16B
gradlew 5KB
app.iml 12KB
GaoDeDemo.iml 863B
AMap3DMap_6.1.0_AMapNavi_6.0.1_AMapSearch_6.1.0_AMapLocation_3.8.0_20180330.jar 5.72MB
gradle-wrapper.jar 52KB
BusRouteOverlay.java 17KB
TruckRouteColorfulOverLay.java 13KB
DrivingRouteOverlay.java 11KB
BusLineOverlay.java 8KB
AMapUtil.java 8KB
RouteOverlay.java 7KB
WalkRouteOverlay.java 5KB
WalkRouteSearch.java 5KB
PoiOverlay.java 5KB
RideRouteOverlay.java 4KB
TraceOverlay.java 3KB
MainActivity.java 2KB
AMapServicesUtil.java 2KB
ChString.java 1KB
ExampleInstrumentedTest.java 762B
ExampleUnitTest.java 410B
localClassSetAnalysis.lock 17B
localJarClasspathSnapshot.lock 17B
cache.properties.lock 17B
amap_end.png 11KB
ic_launcher.png 10KB
amap_start.png 10KB
ic_launcher.png 8KB
ic_launcher.png 5KB
amap_through.png 4KB
ic_launcher.png 3KB
ic_launcher.png 2KB
direct_mapsearch_pressed.9.png 1KB
amap_ride.png 1KB
dir_station.png 1KB
direct_mapsearch.9.png 1KB
amap_man.png 1KB
amap_truck.png 1KB
amap_car.png 1KB
amap_train.png 1KB
amap_bus.png 1KB
dir14.png 949B
dir9.png 942B
dir11.png 941B
dir10.png 910B
dir13.png 883B
dir12.png 865B
dir15.png 849B
dir5.png 838B
dir6.png 832B
dir8.png 824B
dir7.png 791B
dir16.png 742B
dir3.png 712B
dir4.png 711B
dir1.png 702B
dir2.png 699B
dir_end.png 604B
dir_start.png 601B
proguard-rules.pro 661B
gradle.properties 747B
local.properties 426B
gradle-wrapper.properties 233B
cache.properties 31B
libAMapSDK_MAP_v6_1_0.so 6.31MB
libAMapSDK_MAP_v6_1_0.so 6.14MB
libAMapSDK_MAP_v6_1_0.so 5.7MB
libAMapSDK_MAP_v6_1_0.so 4.82MB
libAMapSDK_MAP_v6_1_0.so 4.82MB
libAMapSDK_NAVI_v6_0_1.so 3.95MB
libAMapSDK_NAVI_v6_0_1.so 3.82MB
libAMapSDK_NAVI_v6_0_1.so 3.66MB
libAMapSDK_NAVI_v6_0_1.so 3.35MB
libAMapSDK_NAVI_v6_0_1.so 3.35MB
libwtbt800.so 1.07MB
librtbt800.so 1.07MB
libwtbt800.so 1.05MB
librtbt800.so 1.04MB
libwtbt800.so 1.03MB
librtbt800.so 1.02MB
librtbt800.so 722KB
libwtbt800.so 687KB
libwtbt800.so 659KB
librtbt800.so 658KB
libztcodec2.so 329KB
libztcodec2.so 329KB
libztcodec2.so 206KB
libztcodec2.so 125KB
共 141 条
- 1
- 2
资源评论
- ximen12242018-08-16写的不错,对我很有帮助,谢谢楼主
本人很懒zzz
- 粉丝: 30
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功