OpenStreetMap学习(一)

来源:互联网 发布:送货派单软件 编辑:程序博客网 时间:2024/06/03 13:01

前两天试着将离线地图导入了一个叫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;@Overrideprotected 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


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

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



0 0