OpenLayers 3加载矢量地图源

一、矢量地图

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

为了便于存储,传递,使用,矢量地图会按照一定的格式来表达,比如常见的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,           // 设置地图显示层级为10projection: '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,           // 设置地图显示层级为10projection: '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})})//获取矢量图层上所有的Featurevar 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加载矢量地图源相关推荐

  1. Openlayers之加载谷歌地图

    1.谷歌地图瓦片构成 我们用浏览器打开谷歌地图,然后按下F12键,查看网络资源中的地图瓦片,可以发现瓦片URL中变化的部分为1i.2i和3i后面的数字,经过分析可以知道1i后面的应该是瓦片的级别,2i ...

  2. Openlayers之加载Stamen地图

    1.Stamen地图瓦片构成 我们使用浏览器打开Stamen地图,按下F12查看网络资源,可以发现其瓦片URL非常直观明了,与OpenStreetMap的地图瓦片URL差不多,最终可以得到其通用URL ...

  3. 005:vue+openlayers加载Mapbox地图示例

    第005个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers中加载Mapbox地图. 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果 示例效果 ...

  4. angular使用openlayers6以及加载百度地图

    angular中使用openlayers本来是没什么难度的,但是如果要加载百度地图还是有些问题的,在openlayers3中坐标是从原点右上递增,而openlayers6中是右下递增,这就导致使用百度 ...

  5. Openlayers加载离线地图Arcgis瓦片

    文章目录 一.介绍 二.快速入门 一.下载地图瓦片 二.OpenLayers加载离线Arcgis瓦片 一.介绍 OpenLayers 是一个专为Web GIS 客户端开发提供的JavaScript 类 ...

  6. Openlayers 2.X加载高德地图

    概述: 前面的有篇文章介绍了Openlayers 2.X下加载天地图,本节介绍Openlayers 2.X下加载高德地图. 实现效果: 高德地图 高德影像 图中:蓝色的省市边界为我本机发布的,能够与高 ...

  7. (转)Openlayers 2.X加载高德地图

    http://blog.csdn.net/gisshixisheng/article/details/44853881 概述: 前面的有篇文章介绍了Openlayers 2.X下加载天地图,本节介绍O ...

  8. OpenLayers教程十一:多源数据加载之用最简单的方式加载瓦片地图

    目录 一.加载OpenStreetMap 二.加载Stamen Map 三.加载Bing Map OpenLayers封装了一些瓦片地图源类用于加载瓦片地图,这些类包括: ol.source.OSM  ...

  9. Openlayers中加载GeoJson文件显示地图

    场景 Openlayers下载与加载geoserver的wms服务显示地图: Openlayers下载与加载geoserver的wms服务显示地图_BADAO_LIUMANG_QIZHI的博客-CSD ...

  10. cesium 入门开发系列矢量瓦片加载展示(附源码下载)

    前言 cesium 入门开发系列环境知识点了解: cesium api文档介绍,详细介绍 cesium 每个类的函数以及属性等等 cesium 在线例子 内容概览 cesium 实现矢量瓦片加载效果 ...

最新文章

  1. 如何解决 SQL Server 2000 中的连接问题
  2. 哈尔滨工程大学ACM预热赛
  3. 让浏览器变身代码编辑器
  4. 神经网络中,正则化L1与L2的区别、如何选择以及代码验证
  5. onedrive电脑手机不同步_免费的手机电脑同步便签软件怎么找?求帮忙推荐
  6. 针对Hybrid A*论文解析(5)中的方法的一些验证
  7. java中的 FileWriter类 和 FileReader类的一些基本用法
  8. ILSpy 6.0 Preview 1 发布,.NET 反编译工具
  9. iOS 史上最详细的app测试或者上架AppStore流程
  10. Hibernate实体对象的生命周期(三种状态详解)
  11. 成功解决不能完成“视频帧到图层”的命令,因为需要QuickTime7.1或者更高版本
  12. ubuntu主题美化
  13. 用HTML绘制三线表,R语言-临床三线表
  14. 高一计算机组装与维护教学总结,计算机优秀个人教学总结
  15. JavaScript 压缩图片
  16. msvcr120.dll丢失怎样修复?msvcr120.dll文件修复办法
  17. python 的 do ~ while 语法
  18. WTL CCheckListViewCtrl详解及示例
  19. php中进制转换,php的进制转换
  20. Python 爬取 5K 分辨率超清唯美壁纸

热门文章

  1. 用QT实现一个简单的桌面宠物
  2. Eclipse简明使用教程(java集成开发环境)
  3. IP数据包格式、ICMP、ARP
  4. 业务数据双中台助力实现大型医药集团
  5. caxa线切割怎样画链轮_Autocad实战教程-线切割画链轮
  6. 《数据库原理MySQL》第三次上机实验
  7. HttpSession的生命周期
  8. select函数的使用
  9. linux下封装命令,linux系统怎么封装
  10. java drawlines()方法