OSMDroid(1)——OSM简介,基础例子搭建

1.OSMDroid简介

Osmdroid是一款完全开源的地图基本操作SDK,相比于现在普遍使用的百度地图,高德地图,谷歌地图等最大的好处就是开源。

最近在做一个军方项目,要求完全不能联网,从开发到应用整个阶段都是在局域网进行,相比之下采用了OSMDroid这个SDK作为解决方案。

先来看OSMDroid,便是(Open Street Map For Android),后面都简称OSM,是否存在Web端还不清楚。目前国内资料非常少,这是相比其他企业SDK不足的地方,官方的开发文档也写的很简单。

支持在线加载地图和加载本地地图,基础的操作上几款SDK大同小异,OSM可以满足基本业务需求,由于开源,也更加灵活一些。

这个项目有微软的影子,微软希望在OSM这个开源项目上对抗一家独大的谷歌地球,就目前情况来看,情况并不乐观,但是多了解一下这个开源项目,会发现还是比较有意思的。

我们更多地是希望能更好的使用这个SDK进行二次开发,下面我们开始了解一下OSM。

我跟这个项目一个多月,搭了一个框架,便要去准备考研的相关事宜,只能说对OSM有一个基础的了解,但是看到当前资料是在是太少了,所以把我自己一些简单的看法分享出来。

前面几篇教程都是做一个简单地介绍,后面直接给大家封装好可以直接用的工具类,应该会满足大家的部分需求。

2.相关OSMDroid的一些参考资料

地图资源下载,很多地图资源不是很支持,一般的正式项目,一般会对地图有较高的精度要求,而更多的是去买第三方的高精度离线地图,

测试需要地图的话可以去水经注等地图软件上下载免费版的资源进行测试使用。

http://download.geofabrik.de/

API文档WIKI

https://wiki.openstreetmap.org/wiki/API_v0.6

源码github,开发需要的主要力量,在简单看完开发文档,了解地图基础使用之后便可以直接根据业务需求进行开发了,疑问的地方可以看源码或者和我探讨一下。

https://github.com/osmdroid/osmdroid

osm开发者文档,借鉴意义不大,只能用来入门,最基础的操作,很多都没有说清楚。

http://osmdroid.github.io/osmdroid/

有一个OSM的官网例子

apk文件需要的话留言。

3.下面便是介绍一下OSM的基本使用

在项目中添加OSM

在gradle文件中添加依赖

repositories {

mavenCentral()

}

dependencies {

compile 'org.osmdroid:osmdroid-android:<VERSION>'

}

使用OSM需要获取响应权限

在manifest文件中添加权限

<!--定位权限-->

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<!--网络权限-->

<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<!--存储权限-->

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

创建main.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>

创建Activity

public class MainActivity extends Activity {

MapView map = null;

@Override public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

//先加载OSD的配置

Context ctx = getApplicationContext();

Configuration.getInstance().load(ctx,                                         PreferenceManager.getDefaultSharedPreferences(ctx));

//首先确保存储权限已经开启,在手机权限管理中打开本软件的存储读写权限

//加载视图

setContentView(R.layout.activity_main);

map = (MapView) findViewById(R.id.map);

map.setTileSource(TileSourceFactory.MAPNIK);

}

public void onResume(){

super.onResume();

//Acivity声明周期OnResume

//可以使用sharedpreference用来保存配置,当配置发生改变的时候可以使用如下语句

//SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

//Configuration.getInstance().load(this, PreferenceManager.getDefaultSharedPreferences(this));

map.onResume(); //needed for compass, my location overlays, v6.0.0 and up

}

public void onPause(){

super.onPause();

//Acivity声明周期OnPause

       //可以使用sharedpreference用来保存配置,当配置发生改变的时候可以使用如下语句

//SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

//Configuration.getInstance().save(this, prefs);

map.onPause(); //needed for compass, my location overlays, v6.0.0 and up

}

}

这样一个简答的OSM demo已经搭建成功了。

发布了1 篇原创文章 · 获赞 0 · 访问量 45

猜你喜欢

转载自blog.csdn.net/robotskly/article/details/104092028
今日推荐