【问题标题】:why osmdroid loaded a lot of maps. & Zoom to a wrong place为什么 osmdroid 加载了很多地图。 & 缩放到错误的地方
【发布时间】:2012-05-09 02:34:59
【问题描述】:

我正在构建一个需要使用 OpenStreetMap 的应用程序。地图已加载。但是,当我缩小时,我发现加载了不止一张地图..实际上,它们似乎有无数个......中间一张地图,上面一张,下面一张;实际上,如果您向下滚动屏幕,您会看到更多...

这是什么原因?抱歉,stackoverflow 不允许我上传照片。我的代码已附上,你可能想试试..

另一件事是,我使用定位服务找到了我当前所在位置的纬度和经度,并将它们存储在 GeoPoint 中;然后我将缩放中心设置到那个点,但是 osm 去了另一个点。很远。

我的代码和 XML 文件附在下面

public class OsmdActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    MapView mapView = (MapView) findViewById(R.id.mapview);
    mapView.setTileSource(TileSourceFactory.MAPNIK);
    mapView.setBuiltInZoomControls(true);
    MapController mapController = mapView.getController();
    mapController.setZoom(10);

    double lat = 1.29377413882149 * 1000000;
    double lon = 103.771969817518 * 1000000;
    GeoPoint p = new GeoPoint(lat, lon);
    mapController.setCenter(p);
}}



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_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"
        android:clickable="true"/>
</LinearLayout>

【问题讨论】:

    标签: android google-maps geolocation openstreetmap osmdroid


    【解决方案1】:

    对我来说,创建 Activity 时我无法设置中心。如果我在你设置中心点之前等待大约 200 毫秒,那么一切正常。

    这是丑陋的修复:

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                GeoPoint point = new GeoPoint((int) (52.520820* 1E6),(int) (13.409346* 1E6));
                mapView.getController().animateTo(point);
            }
        }, 200);
    

    【讨论】:

    • 谢谢!你拯救了我的一天。
    【解决方案2】:

    我猜你在 SD 卡/osmdroid 文件夹中拥有的不仅仅是存档(地图),因此你会看到更多地图。

    您可以使用您所在位置的中心。

        mMapView.getController().animateTo(yourPosition);
    

    【讨论】:

    • 您好,感谢您的回复,但我没有使用离线地图。这会导致这个问题吗?
    • 嗨谢谢我知道我的问题是什么!我应该删除该来源以使用在线地图。但是,对于离线使用,您所说的多个存档地图是什么意思?
    • 我不这么认为。也许您的互联网连接很慢或类似的东西。或者您可以检查您的 sdCard 中的 osmdroid 文件夹,如果不为空则清理它。
    • 当您使用在线地图时,osm droid 会下载地图缓存,因此当您第二次打开应用程序时,地图加载速度比第一次快。据我所知,osm 使用 SdCard\osmdroid 文件夹来存储地图缓存。您需要整个世界的地图还是只需要某个大陆\国家\城镇的地图?
    • 非常感谢您的帮助。对于你的问题,我只使用了一个城镇的地图。是的,你是对的,这很浪费。好吧,我考虑过使用离线地图,但它需要手动将 osmdroid zip 文件添加到 sdcard?完成后我需要分发应用程序,我的用户可能不想手动添加文件..您对此有什么建议吗?我可以把zip文件放在项目的某个地方,安装时会自动写入用户的sd卡吗?
    【解决方案3】:

    在 osmdroid 版本 4.3 中应该已经修复了关于在某个位置居中的问题。从 4.3 版开始,不再需要使用 postDelayed 的解决方法。

    详细信息:通过对 osmdroid 的以下提交,以前需要布局才能正常工作的“animateTo()”等调用现在将在布局创建后自动记录和重放。

    https://github.com/osmdroid/osmdroid/commit/2f38d49281b31e79a8290d8df55bb738024907e8

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-16
      相关资源
      最近更新 更多