zoukankan      html  css  js  c++  java
  • openlayers实现wfs属性查询和空间查询

    概述:

    一直在寻求openlayers中wfs加载和属性查询的相关操作,功夫不负有心人,蓦然回首,那人却在灯火阑珊处,找到了这篇博文:http://blog.csdn.net/longshengguoji/article/details/39377931,试了下,在IE8中正常运行,但是在chrom中涉及到跨域的问题,待后期接解决吧。本文讲解如何通过wfs实现属性的查询与展示。


    效果:


    初始化状态


    属性查询结果


    空间查询结果

    数据表:



    关键代码:

    添加wfs图层

                wfs = new OpenLayers.Layer.Vector("wfs", {
                    strategies: [new OpenLayers.Strategy.Fixed()],
                    visibility:true,
                    protocol: new OpenLayers.Protocol.WFS({
                        url: "http://localhost:8081/geoserver/lzugis/wfs?",
                        featureType: "capital",
                        featurePrefix : "lzugis",
                        featureNS: "http://www.lzugis.com.cn",
                        srsName : "EPSG:4326",
                        geometryName:"the_geom"
                    })
                });
                map.addLayer(wfs);
    查询条件面板

    <pre name="code" class="html"><div class="query-box">
        <select id="field">
            <option value="code">编码</option>
            <option value="pinyin">拼音</option>
        </select>
        <input type="text" id="val" value="100032" style=" 80px;"/> 
        <button id="query">属性查询</button> 
        <button id="boxQuery">空间查询</button>
    </div>
    
    
    执行属性查询查询

                $("#query").on("click",function(){
                    var field = $("#field").val();
                    var val = $("#val").val();
                    var filter = new OpenLayers.Filter.Comparison({
                        type : OpenLayers.Filter.Comparison.EQUAL_TO,
                        property : field,
                        value : val
                    });
                    console.log(wfs);
                    wfs.filter = filter;
                    wfs.refresh();
                })


    空间查询

                var drawLayer = new OpenLayers.Layer.Vector("drawLayer",{
                    styleMap: new OpenLayers.StyleMap({'default':{
                        strokeColor: "#ff0000",
                        strokeOpacity: 1,
                        strokeWidth: 1,
                        fillColor: "#000000",
                        fillOpacity: 0.1
                    }})
                });
                map.addLayer(drawLayer);
                var drawBox = new OpenLayers.Control.DrawFeature(drawLayer,
                        OpenLayers.Handler.RegularPolygon,{
                            handlerOptions: {
                                sides: 4,
                                irregular: true
                            }
                        }
                );
                map.addControl(drawBox);
                drawBox.featureAdded = onEndDraw;
    
                function onEndDraw(feature){
                    drawBox.deactivate();
                    console.info(feature);
                    var geometry = feature.geometry;
                    var filter = new OpenLayers.Filter.Spatial({
                        type : OpenLayers.Filter.Spatial.INTERSECTS,
                        value : geometry,
                        projection : 'EPSG:4326'
                    });
                    wfs.filter = filter;
                    wfs.refresh();
                    map.zoomToExtent(wfs.getDataExtent());
                }
                $("#boxQuery").on("click",function(){
                    drawLayer.removeAllFeatures();
                    wfs.filter = null;
                    wfs.refresh();
                    drawBox.activate();
                });


    完整代码为:

    <pre name="code" class="html"><html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>china EPSG:4326 image/png</title>
        <link rel="stylesheet" type="text/css" href="http://localhost/olapi/theme/default/style.css"/>
        <style type="text/css">
            body { font-family: sans-serif; font-weight: bold; font-size: .8em; }
            body { border: 0px; margin: 0px; padding: 0px; }
            #map {  100%; height: 100%; border: 0px; padding: 0px; }
            .query-box{
                position: absolute;
                top: 15pt;
                right: 15pt;
                z-index:1001;
                border: 1px solid #ff0000;
                border-radius: 3px;
                background: #f2f2f2;
                padding: 5px 8px;
                font-family: "Trebuchet MS", Helvetica, Arial, sans-serif;
            }
        </style>
        <script type="text/javascript" src="http://localhost/olapi/OpenLayers.js"></script>
        <script type="text/javascript" src="http://localhost/olapi/lib/OpenLayers/Lang/zh-CN.js"></script>
        <script src="http://localhost/jquery/jquery-1.8.3.js"></script>
        <script type="text/javascript">
            var map, wfs;
            function init(){
                var bounds = new OpenLayers.Bounds(
                        87.57582859314434, 19.969920291221204,
                        126.56713756740385, 45.693810203800794
                );
                var options = {
                    controls: [],
                    maxExtent: bounds,
                    maxResolution: 0.1523098006807012,
                    projection: "EPSG:4326",
                    units: 'degrees'
                };
                map = new OpenLayers.Map('map', options);
    
    
                var tiled = new OpenLayers.Layer.WMS(
                        "province", "http://localhost:8081/geoserver/lzugis/wms",
                        {
                            "LAYERS": 'province',
                            "STYLES": '',
                            format: 'image/png'
                        },
                        {
                            buffer: 0,
                            displayOutsideMaxExtent: true,
                            isBaseLayer: true,
                            yx : {'EPSG:4326' : true}
                        }
                );
                map.addLayer(tiled);
                map.addControl(new OpenLayers.Control.PanZoomBar({
                    position: new OpenLayers.Pixel(2, 15)
                }));
                map.addControl(new OpenLayers.Control.Navigation());
                map.zoomToExtent(bounds);
                wfs = new OpenLayers.Layer.Vector("wfs", {
                    strategies: [new OpenLayers.Strategy.Fixed()],
                    visibility:true,
                    protocol: new OpenLayers.Protocol.WFS({
                        url: "http://localhost:8081/geoserver/lzugis/wfs?",
                        featureType: "capital",
                        featurePrefix : "lzugis",
                        featureNS: "http://www.lzugis.com.cn",
                        srsName : "EPSG:4326",
                        geometryName:"the_geom"
                    })
                });
                map.addLayer(wfs);
                var drawLayer = new OpenLayers.Layer.Vector("drawLayer",{
                    styleMap: new OpenLayers.StyleMap({'default':{
                        strokeColor: "#ff0000",
                        strokeOpacity: 1,
                        strokeWidth: 1,
                        fillColor: "#000000",
                        fillOpacity: 0.1
                    }})
                });
                map.addLayer(drawLayer);
                var drawBox = new OpenLayers.Control.DrawFeature(drawLayer,
                        OpenLayers.Handler.RegularPolygon,{
                            handlerOptions: {
                                sides: 4,
                                irregular: true
                            }
                        }
                );
                map.addControl(drawBox);
                drawBox.featureAdded = onEndDraw;
    
                function onEndDraw(feature){
                    drawBox.deactivate();
                    console.info(feature);
                    var geometry = feature.geometry;
                    var filter = new OpenLayers.Filter.Spatial({
                        type : OpenLayers.Filter.Spatial.INTERSECTS,
                        value : geometry,
                        projection : 'EPSG:4326'
                    });
                    wfs.filter = filter;
                    wfs.refresh();
                    map.zoomToExtent(wfs.getDataExtent());
                }
                $("#boxQuery").on("click",function(){
                    drawLayer.removeAllFeatures();
                    wfs.filter = null;
                    wfs.refresh();
                    drawBox.activate();
                });
    
                $("#query").on("click",function(){
                    var field = $("#field").val();
                    var val = $("#val").val();
                    var filter = new OpenLayers.Filter.Comparison({
                        type : OpenLayers.Filter.Comparison.EQUAL_TO,
                        property : field,
                        value : val
                    });
                    wfs.filter = filter;
                    wfs.refresh();
    //                map.zoomToExtent(wfs.getDataExtent());
                });
            }
        </script>
    </head>
    <body onLoad="init()">
    <div class="query-box">
        <select id="field">
            <option value="code">编码</option>
            <option value="pinyin">拼音</option>
        </select>
        <input type="text" id="val" value="100032" style=" 80px;"/> 
        <button id="query">属性查询</button> 
        <button id="boxQuery">空间查询</button>
    </div>
    <div id="map"></div>
    </body>
    </html>
    
    








  • 相关阅读:
    多表联合查询,利用 concat 模糊搜索
    order by 中利用 case when 排序
    Quartz.NET 3.0.7 + MySql 动态调度作业+动态切换版本+多作业引用同一程序集不同版本+持久化+集群(一)
    ASP.NET Core 2.2 基础知识(十八) 托管和部署 概述
    ASP.NET Core 2.2 基础知识(十七) SignalR 一个极其简陋的聊天室
    ASP.NET Core 2.2 基础知识(十六) SignalR 概述
    ASP.NET Core 2.2 基础知识(十五) Swagger
    ASP.NET Core 2.2 基础知识(十四) WebAPI Action返回类型(未完待续)
    linux磁盘管理 磁盘查看操作
    linux磁盘管理 文件挂载
  • 原文地址:https://www.cnblogs.com/lzugis/p/6539823.html
Copyright © 2011-2022 走看看