最近公司做地图方面的应用,需求是用一个第三方的地图引擎来加载自己的地图(说是自己的地图,其实还是其他地图的资源不过是添加了一些图层。毕竟地图这东西不是一般公司可以整出来的)好吧!话不多说,进入主题!
https://github.com/osmdroid/osmdroid //在github的项目地址
需要下一个它的aar文件,然后导入使用。(导入说明git上已经说的很清楚,在此不再多说)
总的来说这个地图的库还是不错的,平时更新维护的都很勤快!只是他不像是谷歌那种大公司在经营的,所有有关的官方文档并不是很详细,刚开始接触的时候我也很郁闷。这玩意咋没个像样的文档,干嘛都得翻墙去查资料,耗时耗力。但为什么还要用它呢!其实事物都有双面性的,要用它是因为它是完全开源的,你可以随便改。如果你用高德,或者百度,前期你可能会感觉用起来很爽!但凡是公司都有一个目的,盈利。用着用着你就发现,怎么这个那个的都要付费。处处受它限制!当然如果公司比较吊,有钱可以忽略这个!
1.首先是加载地图,调用服务器的接口,来加载地图:
这个是项目中的代码,这个方法接受两个参数,其中overLayname是地图缓存路径下的文件夹名称,另一个mapUrl就是你需要去请求服务器接口url了(这其中会涉及到字符串拼接,地图的url是有x,y,z 这些参数的,当然如果你做这些的话,这个肯定是知道的,这里接受的是拼接好的url)
因为需求类似于写一个sdk给不同的项目使用,所有在这里我是继承地图的MapView对象来写的public class UCMapView extends MapView 所有以下的方法前面都是由MapView对象来调用的,在这个类中也就是this,所已我都省略了!
private void getOverLay(String overLayname, String[] mapUrl) {
setMultiTouchControls(true);
if (tileSource == null) {
Location location = null;
if (location != null) {
GeoPoint point = new GeoPoint(location.getLatitude(), location.getLongitude()); //设置地图中心点
tileSource = new SetTileSource(overLayname, 3, 18, 256, ".png", mapUrl, overLayname);
getController().setCenter(point);
} else {
GeoPoint defaultPoint = new GeoPoint(39.8826, 116.4235); //设置地图中心点
tileSource = new SetTileSource(overLayname, 3, 18, 256, ".png", mapUrl, overLayname);
getController().setCenter(defaultPoint);
final ArrayList<OverlayItem> it