React项目-OpenLayers地图初始化

2024-06-22 17:28

本文主要是介绍React项目-OpenLayers地图初始化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 一、环境描述

        React集成OpenLayers地图需要注意软件兼容性问题,可以从官网或者百度文章查询React和OpenLayers地图的版本兼容性,

1、软件版本

        (1)create-react-app创建项目;

        (2)React版本:18.3.1;

        (3)OpenLayers版本:6.15.1;

        (5)Node版本:14.21.3

二、创建React项目

1、创建项目
npx create-react-app react-test
2、启动项目
cd react-test
npm run start
3、安装OpenLayers
npm i ol@6.15.1 --save

三、项目配置

1、路由配置

(1)路由文件配置

        在src/创建一个名为router.js的文件(文件名称和位置可以自己规划)

// 引入组件
import App from "./App";
import OpenLayersMapFunction from "./components/OpenLayersMapFunction";
import OpenLayersMapClass from "./components/OpenLayersMapClass";import { createBrowserRouter } from "react-router-dom";const router = createBrowserRouter([{path: "/",element: <App />,children: [{path: "",element: <OpenLayersMapFunction />},{path: "/openLayersMapFunction",element: <OpenLayersMapFunction />},{path: "/openLayersMapClass",element: <OpenLayersMapClass />}]},
])export default router

(2)index.js文件配置

import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { RouterProvider } from 'react-router-dom';
import router from './router';const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(// <React.StrictMode> // 注意注释React严格模式<RouterProvider router={router}><App /></RouterProvider>// </React.StrictMode>
);reportWebVitals();

(3)App.js文件配置

import './App.css';
import Header from './components/Header';
import { Outlet, useNavigate } from 'react-router-dom';
import { useState } from 'react';function App() {const [isActive, setIsActive] = useState(1)const navigate = useNavigate()function clickMenu(path, menuId) {if (isActive === menuId) {return}// 保存当前点击的菜单IDsetIsActive(menuId)// 跳转路由navigate(path)}return (<div className="App"><Header clickMenu={clickMenu} active={isActive}></Header><div className="content"><Outlet /></div></div>);
}export default App;
2、地图组件配置

 (1)Header.js配置

// css文件
import "./css/Header.css"// 数据来源
const menuData = [{id: 1,label: "函数组件OpenLayers",path: "/openLayersMapFunction"},{id: 2,label: "类组件OpenLayers",path: "/openLayersMapClass"},
]// 数据过滤
function FilterData({ clickList, isActive }) {return menuData.map(row => {return (<li className={isActive === row.id ? 'isActive' : ''} onClick={() => { clickList(row.path, row.id) }} key={row.id} >{row.label}</li >)})
}// 渲染页面
export default function Header({ clickMenu, active }) {return (<ul className="menuList"><FilterData clickList={clickMenu} isActive={active} /></ul>)
}

(2)函数组件(CesiumMapFunction.js)

import { useEffect } from "react";
import '../css/OpenLayersMap.css'import "ol/ol.css";
import Map from "ol/Map.js";
import XYZ from "ol/source/XYZ"
import View from "ol/View.js";
import TileLayer from "ol/layer/Tile.js";
import { DoubleClickZoom } from 'ol/interaction';export default function OpenLayersMapFunction() {useEffect(() => {const tileMap = new TileLayer({source: new XYZ({// 官网在线地图url: "your_map_url",}),});// 初始化地图const openLayers = new Map({layers: [tileMap], // 直接在配置上加载target: "openLayersContainer", // 地图容器view: new View({projection: "EPSG:4326", // 坐标系center: [110, 30], // 地图中心点zoom: 6, // 默认缩放比例minZoom: 2, // 缩放最小级别 2maxZoom: 20, // 缩放最大级别 20}),});// 清除默认的左键双击缩放const dblClickInteraction = openLayers.getInteractions().getArray().find((interaction) => {return interaction instanceof DoubleClickZoom;});openLayers.removeInteraction(dblClickInteraction);}, [])return (<div className='openLayersMap'><div id="openLayersContainer"></div></div>)
}

(3)类组件(CesiumMapClass.js)

import React, { Component } from 'react'
import '../css/OpenLayersMap.css'import "ol/ol.css";
import Map from "ol/Map.js";
import XYZ from "ol/source/XYZ"
import View from "ol/View.js";
import TileLayer from "ol/layer/Tile.js";
import { DoubleClickZoom } from 'ol/interaction';export default class OpenLayersMapClass extends Component {componentDidMount() {const tileMap = new TileLayer({source: new XYZ({// 官网在线地图url:"your_map_url",}),});// 初始化地图const openLayers = new Map({layers: [tileMap], // 直接在配置上加载target: "openLayersContainer", // 地图容器view: new View({projection: "EPSG:4326", // 坐标系center: [110, 30], // 地图中心点zoom: 6, // 默认缩放比例minZoom: 2, // 缩放最小级别 2maxZoom: 20, // 缩放最大级别 20}),});// 清除默认的左键双击缩放const dblClickInteraction = openLayers.getInteractions().getArray().find((interaction) => {return interaction instanceof DoubleClickZoom;});openLayers.removeInteraction(dblClickInteraction);}render() {return (<div className='openLayersMap'><div id="openLayersContainer"></div></div>)}
}

这篇关于React项目-OpenLayers地图初始化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Spring Boot项目部署命令java -jar的各种参数及作用详解

《SpringBoot项目部署命令java-jar的各种参数及作用详解》:本文主要介绍SpringBoot项目部署命令java-jar的各种参数及作用的相关资料,包括设置内存大小、垃圾回收... 目录前言一、基础命令结构二、常见的 Java 命令参数1. 设置内存大小2. 配置垃圾回收器3. 配置线程栈大小

Spring Boot项目中结合MyBatis实现MySQL的自动主从切换功能

《SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能》:本文主要介绍SpringBoot项目中结合MyBatis实现MySQL的自动主从切换功能,本文分步骤给大家介绍的... 目录原理解析1. mysql主从复制(Master-Slave Replication)2. 读写分离3.

Vue3使用router,params传参为空问题

《Vue3使用router,params传参为空问题》:本文主要介绍Vue3使用router,params传参为空问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录vue3使用China编程router,params传参为空1.使用query方式传参2.使用 Histo

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安装常用语法 封装导出方