关于Openlayers与React的结合 2 --如何处理Map

OpenLayers实战:从Vue集成到地图裁剪、交互与流动动画 Web地图开发是构建现代地理信息系统(GIS)应用的核心技术,它基于瓦片服务、矢量数据和坐标投影等原理,将地理空间信息可视化于浏览器端。其技术价值在于提供了交互式、高性能的地图展示与空间分析能力,广泛应用于物流追踪、智慧城市、数据可视化等场景。OpenLayers作为一款功能强大的开源JavaScript库,通过其Layer、Source、View与Map的清晰架构,赋予开发者对地图渲染与行为的深度控制权。例如,结合热词“区域裁剪”需求,可利用矢量遮罩技术精确实现地图的“抠图”效果;针对“图层交互”,可通过 阅读详情

简介

上一个笔记,达到的目的是初步学会了如何初步打包一个Openlayers和React结合的框架。下一步就是开始准备进行结构设计,因为这个是对Openlayers的一个在封装,React更倾向于一个单项数据传播流动。而React里面的思维Openlayers的结构并不是很类似(据我目前的理解。)
所以现在开始设计,首先要考虑的问题就是Map对象,Map对象是OL中的一个全局对象必须要保证他的全局存在。或者说在React组件中他是一个能够被所有组件读到的对象。这里我使用React的context对象解决问题。

React context

简介

React 的context主要是用于缩短React 的父组件到需要传递的组件之间的路径的。比如说,样式信息就没有必要一层一层传递下去,使用context对象就可以避免这样的问题。

不要因为怕麻烦所以就直接使用context对象。请坚持只有在同一个数据在多个层级多个组件使用的时候才应该使用context。

代码实现

import React from 'react';
import {render} from 'react-dom';
import PropTypes from 'prop-types';
class Children extends React.Component { 
  // 如果不需要在构造函数中使用可以不写,没有影响 
  constructor(props, context) { 
    super(props, context); 
    console.log(context); 
  } 
  render() { 
    return <ul>
      <li>{'default context is: ' + this.context.value}</li> 
      </ul>; 
  } 
} 
Children.contextTypes = {//contextTypes
   value: PropTypes.string 
}; 

class Parent extends React.Component { 
    getChildContext() { 
      return { value: 'parent' }; 
    } 
    render() { 
      return ( <div> {this.props.children} </div> ); 
    } 
 } 
Parent.childContextTypes = { 
        value: PropTypes.string 
}; 

以上是一个简单的代码示例在父元素设置getChildContext并在组件中设置childContextTypes进行校验。如果不设置校验那么对象会返回空。

注意 :官网文档用法有些差异可能是已经变化,但是经过测试上面的用法也没问题,另外我觉得还是上面的用法正常一些。

// Context 使得我们能够向组件树中的任意组件传递信息并不需要逐级传递
//下面的例子是传递一个当前主题(light是当前主题值)
const ThemeContext = React.createContext('light');

class App extends React.Component {
  render() {
    // 使用一个Provider来向下传递
    //任何组件可以读取到这个值,无论他多深。
    // In this example, we're passing "dark" as the current value.
    return (
      <ThemeContext.Provider value="dark">
        <Toolbar />
      </ThemeContext.Provider>
    );
  }
}

// A component in the middle doesn't have to
// pass the theme down explicitly anymore.
function Toolbar(props) {
  return (
    <div>
      <ThemedButton />
    </div>
  );
}

function ThemedButton(props) {
  // Use a Consumer to read the current theme context.
  // React will find the closest theme Provider above and use its value.
  // In this example, the current theme is "dark".
  return (
    <ThemeContext.Consumer>
      {theme => <Button {...props} theme={theme} />}
    </ThemeContext.Consumer>
  );
}

getChildContext 函数将会在每次state或者props改变时调用。为了更新context中的数据,使用 this.setState触发本地状态的更新。这将触发一个的context并且数据的改变可以被子元素收到。

代码实现关键点

1 构造器

 constructor(props) {
        super(props);
        console.log("BASE Olbasemap");
        this.map = new ol.Map({
            // target: 'map',
            layers: [
                new ol.layer.Tile({
                    source: new ol.source.OSM()
                })
            ],
            view: new ol.View({
                center: ol.proj.fromLonLat([37.41, 8.82]),
                zoom: 4,
            })
        });
    }

2 componentDidMount

componentDidMount() {
        console.log("BASE componentDidMount");
        this.map.setTarget("map")

}

componentDidMount在首次render之后执行,当构造函数中确认了map对象之后在渲染完dom节点之后才可以将map对象与dom节点绑定。

3 Context对象

getChildContext() {
        console.log("BASE getChildContext");
        return {
            value: 'parent',
            map: this.map
        };
}

Map.childContextTypes = {
    value: PropTypes.string,
    map: PropTypes.instanceOf(ol.Map)
};

Context 对象及其校验

总结

今天解决了map对象的问题为后面的组件设计打下了基础。之后将对图层的组织以及事件的组织进行设计。

告别缩放断层!OpenLayers + 天地图影像的平滑缩放优化方案(附完整代码) 本文详细介绍了如何通过OpenLayers优化天地图影像的平滑缩放体验,解决缩放断层问题。提供了三种不同策略的实现方案,包括基础锁定、视觉增强和混合渲染,并附有完整代码示例,帮助开发者提升地图应用的用户体验。 阅读详情

相关推荐

基于Leaflet与WebSocket的实时航班追踪可视化图表开发实战

数据可视化是将抽象数据转化为直观图形的关键技术,其核心原理在于通过视觉编码高效传递信息。在工程实践中,地理信息可视化(GIS)与实时数据流的结合,能极大提升监控、分析与决策效率。对于需要处理动态、海量空间位置数据的场景,如交通监控、物流追踪或环境监测,一个高性能、可交互的实时地图图表具有重要技术价值。本文聚焦航班追踪这一典型应用,深入探讨如何利用轻量级地图库Leaflet.js与WebSocket技术,构建一个能够实时渲染飞机位置、航向与状态的可视化界面。通过散点图(scatter)与自定义标记(Marke

weixin_33720078的博客 352

react+openlayers实现点要素的创建及其点上overlay叠加层的实现

网上关于react或者vue3与openlayers结合的案例非常少,今天由于工作中用到,特记录下笔记,后面将持续更新react和vue3与ol的结合案例(新手勿喷)。

qq_37967853的博客 1358

地图API选型与实战:从高德百度到Google Mapbox的避坑指南

地图API是现代应用开发中实现位置服务与地理可视化的核心技术组件,其本质是将地理坐标数据转化为用户可交互的地图界面。其工作原理通常基于瓦片地图、地理编码和路径规划算法,通过RESTful API或JavaScript SDK为开发者提供服务。这项技术的核心价值在于为各类应用提供精准的空间数据支持,极大提升了涉及地理位置功能的开发效率与用户体验。在应用场景上,它广泛服务于出行导航、物流配送、本地生活服务、房产展示及社交应用等多个领域。本文聚焦于地图API的选型策略与工程实践,系统对比了高德、百度、腾讯等国内主

weixin_30644369的博客 417

React+Openlayers结合总结(一)

阅读前说明: 本篇文章主要是根据个人项目经验及相关学习总结,本人也并非权威专业地图开发人员,因此,你懂,初学者可以参考,当然,我承诺比官网只给的简单的例子要有用。 笔者建议: 开始正式总结之前还有一句重要的话要提醒大家,Openlayers 是一个非常完整的库,在编程的时候,大家尽量有意识的把Openlayers和React分开,不要习惯性用React.js思路去解决Openlayers的问题,需要对地图进行的操作和要获取的属性,都要从Openalyers入手,学会去查它的API。这样结合React去学习和

LYX_Jiesengbb的博客 2456

openlayers react ts 加载天地图

openalyers ts react 天地图 简单地图

qq_36287830的博客 1438

react-layers:用于OpenLayers的React组件库(WIP)

React层 react-layers是一套针对OpenLayers的自以为是的React组件。 它的设计策略是: 完全打字稿 以React方式而不是OpenLayers方式处理面对用户的所有事情-onClick和OnPointerEnter / OnPoinerLeave处理程序是典型示例 如果它不面向用户,则不必采用React方式-内部使用继承,遵循OpenLayers类,过度组合 简单的事情应该很简单 公开所有高级OpenLayers功能-否则,使用Leaflet可能会更好 尽可能做到对SSR友好(这是一项即将推出的功能,请参阅下文) 当前目标是OpenLayers 6+ 构建时为零依赖性,但React和OpenLayers除外(示例具有某些依赖性) 它与在OpenLayers 3上停止的react-openlayers无关。实际上,它比react-openlayers更受

React项目-OpenLayers地图初始化

在src/创建一个名为router.js的文件(文件名称和位置可以自己规划)(1)create-react-app创建项目;(3)OpenLayers版本:6.15.1;(2)函数组件(CesiumMapFunction.js)(2)React版本:18.3.1;(5)Node版本:14.21.3。(3)类组件(CesiumMapClass.js)(2)index.js文件配置。(1)Header.js配置。(3)App.js文件配置。

StupidlyGrass的博客 1207

实战演练:基于Veristand Custom Device的硬件在环(HIL)数据流控制模块开发

本文详细介绍了基于Veristand Custom Device的硬件在环(HIL)数据流控制模块开发实战。通过LabVIEW环境配置、动态路由逻辑构建、实时处理核心开发及性能优化等关键步骤,帮助工程师快速掌握定制化HIL测试系统的开发技巧,提升测试效率与准确性。

weixin_29206669的博客 475

react使用openlayers_关于Openlayers与React的结合 2 -如何处理Map - GIS开发者

简介上一个笔记,达到的目的是初步学会了如何初步打包一个Openlayers和React结合的框架。下一步就是开始准备进行结构设计,因为这个是对Openlayers的一个在封装,React更倾向于一个单项数据传播流动。而React里面的思维Openlayers的结构并不是很类似(据我目前的理解。)所以现在开始设计,首先要考虑的问题就是Map对象,Map对象是OL中的一个全局对象必须要保证他的全局存在...

weixin_31577599的博客 816

正直摄影方式的精度估算式_利用BDS数据反演大气可降水量及其精度分析

可降水量(PWV)对中小尺度灾害性天气预报具有指示意义,是降雨强度预报的重要参数之一。自20世纪80、90年代起,国外已经对GPS探测大气可降水量进行了大量研究。国内最早由毛节泰引进并详细介绍了地基GPS反演大气可降水量的方法,近年来发展迅速并取得了一定的成果。随着中国北斗卫星导航系统(BDS)提供服务并不断地建设完善,其已经能够应用到气象学领域,可以获得大气可降水量。文献[11]利用...

weixin_39796752的博客 1246

ComfyUI中一个超好用的变量管理类节点-KJNodes

在AI绘图中,ComfyUI的热度开始慢慢起来一些,但是这个软件在使用的过程中,需要很多连线,仅仅一个最简单的动画生成,就需要连接这么多线条,而且有些线会飞的很远,看起来就很不美观,尤其是一些复杂工作流,连接到最后自己可能已经分不太清楚到底连接好了没有。今天在研究C站的大佬们的工作流的时候,发现一个有意思的工作流,看起来大概是这种感觉:干净整洁。他用到了KJNodes这么个节点来管理变量,git上星标也不算很多,所以我想很多朋友可能还不知道,所以这里简单介绍下用法。

聚梦小课堂 7521

关于Openlayers与React的结合--第一个组件

关于Openlayers与React的结合–第一个组件 简介 下面是我对如何将Openlayers与React结合上面的记录 组件 React采用一个组件化的思想帮助前端进行工程化。所有的对象要内置在每个组件中,可以使用状态或者属性存储。简要代码如下: import React from 'react'; class Olbasemap extends React.Comp...

yatsov的博客 3691

[AHK]获取通达信软件上的股票代码

PC上的股票交易软件的自动止损、自动下单等功能比较弱,不如期货交易软件。 自力更生,程序员都是自己打造工具。 根据IPO模型(Input 输入,Process处理,Output输出),为了方便自动化首先要获取当前交易软件上浏览的股票代码。 截图再OCR显然太麻烦,通过Winspy工具查看下交易软件自带功能的消息号(33780),大家记住这个号码! 下面在用AutoHotkey作为变成语...

liuyukuan的专栏 1万+

OpenLayers 7 中文指南:从核心概念到实战避坑

WebGIS 开发是构建交互式在线地图应用的核心技术,其原理在于将地理空间数据通过前端地图库进行可视化渲染与交互。这项技术的价值在于能够将复杂的地理信息系统(GIS)能力赋能给Web应用,广泛应用于智慧城市、物流追踪、环境监测等场景。OpenLayers 作为一款功能强大的开源前端地图库,是实现这一目标的关键工具。然而,其官方文档的学习曲线和中文资源的匮乏常成为国内开发者的主要障碍。本指南基于一线开发经验,系统梳理了 OpenLayers 的核心架构,如 Map、View、Layer、Source 等模块的

weixin_33713707的博客 572

高比例风电电力系统储能运行及配置研究(python&Matlab实现)

目录1 概述2 案例3 Matlab实现 3.1 题目及分析3.2 Matlab代码 4 七个题全部代码(值得学习) 下面我们先以第二题为例,然后给出Matlab代码:先考虑风电装机300MW直接替代机组3的发电功率曲线,观察系统功率平衡发生的变化情况。然后在此场景下,以最小发电成本为目标函数,将负荷分配给两台火电机组1、2和风电机组,绘制机组日发电计划图。再将风电装机容量作为一个决策变量,以最小发电成本为目标函数,求取最小发电成本对应的风电装机容量,绘制机组日发电计划图。1. 风电装机300MW、直接

weixin_46039719的博客 1741

DFI协议时序

参数名称典型值应用场景关键影响tcmd_lat1-2个时钟周期命令与地址锁存同步地址错误风险tphy_wrlat1-2个时钟周期写操作响应速度写带宽与延迟2-3个时钟周期写操作端到端延迟系统吞吐量1-2个时钟周期连续写命令间隔信号干扰与资源冲突tphy_rdlat1-2个时钟周期读操作响应速度读带宽与延迟trddata_en由CL决定(如0.41 ns)读数据返回时间系统延迟10-20 ps写数据与命令对齐数据丢失风险<1 µs低功耗模式切换。

qq_43134430的博客 5103

别再复制粘贴了!手把手教你用OpenLayers 6.9.0 + 天地图API快速搭建第一个WebGIS应用

本文详细介绍了如何使用OpenLayers 6.9.0与天地图API快速搭建WebGIS应用。从环境配置、核心概念解析到天地图服务集成,提供完整的实战指南,帮助开发者掌握WebGIS开发技能,提升地图应用开发效率。

weixin_30567225的博客 400

IoU的进化之路——IoU、GIoU、DIoU、CIoU四种损失函数总结

IoU、GIoU、DIoU、CIoU四种损失函数总结

chase 8131

WebGIS开发常用的JS库:VUE/React/Angular对比

React组件是Web应用的最小构建块,可以在JavaScript中创建。来快速创建,npm版本 > 5.2+ 时,可以使用下面方式快速创建react初始化应用(以下命令一行表示单独执行一次)(npm上命名为ol是最新版本,支持ES6 Module分包的版本,openlayers则为老版本),然后编辑。的方式,每个组件都有一个类或模板,定义了应用逻辑和元数据。是angular-cli的缩写,serve是启动,build是构建,更多命令见。它适用于大型和复杂的项目,具有强大的组件集合和丰富的文档。

GIS前端嘉欣的博客 1845

【Autoware】2小时安装Autoware1.13(保姆级教程)

Autoware是一款“一体化”开源自动驾驶软件,能实现感知、决策、控制等功能,通过在Ubuntu中搭建Autoware开发环境和案例的运行,使大家对自动驾驶技术的实现有一个更清晰的认识。

DevFrank的博客 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

探秘地图神器:Map-EasyGo!让你轻松玩转地理数据

探秘地图神器:Map-EasyGo!让你轻松玩转地理数据 如果你在寻找一款简单易用、功能强大的地图工具,那么Map-EasyGo绝对值得你一试。这是一个开源项目,旨在帮助开发者和普通用户更便捷地处理地理信息,无论是数据分析还是可视化,都能应对自如。 项目简介 Map-EasyGo 是一个基于 JavaScript 和 WebGIS 技术开发的地图应用框架,它整合了 Leaflet、OpenLaye...

gitblog_00019的博客 449

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Akka Streams Sink.lazyCompletionStageSink 详解:延迟到首个元素到达时才创建与物化 Sink

`Sink.lazyCompletionStageSink` 是 Akka Streams(本项目为 akka-core)中用于**延迟创建与物化 Sink** 的操作符:它把"创建 Sink"这件事推迟到上游真正吐出第一个元素时才执行。本指南围绕该操作符的签名、工作原理、源码实现、Reactive Streams 语义及与 `prefixAndTail` 的组合用法展开,读完你可以掌握在"基于首

gitblog_00190的博客 810

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

基于React、Go与AI的地图社交应用TapSpot:从技术选型到架构实现

在当今的互联网应用中,地图服务已从基础的导航工具演变为连接线上与线下体验的核心平台。其技术原理结合了地理信息系统(GIS)、实时数据处理和高并发架构,旨在处理海量的地理位置信息并提供流畅的交互体验。这种技术的核心价值在于将抽象的物理空间数字化,并赋予其社交与智能属性,从而创造出全新的应用场景,如本地生活服务、社交发现和沉浸式探索。本文探讨的TapSpot项目,正是这一趋势的实践案例,它通过整合React构建交互式前端、Go处理后端高并发逻辑,并融入AI进行内容增强与个性化推荐,构建了一个覆盖在真实世界之上的

weixin_34209851的博客 483

如何快速构建现代化GPS追踪系统:Traccar插件开发完整指南

Traccar是一款功能强大的开源GPS追踪系统,支持多种设备协议和地图集成,广泛应用于车队管理、物流追踪和个人定位等场景。本文将带你了解如何利用Traccar的模块化架构,开发可复用的地图插件,轻松扩展系统功能。 ## 为什么选择Traccar进行二次开发? Traccar作为成熟的GPS追踪平台,具有以下优势: - **多协议支持**:兼容超过150种GPS设备协议,位于`src/main

gitblog_00410的博客 494

6个项目带你了解GIS地图开发!附项目源码

完成地图应用开发后,需要对地图进行优化和维护。在忙碌的日常生活中,地图已经成为我们不可或缺的导航助手,从工作到生活,各类形式丰富的地图满足了我们不同种类的需求,而在各类地图的背后,就隐藏着一个细分的技术领域——地图开发。使用 Java 开发的地图瓦片图下载工具,支持 OpenStreetMap、天地图、谷歌地图、高德地图、腾讯地图、必应地图的XYZ瓦片图下载与合并。L7 能够满足常见的地图图表,BI 系统的可视化分析、以及 GIS,交通,电力,国土,农业,城市等领域的空间信息管理,分析等应用系统开发需求。

GIS前端嘉欣的博客 729

地图社交应用TapSpot:React+Go+PostGIS+AI技术栈全解析

地理信息系统(GIS)与空间数据库是现代应用开发中处理地理位置数据的核心技术。其原理在于将经纬度坐标等空间数据以特定格式存储,并利用空间索引(如R-tree)实现高效的范围查询、距离计算等操作。这项技术的价值在于能够支撑基于位置的复杂查询与分析,为地图类、社交、物流等应用提供基础能力。在应用场景上,常见于社交平台的地点打卡、本地生活服务的附近推荐、出行导航的路径规划等。本文以地图式社交应用TapSpot为例,深入探讨了如何利用PostGIS进行地理空间查询优化,并结合React前端与Go后端构建高并发实时交

weixin_34241036的博客 370
上一篇: 关于Openlayers与React的结合--第一个组件
下一篇: GeoServer如何在Tomcat 8.5 中进行跨域
yatsov
博客等级 码龄16年 52粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值