自定义地图示例:天地图(二)
来源:互联网 发布:usb网络转换器怎么用 编辑:程序博客网 时间:2024/04/28 08:17
有了天地图地图图片的URL生成规则,就可以开始实行对自定义地图类型天地图的支持。
引路蜂地图包中类MapType,接口ICustomMapType主要用来支持自定义地图。在类MapType中定义了 GENERIC_MAPTYPE_1 ,GENERIC_MAPTYPE_2 … GENERIC_MAPTYPE_7 用于支持自定义地图,其中类型 GENERIC_MAPTYPE_7 由两层组成(GENERIC_MAPTYPE_6和GENERIC_MAPTYPE_7),也就是说在绘制地图类型GENERIC_MAPTYPE_7时,现绘制GENERIC_MAPTYPE_6,在其上再绘制GENERIC_MAPTYPE_7,两层叠加而成。多于两层的地图图片很少见。
跟据天地图的特点,采用GENERIC_MAPTYPE_7作为其地图类型,1-10由两层地图组成,一层图像,一层标注。11层以上也可以看作两层,另一层为空层。
接口ICustomMapType只定义了一个方法:地图图片产生规则定义。
public String getTileURL(int mtype, int x, int y, int zoomLevel);
由于目前在写Android示例,就使用Android为例,其它平台类似,在项目GISEngineTutorial中添加CustomMap Activity。
package com.pstreets.gisengine.demo;import com.mapdigit.gis.raster.ICustomMapType;import com.mapdigit.gis.raster.MapType; import com.mapdigit.gis.geometry.GeoLatLng;import com.pstreets.gisengine.R;import com.pstreets.gisengine.SharedMapInstance; import android.app.Activity;import android.os.Bundle;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem; public class CustomMap extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public void onStart() { super.onStart(); MapType.setCustomMapTileUrl(new TiandiMapType()); GeoLatLng center = new GeoLatLng(32.0616667, 118.7777778); SharedMapInstance.map.setCenter(center, 13, MapType.GENERIC_MAPTYPE_7); } @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.mapzoom_menu, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle item selection switch (item.getItemId()) { case R.id.zoomin: SharedMapInstance.map.zoomIn(); return true; case R.id.zoomout: SharedMapInstance.map.zoomOut(); return true; default: return super.onOptionsItemSelected(item); } } } class TiandiMapType implements ICustomMapType { private static int serverIndex=1; public String getTileURL(int mtype, int x, int y, int zoomLevel) { String returnURL=""; serverIndex+=1; serverIndex%=6; int maxTiles=(int)Math.pow(2, zoomLevel); switch(mtype){ case MapType.GENERIC_MAPTYPE_6: if(zoomLevel<11){ returnURL= "http://tile" + serverIndex +".tianditu.com/DataServer?T=A0512_EMap"; returnURL+="&X="+x+"&Y="+y+"&L="+zoomLevel; }else if(zoomLevel<13){ returnURL= "http://tile" + serverIndex +".tianditu.com/DataServer?T=B0627_EMap1112"; returnURL+="&X="+x+"&Y="+y+"&L="+zoomLevel; }else{ returnURL= "http://tile" + serverIndex +".tianditu.com/DataServer?T=siwei0608"; returnURL+="&X="+x+"&Y="+y+"&L="+zoomLevel; } break; case MapType.GENERIC_MAPTYPE_7: if(zoomLevel<11){ returnURL= "http://tile" + serverIndex +".tianditu.com/DataServer?T=AB0512_Anno"; returnURL+="&X="+x+"&Y="+y+"&L="+zoomLevel; }else{ returnURL=MapType.EMPTY_TILE_URL; } break; } return returnURL; } }
看起来还是不错,但仔细分析一下,天地图的分片方法和Google地图分片方法不尽相同,在同一缩放级别下,天地图比Google地图在高度方向要矮一半,具体来说,将两种地图都设成最小级(显示全世界地图),天地图大小为512X256,而Google地图为512X512。这造成的结果就是需要对天地图经纬度坐标进行调整。如何调整将在以后详细说明。但这不影响自定义地图示例方法,如果自定义地图分片方法和Google地图一样,则不需要调整经纬度坐标。要注意的是这里的调整经纬度坐标和坐标偏移是不同的概念。这里经纬度坐标调整是因为天地图和Google地图坐标投影方法不同,而坐标偏移指的是人为添加的偏移。
- 自定义地图示例:天地图(二)
- 自定义地图示例:天地图(一)
- 天地图卫星地图在OpenLayers中的应用示例源码
- 天地图卫星地图在OpenLayers中的应用示例源码
- 百度地图叠加自定义图层示例
- 天地图二维地图数据的接入
- 天地图、百度、高德、腾讯地图图片叠加层切片生成工具动态(2017.3.4 自定义切片水印)
- Android自定义地图示例:QQ地图
- ArcGIS教程:自定义地图范围(二)
- Android引路蜂地图开发示例:叠加自定义图层
- LWUIT引路蜂地图开发示例:叠加自定义图层
- Blackberry引路蜂地图开发示例:叠加自定义图层
- ArcGIS Flex API 调用天地图和Google地图服务
- ArcGIS Flex API 调用天地图和Google地图服务
- 超图IClient for Flex加载天地图经纬度地图
- OL4叠加显示天地图地图服务之XYZ实例
- OL4叠加显示天地图地图服务之WMTS实例
- ArcGIS online——地图模版示例(二)
- pReferences
- ORA-01578(数据块损坏) 错误解决方法
- Python中删除特定目录下的文件
- 分享一个chrome插件 sorry youku 屏蔽优酷视频广告的利器,
- 自定义地图示例:天地图(一)
- 自定义地图示例:天地图(二)
- 流水灯
- QQ浏览器(Android)设计分享:融合的设计
- MemAdmin (基于 PHP5 & JQuery 的 Memcached 管理监控工具)
- 无刷新多文件上传
- UML之父:架构业务需求与软件开发的桥梁
- oracle数据库连接字符串注意事项
- electric ros 版本 资料列表
- 《愤怒的小鸟》之父魏皮特:"小鸟"王国的品牌之路