ol3 Demo2 ----地图搜索功能

先放效果图:

下面是核心代码:

    //地图搜索
        function search(){

        var searchstr = document.getElementById("searchkey").value;
        vectorSource.clear();

       // 构造一个WFS request
        var featureRequest = new ol.format.WFS().writeGetFeature({
            srsName: ‘EPSG:3857‘,
            featureNS: ‘www.vnm.com‘,
            featurePrefix: ‘VNM‘,
            featureTypes: [‘gis.osm_waterways_free_1‘,‘gis.osm_buildings_a_free_1‘],
            outputFormat: ‘application/json‘,
            filter: ol.format.filter.like(‘osm_id‘, ‘*‘+searchstr)
        });

      // 发送请求然后把feature添加到地图
        fetch(‘http://********/geoserver/VNM/wfs‘, {
            method: ‘POST‘,
            body: new XMLSerializer().serializeToString(featureRequest)
        }).then(function(response) {
            return response.json();
        }).then(function(json) {
            var features = new ol.format.GeoJSON().readFeatures(json);
            if(features.length==0){
                alert("没有该项目");
                return;
            }
            vectorSource.addFeatures(features);
            map.getView().fit(vectorSource.getExtent());
        });
        }    

 说明:想要使用WFS,需要解决跨域访问问题。

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <meta charset=‘utf-8‘/>
    <script src="js/ol.js" type="text/javascript"></script>
    <script src="ScriptFolder/jquery-1.11.1.js" type="text/javascript"></script>
    <script src="ScriptFolder/jquery-ui-1.10.4.js" type="text/javascript"></script>
     <script src="layerswitcher/ol3-layerswitcher.js" type="text/javascript"></script>

    <link href="css/ol.css" rel="stylesheet" type="text/css" />
    <link href="layerswitcher/ol3-layerswitcher.css" rel="stylesheet" type="text/css" />
    <link href="StyleFolder/dot-luv/jquery-ui.css" rel="stylesheet" type="text/css" />
    <link href="StyleFolder/dot-luv/jquery.ui.theme.css" rel="stylesheet" type="text/css" />

    <style type="text/css">
        #map
        {
            width: 70%;
            height: 80%;
            border: darkslategrey solid 3px;
        }
    </style>
    <script type="text/javascript">

        var vectorSource = new ol.source.Vector();
        var selectVector = new ol.layer.Vector({
        title:‘选中区域‘,
        source: vectorSource,
        style: new ol.style.Style({
        stroke: new ol.style.Stroke({
        color: ‘rgba(255, 255, 255, 1)‘,
        width: 2
        })
        })
        });

        var map; //地图
        var vietnam; //越南图层
        var strFromProj = "EPSG:4326", strToProj = "EPSG:3857"; //投影
        vietnam = new ol.layer.Tile({
            title:‘越南行政底图‘,
            type:‘base‘,
            source: new ol.source.TileWMS({//瓦片形式的
            url: "http://gis.map.com/geoserver/VNM/wms",
            params: {
                "LAYERS": "VNM:VNM"
            }
        })
        }); 

////////////////////////////////////////////////////////////////////////////////////
        var featureRequest = new ol.format.WFS().writeGetFeature({
            srsName: ‘EPSG:3857‘,
            featureNS: ‘www.vnm.com‘,
            featurePrefix: ‘VNM‘,
            featureTypes: [‘gis.osm_waterways_free_1‘,‘gis.osm_buildings_a_free_1‘],
            outputFormat: ‘application/json‘,
            filter: ol.format.filter.like(‘osm_id‘, ‘*‘+‘10230616‘)
        });

        fetch(‘http://gis.map.com/geoserver/VNM/wfs‘, {
            method: ‘POST‘,
            body: new XMLSerializer().serializeToString(featureRequest)
        }).then(function(response) {
            return response.json();
        }).then(function(json) {
            var features = new ol.format.GeoJSON().readFeatures(json);
            vectorSource.addFeatures(features);
            map.getView().fit(vectorSource.getExtent());
        });
////////////////////////////////////////////////////////////////////////////////////////////
        //初始化地图
        function initMap() {
            map = new ol.Map({
                target: "map",
                layers: [vietnam,selectVector],
                view: new ol.View({
                center: ol.proj.transform([105.5, 15.5], strFromProj, strToProj),
                zoom: 5
                })
            });

            var layerSwitcher = new ol.control.LayerSwitcher({
                tipLabel: ‘Légende‘
            });
            map.addControl(layerSwitcher);
        }

        // 初始化界面
        function initUI() {

        }
        $(function () {
            initMap();
            initUI();
        });

        //地图搜索
        function search(){

        var searchstr = document.getElementById("searchkey").value;
        vectorSource.clear();

        var featureRequest = new ol.format.WFS().writeGetFeature({
            srsName: ‘EPSG:3857‘,
            featureNS: ‘www.vnm.com‘,
            featurePrefix: ‘VNM‘,
            featureTypes: [‘gis.osm_waterways_free_1‘,‘gis.osm_buildings_a_free_1‘],
            outputFormat: ‘application/json‘,
            filter: ol.format.filter.like(‘osm_id‘, ‘*‘+searchstr)
        });

        fetch(‘http://gis.map.com/geoserver/VNM/wfs‘, {
            method: ‘POST‘,
            body: new XMLSerializer().serializeToString(featureRequest)
        }).then(function(response) {
            return response.json();
        }).then(function(json) {
            var features = new ol.format.GeoJSON().readFeatures(json);
            if(features.length==0){
                alert("没有该项目");
                return;
            }
            vectorSource.addFeatures(features);
            map.getView().fit(vectorSource.getExtent());
        });    

        }
    </script>

</head>
<body>
    <div id="searchDiv" style="position:absolute;top:50px;left:80px;width:200x;height:50px;z-index:99999;border: 1px solid #ccc; padding: 1em;">
        <ul id="controls">
            <li>
                <label for="pointToggle">关键字:</label>
                <input name="searchkey" id="searchkey"  type="text">
                <input name="type" value="搜索" id="polygonToggle" onclick="search()" type="button">
            </li>
        </ul>
     </div>
    <div id="map"></div>
</body>
</html>

说明:

geoserver相关设置

原文地址:https://www.cnblogs.com/id-666/p/8453732.html

时间: 2024-08-07 23:24:39

ol3 Demo2 ----地图搜索功能的相关文章

GIS(七)——js版搜狗地图搜索功能美化版

在前2篇文章中介绍了关键字搜索和周边搜索的功能,但是界面比较简陋,所以这一版我主要做一些美化工作. 这次主要优化的方面有2个方面,一个是页面的样式,包括字体.按钮.布局等:二是要添加一个搜索的智能提示. 首先修改页面的样式,更改 #map{position:absolute;width:1364px; height:550px;} #option{ height:50px; width:1336px; border:solid 1px #CCCCCC; padding:10px; } 添加两个c

修改百度地图SearchInRectangle.js,去掉搜索功能,实现拖动搜索框时获得右下角坐标经纬度

var BMapLib = window.BMapLib = BMapLib || {};//var rbPoint=0;(function() { /** * BMAP_ZOOM_IN 拉框后执行放大操作 * @type {int} */ var BMAP_ZOOM_IN = 0; /** * @exports SearchInRectangle as BMapLib.SearchInRectangle */ var SearchInRectangle = /** * SearchInRect

iOS第三方地图-百度地图常用功能使用(POI搜索,地理正反编码,定位,添加标注)

百度地图官网: http://developer.baidu.com/map/index.php?title=iossdk 百度地图集成 1.引入相关包 注:不需要使用地图功能的可以不用boundle包,模拟器使用的framework和真机不一样具体看官网 2.info.plist中 3.在TARGETS->Build Settings->Other Linker Flags 中添加-ObjC. 4.将一个文件设置为.mm 百度地图使用 1.AppDelegate中注册 _mapManager

GIS(六)——实现js版搜狗地图周边搜索功能

在上一篇文章<GIS(五)--完成js版搜狗地图基本交互搜索功能>中,介绍了搜狗地图的关键字搜索功能,今天就实现以下另一个重要功能吧--那就是周边搜索功能. 按照惯例,还是把官网上的示例代码给大家贴出来.飞机票在此.周边搜索的功能,跟关键字搜索其实是一样的,也是主要用到的了SearchRequest这个类,点击这里查看api文档.SearchRequest 对象规范: 属性 类型 说明 map Map 进行搜索的地图实例 renderer SearchRenderer 将结果进行渲染的对象.也

GIS(五)——完成js版搜狗地图基本交互搜索功能

最近在做的有关于北京海淀智慧旅游的一个项目,既然是旅游项目,那么涉及到地图的操作也就是必然的事情了.前几篇文章,主要是分享了在地图上标记多个景点及其景点信息的技术.其实跟项目中还是有一些不一样的.项目中要求实时显示景点的信息,根据实时数据,更新Marker的颜色(绿.橙.红),以及实时更新景点Brand上的景点信息(游客流量.舒适度).这些都没有出现在文章中,文章只是从技术的角度来验证的. 今天主要要做的是地图上的一个基本功能--交互搜索. 其实官网上搜索的例子并不是很多,而且真的不怎么滴.不过

百度地图API的自动定位和搜索功能(移动端)

近期有个项目涉及到百度地图API,要求做到自动定位和搜索功能.煞费苦心的研究半天,终于能将两个功能合二为一,现将代码贴出来分享给大家,希望你们的砖搬得又快又好.注释不多,具体请参照:http://lbsyun.baidu.com/index.php?title=jspopular 注意:这段代码最好能上传到新浪云等免费空间,用手机打开连接即可看到效果,不然看不到看不到看不到哦. <!DOCTYPE html><html><head> <meta http-equi

[转]使用Google地图API搜索功能

使用Google地图API搜索功能 由于工作关系,最近这两天研究了下Google地图API,要实现地图位置搜索功能,显示搜索结果并能在地图上标记下来,刚开始还考虑使用51ditu,出于搜索关键字分词等方面考虑,最后还是决定使用Google地图,一直也都是那么的崇拜谷歌的大神,这次就来体验一翻~ 在Google地图标记定位到一点 刚开始是实现在Google地图上定位一点的功能,API接口里GMap2类有一个setCenter(center:GLatLng, zoom?:Number, type?:

仿百度首页并实现搜索功能

学了html和css之后没有做过什么大的项目,没有什么项目经验,所以决定从小的项目做起,然后做大的项目,循序渐进,增加自己的项目经历和增强自己的动手能力. 百度首页没有特别多的东西,所以仿起来比较容易,但是要做到完全一模一样还是要花费一些功夫的. 一 做一些准备工作: 1 编辑器:webstorm,浏览器:Chrome; 2 利用Chrome的Image downloader插件抓取百度首页的图片,作为素材. 3编程实现 二 项目的文件结构 百度首页 .├── css│   └── index.

微信JS-SDK之地理位置的获取与在线导航,集成百度地图实现在线地图搜索

原创声明:本文来源于本人另一博客[微信JS-SDK之地理位置的获取,集成百度地图实现在线地图搜索]原创作品,绝非他处摘取,转载请联系博主 本次讲解微信开发第三篇:获取用户地址位置信息,是非常常用的功能,特别是服务行业公众号,尤为需要该功能,本次讲解的就是如何调用微信JS-SDK接口,获取用户位置信息,并结合百度地铁,实现在线地图搜索,与在线导航. 官方文档地址:https://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.htm