MFC之 MapWinGis叠加天地图瓦片地图

1、核心代码

/**************************************************************************************
 * Project: MapWindow Open Source (MapWinGis ActiveX control) 
 **************************************************************************************
 * The contents of this file are subject to the Mozilla Public License Version 1.1
 * (the "License"); you may not use this file except in compliance with 
 * the License. You may obtain a copy of the License at http://www.mozilla.org/mpl/ 
 * See the License for the specific language governing rights and limitations
 * under the License.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 ************************************************************************************** 
 * Contributor(s): 
 * (Open source contributors should list themselves and their modifications here). */
  
#pragma once
#include "BaseProvider.h"

/*
	BaseMap_layerId = "img_w";//获取影像地图(底图)
	ImageCNNote_layerId = "cia_w";//获取影像地图(中文注记)
	ImageENNote_layerId = "eia_w";//获取影像地图(英文注记)
	
	TerrainBaseMap_layerId = "ter_w";//获取地形图(底图)
	TerrainCNNote_layerId = "cta_w";//获取地形图(中文注记)
	TerrainENNote//暂无//获取地形图(英文注记)
	
	VectorBaseMap_layerId = "vec_c";//获取矢量图(底图)vec_w
	VectorCNNote_layerId = "cva_c";//获取矢量图(中文注记)cva_w
	VectorENNote_layerId = "eva_c";//获取矢量图(英文注记)eva_w

	TianDiImageBaseMap		= 39,
	TianDiCNNoteImageMap	= 40,
	TianDiENNoteImageMap	= 41,
	TianDiTerrainBaseMap	= 42,
	TianDiTerrainCNNoteMap	= 43,
	TianDiTerrainENNoteMap	= 44,
	TianDiVectorBasMap		= 45,
	TianDiVectorCNNoteMap	= 46,
	TianDiVectorENNoteMap	= 47,
	
	//在线天地图影像服务地址(墨卡托投影)
	"http://{s}.tianditu.gov.cn/img_w/wmts?service=wmts&request=GetTile&version=1.0.0" +
		"&LAYER=img&tileMatrixSet=w&TileMatrix={z}&TileRow={y}&TileCol={x}" +
		"&style=default&format=tiles&tk=" + key;
	//在线天地图矢量地图服务(墨卡托投影)
	"http://{s}.tianditu.gov.cn/vec_w/wmts?service=wmts&request=GetTile&version=1.0.0" +
		"&LAYER=vec&tileMatrixSet=w&TileMatrix={z}&TileRow={y}&TileCol={x}" +
		"&style=default&format=tiles&tk=" + key;
	//在线天地图影像中文标记服务(墨卡托投影)
	"http://{s}.tianditu.gov.cn/cia_w/wmts?service=wmts&request=GetTile&version=1.0.0" +
		"&LAYER=cia&tileMatrixSet=w&TileMatrix={z}&TileRow={y}&TileCol={x}" +
		"&style=default.jpg&tk=" + key
	//在线天地图矢量中文标记服务(墨卡托投影)
	"http://{s}.tianditu.gov.cn/cva_w/wmts?service=wmts&request=GetTile&version=1.0.0" +
		"&LAYER=cva&tileMatrixSet=w&TileMatrix={z}&TileRow={y}&TileCol={x}" +
		"&style=default.jpg&tk=" + key;
*/

class TianDiBaseProvider: public BaseProvider
{
protected:
	CString Styles;
	CString Layer;
public:
	TianDiBaseProvider() 
	{
		LanguageStr = "zh_cn";
		_refererUrl = "http://www.tianditu.gov.cn/";
		_licenseUrl = "https://mapwingis.codeplex.com/wikipage?title=baidutiles";
		int year = Utility::GetCurrentYear();
		_copyright.Format(L"Copyright @ %d, 天地图,All Rights Reserved", year);
		this->_projection = new MercatorProjection();
		this->_minZoom = 0;
		this->_maxZoom = 18;
		Styles = "img_w";
		Layer = "img";
		_urlFormat = "http://t%d.tianditu.gov.cn/%s/wmts?service=wmts&request=GetTile&version=1.0.0" 
			"&LAYER=%s&tileMatrixSet=w&TileMatrix={%d}&TileRow={%d}&TileCol={%d}" 
			"&style=default&format=tiles&tk=%s";
	}
	
	CString MakeTileImageUrl(CPoint &pos, int zoom)
	{
		CString s;
		int iServerNum = GetServerNum(pos, 8);
		s.Format(_urlFormat, iServerNum, Styles, Layer, zoom, pos.y, pos.x, m_globalSettings.bingApiKey);// 此处借用必应地图的Key接口
		return s;
	}
};

class TianDiImageBaseMapProvider: public TianDiBaseProvider
{
public:
	TianDiImageBaseMapProvider() 
	{
		Id = tkTileProvider::TianDiImageBaseMap;
		Name = "TianDiImageBaseMaps";
		Styles = "img_w";
		Layer = "img";
		_subProviders.push_back(this);
	}
};

class TianDiCNNoteImageMapProvider: public TianDiBaseProvider
{
public:
	TianDiCNNoteImageMapProvider() 
	{
		Id = tkTileProvider::TianDiCNNoteImageMap;
		Name = "TianDiCNNoteImageMaps";
		Styles = "cia_w";
		Layer = "cia";
		_subProviders.push_back(this);
	}
};

class TianDiENNoteImageMapProvider: public TianDiBaseProvider
{
public:
	TianDiENNoteImageMapProvider() 
	{
		Id = tkTileProvider::TianDiENNoteImageMap;
		Name = "TianDiENNoteImageMaps";
		Styles = "eia_w";
		Layer = "eia";
		_subProviders.push_back(this);
	}
};

class TianDiTerrainBaseMapProvider: public TianDiBaseProvider
{
public:
	TianDiTerrainBaseMapProvider() 
	{
		Id = tkTileProvider::TianDiTerrainBaseMap;
		Name = "TianDiTerrainBaseMaps";
		Styles = "ter_w";
		Layer = "ter";
		_subProviders.push_back(this);
	}
};

class TianDiTerrainCNNoteMapProvider: public TianDiBaseProvider
{
public:
	TianDiTerrainCNNoteMapProvider() 
	{
		Id = tkTileProvider::TianDiTerrainCNNoteMap;
		Name = "TianDiTerrainCNNoteMaps";
		Styles = "cta_w";
		Layer = "cta";
		_subProviders.push_back(this);
	}
};

class TianDiTerrainENNoteMapProvider: public TianDiBaseProvider
{
public:
	TianDiTerrainENNoteMapProvider() 
	{
		Id = tkTileProvider::TianDiTerrainENNoteMap;
		Name = "TianDiTerrainCNNoteMaps";
		Styles = "eta_w";
		Layer = "eta";
		_subProviders.push_back(this);
	}
};

class TianDiVectorBaseMapProvider: public TianDiBaseProvider
{
public:
	TianDiVectorBaseMapProvider() 
	{
		Id = tkTileProvider::TianDiVectorBaseMap;
		Name = "TianDiVectorBaseMaps";
		Styles = "vec_c";
		Layer = "vec";
		_subProviders.push_back(this);
	}
};

class TianDiVectorCNNoteMapProvider: public TianDiBaseProvider
{
public:
	TianDiVectorCNNoteMapProvider() 
	{
		Id = tkTileProvider::TianDiVectorCNNoteMap;
		Name = "TianDiVectorCNNoteMaps";
		Styles = "cva_c";
		Layer = "cva";
		_subProviders.push_back(this);
	}
};

class TianDiVectorENNoteMapProvider: public TianDiBaseProvider
{
public:
	TianDiVectorENNoteMapProvider() 
	{
		Id = tkTileProvider::TianDiVectorENNoteMap;
		Name = "TianDiVectorENNoteMaps";
		Styles = "eva_c";
		Layer = "eva";
		_subProviders.push_back(this);
	}
};

2、效果图

后期奉上,敬请关注..

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值