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

相关文章

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

SpringBoot项目中报错The field screenShot exceeds its maximum permitted size of 1048576 bytes.的问题及解决

《SpringBoot项目中报错ThefieldscreenShotexceedsitsmaximumpermittedsizeof1048576bytes.的问题及解决》这篇文章... 目录项目场景问题描述原因分析解决方案总结项目场景javascript提示:项目相关背景:项目场景:基于Spring

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基

springboot项目如何开启https服务

《springboot项目如何开启https服务》:本文主要介绍springboot项目如何开启https服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录springboot项目开启https服务1. 生成SSL证书密钥库使用keytool生成自签名证书将

HTML5中的Microdata与历史记录管理详解

《HTML5中的Microdata与历史记录管理详解》Microdata作为HTML5新增的一个特性,它允许开发者在HTML文档中添加更多的语义信息,以便于搜索引擎和浏览器更好地理解页面内容,本文将探... 目录html5中的Mijscrodata与历史记录管理背景简介html5中的Microdata使用M

html5的响应式布局的方法示例详解

《html5的响应式布局的方法示例详解》:本文主要介绍了HTML5中使用媒体查询和Flexbox进行响应式布局的方法,简要介绍了CSSGrid布局的基础知识和如何实现自动换行的网格布局,详细内容请阅读本文,希望能对你有所帮助... 一 使用媒体查询响应式布局        使用的参数@media这是常用的

HTML5表格语法格式详解

《HTML5表格语法格式详解》在HTML语法中,表格主要通过table、tr和td3个标签构成,本文通过实例代码讲解HTML5表格语法格式,感兴趣的朋友一起看看吧... 目录一、表格1.表格语法格式2.表格属性 3.例子二、不规则表格1.跨行2.跨列3.例子一、表格在html语法中,表格主要通过< tab

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n