Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >OL3矢量图层样式自定义

OL3矢量图层样式自定义

作者头像
牛老师讲GIS
发布于 2018-10-23 03:24:30
发布于 2018-10-23 03:24:30
65500
代码可运行
举报
运行总次数:0
代码可运行

概述:

本文讲述如何在OL3中加载Geojson并动态修改图层样式。

效果:

地图展示

样式修改面板

实现代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>Ol3 wms</title>
	<link rel="stylesheet" type="text/css" href="../../../plugin/ol3/css/ol.css"/>
	<style type="text/css">
		body, #map {
			border: 0px;
			margin: 0px;
			padding: 0px;
			width: 100%;
			height: 100%;
			font-size: 13px;
		}
		.style-box{
			position: absolute;
			top: 10px;
			right: 10px;
			z-index: 999;
			background: #ffffff;
			border: 1px solid #cccccc;
			box-shadow: 2px 2px 3px #C0C0C0;
			padding: 10px;
			border-radius: 4px;
		}
		.style-box ul{
			margin: 0px;
		}
		.style-box ul li{
			list-style: none;
			margin: 0px;
			margin-left: -40px;
		}
		.style-box ul li h5{
			margin: 6px 0px;
		}
	</style>
	<script type="text/javascript" src="../../../plugin/ol3/build/ol-debug.js"></script>
	<script type="text/javascript" src="../../../plugin/jquery/jquery-1.8.3.js"></script>
	<script type="text/javascript" src="extends/color_exchange.js"></script>
	<script type="text/javascript">
		function init(){
			var bounds = [73.4510046356223, 18.1632471876417,
				134.976797646506, 53.5319431522236];
			var projection = new ol.proj.Projection({
				code: 'EPSG:4326',
				units: 'degrees'
			});
			$.get("data/province.geojson",null,function(result){
				var features = (new ol.format.GeoJSON()).readFeatures(result);
				var vectorSource = new ol.source.Vector();
				vectorSource.addFeatures(features);
				var vector = new ol.layer.Vector({
					source: vectorSource,
					style:getStyle("blue", "true", 2)
				});
				var map = new ol.Map({
					controls: ol.control.defaults({
						attribution: false
					}),
					target: 'map',
					layers: [vector],
					view: new ol.View({
						projection: projection
					})
				});
				map.getView().fit(bounds, map.getSize());
				//线的颜色
				$("input[name='linecolor']").on("change",function(){
                    var _color = $(this).val();
				    if(_color===""){
                        $("#linecolor").show();
					}
					else{
                        $("#linecolor").attr("value", _color).hide();
					}
                    vector.setStyle(getStyle());
				});
                //填充颜色
                $("input[name='fillcolor']").on("change",function(){
                    var _color = $(this).val();
                    if(_color===""){
                        $("#fillcolor").show();
                    }
                    else{
                        $("#fillcolor").attr("value", _color).hide();
                    }
                    vector.setStyle(getStyle());
                });
				//透明度,线的颜色,填充颜色,线条类型,线条宽度
                $("input[name='linetype'], input[name='linewidth'], #islabel").on("change",function(){
                    vector.setStyle(getStyle());
                });
                $("#opacity, #linecolor, #fillcolor").on("input propertychange",function(){
                    vector.setStyle(getStyle());
                });
			});
		}

		function getStyle() {
            var color = $("input[name='linecolor']:checked").val();
            var fillColor = $("#fillcolor").val();
            var opacity = $("#opacity").val();
            if(color===""){
                color = $("#linecolor").val();
            }
            fillColor = fillColor.colorRgb();
            var _fillColor = "RGBA("+fillColor[0]+","+fillColor[1]+","+fillColor[2]+","+opacity+")";
            var dash = $("input[name='linetype']:checked").val();
            var width = parseInt($("input[name='linewidth']").val());
		    var _dash = dash==="true"?3*width:0;
		    var islabel = $("#islabel")[0].checked;
            return function(feature, resolution){
                var name = feature.get("name");
                var lblcolor = '#000000';
                if(!islabel)lblcolor = 'rgba(0,0,0,0)';
                return new ol.style.Style({
                    stroke: new ol.style.Stroke({
                        color: color,
                        lineDash: [_dash, _dash],
                        width: width
                    }),
                    fill: new ol.style.Fill({
                        color: _fillColor,
                        opacity:opacity
                    }),
                    text: new ol.style.Text({
                        text: name,
                        fill: new ol.style.Fill({
                            color:lblcolor
                        })
                    })
                });
			}
        }
	</script>
</head>
<body onLoad="init()">
<div id="map">
	<div class="style-box">
		<ul>
			<li>
				<h5>
					<input type="checkbox" name="islabel" id="islabel">显示标注
				</h5>
			</li>
			<li>
				<h5>填充颜色:</h5>
				<input type="radio" name="fillcolor" value="#000000">黑色
				<input type="radio" name="fillcolor" value="#0000ff" checked="checked">蓝色
				<input type="radio" name="fillcolor" value="#ff0000">红色
				<input type="radio" name="fillcolor" value="">自定义
				<input type="color" id="fillcolor" value="#0000ff" style="display: none;"/>
			</li>
			<li>
				<h5>填充透明度:</h5>
				<input type="number" id="opacity" value="0.3" min="0" max="1" step="0.1" style="width: 100%;">
			</li>
			<li>
				<h5>线条颜色:</h5>
				<input type="radio" name="linecolor" value="#000000">黑色
				<input type="radio" name="linecolor" value="#0000ff" checked="checked">蓝色
				<input type="radio" name="linecolor" value="#ff0000">红色
				<input type="radio" name="linecolor" value="">自定义
				<input type="color" id="linecolor" value="#0000ff" style="display: none;"/>
			</li>
			<li>
				<h5>线条类型:</h5>
				<input type="radio" name="linetype" value="false">实线
				<input type="radio" name="linetype" value="true" checked="checked">虚线
			</li>
			<li>
				<h5>线条宽度:</h5>
				<input type="number" name="linewidth" value="2" min="1" max="5" style="width: 100%;">
			</li>
		</ul>
	</div>
</div>
</body>
</html>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年06月24日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Openlayers3中如何优雅的表示等值面
等值面,顾名思义,就是值相等的面,在水文或气象中会有很多这样的需求。本文不讲如何做等值面,本文将如何展示等值面。
牛老师讲GIS
2018/10/23
1.4K0
Openlayers3中如何优雅的表示等值面
Geoserver2.11矢量切片与OL3中的调用展示
GIS的底图一直使用金字塔技术进行切图,使用户能够快速访问指定级别的地图或者影像。但是切图本身是一张图片,无法进行交互。于是又引入了矢量图层用来显示矢量点线面,这通常需要先获取矢量地理数据,然后通过前端将其绘制成不同元素便能通过鼠标进行响应交互了。
牛老师讲GIS
2018/10/23
2K0
Geoserver2.11矢量切片与OL3中的调用展示
geotools中等值面的生成与OL3中的展示
本文讲述如何在geotools中IDW插值生成等值面,并根据给定shp进行裁剪,并生成geojson数据,以及Openlayers3中展示。
牛老师讲GIS
2018/10/23
2.3K0
geotools中等值面的生成与OL3中的展示
jQuery选择器大全(48个代码片段+21幅图演示)
选择器是jQuery最基础的东西,本文中列举的选择器基本上囊括了所有的jQuery选择器,也许各位通过这篇文章能够加深对jQuery选择器的理解,它们本身用法就非常简单,我更希望的是它能够提升个人编写jQuery代码的效率。本文配合截图、代码和简单的概括对所有jQuery选择器进行了介绍,也列举出了一些需要注意和区分的地方。 一、基本选择器 1. id选择器(指定id元素) 将id="one"的元素背景色设置为黑色。(id选择器返单个元素) $(document).ready(function () {
牛嗷嗷
2018/03/30
5.1K0
openlayers5中用iconfont作为图标
前面有文章 openlayers4中用font设置图标样式 就iconfont在ol5中的使用做了一个尝试,后面有很多童鞋问我说实现不了,一直没有时间去做一个详细的测试,最近在做了诸多测试后,觉得这种方式比较靠谱,在此分享出来,希望对用到的童鞋有所帮助和启示。
牛老师讲GIS
2019/03/22
1.3K0
openlayers5中用iconfont作为图标
OL3中结合Jquery UI实现图层拖动并改变图层顺序
概述: 本文讲述OL3中结合Jquery UI实现图层的拖动以及拖动好图层顺序的改变。 效果: 代码: <html xmlns="http://www.w3.org/1999/xhtml"> <hea
牛老师讲GIS
2018/10/23
1.6K0
OL3中结合Jquery UI实现图层拖动并改变图层顺序
Arcgis for js,Openlayers中加载GeoJSON
在前文中,讲述了在JAVA环境下如何将shp转换为GeoJSON,在本文,分别讲述在Arcgis for js,Openlayers2和Openlayers3中加载展示GeoJSON。
牛老师讲GIS
2018/10/23
4.4K0
Arcgis for js,Openlayers中加载GeoJSON
OL3实现多图联动
很多会有多图联动的需求,本文讲述如何在OL3中实现多图的联动。在OL3中,实现多图联动比较简单,只要所有的map通用一个view即可。
牛老师讲GIS
2018/10/23
5900
OL3实现多图联动
OpenLayers3基础教程——OL3 介绍interaction
本节主要讲述OL3的交互操作interaction,重点介绍draw,select以及modify。
牛老师讲GIS
2018/10/23
9370
OpenLayers3基础教程——OL3 介绍interaction
OpenLayers3基础教程——OL3之Popup
本节重点讲述OpenLayers3中Popup的调用时实现,OL3改用Overlay代替OL2的Popup功能。
牛老师讲GIS
2018/10/23
7910
OpenLayers3基础教程——OL3之Popup
ol4加载pbf矢量切片与样式定义
看了一下mapbox的矢量切片的展示方式,其核心是定义的一个样式配置文件,我就在想:Ol4里面我是否通过styleFunction的方式实现同样的效果呢,折腾了一上午,别说,styleFunction真好用,在此分享出来,供大家参看。
牛老师讲GIS
2018/10/23
2.3K0
ol4加载pbf矢量切片与样式定义
Openlayers3中实现地图的切割
概述: 本文讲述如何在Openlayers3中结合canvas实现对地图的切割。 效果: 全图 切割北京区域 切割河北区域 实现: <html xmlns="http://www.w3.org/199
牛老师讲GIS
2018/10/23
1.8K0
Openlayers3中实现地图的切割
jQuery选择器大全(48个代码片段+21幅图演示)2
4. 属性过滤选择器 ——4.1 [attribute](取拥有attribute属性的元素) 下面的代码,最后一个a标签没有title属性,所以它仍然会带下划线 <script type="text
逸鹏
2018/04/10
1.7K0
jQuery选择器大全(48个代码片段+21幅图演示)2
自定义的html radio button的样式
设计要求效果如下: <!-- .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consol
八哥
2018/01/18
1.1K0
自定义的html radio button的样式
JavaScript---网络编程(11)--DHTML技术演示(4)-单选框/下拉菜单/添加文件
实现的功能是:(类似平时的性格测试) 先隐藏一部分页面,然后通过点击单选框来显示。 再通过选项的选择-(每个选项有不同的积分)积分的多少来给出评语
谙忆
2021/01/21
1.4K0
JavaScript---网络编程(11)--DHTML技术演示(4)-单选框/下拉菜单/添加文件
OpenLayers3基础教程——OL3 介绍control
相比较Ol2的control,OL3显得特别少,下图分别为Ol2和Ol3的control:
牛老师讲GIS
2018/10/23
8400
OpenLayers3基础教程——OL3 介绍control
Html之初体验
概述 HTML是英文Hyper Text Mark-up Language(超文本标记语言)的缩写,他是一种制作万维网页面标准语言。相当于定义统一的一套规则,大家都来遵守他,这样就可以让浏览器根据标记
洗尽了浮华
2018/01/22
1K0
Html之初体验
H5痣相占卜页面+特效演示(酷炫特效)
github代码地址:https://github.com/Miofly/mio.git
用户10106350
2022/10/28
2.6K0
H5痣相占卜页面+特效演示(酷炫特效)
10个超酷的H5特效设计+1个仿最新苹果UI设计(压轴)
1.抽屉式(动态)选择 button(纯css实现) html代码:  <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="s
淼学派对
2022/11/20
1.5K0
10个超酷的H5特效设计+1个仿最新苹果UI设计(压轴)
Openlayers3中实现台风风圈绘制算法
台风的风圈的NE、NW、SW、SE四个方位的影响范围是不一致,本文介绍一种简单的风圈的绘制方法,并在OL3中展示。
牛老师讲GIS
2018/10/23
1.1K0
Openlayers3中实现台风风圈绘制算法
相关推荐
Openlayers3中如何优雅的表示等值面
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验