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

相关文章

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

Python利用GeoPandas打造一个交互式中国地图选择器

《Python利用GeoPandas打造一个交互式中国地图选择器》在数据分析和可视化领域,地图是展示地理信息的强大工具,被将使用Python、wxPython和GeoPandas构建的交互式中国地图行... 目录技术栈概览代码结构分析1. __init__ 方法:初始化与状态管理2. init_ui 方法:

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结