Лучше плясать от задачи. Задачу опишу свою (поскольку хорошо в ней разбираюсь), а не ту, что требуется решить. Итак, у меня была задача
1) Взять гугловские космоснимки не "стыреные"-кешированные, а просто закачивать их через интернет, как и задумывалось гуглом.
2) Положить на гугловскую карту слои собственного сочинения.
3) Проделать это все в связке MapServer-OpenLayers.
В качестве илюстрации приведу куски кода.
При помощи MapServer создаем WMS сервер, который может выдавать данные в нескольких проекциях, в т.ч. и в проекции "Google-Mercator", код 900913 (см. предыдущий пост).
Содержимое map-файла:
Код: Выделить всё
MAP
NAME "Google-Mercator"
STATUS ON
IMAGETYPE GIF
# EXTENTпокрывает территорию России (приблизительно):
#EXTENT 10 20 180 85 # границы для long / lat WGS84 (epsg:4326)
EXTENT 3422527.99 8252178.77 6443803.23 6617604.12 # границы для Google-Mercator (900913)
... # описание SIZE, SHAPEPATH, LEGEND и др.
PROJECTION
"init=epsg:900913"
END
WEB
#не имеющие отношения к делу параметры заменяю на многоточия:
TEMPLATE '...'
IMAGEPATH '...'
IMAGEURL '...'
EMPTY '...'
METADATA
wms_title "Google-Mercator"
wms_abstract "Пример использования Google-Mercator"
wms_onlineresource "http://...адрес.../mapserv?map=...имя map-файла...&"
wms_getfeatureinfo "http://...адрес.../mapserv?map=...имя map-файла...&"
wms_featureinfoformat "text/html"
wms_feature_info_mime_type "text/html"
wms_encoding "utf-8"
# перечисляем проекции, в которых можно будет получить картоматериалы от MapServer:
wms_srs "EPSG:4326 epsg:53004 epsg:900913"
END
END
# Перечисляем слои карты:
LAYER
NAME "..."
...
PROJECTION
# Исходная проекция, в которой хранятся данные для этого слоя
# При необходимости MapServer произведет перепроецирование в нужную:
"init=epsg:4326"
END
METADATA
wms_title "..."
wms_abstract "..."
wms_include_items "all"
# В каких проекциях предоставляется данный слой WMS-сервером:
wms_srs "EPSG:4326 epsg:900913"
END
CLASS
...
END
END
...
END
Далее. При помощи OpenLayers создаем карту из двух слоев - один слой будет содержать гугловские снимки, второй слой будет использовать созданную нами WMS-службу.
HTML:
Код: Выделить всё
<html>
<head>
<title>Пример Google-Mercator</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="lib/OpenLayers.js"></script>
</head>
<body>
<div style="width:100%; height:100%" id="map"></div>
<!-- Будем использовать гугловский ключ для "localhost" key="ABQIAAAAnGqQS3WKXDlSWL9JihYqnBT2yXp_ZAY8_ufC3CFXhHIE1NvwkxRTAbebDcXrn6UgtfGiCp-pX-mUHA" -->
<script src='http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAjpkAC9ePGem0lIq5XcMiuhT2yXp_ZAY8_ufC3CFXhHIE1NvwkxTS6gjckBmeABOGXIUiOiZObZESPg'></script>
<script defer="defer" type="text/javascript">
// ************ Создаем карту ********************
var options = {
numZoomLevels: 18,
minResolution: "auto",
minExtent: new OpenLayers.Bounds(-1, -1, 1, 1),
maxResolution: "auto",
maxExtent: new OpenLayers.Bounds(1113194.91, 2273030.93, 20037508.34, 19971868.88),
projection: "epsg:900913", // та самая проекция - Google-Mercator
units: "m"
};
var map = new OpenLayers.Map('map',options);
// ***************** Описываем слои: ************************
var mapservLayer = new OpenLayers.Layer.WMS("Слой MapServer", 'http://...адрес...', {map: '...путь к карте...', layers: '...имя слоя1,имя слоя2,...',format: 'gif',transparent: true},{singleTile: true});
var satelliteGoogle = new OpenLayers.Layer.Google( "Google Satellite" , {type: G_SATELLITE_MAP, 'sphericalMercator': true} );
map.addLayers([satelliteGoogle,mapservLayer]);
// ************* Описываем инструменты на карте: *************
var ctrl={
PnZm: new OpenLayers.Control.PanZoom(),
...
PrmLnk: new OpenLayers.Control.Permalink()
};
for (var key in ctrl){
map.addControl(ctrl[key])
}
// ******** Задаем начальное положение карты для показа: *******
if (!map.getCenter()) map.zoomToMaxExtent();
</script>
</body>
</html>