自定义地图示例 天地图(二)

本文介绍了如何在地图应用中支持自定义地图类型,特别是针对天地图的实现。通过使用MapType和ICustomMapType接口,详细讲解了天地图的分片规则和与Google地图的区别。在Android平台上创建示例,讨论了由于天地图坐标投影方法不同导致的经纬度坐标调整问题,强调这不是坐标偏移。同时,文章呼吁读者关注作者的人工智能教程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.youkuaiyun.com/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

有了天地图地图图片的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地图坐标投影方法不同,而坐标偏移指的是人为添加的偏移。


 

 

           

给我老师的人工智能教程打call!http://blog.youkuaiyun.com/jiangjunshow
这里写图片描述
<think>嗯,用户想在Cesium中使用天地图服务设置自定义地图,我需要根据提供的引用内容来解答。首先,引用[1]提到了在Vue3中加载天地图的矢量地图和影像地图,以及地图叠加。这可能涉及如何构造天地图的URL,并配置Cesium的图层。 然后,引用[2]中提到Mapbox自定义地图需要styleId,但天地图可能不同,可能需要不同的参数,比如服务地址、图层类型和密钥。引用[3]则提到了地形服务的加载方法,虽然主要是地形,但可能对图层配置有帮助,比如使用fromUrl方法。 我需要先确认天地图服务的URL结构。通常天地图需要key参数,并且不同的服务类型(矢量、影像)对应不同的URL。例如,矢量地图可能是vec_w,影像地图是img_w,标注是cia_w。然后,在Cesium中创建UrlTemplateImageryProvider,设置对应的URL模板,并包含token参数。 另外,需要注意跨域问题,可能需要配置Cesium的代理,但引用中没有提到,可能需要提醒用户。另外,确保用户已经申请了天地图的密钥,并正确替换代码中的key。 还需要检查Cesium的版本是否支持这些配置,可能需要在Viewer中正确添加图层。示例代码结构是否正确,比如使用ImageryLayer和UrlTemplateImageryProvider。最后,可能还需要叠加不同图层,如矢量底图加标注层,影像底图加标注层,并调整顺序。 可能的问题包括URL是否正确,密钥是否有效,图层顺序是否正确,以及跨域设置。需要将这些步骤详细说明,并给出代码示例。同时,生成相关问题时,可以考虑优化方法、跨域处理、不同地图服务比较等。</think>### Cesium中使用天地图服务的自定义地图配置步骤 在Cesium中加载天地图服务需通过`UrlTemplateImageryProvider`实现,以下是具体实现方法: 1. **获取天地图服务密钥** 注册[天地图开放平台](https://www.tianditu.gov.cn/)账号,申请`服务密钥`(key参数)[^1] 2. **配置矢量地图图层** ```javascript const tdtVecLayer = viewer.imageryLayers.addImageryProvider( new Cesium.UrlTemplateImageryProvider({ url: "http://t0.tianditu.gov.cn/vec_w/wmts?tk=YOUR_KEY", layer: "vec", style: "default", format: "tiles", tileMatrixSetID: "w", maximumLevel: 18 }) ); ``` 3. **叠加标注图层(必加)** ```javascript const tdtCiaLayer = viewer.imageryLayers.addImageryProvider( new Cesium.UrlTemplateImageryProvider({ url: "http://t0.tianditu.gov.cn/cia_w/wmts?tk=YOUR_KEY", layer: "cia", style: "default", format: "tiles", tileMatrixSetID: "w" }) ); ``` 4. **影像地图配置(可选)** ```javascript const tdtImgLayer = viewer.imageryLayers.addImageryProvider( new Cesium.UrlTemplateImageryProvider({ url: "http://t0.tianditu.gov.cn/img_w/wmts?tk=YOUR_KEY", layer: "img", style: "default", format: "tiles", tileMatrixSetID: "w" }) ); ``` **关键参数说明**: - `YOUR_KEY`需替换为实际申请的密钥 - 图层叠加顺序遵循`后添加在上层`原则 - 影像地图需配合`img`+`cia`组合使用 - 服务地址支持`http/https`协议,需注意跨域配置 **完整示例组合**: $$ \begin{cases} \text{矢量地图} & \Rightarrow vec\_w + cia\_w \\ \text{影像地图} & \Rightarrow img\_w + cia\_w \\ \text{地形服务} & \Rightarrow Cesium.createWorldTerrain() \end{cases} $$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值