通过原型对象prototype创建openlayers扩展库

爱⌒轻易说出口 提交于 2020-01-19 15:16:08

在openlayers前端开发中,对于一些常用的方法,我们会考虑封装成一个通用函数库,这样在以后每次开发的时候,引入我们自己封装的库,会大大提升我们开发的效率。

这里会为大家推荐一种比较高级的封装方法,也就是通过javascript的原型对象prototype创建openlayers扩展库,扩展库创建完成后,我们可以直接通过对象去访问我们封装的方法,很实用,也很方便,很多openlayers的扩展库都是通过这种方法进行封装的。

首先我们去openlayers官方下载最新的openlayers开发包:openlayers,然后,创建一个demo.html,引入开发包,并创建一个地图,加入osm地图。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="ol.css">
    <style>
        body {
            margin: 0;
        }

        .map {
            position: absolute;
            width: 100%;
            height: 100%;
            overflow: hidden;
        }

    </style>
</head>

<body>
    <div class="map" id="map"></div>
    <script src="ol.js"></script>
    <script>
        // 创建图层
        var osmLayer = new ol.layer.Tile({
            source: new ol.source.OSM()
        })
        // 坐标投影
        var projection = new ol.proj.Projection({
            code: "EPSG:4326",
            units: "degrees"
        });
        //创建视图
        var view = new ol.View({
            projection: projection,
            center: [106.311027526855, 29.8532611846924],
            zoom: 12
        });
        //创建地图
        var map = new ol.Map({
            target: "map",
            view: view,
            layers: [osmLayer]
        });
    </script>
</body>

</html>

然后呢,就开始封装。首先我们创建一个js文件,随便命名,我这里命名为ol-extend.js
我们将ol-extend.js,引入到demo.html中。
这里我们就简单封装一个加载geojson的方法。
正常的加载方法如下:

var layer = new ol.layer.Vector({
        source: new ol.source.Vector({
            url: url,
            format: new ol.format.GeoJSON(),
        }),
});
map.addLayer( layer )

我们通过javascript原型对象prototype进行封装,封装格式如下

ol.对象名+prototype+函数名称 = function(参数){};
// 扩展可添加geojson方法
ol.Map.prototype.addGeojsonLayer = function (url) {
    this.addLayer(new ol.layer.Vector({
        source: new ol.source.Vector({
            url: url,
            format: new ol.format.GeoJSON(),
        }),
    }))
};
这样,我们就可以通过 map.addGeojsonLayer(url) 快速的加载geojson图层。

完整的代码如下 demo.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="ol.css">
    <style>
        body {
            margin: 0;
        }

        .map {
            position: absolute;
            width: 100%;
            height: 100%;
            overflow: hidden;
        }

    </style>
</head>

<body>
    <div class="map" id="map"></div>
    <script src="ol.js"></script>
    <script src="ol-extend.js"></script>
    <script>
        // 创建图层
        var osmLayer = new ol.layer.Tile({
            source: new ol.source.OSM()
        })
        // 坐标投影
        var projection = new ol.proj.Projection({
            code: "EPSG:4326",
            units: "degrees"
        });
        //创建视图
        var view = new ol.View({
            projection: projection,
            center: [106.311027526855, 29.8532611846924],
            zoom: 12
        });
        //创建地图
        var map = new ol.Map({
            target: "map",
            view: view,
            layers: [osmLayer]
        });
        var url = "http://192.168.10.35:8595/geoserver/GIS_Model_BB/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=GIS_Model_BB%3Abb_xzq&maxFeatures=50&outputFormat=application%2Fjson";
        map.addGeojsonLayer(url);
    </script>
</body>

</html>

ol-extend.js 源代码

// 扩展可添加geojson方法
ol.Map.prototype.addGeojsonLayer = function (url) {
    this.addLayer(new ol.layer.Vector({
        source: new ol.source.Vector({
            url: url,
            format: new ol.format.GeoJSON(),
        }),
    }))
};

希望能对大家开发有所帮助。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!