Openlayers发布谷歌离线地图
2013-12-16 15:54
513 查看
例子是基于OpenLayers-2.13,离线地图下载工具推荐OGCer,可以从这里下载,找了几个下载工具,这个还是比较不错的。
这个工具下载好离线地图后会自动生成一个基于openlayers发布的html文件,把地图范围等都计算好了,但这个版本是2.07的,我在此基础上做了修改,增加了一些功能。
不多说直接上代码了,都是js代码,拷贝过去直接可以用了,路径放在OpenLayers-2.13\examples目录下即可,相应的图片文件也需拷贝过去。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>OpenLayers Tiled Map Service Example</title>
<link rel="stylesheet" href="../theme/default/style.css" type="text/css">
<link rel="stylesheet" href="style.css" type="text/css">
<style type="text/css">
html, body { overflow: hidden;
padding: 0;
height: 100%;
width: 100%;
font-family: 'Lucida Grande',Geneva,Arial,Verdana,sans-serif;
}
body { margin: 1px;
background: #fff;
}
#map { height: 99%;
border: 1px solid #888;
}
</style>
<script src="../lib/OpenLayers.js"></script>
<script type="text/javascript">
var map;
var mapBounds = new OpenLayers.Bounds( 1.3172798200611E7,3400604.87623691,1.34309719074187E7,3576746.35051871);
var mapMinZoom =8;
var mapMaxZoom =13;
OpenLayers.IMAGE_RELOAD_ATTEMPTS = 3;
OpenLayers.Util.onImageLoadErrorColor = "transparent";
function init(){
var options = { controls: [
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.ScaleLine(),
new OpenLayers.Control.OverviewMap()
],
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326"),
units: "m",
numZoomLevels:13,
maxResolution: 156543.0339,
maxExtent: new OpenLayers.Bounds(-20037508, -20037508, 20037508.3427892, 20037508.3427892)
};
map = new OpenLayers.Map('map', options);
var tmsoverlay = new OpenLayers.Layer.TMS( "OpenGSC", "",{ type: 'png',
getURL: overlay_getTileURL,
alpha: true,
isBaseLayer: true,
minResolution : 4.777314267158508,
maxResolution : 611.4962261962891 });
if (OpenLayers.Util.alphaHack() == false) {
tmsoverlay.setOpacity(1);
}
map.addLayers([tmsoverlay]);
//var switcherControl = new OpenLayers.Control.LayerSwitcher();
//map.addControl(switcherControl);
//switcherControl.maximizeControl();
map.zoomToExtent( mapBounds );
//map.addControl(new OpenLayers.Control.Scale());
//map.addControl(new OpenLayers.Control.PanZoomBar());
map.addControl(new OpenLayers.Control.MousePosition());
//map.addControl(new OpenLayers.Control.MouseDefaults());
//map.addControl(new OpenLayers.Control.KeyboardDefaults());
//map.setCenter(new OpenLayers.LonLat(120.18295,30.31787), 3);
var lonLat = new OpenLayers.LonLat(120.18295,30.31787);
//google地图需要转换坐标
lonLat.transform(map.displayProjection, map.getProjectionObject());
map.setCenter(lonLat, 4);
// 注册map缩放事件
map.events.register("zoomend", map, onMapZoom);
}
function overlay_getTileURL(bounds) {
var res = this.map.getResolution();
var x = Math.round((bounds.left - this.maxExtent.left) / (res * this.tileSize.w));
var y = Math.round((this.maxExtent.top-bounds.top) / (res * this.tileSize.h));
var z = this.map.getZoom();
z=z+8;
if (mapBounds.intersectsBounds( bounds ) && z >= mapMinZoom && z <= mapMaxZoom ) {
return this.url + z + "/" + y + "/" + x+ "." + this.type;
} else {
return "";
}
}
function onMapZoom(e){
//alert('zoom level:'+map.getZoom());
//alert('sclse:'+map.getScale());
}
</script>
</head>
<body onload="init()">
<div id="map" class=""></div>
</body>
</html>
这个工具下载好离线地图后会自动生成一个基于openlayers发布的html文件,把地图范围等都计算好了,但这个版本是2.07的,我在此基础上做了修改,增加了一些功能。
不多说直接上代码了,都是js代码,拷贝过去直接可以用了,路径放在OpenLayers-2.13\examples目录下即可,相应的图片文件也需拷贝过去。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<meta name="apple-mobile-web-app-capable" content="yes">
<title>OpenLayers Tiled Map Service Example</title>
<link rel="stylesheet" href="../theme/default/style.css" type="text/css">
<link rel="stylesheet" href="style.css" type="text/css">
<style type="text/css">
html, body { overflow: hidden;
padding: 0;
height: 100%;
width: 100%;
font-family: 'Lucida Grande',Geneva,Arial,Verdana,sans-serif;
}
body { margin: 1px;
background: #fff;
}
#map { height: 99%;
border: 1px solid #888;
}
</style>
<script src="../lib/OpenLayers.js"></script>
<script type="text/javascript">
var map;
var mapBounds = new OpenLayers.Bounds( 1.3172798200611E7,3400604.87623691,1.34309719074187E7,3576746.35051871);
var mapMinZoom =8;
var mapMaxZoom =13;
OpenLayers.IMAGE_RELOAD_ATTEMPTS = 3;
OpenLayers.Util.onImageLoadErrorColor = "transparent";
function init(){
var options = { controls: [
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.ScaleLine(),
new OpenLayers.Control.OverviewMap()
],
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326"),
units: "m",
numZoomLevels:13,
maxResolution: 156543.0339,
maxExtent: new OpenLayers.Bounds(-20037508, -20037508, 20037508.3427892, 20037508.3427892)
};
map = new OpenLayers.Map('map', options);
var tmsoverlay = new OpenLayers.Layer.TMS( "OpenGSC", "",{ type: 'png',
getURL: overlay_getTileURL,
alpha: true,
isBaseLayer: true,
minResolution : 4.777314267158508,
maxResolution : 611.4962261962891 });
if (OpenLayers.Util.alphaHack() == false) {
tmsoverlay.setOpacity(1);
}
map.addLayers([tmsoverlay]);
//var switcherControl = new OpenLayers.Control.LayerSwitcher();
//map.addControl(switcherControl);
//switcherControl.maximizeControl();
map.zoomToExtent( mapBounds );
//map.addControl(new OpenLayers.Control.Scale());
//map.addControl(new OpenLayers.Control.PanZoomBar());
map.addControl(new OpenLayers.Control.MousePosition());
//map.addControl(new OpenLayers.Control.MouseDefaults());
//map.addControl(new OpenLayers.Control.KeyboardDefaults());
//map.setCenter(new OpenLayers.LonLat(120.18295,30.31787), 3);
var lonLat = new OpenLayers.LonLat(120.18295,30.31787);
//google地图需要转换坐标
lonLat.transform(map.displayProjection, map.getProjectionObject());
map.setCenter(lonLat, 4);
// 注册map缩放事件
map.events.register("zoomend", map, onMapZoom);
}
function overlay_getTileURL(bounds) {
var res = this.map.getResolution();
var x = Math.round((bounds.left - this.maxExtent.left) / (res * this.tileSize.w));
var y = Math.round((this.maxExtent.top-bounds.top) / (res * this.tileSize.h));
var z = this.map.getZoom();
z=z+8;
if (mapBounds.intersectsBounds( bounds ) && z >= mapMinZoom && z <= mapMaxZoom ) {
return this.url + z + "/" + y + "/" + x+ "." + this.type;
} else {
return "";
}
}
function onMapZoom(e){
//alert('zoom level:'+map.getZoom());
//alert('sclse:'+map.getScale());
}
</script>
</head>
<body onload="init()">
<div id="map" class=""></div>
</body>
</html>
相关文章推荐
- openlayers 加载googlemap v3 遭遇弹出copyright 异常的解决
- 遵循Java EE标准规范的开源GIS服务平台之一:平台架构
- Geoserver的安装配置(组合OpenLayers使用)
- OpenLayer源代码总体结构分析
- OpenLayers性能瓶颈与优化(闭包引用与GML解析低效率)
- OpenLayers的使用
- openlayers实现查询功能
- openlayers select-feature show polygon dimension label
- GIS解决方案(1):geoserver+openlayers+mysql设计思想
- OpenLayers基础:概述 推荐
- OpenLayers基础:在IIS中部署并启用CGI
- OpenLayers基础:多方底图 推荐
- openLayer3地图的使用心得
- openlayers4加载tippecanoe矢量切片
- openlayers3 自定义鹰眼缩略图
- OpenLayers IE 6 下 PNG 图片显示问题
- 基于OpenLayers实战地理信息系统(离线地图,通过基站转经纬度,Quartz深入,轨迹实战)
- OpenLayers3-1-Accessible Map
- openlayers 3(一)
- gis开发应用问题