自定义地图示例:天地图(二)
有了天地图地图图片的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只定义了一个方法:地图图片产生规则定义。
[java]
public String getTileURL(int mtype, int x, int y, int zoomLevel);
public String getTileURL(int mtype, int x, int y, int zoomLevel);
由于目前在写Android示例,就使用Android为例,其它平台类似,在项目GISEngineTutorial中添加CustomMap Activity。
[java]
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";
&nb
补充:移动开发 , 其他 ,