• 基于openlayers实现聚类统计展示


    概述:

    在前面的博文中讲述过基于Arcgis for js如何实现聚类统计展示,在本文中讲述如何基于openlayers实现聚类统计的效果,Arcgis for js聚类统计的博文地址为:

    http://blog.csdn.net/gisshixisheng/article/details/40867989


    效果:


    实现关键点:



    实现代码:

    1、数据格式


    2、设置显示样式

                var style = new OpenLayers.Style({
                    fillColor: "#ffcc66",
                    strokeColor: "#ff9933",
                    strokeWidth: 2,
                    label: "${count}",
                    fontColor: "#333333",
                    fontFamily: "sans-serif",
                    fontWeight: "bold"
                }, {
                    rules: [
                        new OpenLayers.Rule({
                            minScaleDenominator: 100000000,
                            symbolizer: {
                                pointRadius: 7,
                                fontSize: "9px"
                            }
                        }),
                        new OpenLayers.Rule({
                            maxScaleDenominator: 100000000,
                            minScaleDenominator: 50000000,
                            symbolizer: {
                                pointRadius: 10,
                                fontSize: "11px"
                            }
                        }),
                        new OpenLayers.Rule({
                            maxScaleDenominator: 50000000,
                            symbolizer: {
                                pointRadius: 13,
                                fontSize: "13px"
                            }
                        })
                    ]
                });

    3、添加矢量图层

                var features = new Array();
                for (var i=0; i<data.length; i++) {
                    features[i] = new OpenLayers.Feature.Vector(
                            new OpenLayers.Geometry.Point(data[i].x, data[i].y),
                            {
                                count:data[i].count,
                                name:data[i].name
                            }
                    );
                }
                var clusterLayer = new OpenLayers.Layer.Vector("Points", {
                    styleMap: new OpenLayers.StyleMap(style)
                });
                clusterLayer.addFeatures(features);
                map1.addLayer(clusterLayer);


    程序完整代码为;

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="UTF-8">
        <title>openlayers map</title>
        <link rel="stylesheet" href="http://localhost/olapi/theme/default/style.css" type="text/css">
        <style>
            html, body{
                padding:0;
                margin:0;
                height:100%;
                100%;
                overflow: hidden;
                font-size: 12px;
            }
            #map1{
                 100%;
                height: 100%;
                float: left;
                border-right: 1px solid #000000;
            }
        </style>
        <script src="http://localhost/olapi/OpenLayers.js"></script>
        <script src="http://localhost/olapi/lib/OpenLayers/Lang/zh-CN.js"></script>
        <script src="http://localhost/jquery/jquery-1.8.3.js"></script>
        <script>
            var map1, vectors;
            OpenLayers.Feature.Vector.style['default']['strokeWidth'] = '2';
            $(function(){
                var bounds = new OpenLayers.Bounds(
                        73.45100463562233, 18.16324718764174,
                        134.97679764650596, 53.531943152223576
                );
                var options = {
                    controls: [],
                    maxExtent: bounds,
                    maxResolution: 0.2403351289487642,
                    projection: "EPSG:4326",
                    units: 'degrees'
                };
                map1 = new OpenLayers.Map('map1', options);
    
                map1.addLayer(getWms("china"));
                map1.addControl(new OpenLayers.Control.Zoom());
                map1.addControl(new OpenLayers.Control.Navigation());
                map1.zoomToExtent(bounds);
    
                addCluster();
            });
    
            function getWms(layer){
                return new OpenLayers.Layer.WMS(
                        "Geoserver layers - Tiled",
                        "http://localhost:8081/geoserver/lzugis/wms",
                        {
                            "LAYERS": layer,
                            "STYLES": '',
                            format: 'image/png'
                        },
                        {
                            buffer: 0,
                            displayOutsideMaxExtent: true,
                            isBaseLayer: true,
                            yx : {'EPSG:4326' : true}
                        }
                );
            }
    
            function addCluster(){
                var style = new OpenLayers.Style({
                    fillColor: "#ffcc66",
                    strokeColor: "#ff9933",
                    strokeWidth: 2,
                    label: "${count}",
                    fontColor: "#333333",
                    fontFamily: "sans-serif",
                    fontWeight: "bold"
                }, {
                    rules: [
                        new OpenLayers.Rule({
                            minScaleDenominator: 100000000,
                            symbolizer: {
                                pointRadius: 7,
                                fontSize: "9px"
                            }
                        }),
                        new OpenLayers.Rule({
                            maxScaleDenominator: 100000000,
                            minScaleDenominator: 50000000,
                            symbolizer: {
                                pointRadius: 10,
                                fontSize: "11px"
                            }
                        }),
                        new OpenLayers.Rule({
                            maxScaleDenominator: 50000000,
                            symbolizer: {
                                pointRadius: 13,
                                fontSize: "13px"
                            }
                        })
                    ]
                });
                var data = [{name:"乌鲁木齐",x:87.5758285931,y:43.7822116460,count:10},
                    {name:"拉萨",x:91.1629975040,y:29.7104204643,count:30},
                    {name:"西宁",x:101.797302689,y:36.5936423859,count:50},
                    {name:"兰州",x:103.584297498,y:36.1190864503,count:70},
                    {name:"成都",x:104.035508297,y:30.7141790950,count:90},
                    {name:"重庆",x:106.519115206,y:29.4789248520,count:60},
                    {name:"贵阳",x:106.668071385,y:26.4573115457,count:20}];
                var features = new Array();
                for (var i=0; i<data.length; i++) {
                    features[i] = new OpenLayers.Feature.Vector(
                            new OpenLayers.Geometry.Point(data[i].x, data[i].y),
                            {
                                count:data[i].count,
                                name:data[i].name
                            }
                    );
                }
                var clusterLayer = new OpenLayers.Layer.Vector("Points", {
                    styleMap: new OpenLayers.StyleMap(style)
                });
                clusterLayer.addFeatures(features);
                map1.addLayer(clusterLayer);
            }
        </script>
    </head>
    <body>
        <div id="map1"></div>
    </body>
    </html>




  • 相关阅读:
    黑盒测试用例输入:等价类划分方法
    jar包/class文件如何快速反编译成java文件
    html表格单元格添加斜下框线的方法
    Linux常用命令操作文档
    压力、负载、性能测试工具总结(持续更新。。。)
    压力测试、负载测试及性能测试异同
    Mac os x安装IDEAL及配置JDK和Maven
    RMQ问题总结,标准RMQ算法的实现
    [c++ IO加速]快速输入输出
    [coj 1353 Guessing the Number]kmp,字符串最小表示法
  • 原文地址:https://www.cnblogs.com/lzugis/p/6539825.html
Copyright © 2020-2023  润新知