React与Leaflet 环境安装与基本使用

6 篇文章 0 订阅
6 篇文章 0 订阅

环境准备与基本使用

  1. leftlet包安装
npm install leaflet
  1. css文件引入

方式1:在根元素的css文件进行全局引用

@import url("../node_modules/leaflet/dist/leaflet.css");

方式2:在组件的jsx文件中进行引用

import "../node_modules/leaflet/dist/leaflet.css";
  1. leftlet的API引入
import L from 'leftlet'

基本案例

加载在线瓦片地图

实例代码

App.css 部分

@import url("../node_modules/leaflet/dist/leaflet.css");

//其他代码省略

组件部分

import React, { useEffect } from 'react';
import L from "leaflet"

// 这个css只是标记了onlinetilelayer_map容器的样式
import "./OnlineTileLayer.css"

function OnlineTileLayer(props) {
    
    useEffect(()=>{
        //leaflet与div进行绑定,并指明默认的地图中心和缩放比例
        var map = L.map('onlinetilelayer_map').setView([51.5, -0.09], 13);
        //构建一个切片图层对象,并添加到map容器中
	    L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
		    attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
	    }).addTo(map);
    },[])

    return (
        <div id = "onlinetilelayer_map"></div>
    );
}

export default OnlineTileLayer;

代码说明

  1. leaflet使用时,当前环境必须引入leaflet.css文件,否则地图加载会出现错位,丢失等等问题
  2. app.css 的@import方式,只是其中一种引入方式,也可直接在组件的jsx文件中以import方式导入
  3. 暂时没有找到leaflet.css自动引入方法(类似于antd的按需引用)
  4. leaflet的API都是链式调用的即API中的函数都是返回当前对象本身,因此可以连续调用

组件式Popup

问题描述

  1. leaflet默认的Popup一般只能在context中直接指定String型的内容或者具有Html标签的string元素
  2. 如果Context是自身是一个React的组件,一般情况下不能直接加载。

解决办法

动态的将React组件与临时的div元素进行绑定,再将绑定的div(一个html元素)设置为Popup的context

实例代码

内容组件(类似于件简单的要素属性List)

import React from 'react';

//就是将一个object对象的key-value转换为ul-li
function SimplePropertiesPopup(props) {
    return (
        <ul>
            {Object.keys(props).map((key,index)=>{
                return <li key = {index}>{key} : {props[key]}</li>
            })}
        </ul>
    );
}

export default SimplePropertiesPopup;

加载到Popup中

import ReactDOM from 'react-dom';
//绑定到地图的click事件,对地图进行indentify的查询,其他代码省略
map.on("click", (evt)=>{
    layer.identify().at(evt.latlng).on(map).run((error, result) => {
        if(error){
            message.error(error);
            return
    }
    if(result.features.length>0)
    {
        //创建一个临时的div元素
        let div = document.createElement('div');
        //通过reactDom将内容组件与div进行绑定并执行渲染
        ReactDOM.render(SimplePropertiesPopup(result.features[0].properties), div);
        //在地图的单机位置上开启popup,并将Context设置为div元素
        L.popup().setLatLng(evt.latlng).setContent(div).openOn(map);
    }
})
})

代码说明

  1. 内容组件利用函数组件编写,主要式时是为了方便创建与调用
  2. ReactDOM一定要单独进行import
  3. 默认情况下,leaflet的popup的边界会自动包裹context的内容,一般不用单独设置样式
  4. 默认情况下,leaflet的popup的已经带了关闭事件,一般情况下不用单独处理
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React Leaflet是一个用于在React应用程序中集成Leaflet地图库的库。它允许您使用React组件的方式来创建和管理Leaflet地图。您可以使用React Leaflet来在React应用程序中绘制和操作Leaflet地图,并利用Leaflet提供的丰富功能和插件。您可以通过克隆Lantmäteriet的React Leaflet地图仓库、安装依赖并启动应用程序来了解更多关于React Leaflet的用法和示例。 另外,如果您想在React中绘制地图,您需要直接使用Leaflet库而不是Vue-Leaflet插件。您可以访问Leaflet官网了解更多关于Leaflet的用法和文档。 在React Leaflet中,您可以创建内容组件来显示地图元素的属性信息。例如,您可以创建一个名为SimplePropertiesPopup的组件,该组件将一个对象的key-value转换为一个无序列表(ul-li)的形式展示。您可以在该组件中使用map函数来遍历对象的属性,并将其渲染为列表项。通过导入该组件并在需要展示属性的地图元素上使用,您可以在React Leaflet中展示简单的要素属性列表。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [lantmateriet-leaflet-react:具有来自Lantmäteriet的图片的React Leaflet地图示例](https://download.csdn.net/download/weixin_42109732/18666610)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [leaflet地图在React中的使用](https://blog.csdn.net/Joey_Tribiani/article/details/124326145)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [ReactLeaflet 环境安装基本使用](https://blog.csdn.net/cyoubo/article/details/118156333)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值