Openlayers中Google地图的加载

概述:

本文讲述如何在Openlayers中加载Google的切片。


效果:


矢量图


影像图

实现:

在实现的时候,参考了mygisforum的文章http://blog.csdn.net/mygisforum/article/details/7582449的内容,同时结合gwc的gridset,实现了google切片在Openlayers2中的调用与展示。


1、扩展的GoogleLayer代码如下:

OpenLayers.Layer.GoogleLayer = OpenLayers.Class(OpenLayers.Layer.XYZ, {
    url: null,
    tileOrigin: null,
    tileSize: new OpenLayers.Size(256, 256),
    type: 'png',
    useScales: false,
    overrideDPI: false,
    initialize: function(name, url, options) {
    	this.lyrs = options.lyrs;
        OpenLayers.Layer.XYZ.prototype.initialize.apply(this, arguments);
    },
    getURL: function (bounds) {
        var res = this.getResolution();
        var originTileX = (this.tileOrigin.lon + (res * this.tileSize.w/2));
        var originTileY = (this.tileOrigin.lat - (res * this.tileSize.h/2));
        var center = bounds.getCenterLonLat();
        var x = (Math.round(Math.abs((center.lon - originTileX) / (res * this.tileSize.w))));
        var y = (Math.round(Math.abs((originTileY - center.lat) / (res * this.tileSize.h)))); 
        var z = this.map.getZoom();
        var url = this.url;
        var s = '' + x + y + z;
        if (OpenLayers.Util.isArray(url)) {
            url = this.selectUrl(s, url);
        }
        url = url + '?lyrs=${lyrs}&hl=zh-CN&gl=CN&z=${z}&x=${x}&y=${y}';//&L=4&X=12&Y=3
        url = OpenLayers.String.format(url, {'lyrs': this.lyrs, 'x': x, 'y': y, 'z': z});
        return OpenLayers.Util.urlAppend(
            url, OpenLayers.Util.getParameterString(this.params)
        );
    },

    CLASS_NAME: 'OpenLayers.Layer.GoogleLayer'
}); 

2、前台调用展示代码如下:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>openlayers map</title>
    <link rel="stylesheet" href="../../../plugin/OpenLayers-2.13.1/theme/default/style.css" type="text/css">
    <style>
        html, body,#map{
            padding:0;
            margin:0;
            height:100%;
            width: 100%;
            overflow: hidden;
        }
    </style>
    <script src="../../../plugin/OpenLayers-2.13.1/OpenLayers.js"></script>
    <script src="../../../plugin/jquery/jquery-1.8.3.js"></script>
    <script src="extend/GoogleLayer.js"></script>
    <script>
        var map;
        $(window).load(function() {
            var bounds = new OpenLayers.Bounds(
                5107331.309416,3478249.787475,17865588.574552,5689420.141709
            );
            var mapOptions = { 
				resolutions: [156543.03390625, 78271.516953125, 39135.7584765625, 19567.87923828125, 9783.939619140625, 4891.9698095703125, 2445.9849047851562, 1222.9924523925781, 611.4962261962891, 305.74811309814453, 152.87405654907226, 76.43702827453613, 38.218514137268066, 19.109257068634033, 9.554628534317017, 4.777314267158508, 2.388657133579254, 1.194328566789627, 0.5971642833948135, 0.29858214169740677, 0.14929107084870338, 0.07464553542435169, 0.037322767712175846, 0.018661383856087923, 0.009330691928043961, 0.004665345964021981, 0.0023326729820109904, 0.0011663364910054952, 5.831682455027476E-4, 2.915841227513738E-4, 1.457920613756869E-4],
				projection: new OpenLayers.Projection('EPSG:900913'),
				maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
				units: "meters",
				controls: [
					new OpenLayers.Control.Zoom(),
					new OpenLayers.Control.Navigation(),
					new OpenLayers.Control.LayerSwitcher()
				]
			};
            map = new OpenLayers.Map('map',mapOptions);
            /*
             * m@177000000,矢量
             * s@110,影像
             */
            var googleUrl = "http://mt1.google.cn/maps/vt";
            var vectorLyr = new OpenLayers.Layer.GoogleLayer( "VectorLayer",
                    googleUrl, 
                    {
                        lyrs:"m@177000000",
                        isBaseLayer: true,
                        resolutions: mapOptions.resolutions,
                        tileOrigin: new OpenLayers.LonLat(-20037508.34,20037508.34 ),
                        maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34),
                        projection: 'EPSG:900913'
                    });
                var imageLyr = new OpenLayers.Layer.GoogleLayer( "ImageLayer",
                    googleUrl, 
                    {
                    	lyrs:"s@110",
                        isBaseLayer: true,
                        resolutions: mapOptions.resolutions,
                        tileOrigin: new OpenLayers.LonLat(-20037508.34,20037508.34 ),
                        maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34, 20037508.34, 20037508.34),
                        projection: 'EPSG:900913'
                    });
              var wms1 = new OpenLayers.Layer.WMS("base_map",
					"http://localhost:8088/geoserver/lzugis/wms",
					{
						layers: "capitalweb",
						transparent: true
					}, {
						isBaseLayer: false,
						singleTile: true//是否切片加载,false是,true不是
					});
            map.addLayers([vectorLyr,imageLyr, wms1]);
            map.zoomToExtent(bounds);
        });
    </script>
</head>
<body>
<div id="map" style="width: 100%;"></div>
</body>
</html>`


说明:

1、因为在国内,所以无法调用google map域名的切片,所以选用google.cn域名下的切片数据;

2、在参数lyrs中, m@177000000代表矢量切片,s@110代表影像切片

---------------------------------------------------------------------------------------------------------------

技术博客

CSDN:http://blog.csdn.NET/gisshixisheng

博客园:http://www.cnblogs.com/lzugis/

在线教程

http://edu.csdn.Net/course/detail/799

Github

https://github.com/lzugis/

联系方式

q       q:1004740957

e-mail:niujp08@qq.com

公众号:lzugis15

Q Q 群:452117357(webgis)

             337469080(Android)

转载于:https://www.cnblogs.com/lzugis/p/6789337.html

OpenLayers,可以通过一些优化技术来提高瓦片地图加载性能和效率。以下是一些常用的瓦片地图加载优化方法: 1. 使用合适的瓦片源:选择合适的瓦片源可以显著提高加载性能。一些常见的瓦片源包括OpenStreetMap、Google Maps、Bing Maps等。选择一个稳定、速度快的瓦片源可以减少加载时间。 2. 使用缓存:使用缓存可以避免重复加载相同的瓦片。在OpenLayers,可以使用`ol.source.TileImage`或`ol.source.XYZ`来配置瓦片源,并设置`tileLoadFunction`来处理瓦片加载过程。使用缓存机制可以避免重复请求服务器上已经下载过的瓦片。 3. 瓦片预加载:在地图初始化时,可以预加载一些瓦片,以提前下载并缓存一些地图数据。这样在用户操作时,部分瓦片已经存在于缓存,可以快速显示。 4. 瓦片分级加载:通过设置地图的最小和最大缩放级别,可以控制在不同缩放级别下加载瓦片的数量。在较低的缩放级别下,只加载必要的瓦片,而在较高的缩放级别下,逐步加载更多的瓦片。这样可以提高加载速度,并减少不必要的网络请求。 5. 使用瓦片裁剪:在OpenLayers,可以使用`ol.layer.Tile`的`extent`属性来指定地图的显示范围。通过设置合适的范围,可以减少需要加载的瓦片数量,从而提高加载性能。 6. 瓦片压缩和优化:对瓦片进行压缩和优化可以减小瓦片文件的大小,从而减少网络传输时间。常用的瓦片压缩格式包括gzip和WebP。可以在服务器端对瓦片进行压缩,并在客户端进行解压缩和显示。 综合使用这些优化技术,可以提高OpenLayers瓦片地图加载性能和用户体验。根据具体需求和场景,可以选择适合的优化方法来进行实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值