【问题标题】:No map shown in osmdroidosmdroid 中没有显示地图
【发布时间】:2017-03-25 18:54:07
【问题描述】:

我尝试使用 Android Studio 制作一个 osmdroid 项目,但显示了任何地图。我只有一个空白网格。

在我的 xml 文件中,我输入了以下代码:

    <?xml
version="1.0" encoding="utf-8"
?>
<LinearLayout
xmlns:android="..."
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<org.osmdroid.views.MapView
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
tilesource="Mapnik"
/>
</LinearLayout>

在我的 .java 文件中,我创建了这个 onCreate 方法

private MapView mMap;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);

mMap = (MapView) findViewById(R.id.map);
mMap.setMultiTouchControls(true);
mMap.setBuiltInZoomControls(true);
}

IMapController mapController = mMap.getController();

mapController.setZoom(14);
mapController.setCenter(new GeoPoint(48.745, -3.455));
ScaleBarOverlay scala = new ScaleBarOverlay(mMap);
mMap.getOverlays().add(scala);
mMap.invalidate();

我在清单中添加了以下权限:

<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"
/>

你知道我该如何解决这个问题吗?

我使用了 osmdroid-android:5.6.4'(我也尝试了其他版本,但我都遇到了同样的问题)

【问题讨论】:

  • 你设置了用户代理吗?或者查看了 wiki 中的任何示例或指南?
  • 你的目标api是什么?

标签: android openstreetmap osmdroid


【解决方案1】:

使用 6.1 版本及更高版本的 osmdroid 库。请按照以下步骤操作:

1.从您的 xml 文件中删除 tilesource 属性

tilesource="mapnik"  

2.在调用 findviewbyId() 地图之前输入此 sn-p 代码。

final Context ctx = getApplicationContext();
      Configuration.getInstance().load(ctx, PreferenceManager.getDefaultSharedPreferences(ctx));
      Configuration.getInstance().setUserAgentValue(BuildConfig.APPLICATION_ID);
      mMap = (MapView) findViewById(R.id.map);

3.在findViewbyId()之后添加下面的snnipet

mMap.setTileSource(TileSourceFactory.MAPNIK); 

你的最终代码应该是这样的:

activity.java

    private MapView mMap;
        @Override
        protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
    
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);

    final Context ctx = getApplicationContext();
          Configuration.getInstance().load(ctx, PreferenceManager.getDefaultSharedPreferences(ctx));
          Configuration.getInstance().setUserAgentValue(BuildConfig.APPLICATION_ID);

    mMap = (MapView) findViewById(R.id.map);
    mMap.setTileSource(TileSourceFactory.MAPNIK); 
    mMap.setMultiTouchControls(true);
    mMap.setBuiltInZoomControls(true);
    }

.xml 文件

    <?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 android:id="@+id/map"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />
</LinearLayout>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多