灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3638回复:0

Android自定义地图示例:QQ地图

楼主#
更多 发布于:2012-09-06 14:06


再来一个简单一些的自定义地图类型示例:qq地图,QQ地图URL规则比较简单。1-17级都是有一层组成,选用GENERIC_MAPTYPE_5作为QQ地图类型,直接在CustomMap修改代码如下:
[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_5);

    }

    @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%=3;
        int maxTiles=(int)Math.pow(2, zoomLevel);
        switch(mtype){
            case MapType.GENERIC_MAPTYPE_5:
                 returnURL= "http://p"
                     + serverIndex+".map.qq.com/maptiles/" ;
                 y=maxTiles-y-1;
                 returnURL+=+zoomLevel
                   +"/"+(int)(x/16)+"/"+(int)(y/16)+"/"+x+"_"+y+".gif";
                break;
            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;
    }

}
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_5);

    }

    @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%=3;
        int maxTiles=(int)Math.pow(2, zoomLevel);
        switch(mtype){
            case MapType.GENERIC_MAPTYPE_5:
                 returnURL= "http://p"
                     + serverIndex+".map.qq.com/maptiles/" ;
                 y=maxTiles-y-1;
                 returnURL+=+zoomLevel
                   +"/"+(int)(x/16)+"/"+(int)(y/16)+"/"+x+"_"+y+".gif";
                break;
            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;
    }

}




作者:mapdigit

喜欢0 评分0
游客

返回顶部