一、矢量地图

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

为了便于存储,传递,使用,矢量地图会按照一定的格式来表达,比如常见的GeoJSONTopoJSONGMLKMLShapeFile等等。 除了最后一个ShapeFile,其他几个格式的矢量地图OpenLayers 3都支持。

二、使用GeoJson格式加载矢量地图

1、项目结构

2、map.geojson

{"type":"FeatureCollection","features":[{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[104.08859252929688,30.738294707383368],[104.18060302734375,30.691068801620155],[104.22042846679688,30.739475058679485],[104.08859252929688,30.738294707383368]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[104.08859252929688,30.52323029223123],[104.08309936523438,30.359841397025537],[104.1998291015625,30.519681272749402],[104.08859252929688,30.52323029223123]]]}},{"type":"Feature","properties":{},"geometry":{"type":"Polygon","coordinates":[[[103.70269775390624,30.675715404167743],[103.69308471679688,30.51494904517773],[103.83316040039062,30.51494904517773],[103.86474609375,30.682801890953776],[103.70269775390624,30.675715404167743]]]}}]}

3、map.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>
</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、运行结果

三、获取矢量地图上的所有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、运行结果

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加载矢量地图内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

解析OpenLayers 3加载矢量地图源的问题的更多相关文章

  1. 怎样在UNIX系统下安装php3

    #cd/usr/src#tarxvzfapache_1.3.6.tar.gz(产生apache_1.3.6目录)#tarxvzfphp-3.0.8.tar.gz(产生php-3.0.8目录)#cdapache_1.3.6#./configure--prefix=/usr/local/apache(把Apache的安装目录定为/usr/local/apache)#cdphp-3.0.8#./conf

  2. 不用数据库的多用户文件自由上传投票系统(3)

    col=".$col.""',3000)";set_time_limit;//可持续五分钟//if(!="rar")){die;}$filename=$filesp[0].$i.".".$filesp[1];}ifecho;//检查合理性结束if(!copy)die;//写文件列表$fileurl=$uploadto.$filename;//文件url$flists=$uploadto.$col.".lst";//文件列表位置for($i=0;$i

  3. Openlayers实现根据半径绘制圆形

    这篇文章主要介绍了利用Openlayers实现绘制三个圆形,绘制完成之后,三个圆心连接起来,然后标记出每两个圆心之间的距离,感兴趣的可以了解一下

  4. PHP入门速成(3)

    小结通过以上三步,我们使用PHP快速地在单一页面上实现了表单显示和表单处理的功能。设定CookiesPHP提供了强大的设定和读取Cookies的功能。在此,我们不想对Cookies进行过多的介绍,但是用户应当认识到在设计WEB应用的过程中Cookies可能起到的重要作用。用户可以使用PHP提供的setcookie()函数创建或修改Cookie。setcookie()函数总共包括6个参数,能够对cookie进行精确的控制。

  5. 使用 Vue3 实现文章目录功能

    本文给大家分享如何使用vue3实现文章目录功能,特色功能主要是自动高亮选中当前正在阅读的章节,自动展开当前正在阅读的章节的子标题,并隐藏其他章节的子标题,代码简单易懂,感兴趣的朋友跟随小编一起看看吧

  6. 使用vue3搭建后台系统的详细步骤

    这篇文章主要介绍了使用vue3搭建后台系统的过程记录,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  7. OpenLayers实现点要素图层的聚合显示的方法

    在很多情况下,点要素图层中的要素数量可能会成百上千,如果一个点要素图层中的点数量很多,我们就会采取图层聚合的方式对其进行处理,本文就来介绍一下,感兴趣的可以了解一下

  8. vue使用openlayers创建地图

    这篇文章主要为大家详细介绍了vue项目中使用openlayers创建地图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. PHP调用三种数据库的方法(3)

    Oracle(甲骨文)是世界上最为流行的关系数据库。它是大公司推崇的工业化的强有力的引擎。我们先看看其相关的函数:integerora_logon开始对一个Oracle数据库服务器的连接。integerora_do在给出的连接上执行查询。PHP生成一个指示器,解析查询,并执行之。这使得您可以调用ora_getcolumn函数。stringora_getcolumn返回当前的值。booleanora_logoff断开对数据库服务器的链接。//先设置两个环境变量ORACLE_HOME,ORACLE_SIDpu

  10. 如何在PHP中使用Oracle数据库(3)

    利用ORA向数据表'email_info'输入数据当用户浏览这段脚本时,显示一个由姓名、email输入域组成的表单;当用户添好数据点击提交时,脚本程序将把这姓名、email保存到'email_info'数据表中。>对了,这段脚本必须存为insert.php,因为在调用的页面中指定insert.php为表单处理程序

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部