OpenStreetMap学习(一)

前两天试着将离线地图导入了一个叫OSMand的APP里,发现还有 诸多的缺点,详见http://blog.csdn.net/u014712516/article/details/50480953

所以想着自己弄一个类似的东西出来,于是去官网上找:http://wiki.openstreetmap.org/wiki/Main_Page

发现要调用OSM的API需要这三个东东:

1.osmdroid-android-4.2.jar   下载链接:https://code.google.com/p/osmdroid/wiki/Downloads

2.slf4j-android-1.6.1-RC1.jar   下载链接:http://www.slf4j.org/android/

3.osmbonuspack_v5.1     下载链接:https://github.com/MKergall/osmbonuspack/releases(我用的是eclipse,所以选择了这个,用AS的大神可以选更新的)


前二者是实例化地图所必须的包,第三个是在你的地图上使用marker、POI、划线等等功能所需要的,现在干脆一次性把它也加进来。


废话不多说,直接上代码

main.xml

<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <org.osmdroid.views.MapView
        android:id="@+id/myOSMmapview"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </org.osmdroid.views.MapView>

</RelativeLayout>


MainActivity.java

package com.tj.osmbeta1;

import org.osmdroid.bonuspack.overlays.Marker;
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;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends Activity {

	private MapView osm;
	private MapController mcontrol;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		
		osm = (MapView) findViewById(R.id.myOSMmapview);
		osm.setTileSource(TileSourceFactory.CYCLEMAP);
		osm.setBuiltInZoomControls(true);
		osm.setMultiTouchControls(true);
		
		mcontrol = (MapController) osm.getController();
		mcontrol.setZoom(11);
		
		GeoPoint center = new GeoPoint(39.94943,116.33507);
		mcontrol.animateTo(center);
		addMarker(center);
	}
	
	public void addMarker(GeoPoint center){
		Marker marker = new Marker(osm);
		marker.setPosition(center);
		marker.setAnchor(Marker.ANCHOR_CENTER,Marker.ANCHOR_BOTTOM);
		marker.setIcon(getResources().getDrawable(R.drawable.ic_launcher));
		
		osm.getOverlays().clear();
		osm.getOverlays().add(marker);
		osm.invalidate();
	}
	
	
	@Override  
    public boolean onCreateOptionsMenu(Menu menu) {  
        super.onCreateOptionsMenu(menu);  

        menu.add(1, Menu.FIRST, 1, "退出");
        return true;
	}
	@Override  
    public boolean onOptionsItemSelected(MenuItem item) {  
    
        switch(item.getItemId()){  
        case 1:  
            this.finish();
            break;  
        default:  
            return super.onOptionsItemSelected(item);  
        }  
          
        return true;  
    }  
}


另外,把AndroidManifest.xml里面的权限加上:

<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_LOCATION_EXTRA_COMMANDS" />
	
	<uses-permission android:name="android.permission.INTERNET" />
	<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
	<uses-permission android:name="android.permission.STORAGE" />
	<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
	<uses-permission android:name="android.permission.WAKE_LOCK" />
	<uses-permission android:name="android.permission.CAMERA" />
	<uses-permission android:name="android.permission.VIBRATE" />
	<uses-permission android:name="android.permission.RECORD_AUDIO" />
	<uses-permission android:name="com.android.vending.BILLING" />
能力有限,我不管有的没的都加上来了。


现在的时间也就到此为止,只是很初步的实现了地图的基本功能。如果想要离线加载地图,可以把.obf文件拷贝到手机SD卡中的osmdroid文件夹的更目录即可。至于怎么生成.obf文件,可以看这篇文章:http://blog.csdn.net/u014712516/article/details/50480953




问题;

1.我发现当我用Mapkin进行渲染的时候地图会出现加载不出来的情况,后来只好选择了CYCLEMAP

2.通过把.obf文件放到根目录的方法可以读出离线的中国地图,但是读不出我自己修改过的地图,而这个在OSMand里面是可以做到的,现在还没想明白怎么回事,难道要调用一些别的方法?
3.一开始地图显示的中心点并不是我想要的点,但是安卓小人站的位置确实是我定的位置,不知道是为什么。


最后把资源包上传一下http://download.csdn.net/download/u014712516/9398492


接下来打算把那个读取地图的问题解决了,顺便研究一下卫星定位的问题。

由于个人能力有限,难免有错误,请各位不吝批评指正~



评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值