【Openlayers】OL中加载矢量切片,可有效解决大数据量的问题

1.首先我们对矢量数据进行切片 可使用tilestache 

win7下使用TileStache生成geojson格式的Tiles

这个是预先切好的数据
也可以实时去获取切片数据(使用OL-- utfgrid)详见http://blog.perrygeo.net/2012/02 ... ers-and-tilestache/

2.下面讲下在Openlayers中如何加载预先切好的数据

  添加OL的策略拓展文件 OpenLayers.Strategy.Grid.js

加载图层:

var style = new OpenLayers.Style();
          var ruleAmenity = new OpenLayers.Rule({
               symbolizer: {fillColor: 'none', strokeOpacity: 0, pointerEvents: 'all'}
           });
         
           style.addRules([ruleAmenity]);
          var styleMap = new OpenLayers.StyleMap({
              'default': style,
              'select': new OpenLayers.Style({
                  strokeWidth: 5,
                  strokeColor: "blue",
                  strokeOpacity: 1
              })
          });
        var baseName = "http://localhost/basicmap/data/${z}/${x}/${y}";
        format = new OpenLayers.Format.GeoJSON();
        strategy = new OpenLayers.Strategy.Grid();
        protocol = new OpenLayers.Protocol.HTTP({
            url: baseName + ".geojson",
            format: format
        });
        vectors = new OpenLayers.Layer.Vector("Vector", {
            strategies: [strategy],
            protocol: protocol,
            styleMap:styleMap,
            projection: new OpenLayers.Projection("EPSG:4326")
        });
    this.map.addLayer(vectors);
    var options = {
               hover: true
           };
           var select = new OpenLayers.Control.SelectFeature(vectors, options);
           this.map.addControl(select);
           select.activate();
下面说下要注意的几点:
1.默认下tilestache切出的数据是按EPSG:900913投影切的
  所以我这里的map也是EPSG:900913投影
    var mapOptions = {
        maxExtent : new OpenLayers.Bounds(-20037508.3427892, -20037508.3427892,
        20037508.3427892, 20037508.3427892),
        numZoomLevels : 19,
        maxResolution : 156543.0339,
         controls: [],
        units : 'm',
        projection : "EPSG:900913",
        displayProjection : new OpenLayers.Projection("EPSG:4326"),
        theme : 'css/OlTheme/default/style.css'
         };
    this.map = new OpenLayers.Map('map', mapOptions);

加载geojson切片:

可以看下这切数据

 

 

鼠标移到图标上时高亮(图标是后台geoserver渲染的):

 

 

posted @ 2013-01-30 20:31  fengl  阅读(6938)  评论(4编辑  收藏  举报