在地图上定位

Klo*_*oni 5 javascript reactjs react-leaflet

我想在地图上添加模块“React-leaflet-locate-control”。不幸的是,我有这个错误“类型错误:无法读取未定义的属性‘addLayer’”,我不知道如何纠正这个错误。

你能帮我吗 ?

这是我的组件 Map :

import './Map.css';
import React, { Component } from 'react';
import { Map, TileLayer, Marker, Popup } from 'react-leaflet';
import L from "leaflet";
import { getLat, getLng } from '../../Store.js';
import SearchBar from '../SearchBar/SearchBar.js';
import LocateControl from 'react-leaflet-locate-control';

const customMarker = new L.icon({
    iconUrl: "https://unpkg.com/leaflet@1.4.0/dist/images/marker-icon.png",
    iconSize: [25, 41],
    iconAnchor: [13, 0]
});

export default class MapLeaflet extends Component {

    constructor(props) {
        super(props);
        this.state = {
            lat: getLat(),
            lng: getLng(),
        }
    }

    updateMarker = (e) => {
        this.props.updateMarkerPosition(e.latlng.lat, e.latlng.lng);
        this.setState({
            lat: e.latlng.lat,
            lng: e.latlng.lng
        })
    }

    render() {
        const position = [this.state.lat, this.state.lng]
        const locateOptions = {
            position: 'topright',
            strings: {
                title: 'Show me where I am, yo!'
            },
            onActivate: () => {} // callback before engine starts retrieving locations
        }
        return (
            <div className="map">
                <Map center={position} zoom={13} className="map" onClick={this.updateMarker}>
                    <TileLayer
                        attribution='&amp;copy <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
                        url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
                    />
                    <Marker position={position} icon={customMarker}>
                        <Popup>
                            A pretty CSS3 popup. <br /> Easily customizable.
                        </Popup>
                    </Marker>
                    <SearchBar />
                    <LocateControl options={locateOptions} startDirectly/>
                </Map>
            </div>
        )
    }
}
Run Code Online (Sandbox Code Playgroud)

Vad*_*hev 15

react-leaflet-locate-control与最新版本 (v2) 不兼容,react-leaflet事实上这里已经报告了类似的问题

由于react-leaflet-locate-control代表leaflet-locatecontrolplugin的包装器,react-leaflet因此可以使用以下自定义组件 for代替,它提供与 相同的功能react-leaflet-locate-control

import React, { Component } from "react";
import { withLeaflet } from "react-leaflet";
import Locate from "leaflet.locatecontrol";

class LocateControl extends Component {
  componentDidMount() {
    const { options, startDirectly } = this.props;
    const { map } = this.props.leaflet;

    const lc = new Locate(options);
    lc.addTo(map);

    if (startDirectly) {
      // request location update and set location
      lc.start();
    }
  }

  render() {
    return null;
  }
}

export default withLeaflet(LocateControl);
Run Code Online (Sandbox Code Playgroud)

安装

1)安装插件: npm install leaflet.locatecontrol

2) 将以下 CSS 资源包含到public/index.html

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet.locatecontrol/dist/L.Control.Locate.min.css">
Run Code Online (Sandbox Code Playgroud)

这是一个演示源代码

  • 谢谢你的帮助兄弟 :) 祝你有美好的一天 (2认同)