2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 使用osmdroid6.0.2加载谷歌 高德 天地图等瓦片地图

使用osmdroid6.0.2加载谷歌 高德 天地图等瓦片地图

时间:2022-10-18 02:13:11

相关推荐

使用osmdroid6.0.2加载谷歌 高德 天地图等瓦片地图

研究了一星期多的Osmdroid6.0.2,深感这个开源的android地图包强大,因为使用其他瓦片涉及知识产权,请大家谨慎使用,本文只做研究测试。

新建GoogleTileSource类继承org.osmdroid.tileprovider.tilesource.TileSourceFactory类,具体对应的资源都有注释

public class GoogleTileSource extends TileSourceFactory {//谷歌卫星混合public static final OnlineTileSourceBase GoogleHybrid = new XYTileSource("Google-Hybrid",0, 19, 512, ".png", new String[]{"","","","",}) {@Overridepublic String getTileURLString(long pMapTileIndex) {Log.d("url", getBaseUrl() + "/vt/lyrs=y&scale=2&hl=zh-CN&gl=CN&src=app&x=" + MapTileIndex.getX(pMapTileIndex) + "&y=" + MapTileIndex.getY(pMapTileIndex) + "&z=" + MapTileIndex.getZoom(pMapTileIndex));return getBaseUrl() + "/vt/lyrs=y&scale=2&hl=zh-CN&gl=CN&src=app&x=" + MapTileIndex.getX(pMapTileIndex) + "&y=" + MapTileIndex.getY(pMapTileIndex) + "&z=" + MapTileIndex.getZoom(pMapTileIndex);}};//谷歌卫星public static final OnlineTileSourceBase GoogleSat = new XYTileSource("Google-Sat",0, 19, 512, ".png", new String[]{"","","","",}) {@Overridepublic String getTileURLString(long pMapTileIndex) {return getBaseUrl() + "/vt/lyrs=s&scale=2&hl=zh-CN&gl=CN&src=app&x=" + MapTileIndex.getX(pMapTileIndex) + "&y=" + MapTileIndex.getY(pMapTileIndex) + "&z=" + MapTileIndex.getZoom(pMapTileIndex);}};//谷歌地图public static final OnlineTileSourceBase GoogleRoads = new XYTileSource("Google-Roads",0, 18, 512, ".png", new String[]{"","","","",}) {@Overridepublic String getTileURLString(long pMapTileIndex) {return getBaseUrl() + "/vt/lyrs=m&scale=2&hl=zh-CN&gl=CN&src=app&x=" + MapTileIndex.getX(pMapTileIndex) + "&y=" + MapTileIndex.getY(pMapTileIndex) + "&z=" + MapTileIndex.getZoom(pMapTileIndex);}};//谷歌地形public static final OnlineTileSourceBase GoogleTerrain = new XYTileSource("Google-Terrain",0, 16, 512, ".png", new String[]{"","","","",}) {@Overridepublic String getTileURLString(long pMapTileIndex) {return getBaseUrl() + "/vt/lyrs=t&scale=2&hl=zh-CN&gl=CN&src=app&x=" + MapTileIndex.getX(pMapTileIndex) + "&y=" + MapTileIndex.getY(pMapTileIndex) + "&z=" + MapTileIndex.getZoom(pMapTileIndex);}};//谷歌地形带标注public static final OnlineTileSourceBase GoogleTerrainHybrid = new XYTileSource("Google-Terrain-Hybrid",0, 16, 512, ".png", new String[]{"","","","",}) {@Overridepublic String getTileURLString(long pMapTileIndex) {return getBaseUrl() + "/vt/lyrs=p&scale=2&hl=zh-CN&gl=CN&src=app&x=" + MapTileIndex.getX(pMapTileIndex) + "&y=" + MapTileIndex.getY(pMapTileIndex) + "&z=" + MapTileIndex.getZoom(pMapTileIndex);}};//高德地图public static final OnlineTileSourceBase AutoNaviVector = new XYTileSource("AutoNavi-Vector",0, 20, 256, ".png", new String[]{"https://wprd01./appmaptile?","https://wprd02./appmaptile?","https://wprd03./appmaptile?","https://wprd04./appmaptile?",}) {@Overridepublic String getTileURLString(long pMapTileIndex) {return getBaseUrl() + "x=" + MapTileIndex.getX(pMapTileIndex) + "&y=" + MapTileIndex.getY(pMapTileIndex) + "&z="+ MapTileIndex.getZoom(pMapTileIndex)+"&lang=zh_cn&size=1&scl=1&style=7&ltype=7";}};//影像地图 _W是墨卡托投影 _c是国家2000的坐标系public static final OnlineTileSourceBase tianDiTuImgTileSource = new XYTileSource("TianDiTuImg", 1, 18, 768, ".png",new String[]{"/DataServer?T=img_w","/DataServer?T=img_w","/DataServer?T=img_w","/DataServer?T=img_w","/DataServer?T=img_w","/DataServer?T=img_w"}) {@Overridepublic String getTileURLString(final long pMapTileIndex) {return getBaseUrl() + "&X=" + MapTileIndex.getX(pMapTileIndex) + "&Y=" + MapTileIndex.getY(pMapTileIndex)+ "&L=" + MapTileIndex.getZoom(pMapTileIndex);}};//影像标注 _W是墨卡托投影 _c是国家2000的坐标系public static final OnlineTileSourceBase tianDiTuCiaTileSource = new XYTileSource("TianDiTuCia", 1, 18, 768, ".png",new String[]{"/DataServer?T=cia_w","/DataServer?T=cia_w","/DataServer?T=cia_w","/DataServer?T=cia_w","/DataServer?T=cia_w","/DataServer?T=cia_w"}) {@Overridepublic String getTileURLString(final long pMapTileIndex) {Log.d("url", getBaseUrl() + "&X=" + MapTileIndex.getX(pMapTileIndex) + "&Y=" + MapTileIndex.getY(pMapTileIndex)+ "&L=" + MapTileIndex.getZoom(pMapTileIndex));return getBaseUrl() + "&X=" + MapTileIndex.getX(pMapTileIndex) + "&Y=" + MapTileIndex.getY(pMapTileIndex)+ "&L=" + MapTileIndex.getZoom(pMapTileIndex);}};}

然后在主程序MainActivity中的mapview中使用如下代码:

map = (MapView) findViewById(R.id.map);map.setTileSource(GoogleTileSource.MAPNIK)

因为是继承的,所以原来包中自带的OpenStreetMap、OpenSea的瓦片资源都可以继续引用。

问题:

为了保密高德、谷歌.cn、天地图使用的是GCJ02(火星坐标系),手机gps数据是WGS-84坐标系,需要进行转换。为什么没有百度,因为百度的瓦片分割和高德谷歌都不一样,还有百度使用的自己的BD09坐标系 即百度坐标系,估计GCJ02坐标系经加密后的坐标系。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。