在来自 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。