在来自 Kml 的 Android 应用程序中使用 Mapbox Sdk 进行离线导航
Offline navigation with Mapbox Sdk in Android app from Kml
我正在尝试为 Trekking 开发一个离线导航应用程序。
该应用向用户显示附近 track/routes 他可以去的地方的列表。
示例:
-步行到 Etna Vulcan
-走在树林里。
我有几个本地向导提供给我的 KML 文件,每个文件对应不同的轨道。
因此,如果我选择 "Walking to Etna Vulcan",我将有一张地图,其中包含我必须遵循的路线才能前往 Etna Vulcan,并带有一些有趣的标记(例如:避难所、纪念碑)。此数据实际上已准备就绪,采用 KML 格式。
所以:
用户从我提供的列表中选择轨道,然后 phone 在地图上显示轨道(来自 kml 或等效文件)以及当前用户位置。
我正在使用 MapBox sdk(但我愿意接受其他选择)。
实际上,我已经成功下载了区域(西西里岛)的离线地图,但我不知道如何在地图上写我的 kml。
我还在 Mapbox Studio 中导入了一个 kml,但我不知道如何将 MapBox Studio 地图下载到我的应用程序中。
感谢您的宝贵时间!
如果 Mapbox 看起来是一个不错的选择,那么您只需要研究他们的 Android SDK,看看是否以及如何支持绘图标记和坐标轨迹。
曲目见https://www.mapbox.com/android-sdk/geojson/
相关的(对你来说)部分就在他们的示例代码的末尾:
LatLng[] pointsArray = points.toArray(new LatLng[points.size()]);
// Draw Points on MapView
mapboxMap.addPolyline(new PolylineOptions()
.add(pointsArray)
.color(Color.parseColor("#3bb2d0"))
.width(2));
这里他们有ArrayList
点的坐标点。它们是从 GeoJSON 数据中提取的,但您只需要从 KML 数据中提取坐标点,然后根据该示例绘制轨迹。
有关标记,请参阅 https://www.mapbox.com/android-sdk/marker/
他们有这个示例代码:
mapboxMap.addMarker(new MarkerOptions()
.position(new LatLng(48.13863, 11.57603))
.title("Hello World!")
.snippet("Welcome to my marker."));
有关带有自定义图标的标记,请参阅 https://www.mapbox.com/android-sdk/custom-marker-icon/
他们有这个示例代码:
// Create an Icon object for the marker to use
IconFactory iconFactory = IconFactory.getInstance(MainActivity.this);
Drawable iconDrawable = ContextCompat.getDrawable(MainActivity.this, drawable.ic_directions_boat_black_18dp);
Icon icon = iconFactory.fromDrawable(iconDrawable);
// Add the custom icon marker to the map
mapboxMap.addMarker(new MarkerOptions()
.position(new LatLng(-33.8500000, 18.4158234))
.title("Cape Town Harbour")
.icon(icon));
所以您只需为自定义图标使用常规 Android Drawable。
看起来很方便。我自己没有用过 Mapbox SDK。
我正在尝试为 Trekking 开发一个离线导航应用程序。
该应用向用户显示附近 track/routes 他可以去的地方的列表。
示例:
-步行到 Etna Vulcan
-走在树林里。
我有几个本地向导提供给我的 KML 文件,每个文件对应不同的轨道。
因此,如果我选择 "Walking to Etna Vulcan",我将有一张地图,其中包含我必须遵循的路线才能前往 Etna Vulcan,并带有一些有趣的标记(例如:避难所、纪念碑)。此数据实际上已准备就绪,采用 KML 格式。
所以: 用户从我提供的列表中选择轨道,然后 phone 在地图上显示轨道(来自 kml 或等效文件)以及当前用户位置。
我正在使用 MapBox sdk(但我愿意接受其他选择)。
实际上,我已经成功下载了区域(西西里岛)的离线地图,但我不知道如何在地图上写我的 kml。
我还在 Mapbox Studio 中导入了一个 kml,但我不知道如何将 MapBox Studio 地图下载到我的应用程序中。
感谢您的宝贵时间!
如果 Mapbox 看起来是一个不错的选择,那么您只需要研究他们的 Android SDK,看看是否以及如何支持绘图标记和坐标轨迹。
曲目见https://www.mapbox.com/android-sdk/geojson/
相关的(对你来说)部分就在他们的示例代码的末尾:
LatLng[] pointsArray = points.toArray(new LatLng[points.size()]);
// Draw Points on MapView
mapboxMap.addPolyline(new PolylineOptions()
.add(pointsArray)
.color(Color.parseColor("#3bb2d0"))
.width(2));
这里他们有ArrayList
点的坐标点。它们是从 GeoJSON 数据中提取的,但您只需要从 KML 数据中提取坐标点,然后根据该示例绘制轨迹。
有关标记,请参阅 https://www.mapbox.com/android-sdk/marker/
他们有这个示例代码:
mapboxMap.addMarker(new MarkerOptions()
.position(new LatLng(48.13863, 11.57603))
.title("Hello World!")
.snippet("Welcome to my marker."));
有关带有自定义图标的标记,请参阅 https://www.mapbox.com/android-sdk/custom-marker-icon/
他们有这个示例代码:
// Create an Icon object for the marker to use
IconFactory iconFactory = IconFactory.getInstance(MainActivity.this);
Drawable iconDrawable = ContextCompat.getDrawable(MainActivity.this, drawable.ic_directions_boat_black_18dp);
Icon icon = iconFactory.fromDrawable(iconDrawable);
// Add the custom icon marker to the map
mapboxMap.addMarker(new MarkerOptions()
.position(new LatLng(-33.8500000, 18.4158234))
.title("Cape Town Harbour")
.icon(icon));
所以您只需为自定义图标使用常规 Android Drawable。
看起来很方便。我自己没有用过 Mapbox SDK。