_onLocationFound не работает в leaflet.locationcontrol - PullRequest
0 голосов
/ 27 мая 2020

Я использую leaflet.locatecontrol для получения местоположения пользователей на карте, но _onLocationFound не работает. вот мой компонент карты

      <Map
        ref={ref}
        center={initialState ? initialState.center : DEFAULT_CENTER}
        zoom={initialState ? initialState.zoom : 5}
        maxZoom={18}
        onMove={(e) => {
          onMapMove(e);
        }}
      >
        <TileLayer
          url={`${settings.getConfig().MAP_TILE_URL}${
            settings.getConfig().MAP_X_API_KEY
          }`}
          attribution={settings.getConfig().MAP_ATTRIBUTION}
        />
        {marker && (
          <Marker
            position={marker}
            icon={L.icon({
              iconUrl: "https://webstockreview.net/images/map-icon-png-6.png",

              iconSize: [25, 30], // size of the icon
              iconAnchor: [13, 36], // point of the icon which will correspond to marker's location
            })}
          />
        )}
        <LocateControl options={locateOptions} />

      </Map>

, и это параметры, которые я передаю в LocateControl

  position: "bottomright",
  icon: "map-location-icon",
  strings: {
    title: "my location",
  },
  onLocationError: function (e) {
    console.log(e);
    console.log("Location access denied.");
  },
  _onLocationFound: function (e) {
    console.log("event", e);
  },

  onActivate: () => {}, // callback before engine starts retrieving locations
}

, а LocateControl - это простой компонент, который я реализовал для разделения logi c и вот его код:

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);

моя проблема в том, что я хочу сохранить местоположение, когда оно будет найдено, но функция _onLocationFound не сработает, даже если местоположение обновлено на карте, и я не могу найти из того, что я упускаю, потому что даже в документации функция просто пропущена, чтобы locateControl Вот ссылка на исходный код пакета

Я был бы благодарен, если бы кто-нибудь мог дать мне подсказка

1 Ответ

1 голос
/ 27 мая 2020

Вы передаете параметр с именем _onLocationFound, который соответствует не в списке поддерживаемых параметров для Leaflet.LocateControl .

Вероятно, вы сделали это, потому что посмотрели код Leaflet.LocateControl и перепутали параметр onLocationError с методом _onLocationError , не заметив, что _onLocationError метод явно вызывает его тезку option здесь ...

    _onLocationError: function(err) {
        /* snip */
        this.options.onLocationError(err, this);
    },

... но вы не смогли понять, что onLocationFound нет option на всех , и что внутренний _onLocationFound метод вообще не вызывает какой-либо пользовательский обратный вызов .

Вместо этого выполните it задокументированным способом : Используйте locationfound событие на карте.

...