openlayers面要素渲染样式定制,包括纯色、图片、水平线、垂直线、正斜十字网格、正反斜线

发布时间:2026/9/23 1:40:12

openlayers面要素渲染样式定制,包括纯色、图片、水平线、垂直线、正斜十字网格、正反斜线 实现的功能openlayers面要素渲染样式定制包括纯色、图片、水平线、垂直线、正斜十字网格、正反斜线。参考网络众多资源后进行了此次实现。附要素渲染属性选择的实现提供一个函数附到style对象上可忽略。上代码// config为面填充样式配置对象functiongetAConfigedPS(config){varpsnull;try{varstrokeOptions{color:(config.strokeColoropacityToHex(config.strokeOpacity||1))||#32C6D5,width:config.strokeWidth||2,opacity:config.strokeOpacity||1,// lineDash: [10, 5], // 虚线};if(config.strokeStyleconfig.strokeStyle!solid){if(config.dashArray){strokeOptions.lineDash(config.dashArray).split(,);}}varpolygonOptions{fill:newOLFill({color:(config.fillColoropacityToHex(config.fillOpacity||1))||#14e4bb,})};if(config.strokeEnabledconfig.strokeEnabled1){polygonOptions.strokenewOLStroke(strokeOptions);}console.log(config.fillStyle,config.fillStyle);//if(config.fillStyleconfig.fillStylesolid){//纯色填充console.log(polygonOptions,polygonOptions);psnewOLStyle(polygonOptions);}elseif(config.fillStyleconfig.fillStyleimage){//图片填充if(config.fillImageUrl){varcnvdocument.createElement(canvas);varctxcnv.getContext(2d);varimgnewImage();img.srcapiGetFileFullUrl(config.fillImageUrl);varfillnewOLFill({color:#ffff00});varimageFillOptions{fill:fill};if(config.strokeEnabledconfig.strokeEnabled1){imageFillOptions.strokenewOLStroke(strokeOptions);}psnewOLStyle(imageFillOptions);img.onloadfunction(){varpatternctx.createPattern(img,repeat);fill.setColor(pattern);};}else{psGetDefaultPointStyle();}}else{// 各类线条填充// 创建一个新的图案varcreateStripedPatternfunction(lineType){/* lineType: { label: 水平线, value: horizontal }, { label: 垂直线, value: vertical }, { label: 十字网格, value: cross }, { label: 正斜线, value: forward_diagonal }, { label: 反斜线, value: backward_diagonal }, { label: 斜十字网格, value: cross_diag }, */// 获取canvas元素和上下文varcanvasdocument.createElement(canvas);varctxcanvas.getContext(2d);ctx.fillStyle#FFFFFF66;ctx.fillRect(0,0,canvas.width,canvas.height);// 创建一个新的图案画布varpatternCanvasdocument.createElement(canvas);patternCanvas.width20;// 图案画布的宽度patternCanvas.height20;// 图案画布的高度varpCtxpatternCanvas.getContext(2d);pCtx.fillStyle#FFFFFF99;pCtx.fillRect(0,0,canvas.width,canvas.height);// 设置线条样式pCtx.strokeStyle#aaaaaa99;// 线条颜色pCtx.lineWidth1;// 线条宽度switch(lineType){casehorizontal:{// 水平线pCtx.beginPath();pCtx.moveTo(0,10);pCtx.lineTo(20,10);pCtx.stroke();break;}casevertical:{// 垂直线pCtx.beginPath();pCtx.moveTo(10,0);pCtx.lineTo(10,20);pCtx.stroke();break;}casecross:{// 十字网格pCtx.beginPath();pCtx.moveTo(10,2);pCtx.lineTo(10,18);pCtx.stroke();pCtx.beginPath();pCtx.moveTo(2,10);pCtx.lineTo(18,10);pCtx.stroke();break;}caseforward_diagonal:{// 正斜线pCtx.beginPath();pCtx.moveTo(0,20);pCtx.lineTo(20,0);pCtx.stroke();break;}casebackward_diagonal:{// 反斜线pCtx.beginPath();pCtx.moveTo(0,0);pCtx.lineTo(20,20);pCtx.stroke();break;}casecross_diag:{// 斜十字网格pCtx.beginPath();pCtx.moveTo(3,3);pCtx.lineTo(17,17);pCtx.stroke();pCtx.beginPath();pCtx.moveTo(3,17);pCtx.lineTo(17,3);pCtx.stroke();break;}default:{//斜方格pCtx.beginPath();pCtx.moveTo(0,0);pCtx.lineTo(20,20);pCtx.stroke();pCtx.beginPath();pCtx.moveTo(0,20);pCtx.lineTo(20,0);pCtx.stroke();break;}}// 使用createPattern创建重复的图案varpatternctx.createPattern(patternCanvas,repeat);console.log(patternpattern,pattern);returnpattern;}varlineFillOptions{// stroke: new OLStroke({// color: red,// lineDash: [5],// width: 2// }),fill:newOLFill({color:createStripedPattern(config.fillStyle)||#ffff00})};if(config.strokeEnabledconfig.strokeEnabled1){lineFillOptions.strokenewOLStroke(strokeOptions);}psnewOLStyle(lineFillOptions);}}catch(ex){console.log(GetConfigedPolylineSymbols ex 采用默认样式,ex);psGetDefaultPointStyle();}//只关注样式的请忽略这一段内容//适用的属性选择器config.categories示例/* [{ type: select, field: name, relation: 等于, value: 符号-鹊山水库 }, { type: logical, value: 或 }, { type: select, field: name, relation: 等于, value: 符号-鹊山水库 }] *///是否符合多条件function_filterFunction(attrs){//计算是否符合条件 符合返回truefunctionfilterVal(inValue,relation,compareValue){console.log(filterVal,inValue,relation,compareValue);varresultfalse;switch(relation){case等于:{result(inValuecompareValue);break;}case不等于:{result(inValue!compareValue);break;}case小于:{result(inValuecompareValue);break;}case小于等于:{result(inValuecompareValue);break;}case大于:{result(inValuecompareValue);break;}case大于等于:{result(inValuecompareValue);break;}case包含:{result((inValue).indexOf(compareValue)0);break;}case不包含:{result((inValue).indexOf(compareValue)0);break;}}returnresult;}if(config.categories(config.categories).length10){try{varcarrJSON.parse(config.categories);if(carrinstanceofArraycarr.length0){varcstr;for(vari0;icarr.length;i){varccarr[i];if(c.typec.typeselect){varvattrs[c.field];varrfilterVal(v,c.relation,c.value);cstr(r? 1 : 0 );}elseif(c.typec.typelogical){if(c.value且){cstr * ;}else{cstr ;}}}console.log(cstr,cstr);if(eval(cstr)1){returntrue;}else{returnfalse;}}else{returntrue;}}catch(ex){returntrue;}}else{returntrue;}}ps.filter_filterFunction;ps.xInfo{symbolConfig:config};returnps;}实现效果config对象示例{createBy:null,createTime:2026-08-03 16:04:59,updateBy:null,updateTime:2026-08-03 16:04:59,remark:null,id:b4a92e6b7d2a4583a0c63425de0edb40,layerId:f8666ad651e64f81be9b307ecc5e867b,categories:[{ \type\: \select\, \field\: \name\, \relation\: \等于\, \value\: \正斜线\ }],symbolName:正斜线,fillColor:#1890FF,fillOpacity:0,fillStyle:forward_diagonal,fillImageUrl:null,strokeEnabled:1,strokeColor:#1890FF,strokeWidth:2,strokeOpacity:0,strokeStyle:solid,dashArray:null,labelEnabled:1,highlightEnabled:1,highlightFillColor:#FF7A45,highlightFillOpacity:0.5,highlightStrokeColor:#FF4D4F,highlightStrokeWidth:3,extrusionEnabled:0,extrusionHeight:0,extrusionHeightField:null,extrusionTopColor:null,extrusionSideColor:null,minZoom:3,maxZoom:20,sort:1,status:0,zindex:5}
延伸阅读

更多相关文章

2026/9/20 15:15:26

电子设计竞赛备赛指南:从知识积累到项目交付的工程化实践

最近和几个在校学生聊起电子设计竞赛,他们问得最多的问题不是“该学什么”,而是“怎么才能把学的东西用起来”。这让我想起自己第一次参加电赛时的状态:手里拿着一堆开发板、传感器、模块,文档看了不少,代码也抄了不少…

2026/9/20 1:43:27

构网型VSG-PMSM永磁直驱风力发电系统解析

1. 构网型VSG-PMSM永磁直驱风力发电系统概述 永磁直驱风力发电系统作为当前风电领域的主流技术路线之一,其核心优势在于省去了传统双馈机组中的齿轮箱结构,通过PMSM(永磁同步电机)直接与风机叶轮连接。这种结构大幅减少了机械传动…

2026/9/22 22:20:50

Python基础语法全解析:从入门到精通

1. Python语言基础语法元素解析 作为一名使用Python十余年的开发者,我经常被问到同一个问题:"怎样才能真正掌握Python的基础语法?"今天我们就来彻底拆解Python最核心的语法元素,这些是每个Python程序员必须内化的基本功…

2026/9/23 1:37:23

OpenSider实战:把浏览器变成AI Agent的“手和脚”全解析

做Agent这一年多,我踩得最深的坑不是模型选型,也不是Prompt调优,而是“手和脚”的问题。模型再聪明,最后总得有人去点按钮、填表单、翻页面,不然它就只能当一个只聊不做的顾问。OpenSider就是为解决这个问题来的&#…

2026/9/23 1:37:23

Flet flet-video 的 VideoSpacer 控件栏弹性间隔布局指南

前端跨平台桌面应用移动开发 【免费下载链接】flet Build realtime web, mobile and desktop apps in Python only. No frontend experience required. 项目地址: https://gitcode.com/gh_mirrors/fl/flet 点击查看 免费下载 导读 VideoSpacer 是 Flet 官方视频扩…

2026/9/23 1:37:23

搞懂了解的英语报错?这份速查手册让 StackTrace 不再劝退

搞懂了解的英语报错?这份速查手册让 StackTrace 不再劝退 面对满屏红色的 StackTrace,你是不是脑子瞬间一片空白?那些英文单词像天书一样,连错在哪一行都找不到。别慌,我整理了这份【了解的英语】速查手册,专门解决你看不懂报错…

2026/9/23 1:37:23

智能飞行棋开发避坑:保姆级教程帮你搞定那些诡异报错

智能飞行棋开发避坑:保姆级教程帮你搞定那些诡异报错 刚把智能飞行棋的Demo跑起来,是不是满屏的红色StackTrace?别慌,这种“看起来像乱码”的错误堆栈,90%都是新手在异步逻辑、状态同步或并发控制上踩的坑。很多教程只教你怎么画棋盘、…

2026/9/23 1:32:23

电力巡检防震锤检测:VOC/YOLO数据集解析与YOLOv8训练实战

简介:面向电力巡检、目标检测方向的开发者和学习者,这份数据集围绕输电线防震锤识别任务,共涵盖2721张现场图片以及对应的VOC格式和YOLO格式标注文件,标注类别为DamperSpiral与DamperStockbridge两类防震锤,合计标注框…

2026/9/22 10:02:42

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/22 9:07:39

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/23 0:01:54

3个实战技巧搞定形式英语:从看教程到跑通性能优化

3个实战技巧搞定形式英语:从看教程到跑通性能优化 看了一堆教程还是不会写项目?别慌,这种“眼高手低”的困境在开发者圈子里太常见了。很多人以为卡点在语法,其实真正拦路虎是缺乏将知识点串联成完整链路的能力。今天咱们不聊虚的,直接拿【形式英语】这…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码