使用捏缩放创建交互式地铁地图(安卓)



我在Android上很新手,我有一个非常有趣的应用程序项目。我需要的是为两条交叉地铁线路/路线及其各自的车站创建地铁地图。

如果我们考虑静态布局,使用地铁路线的背景图像并使用在布局上以相对方式设置的车站按钮,这在这一点上似乎很容易。

当整个布局必须可缩放时,困难的部分就来了,无论是缩放按钮级别还是捏合和缩放。这包括在缩放后通过拖动来移动地图。

也许这个问题可能有点令人困惑。如果我没有很好地表达自己,这是一个应用程序的示例,它或多或少地做了我想要的:

https://play.google.com/store/apps/details?id=com.mtr.mtrmobile

这是香港的地铁地图。我想创建与应用程序上的地图相同的功能,但就我而言,仅适用于两条地铁线。

我对android.graphics或OpenGL不是很熟悉,我一直在互联网上寻找答案或类似问题,但没有结果。

如果有人能简要解释我应用程序上的地图是如何制作的,或者给我任何关于如何实现这一目标的想法,我将不胜感激。

提前谢谢。

我建议你可以看看OSMdroid,它将使您能够加载离线地图,并且可以覆盖任何您想要的内容。

有益的:https://code.google.com/p/osmdroid/

这的工作方式与GoogleMaps API非常相似,因此非常简单,重要的是,OSMdroid的版主一直在为您提供帮助。我目前正在使用这个 API,我喜欢它。

就像zIronManBox所说的那样,OpenStreetMap是一个很好的选择。通过实施OSMdroid,您可以拥有在线或离线地图,并能够为位置添加标记,甚至标记整条街道。

获得OSMdroid也非常容易。您将需要有两个库:osmdroid-android-4.1.jarslf4j-android-1.6.1-RC1.jar。版本很重要。

现在,您只需创建一个活动和一个 xml 文件。

在你的XML文件中(我的名字是map),你有这样的代码:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:tools="http://schemas.android.com/tools"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:orientation="vertical" >

         <org.osmdroid.views.MapView
             xmlns:android="http://schemas.android.com/apk/res/android"
             android:id="@+id/mapView"
             android:layout_width="fill_parent"
             android:layout_height="fill_parent"
             tilesource="MAPQUESTOSM" />
     </LinearLayout>

这将创建一个 id 为 mapView 的视图。如果您希望文本字段在上方或下方,则可以在此XML文件中添加该文本字段。在活动中,您应该在onCreate中添加此代码:

    super.onCreate(savedInstanceState);
    setContentView(R.layout.map);
    mapView = (MapView) this.findViewById(R.id.mapView);
    mapView.setBuiltInZoomControls(true);
    mapView.setMultiTouchControls(true);
    mapView.setClickable(true);
    mapController = (MapController) mapView.getController();
    mapController.setZoom(14);

不要忘记在清单文件中添加权限:

    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

如果您需要好的指南来使地图正常工作,请访问http://android-er.blogspot.se/2012/05/simple-example-use-osmdroid-and-slf4j.html这里有很多关于OSMdroid的教程!

最新更新