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"
// *******************************************************
// OpenStreetMapProvider
// *******************************************************
class OpenStreetMapProvider : public BaseProvider
{
public:
int count;
OpenStreetMapProvider()
{
count = 0;
Id = tkTileProvider::OpenStreetMap;
Name = "OpenStreetMap";
_copyright.Format(L"Copyright @ %d, OpenStreetMap,All Rights Reserved");
this->_projection = new MercatorProjection();
_subProviders.push_back(this);
_serverLetters = "abc";
_refererUrl = "http://www.openstreetmap.org/";
_urlFormat = "http://%c.tile.openstreetmap.org/%d/%d/%d.png";
_maxZoom = 19;
_licenseUrl = "http://wiki.openstreetmap.org/wiki/Tile_usage_policy";
}
CString MakeTileImageUrl(CPoint &pos, int zoom)
{
char letter = _serverLetters[count % 3];
count++;
CString s;
s.Format(_urlFormat, letter, zoom, pos.x, pos.y);
return s;
}
};
class OpenStreet4UMapProvider : public OpenStreetMapProvider
{
public:
OpenStreet4UMapProvider()
{
Id = tkTileProvider::OpenStreet4UMap;
Name = "OpenStreet4UMap";
_refererUrl = "http://www.opencyclemap.org/";
_licenseUrl = "http://www.opencyclemap.org/docs/";
_urlFormat = "http://4umaps.eu/%d/%d/%d.png";
}
CString MakeTileImageUrl(CPoint &pos, int zoom)
{
CString s;
s.Format(_urlFormat, zoom, pos.x, pos.y);
return s;
}
};
class OpenCycleMapProvider: public OpenStreetMapProvider
{
public:
OpenCycleMapProvider()
{
Id = tkTileProvider::OpenCycleMap;
Name = "OpenCycleMap";
_refererUrl = "http://www.opencyclemap.org/";
_licenseUrl = "http://www.opencyclemap.org/docs/";
_urlFormat = "http://%c.tile.opencyclemap.org/cycle/%d/%d/%d.png";
}
};
class OpenCycleLandscapeMapProvider : public OpenStreetMapProvider
{
public:
OpenCycleLandscapeMapProvider()
{
Id = tkTileProvider::OpenCycleLandscapeMap;
Name = "OpenCycleLandscapeMap";
_refererUrl = "http://www.opencyclemap.org/";
_licenseUrl = "http://www.opencyclemap.org/docs/";
_urlFormat = "http://%c.tile3.opencyclemap.org/landscape/%d/%d/%d.png";;
}
};
class OpenTransportMapProvider: public OpenStreetMapProvider
{
public:
OpenTransportMapProvider()
{
Id = tkTileProvider::OpenTransportMap;
Name = "OpenTransportMap";
_refererUrl = "http://www.opencyclemap.org/";
_urlFormat = "http://%c.tile2.opencyclemap.org/transport/%d/%d/%d.png";
}
};
class OpenHumanitarianMapProvider : public OpenStreetMapProvider
{
public:
OpenHumanitarianMapProvider()
{
Id = tkTileProvider::OpenHumanitarianMap;
Name = "OpenHumanitarianMap";
_refererUrl = "http://www.openstreetmap.org/";
_urlFormat = "http://%c.tile.openstreetmap.fr/hot/%d/%d/%d.png";
}
};
class OpenSeaHybridMapProvider : public OpenStreet4UMapProvider
{
public:
OpenSeaHybridMapProvider()
{
Id = tkTileProvider::OpenSeaHybridMap;
Name = "OpenSeaHybridMap";
_refererUrl = "http://www.mapquest.com/";
_licenseUrl = "http://developer.mapquest.com/web/products/open/map";
_urlFormat = "http://tiles.openseamap.org/seamark/%d/%d/%d.png";
}
};
class MapQuestProvider : public OpenStreetMapProvider
{
public:
MapQuestProvider()
{
Id = tkTileProvider::MapQuestAerial;
Name = "MapQuest Aerial";
_refererUrl = "http://www.mapquest.com/";
_licenseUrl = "http://developer.mapquest.com/web/products/open/map";
_urlFormat = "http://otile%c.mqcdn.com/tiles/1.0.0/sat/%d/%d/%d.png";
_serverLetters = "1234";
_copyright = "Tiles Courtesy of MapQuest";
}
};
class OpenStreetQuestHybridMapProvider : public OpenStreetMapProvider
{
public:
OpenStreetQuestHybridMapProvider()
{
Id = tkTileProvider::OpenStreetQuestHybridMap;
Name = "OpenStreetQuestHybridMap";
_refererUrl = "http://www.mapquest.com/";
_licenseUrl = "http://developer.mapquest.com/web/products/open/map";
_urlFormat = "http://otile%d.mqcdn.com/tiles/1.0.0/hyb/%d/%d/%d.png";
}
CString MakeTileImageUrl(CPoint &pos, int zoom)
{
CString s;
s.Format(_urlFormat, GetServerNum(pos, 3)+1, zoom, pos.x, pos.y);
return s;
}
};
class OpenStreetQuestSatteliteMapProvider : public OpenStreetMapProvider
{
public:
OpenStreetQuestSatteliteMapProvider()
{
Id = tkTileProvider::OpenStreetQuestSatteliteMap;
Name = "OpenStreetQuestSatteliteMap";
_refererUrl = "http://www.mapquest.com/";
_licenseUrl = "http://developer.mapquest.com/web/products/open/map";
_urlFormat = "http://otile%d.mqcdn.com/tiles/1.0.0/sat/%d/%d/%d.jpg";
}
};
class OpenStreetSurferMapProvider : public OpenStreet4UMapProvider
{
public:
OpenStreetSurferMapProvider()
{
Id = tkTileProvider::OpenStreetSurferMap;
Name = "OpenStreetSurferMap";
_refererUrl = "http://www.mapquest.com/";
_licenseUrl = "http://developer.mapquest.com/web/products/open/map";
_urlFormat = "http://tiles1.mapsurfer.net/tms_r.ashx?x=%d&y=%d&z=%d";
}
};
class OpenStreetSurferTerrainMapProvider : public OpenStreet4UMapProvider
{
public:
OpenStreetSurferTerrainMapProvider()
{
Id = tkTileProvider::OpenStreetSurferTerrainMap;
Name = "OpenStreetSurferTerrainMap";
_refererUrl = "http://www.mapquest.com/";
_licenseUrl = "http://developer.mapquest.com/web/products/open/map";
_urlFormat = "http://tiles2.mapsurfer.net/tms_t.ashx?x=%d&y=%d&z=%d";
}
};
class OpenStreetOsmMapProvider : public OpenStreetMapProvider
{
public:
OpenStreetOsmMapProvider()
{
Id = tkTileProvider::OpenStreetOsmMap;
Name = "OpenStreetOsmMap";
_refererUrl = "http://www.mapquest.com/";
_licenseUrl = "http://developer.mapquest.com/web/products/open/map";
_urlFormat = "http://%d.tah.openstreetmap.org/Tiles/tile/%d/%d/%d.png";
}
};
2、效果图
版权声明:本文为u012156872原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。