react中用openlayers6预览图片

2024-01-22 02:32

本文主要是介绍react中用openlayers6预览图片,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

react中用openlayers6预览图片

在做项目的时候发现预览图片不能放大缩小,也不能移动,感觉不如用openlayers写一个图片预览的demo组件,虽然有点大材小用,可是本着学习的原则了解一下openlayers也是蛮好的。
记录下遇到的几点难点

  1. ol的官网说实话都是英文,对于英文小白来说感觉不是很友好,不过还是找到了图片为地图加载的demo链接:openlayers静态图片demo
  2. 因为项目中图片是放在服务器上面的,加载速度比较慢,在图片加载出来一段时间里面,页面是空白的,效果并不是很好,于是考虑加了antd的Spin(加载中的组件),因为项目是用的react,所以这样子写。但是我又遇到了一个问题,什么时候判断layer对象加载完成呢,所以又翻了根本看不懂的官网加载完成api:postrender。
  3. 附上组件源码:
import React from "react";
import { Spin } from "antd";
import ImageLayer from 'ol/layer/Image';
import Map from 'ol/Map';
import Projection from 'ol/proj/Projection';
import Static from 'ol/source/ImageStatic';
import View from 'ol/View';
import { getCenter } from 'ol/extent';
import 'ol/src/ol.css';class ImageShow extends React.Component{constructor(props){super(props);this.state = {loading: false}}componentDidMount(){this.pretreatmentImg();}/*** @name: pretreatmentImg* @desc: 预处理图片 - 只有加载完成图片之后才知道该图片的宽高*/pretreatmentImg = () => {const { definitionId } = this.props;// 加载时显示加载中图标this.setState({loading: true})// 读取服务器上面的图片的图片地址let imageUrl = "/scooper-activiti/data/definition/getProcessDiagram?definitionId=" + definitionId;let imgDom = new Image();imgDom.src = imageUrl;imgDom.onload = () => {// 得到图片的宽高再传递下去,使之layer加载出和图片一致的大小的图层this.loadImg(imgDom.width, imgDom.height, imageUrl);}}/*** @name: loadImg* @desc: 将图片加载成ol的方式* @param {width} 图片宽度* @param {height} 图片高度* @param {url} 在线图片地址*/loadImg(width, height, url){let extent = [0, 0, width, height];let projection = new Projection({code: 'xkcd-image',units: 'pixels',extent: extent,});let mapLayer = new ImageLayer({source: new Static({url: url,projection: projection,imageExtent: extent,}),})let map = new Map({layers: [mapLayer],target: 'imgShow',view: new View({projection: projection,center: getCenter(extent),zoom: 2,maxZoom: 8,}),});// 判断maplayer加载完成之后将加载中图标去掉mapLayer.on("postrender", () => {this.setState({loading: false})})}render(){return (<Spin spinning={this.state.loading}><div id="imgShow" className="map" style={{height: '100%', width: '100%'}}></div></Spin>)}
}export default ImageShow;

效果图

这篇关于react中用openlayers6预览图片的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/631580

相关文章

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

Java图片压缩三种高效压缩方案详细解析

《Java图片压缩三种高效压缩方案详细解析》图片压缩通常涉及减少图片的尺寸缩放、调整图片的质量(针对JPEG、PNG等)、使用特定的算法来减少图片的数据量等,:本文主要介绍Java图片压缩三种高效... 目录一、基于OpenCV的智能尺寸压缩技术亮点:适用场景:二、JPEG质量参数压缩关键技术:压缩效果对比

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

CSS Padding 和 Margin 区别全解析

《CSSPadding和Margin区别全解析》CSS中的padding和margin是两个非常基础且重要的属性,它们用于控制元素周围的空白区域,本文将详细介绍padding和... 目录css Padding 和 Margin 全解析1. Padding: 内边距2. Margin: 外边距3. Padd

CSS will-change 属性示例详解

《CSSwill-change属性示例详解》will-change是一个CSS属性,用于告诉浏览器某个元素在未来可能会发生哪些变化,本文给大家介绍CSSwill-change属性详解,感... will-change 是一个 css 属性,用于告诉浏览器某个元素在未来可能会发生哪些变化。这可以帮助浏览器优化

CSS去除a标签的下划线的几种方法

《CSS去除a标签的下划线的几种方法》本文给大家分享在CSS中,去除a标签(超链接)的下划线的几种方法,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧... 在 css 中,去除a标签(超链接)的下划线主要有以下几种方法:使用text-decoration属性通用选择器设置:使用a标签选择器,将tex

前端高级CSS用法示例详解

《前端高级CSS用法示例详解》在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交互和动态效果的关键技术之一,随着前端技术的不断发展,CSS的用法也日益丰富和高级,本文将深... 前端高级css用法在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

在React中引入Tailwind CSS的完整指南

《在React中引入TailwindCSS的完整指南》在现代前端开发中,使用UI库可以显著提高开发效率,TailwindCSS是一个功能类优先的CSS框架,本文将详细介绍如何在Reac... 目录前言一、Tailwind css 简介二、创建 React 项目使用 Create React App 创建项目

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方