esri-leaflet-geosearch: как интегрировать его с React - PullRequest
0 голосов
/ 06 ноября 2018

В следующей ссылке есть демонстрационный пример, показывающий, как использовать плагин esri-leaflet-geosearch, https://codepen.io/exomark/pen/dafBD

var searchControl = new L.esri.Controls.Geosearch().addTo(map);

var results = new L.LayerGroup().addTo(map);

searchControl.on('results', function(data){
    results.clearLayers();
    for (var i = data.results.length - 1; i >= 0; i--) {
      results.addLayer(L.marker(data.results[i].latlng));
    }
});

Эта онлайн-демонстрация хорошо работает для поддержки функции геоисследования.

И в моем приложении React я планирую добавить также поле поиска для листовки. Но не могу понять, как это сделать.

Поскольку esri-leaflet-geosearch зависит от esri-leaflet, поэтому установил оба пакета npm, но не может найти следующий шаг. так какая помощь?

1 Ответ

0 голосов
/ 06 ноября 2018

Этого можно добиться, используя листовки с реактивами.

Сначала установите библиотеки leaflet, Reaction-leaflet и esri-leaflet-geocoder.

После этого импортируйте их в index.js

Тогда в вашем компе:

import React, { Component, createRef } from 'react';
import L from 'leaflet';
import * as ELG from 'esri-leaflet-geocoder';
import { Map, TileLayer } from 'react-leaflet';
...
componentDidMount() {
    const map = this.mapRef.current.leafletElement;
    const searchControl = new ELG.Geosearch().addTo(map);
    const results = new L.LayerGroup().addTo(map);

    searchControl.on('results', function(data){
        results.clearLayers();
        for (let i = data.results.length - 1; i >= 0; i--) {
            results.addLayer(L.marker(data.results[i].latlng));
        }
    });
}

render() {
    const center = [37.7833, -122.4167]
    return (
        <Map 
            style={{height: '800px'}}
            center={center} 
            zoom="10"
            ref={this.mapRef}>
            <TileLayer
                attribution="&amp;copy Google"
                url={'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'} />
            <div className='pointer'></div>
        </Map>
    );
}

Демо

...