美文网首页GIS之家
openlayers入门开发系列之批量叠加zip压缩SHP图层篇

openlayers入门开发系列之批量叠加zip压缩SHP图层篇

作者: gis之家 | 来源:发表于2018-12-16 21:31 被阅读2次

    本篇的重点内容是直接加载压缩文件zip形式shp,可以批量加载点、线、面shp图层,效果图如下:

    image

    实现的思路跟之前实现arcgis api for js版本是一致的:arcgis api for js入门开发系列二十三批量叠加zip压缩SHP图层

    压缩的shp截图如下:

    image

    实现的核心代码:

    //叠加压缩SHP图层,批量加载显示
    $("#zipshp").click(function () {
                shp("js/main/shpJS/gishome.zip").then(function (data) {
                    if (data && data.length > 0) {
                    var layers = map.getLayers().getArray();
                    var remolayers = [];
                    for(var i =0;i<layers.length;i++){
                        var layer = layers[i];
                        if(layer.get("id") && layer.get("id").indexOf("zipshp") != -1){ 
                            remolayers.push(layer);
                        }
                    }
                    for(var j=0;j<remolayers.length;j++){
                        map.removeLayer(remolayers[j]); 
                    }
                    var image = new ol.style.Circle({
                            radius: 5,
                            fill: null,
                            stroke: new ol.style.Stroke({color: 'red', width: 1})
                    });
                    var styles = {
                            'Point': new ol.style.Style({
                              image: image
                            }),
                            'LineString': new ol.style.Style({
                              stroke: new ol.style.Stroke({
                                color: 'red',
                                width: 6
                              })
                            }),
                            'MultiLineString': new ol.style.Style({
                              stroke: new ol.style.Stroke({
                                color: 'red',
                                width: 6
                              })
                            }),
                            'MultiPoint': new ol.style.Style({
                              image: image
                            }),
                            'MultiPolygon': new ol.style.Style({
                              stroke: new ol.style.Stroke({
                                color: 'yellow',
                                width: 1
                              }),
                              fill: new ol.style.Fill({
                                color: 'rgba(255, 255, 0, 0.1)'
                              })
                            }),
                            'Polygon': new ol.style.Style({
                              stroke: new ol.style.Stroke({
                                color: 'blue',
                                lineDash: [4],
                                width: 3
                              }),
                              fill: new ol.style.Fill({
                                color: 'rgba(0, 0, 255, 0.1)'
                              })
                            })
                          };
                        var styleFunction = function(feature) {
                            return styles[feature.getGeometry().getType()];
                        };
                        for (var i = 0; i < data.length; i++) {
                            var vectorSource = new ol.source.Vector({
                                features: (new ol.format.GeoJSON()).readFeatures(data[i])
                            });
                            var features = vectorSource.getFeatures();
                            for(var j=0;j<features.length;j++){
                                var feature = features[j];
                                var geom = feature.getGeometry().transform('EPSG:4326', 'EPSG:3857');
                                feature.setGeometry(geom);                            
                            }
                            var vectorLayer = new ol.layer.Vector({
                                source: vectorSource,
                                style: styleFunction
                              });
                            vectorLayer.set("id", "zipshp"+i);
                               map.addLayer(vectorLayer);
                            //地图跳转范围
                            map.getView().setCenter([13654710.733, 4878822.641]);
                            map.getView().setZoom(8);
                        }
                    }
                });
    });
    

    GIS之家作品:GIS之家
    GIS之家在线咨询:在线咨询

    相关文章

      网友评论

        本文标题:openlayers入门开发系列之批量叠加zip压缩SHP图层篇

        本文链接:https://www.haomeiwen.com/subject/ttffkqtx.html