我正在构建一个需要使用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>
答案 0 :(得分:3)
对我而言,创建活动时我无法设置中心。如果我在设置中心点之前等待〜200ms,一切正常。
这是一个丑陋的修复:
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);
答案 1 :(得分:0)
我猜你在SD卡/ osmdroid文件夹中拥有的不仅仅是存档(地图),因此你可以看到更多的地图。
对于您所在位置的中心,您可以使用。
mMapView.getController().animateTo(yourPosition);
答案 2 :(得分:0)
有关在某个位置居中的问题应该已在osmdroid版本4.3中修复。从版本4.3开始,不再需要使用postDelayed的变通方法。
详细信息:通过以下对osmdroid的提交,现在可以在创建布局后自动记录和重放之前需要布局正常工作的“animateTo()”等调用。
https://github.com/osmdroid/osmdroid/commit/2f38d49281b31e79a8290d8df55bb738024907e8