如何分析OpenLayers3加载矢量地图源的问题

技术如何解析OpenLayers 3加载矢量地图源的问题今天就跟大家聊聊有关如何解析OpenLayers 3加载矢量地图源的问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可

今天跟大家聊聊如何分析OpenLayers3加载的矢量地图的来源。很多人可能不太了解。为了让大家更好的了解,边肖为大家总结了以下内容。希望你能从这篇文章中有所收获。

00-1010矢量图用直线和曲线来描述图形。这些图形的元素是一些点、线、矩形、多边形、圆和弧等。它们都是用数学公式计算出来的。由于矢量图形可以通过公式计算得到,矢量图形文件的体积一般较小。矢量图形最大的优点就是无论放大缩小还是旋转都不会失真。地图中有很多应用,是地图数据中非常重要的一部分。

为了方便存储、传输和使用,矢量地图会按照一定的格式来表示,比如常见的GeoJSON、TopoJSON、GML、KML、ShapeFile等等。除了最后一个ShapeFile,OpenLayers 3还支持其他几个矢量地图。

一、矢量地图

1.项目结构

如何解析OpenLayers3加载矢量地图源的问题

2、map.geojson

如何解析OpenLayers3加载矢量地图源的问题

{'type':'FeatureCollection ',' Feature ' :[{ ' type ' : ' Feature ',' properties':{},' geometry ' : { ' type ' : ' Polygon ','座标' :[[[104.08859252929688,30 .]38868、[104 . 08888888868

3、map.html

!Doctypehtml

html xmlns=' http://www . w3 . org/1999/XHTML '

meta http-equiv=' Content-Type ' Content=' text/html;charset=utf-8 '

meta http-equiv=' X-UA-Compatible ' content=' IE=edge,chrome=1 '

metacontent='always'name='ref

errer'>
    <title>OpenLayers 3 :加载矢量地图</title>
    <link href='ol.css ' rel='stylesheet' type='text/css'/>
    <script type='text/javascript' src='ol.js' charset='utf-8'></script>
</head>

<body>

<div id='map' style='width: 1000px;height: 800px;margin: auto'></div>

<script>

    /**
     *  创建地图
     */
    new ol.Map({

        // 设置地图图层
        layers: [

            //创建一个使用Open Street Map地图源的图层
            new ol.layer.Tile({
                source: new ol.source.OSM()
            }),

            //加载一个geojson的矢量地图
            new ol.layer.Vector({
                source: new ol.source.Vector({
                    url: 'geojson/map.geojson',     // 地图来源
                    format: new ol.format.GeoJSON()    // 解析矢量地图的格式化类
                })
            })

        ],

        // 设置显示地图的视图
        view: new ol.View({
            center: [104,30],       // 设置地图显示中心于经度104度,纬度30度处
            zoom: 10,           // 设置地图显示层级为10
            projection: 'EPSG:4326'     //设置投影
        }),

        // 让id为map的div作为地图的容器
        target: 'map'

    })

</script>
</body>
</html>

4、运行结果

如何解析OpenLayers 3加载矢量地图源的问题

三、获取矢量地图上的所有Feature,并设置样式

1、map2.html

<!Doctype html>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
    <meta http-equiv='Content-Type' content='text/html;charset=utf-8'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>
    <meta content='always' name='referrer'>
    <title>OpenLayers 3 :获取矢量地图上的所有Feature,并设置样式</title>
    <link href='ol.css ' rel='stylesheet' type='text/css'/>
    <script type='text/javascript' src='ol.js' charset='utf-8'></script>
</head>

<body>

<div id='map' style='width: 800px;height:500px;margin: auto'></div>
<br>
<div style='width: 800px;margin: auto'>
    <button type="button" onclick = 'updateStyle()' >修改Feature样式</button>
</div>

<script>

    /**
     *  创建地图
     */
    var map = new ol.Map({

        // 设置地图图层
        layers: [
            //创建一个使用Open Street Map地图源的图层
            new ol.layer.Tile({
                source: new ol.source.OSM()
            }),
        ],

        // 设置显示地图的视图
        view: new ol.View({
            center: [104,30],       // 设置地图显示中心于经度104度,纬度30度处
            zoom: 10,           // 设置地图显示层级为10
            projection: 'EPSG:4326'     //设置投影
        }),

        // 让id为map的div作为地图的容器
        target: 'map'
    });

    //创建一个矢量地图源图层,并设置样式
    var  vectorLayer =  new ol.layer.Vector({
            source: new ol.source.Vector({
                url: 'geojson/map.geojson',     // 地图来源
                format: new ol.format.GeoJSON()    // 解析矢量地图的格式化类
            }),
            // 设置样式,颜色为绿色,线条粗细为1个像素
            style: new ol.style.Style({
                stroke: new ol.style.Stroke({
                    color: 'green',
                    size: 1
                 })
            })
        });


    map.addLayer(vectorLayer);


    /**
     * 获取矢量图层上所有的Feature,并设置样式
     */
    function updateStyle(){

        //创建样式,颜色为红色,线条粗细为3个像素
        var  featureStyle = new ol.style.Style({
            stroke: new ol.style.Stroke({
                color: 'red',
                size: 3
            })
        })

        //获取矢量图层上所有的Feature
        var features =  vectorLayer.getSource().getFeatures()


        //遍历所有的Feature,并为每个Feature设置样式
        for (var i = 0;i<features.length;i++){
            features[i].setStyle(featureStyle)
        }


    }


</script>
</body>
</html>

2、运行结果

如何解析OpenLayers 3加载矢量地图源的问题

如何解析OpenLayers 3加载矢量地图源的问题

4、矢量地图坐标系转换

矢量地图用的是EPSG:4326,我们可以通过OpenLayers 3内置了地图格式解析器,将坐标转换为EPSG:3857

1、map3.html

<!Doctype html>
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
    <meta http-equiv='Content-Type' content='text/html;charset=utf-8'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>
    <meta content='always' name='referrer'>
    <title>OpenLayers 3 :矢量地图坐标系转换</title>
    <link href='ol.css ' rel='stylesheet' type='text/css'/>
    <script type='text/javascript' src='ol.js' charset='utf-8'></script>
    <script src="jquery-3.6.0.js"></script>
</head>

<body>

<div id='map' style='width: 1000px;height: 800px;margin: auto'></div>

<script>

    /**
     *  创建地图
     */
    var map = new ol.Map({

        // 设置地图图层
        layers: [

            //创建一个使用Open Street Map地图源的图层
            new ol.layer.Tile({
                source: new ol.source.OSM()
            })
        ],

        // 设置显示地图的视图
        view: new ol.View({
            center: ol.proj.fromLonLat([104,30]),       // 设置地图显示中心于经度104度,纬度30度处
            zoom: 10,           // 设置地图显示层级为10
        }),

        // 让id为map的div作为地图的容器
        target: 'map'

    });


    // 加载矢量地图
    function addGeoJSON(data) {
        var layer = new ol.layer.Vector({
            source: new ol.source.Vector({
                features: (new ol.format.GeoJSON()).readFeatures(data, {     // 用readFeatures方法可以自定义坐标系
                    dataProjection: 'EPSG:4326',                            // 设定JSON数据使用的坐标系
                    featureProjection: 'EPSG:3857'                          // 设定当前地图使用的feature的坐标系
                })
            })
        });
        map.addLayer(layer);
    };


    $.ajax({
        url: 'geojson/map.geojson',
        success: function(data, status) {
            // 成功获取到数据内容后,调用方法将矢量地图添加到地图
            addGeoJSON(data);
        }
    });

</script>
</body>
</html>

2、运行结果

如何解析OpenLayers 3加载矢量地图源的问题

看完上述内容,你们对如何解析OpenLayers 3加载矢量地图源的问题有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/155758.html

(0)

相关推荐

  • 条条大路通罗马下一句,条条大路通罗马中国版名言

    技术条条大路通罗马下一句,条条大路通罗马中国版名言大道是前人修好的条条大路通罗马下一句,小路需要自己去走,我不喜欢品尝别人的胜利果实,却喜欢独僻蹊径去闯出自己的一条小路。2.独自漫步在小巷,雪白的路灯洒着醒目的光,灰淡的

    生活 2021年10月22日
  • 一石等于多少斤,李时珍时代一石是多少斤?

    技术一石等于多少斤,李时珍时代一石是多少斤?在古代一石等于多少斤,“石”作为计量单位,有三种:1.容量单位,十斗为一石 [dan,Chinese unit of dry measure]十斗为一石。——《说苑·辨物》关石

    生活 2021年10月25日
  • mysql出现乱码怎么解决(mysql数据乱码怎么解决)

    技术mysql中jsp乱码怎么办这篇文章主要介绍mysql中jsp乱码怎么办,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! mysql jsp乱码的解决办法:1、使用“

    攻略 2021年12月16日
  • 1楼,为什么有人说买房子不要买一楼

    技术1楼,为什么有人说买房子不要买一楼为什么有人说买房子不要买一楼1楼?都有优势和劣势,它的优势是热天很凉快,不用开多少空调,可以在一楼做生意开个超市,可以在一楼,搞美容美发,也可以搞快递。不用拿铺面租金。老人孩子上下楼

    生活 2021年10月24日
  • css中如何改变元素的内填充

    技术css中如何改变元素的内填充本篇内容主要讲解“css中如何改变元素的内填充”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“css中如何改变元素的内填充”吧!

    攻略 2021年12月9日
  • 如何利用Windows系统字体来创建恶意软件

    技术如何利用Windows系统字体来创建恶意软件这篇文章将为大家详细讲解有关如何利用Windows系统字体来创建恶意软件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。步骤在大多数情况下

    攻略 2021年11月18日