0

我对这个话题进行了一些研究,发现最后一次被问到这个问题(特别是谷歌地图)时,答案是“这是非法的”。既然谷歌地图现在为您提供了自己进行离线缓存的能力,为什么它仍然是非法的?

无论如何,我有一个应用程序,我需要为(几平方英里)打包一张小地图。我已经考虑过做 osmdroid,但很难理解他们在做什么。我查看了他们的 SVN 存储库并在 Play 商店中查看了他们的示例应用程序,但很失望。该应用程序本身几乎完全符合我的需要,但它使用了一些奇怪的代码形式,未包含在 SDK 中。osmdroid 似乎是我目前最好的选择,但似乎没有太多可用的参考资料。

如果有人能指出我开始使用 osmdroid 的正确方向,或者只是其他一些允许打包地图的 SDK,我将不胜感激。

注意:我试过在 osmdroid 中做,但是做的时候

 mapView.setUseDataConnection(false); 

即使文件似乎位于正确的目录中,地图也不会加载任何内容(因为它也会在那里下载所有文件)

4

1 回答 1

1

要像 Google Maps 一样使用 Osmdroid,您只需要在项目中添加几个 jar 文件,其中一个是 osmdroid-android-3.0.x.jar(对于 x - 我使用了版本 5 和版本 7 )。另一个 jar 是 slf4j-android-1.5.8.jar。(可能有这个的更高版本,不记得我从哪里得到它,但应该在某个地方的 Osmdroid 网站上有一个链接)。该代码与谷歌地图非常相似。这是我可以制作的最小的工作示例

package osmdemo.demo;

import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapController;
import org.osmdroid.views.MapView;

import android.app.Activity;
import android.os.Bundle;

// This is all you need to display an OSM map using osmdroid
public class OsmdroidDemoMap extends Activity {

    private MapView         mMapView;
    private MapController   mMapController;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
            setContentView(R.layout.osm_main);
        mMapView = (MapView) findViewById(R.id.mapview);
        mMapView.setTileSource(TileSourceFactory.MAPNIK);
        mMapView.setBuiltInZoomControls(true);
        mMapController = mMapView.getController();
        mMapController.setZoom(13);
        GeoPoint gPt = new GeoPoint(51500000, -150000);
        //Centre map near to Hyde Park Corner, London
        mMapController.setCenter(gPt);

    }
}
/* HAVE THIS AS YOUR osm_main.xml
---------------------------------------------------------- XML START
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <org.osmdroid.views.MapView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"
        android:id="@+id/mapview"
        ></org.osmdroid.views.MapView>
</LinearLayout>
---------------------------------------------------------- XML END
Include slf4j-android-1.5.8.jar and osmdroid-android-3.0.5.jar in the build path
(Google search for where to get them from)
*/

至于离线缓存,请使用 Mobile Atlas creator (MOBAC) 制作感兴趣区域的 Osmdroid Zip 格式的 Atlas。我使用 OpenStreetMap 作为瓦片源。获得 zip 文件后,只需将其放入设备上的 Osmdroid 目录即可。它应该为您提供离线功能。我一直在伦敦的自己的应用程序中使用它,并关闭数据包数据,以降低数据下载(及其成本)。

于 2012-09-09T21:05:38.317 回答