MFC之 MapWinGis叠加瓦片图层

1、前言

    前面我们介绍了,如果创建各类瓦片图层,如何让MapWinGis来显示出来这些图层呢?还需要修改TileProviders.cpp文件:

#include "BaiduMapProvider.h"
#include "AMapProvider.h"
#include "ArcGisProvider.h"
#include "TianDiMapProvider.h"

BaseProvider* CTileProviders::getProviderCore(tkTileProvider provider )
{
	for (size_t i = 0; i < _providers.size(); i++)
	{
		if (_providers[i]->Id == provider)
			return _providers[i];
	}

	BaseProvider* p = NULL;

	switch (provider)
	{
    ...
		case BaiduMaps:
			p = (BaseProvider*)new BaiduMapProvider();
			break;
		case BaiduSatellite:
			p = (BaseProvider*)new BaiduSatelliteProvider();
			break;
		case BaiduSatelliteHybrid:
			{
				BaiduSatelliteHybridProvider* pr1 = new BaiduSatelliteHybridProvider();
				pr1->AddDynamicOverlay(new BaiduSatelliteProvider());
				pr1->AddDynamicOverlay(new BaiduSatelliteHybridProvider());
				p = (BaseProvider*)pr1;
			}
			break;
		case AMaps:
			p = (BaseProvider*)new AMapProvider();
			break;
		case ASatellite:
			p = (BaseProvider*)new ASatelliteProvider();
			break;
		case ASatelliteHybrid:
			{
				ASatelliteHybridProvider* pr1 = new ASatelliteHybridProvider();
				pr1->AddDynamicOverlay(new ASatelliteProvider());
				pr1->AddDynamicOverlay(new ASatelliteHybridProvider());
				p = (BaseProvider*)pr1;
			}
			break;
		case OpenStreet4UMap:
			p = (BaseProvider*)new OpenStreet4UMapProvider();
			break;
		case OpenCycleLandscapeMap:
			p = (BaseProvider*)new OpenCycleLandscapeMapProvider();
			break;
		case OpenSeaHybridMap:
			p = (BaseProvider*)new OpenSeaHybridMapProvider();
			break;
		case OpenStreetQuestHybridMap:
			p = (BaseProvider*)new OpenStreetQuestHybridMapProvider();
			break;
		case OpenStreetQuestSatteliteMap:
			p = (BaseProvider*)new OpenStreetQuestSatteliteMapProvider();
			break;
		case OpenStreetSurferMap:
			p = (BaseProvider*)new OpenStreetSurferMapProvider();
			break;
		case OpenStreetSurferTerrainMap:
			p = (BaseProvider*)new OpenStreetSurferTerrainMapProvider();
			break;
		case OpenStreetOsmMap:
			p = (BaseProvider*)new OpenStreetOsmMapProvider();
			break;
		case ArcGisMap:
			p = (BaseProvider*)new ArcGisMapProvider();
			break;

		case TianDiImageBaseMap:
			p = (BaseProvider*)new TianDiImageBaseMapProvider();
			break;
		case TianDiENNoteImageMap:
			{
				p = (BaseProvider*)new TianDiENNoteImageMapProvider();
				TianDiENNoteImageMapProvider* pr1 = new TianDiENNoteImageMapProvider();
				pr1->AddDynamicOverlay(new TianDiImageBaseMapProvider());
				pr1->AddDynamicOverlay(new TianDiENNoteImageMapProvider());
				p = (BaseProvider*)pr1;
			}
			break;
		case TianDiCNNoteImageMap:
			{
				p = (BaseProvider*)new TianDiCNNoteImageMapProvider();
				TianDiCNNoteImageMapProvider* pr1 = new TianDiCNNoteImageMapProvider();
				pr1->AddDynamicOverlay(new TianDiImageBaseMapProvider());
				pr1->AddDynamicOverlay(new TianDiCNNoteImageMapProvider());
				p = (BaseProvider*)pr1;
			}
			break;
		case TianDiTerrainBaseMap:
			p = (BaseProvider*)new TianDiTerrainBaseMapProvider();
			break;
		case TianDiTerrainCNNoteMap:
			{
				p = (BaseProvider*)new TianDiTerrainCNNoteMapProvider();
				TianDiTerrainCNNoteMapProvider* pr1 = new TianDiTerrainCNNoteMapProvider();
				pr1->AddDynamicOverlay(new TianDiTerrainBaseMapProvider());
				pr1->AddDynamicOverlay(new TianDiTerrainCNNoteMapProvider());
				p = (BaseProvider*)pr1;
			}
			break;
		case TianDiTerrainENNoteMap:
			{
				p = (BaseProvider*)new TianDiTerrainENNoteMapProvider();
				TianDiTerrainENNoteMapProvider* pr1 = new TianDiTerrainENNoteMapProvider();
				pr1->AddDynamicOverlay(new TianDiTerrainBaseMapProvider());
				pr1->AddDynamicOverlay(new TianDiTerrainENNoteMapProvider());
				p = (BaseProvider*)pr1;
			}
			break;
		case TianDiVectorBaseMap:
			p = (BaseProvider*)new TianDiVectorBaseMapProvider();
			break;
		case TianDiVectorCNNoteMap:
			{
				p = (BaseProvider*)new TianDiVectorCNNoteMapProvider();
				TianDiVectorCNNoteMapProvider* pr1 = new TianDiVectorCNNoteMapProvider();
				pr1->AddDynamicOverlay(new TianDiVectorBaseMapProvider());
				pr1->AddDynamicOverlay(new TianDiVectorCNNoteMapProvider());
				p = (BaseProvider*)pr1;
			}
			break;
		case TianDiVectorENNoteMap:
			{
				p = (BaseProvider*)new TianDiVectorENNoteMapProvider();
				TianDiVectorENNoteMapProvider* pr1 = new TianDiVectorENNoteMapProvider();
				pr1->AddDynamicOverlay(new TianDiVectorBaseMapProvider());
				pr1->AddDynamicOverlay(new TianDiVectorENNoteMapProvider());
				p = (BaseProvider*)pr1;
			}
			break;
    }
}

从上面代码可以看出来,添加图层有2种方式,一种类似于这种:

p = (BaseProvider*)new AMapProvider();

另外一种格式:

ASatelliteHybridProvider* pr1 = new ASatelliteHybridProvider();
pr1->AddDynamicOverlay(new ASatelliteProvider());
pr1->AddDynamicOverlay(new ASatelliteHybridProvider());
p = (BaseProvider*)pr1;

两者区别是,前面一种方式是添加单一图层,后面的图层叠加。

2、总结

已知瓦片格式,按照上述步骤,我们可以很快很容易的兼容更多的瓦片类型。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值