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、总结
已知瓦片格式,按照上述步骤,我们可以很快很容易的兼容更多的瓦片类型。