mirror of
https://github.com/visgl/react-map-gl.git
synced 2026-01-18 15:54:22 +00:00
155 lines
4.1 KiB
Markdown
155 lines
4.1 KiB
Markdown
# Marker
|
|
|
|

|
|
|
|
This is a React equivalent of Mapbox's
|
|
[Marker Control](https://www.mapbox.com/mapbox-gl-js/api/#marker), which can
|
|
be used to render custom icons at specific locations on the map.
|
|
|
|
```js
|
|
import * as React from 'react';
|
|
import ReactMapGL, {Marker} from 'react-map-gl';
|
|
|
|
function App() {
|
|
const [viewport, setViewport] = React.useState({
|
|
longitude: -122.45,
|
|
latitude: 37.78,
|
|
zoom: 14
|
|
});
|
|
return (
|
|
<ReactMapGL {...viewport} width="100vw" height="100vh" onViewportChange={setViewport}>
|
|
<Marker latitude={37.78} longitude={-122.41} offsetLeft={-20} offsetTop={-10}>
|
|
<div>You are here</div>
|
|
</Marker>
|
|
</ReactMapGL>
|
|
);
|
|
}
|
|
```
|
|
|
|
Performance notes: if a large number of markers are needed, it's generally favorable to cache the `<Marker>` nodes, so that we don't rerender them when the viewport changes.
|
|
|
|
```js
|
|
import * as React from 'react';
|
|
import ReactMapGL, {Marker} from 'react-map-gl';
|
|
|
|
function App(props) {
|
|
const [viewport, setViewport] = React.useState({
|
|
longitude: -122.45,
|
|
latitude: 37.78,
|
|
zoom: 14
|
|
});
|
|
|
|
// Only rerender markers if props.data has changed
|
|
const markers = React.useMemo(() => data.map(
|
|
city => (
|
|
<Marker key={city.name} longitude={city.longitude} latitude={city.latitude} >
|
|
<img src="pin.png" />
|
|
</Marker>
|
|
)
|
|
), [props.data]);
|
|
|
|
return (
|
|
<ReactMapGL {...viewport} width="100vw" height="100vh" onViewportChange={setViewport}>
|
|
{markers}
|
|
</ReactMapGL>
|
|
);
|
|
}
|
|
```
|
|
|
|
|
|
## Properties
|
|
|
|
##### `latitude` (Number, required)
|
|
Latitude of the marker.
|
|
|
|
##### `longitude` (Number, required)
|
|
Longitude of the marker.
|
|
|
|
##### `offsetLeft` (Number)
|
|
|
|
- default: `0`
|
|
|
|
Offset of the marker from the left in pixels, negative number indicates left.
|
|
|
|
##### `offsetTop` (Number)
|
|
|
|
- default: `0`
|
|
|
|
Offset of the marker from the top in pixels, negative number indicates up.
|
|
|
|
##### `draggable` (Boolean)
|
|
|
|
- default: `false`
|
|
|
|
Allows this marker component to be dragged around the map. (Use `onDragEnd` to capture the final position and update `longitude` and `latitude`).
|
|
|
|
##### `onDragStart` (Function)
|
|
|
|
Called when a draggable marker starts being dragged.
|
|
|
|
Parameters:
|
|
|
|
- `event` - The pointer event.
|
|
+ `event.lngLat` - The geo coordinates where the drag started, as `[lng, lat]`.
|
|
|
|
##### `onDrag` (Function)
|
|
|
|
Continuously called while a draggable marker is being dragged.
|
|
|
|
Parameters:
|
|
|
|
- `event` - The pointer event.
|
|
+ `event.lngLat` - The geo coordinates of the drag event, as `[lng, lat]`.
|
|
|
|
##### `onDragEnd` (Function)
|
|
|
|
Called when a draggable marker is released at its final position. This is usually a good time to capture `event.lngLat` and update the marker's `longitude` and `latitude` props.
|
|
|
|
Parameters:
|
|
|
|
- `event` - The pointer event.
|
|
+ `event.lngLat` - The geo coordinates where the drag ended, as `[lng, lat]`.
|
|
|
|
##### `className` (String)
|
|
|
|
Assign a custom class name to the container of this control.
|
|
|
|
##### `captureScroll` (Boolean)
|
|
|
|
- default: `false`
|
|
|
|
Stop propagation of mouse wheel event to the map component. Can be used to stop map from zooming when this component is scrolled.
|
|
|
|
##### `captureDrag` (Boolean)
|
|
|
|
- default: `true`
|
|
|
|
Stop propagation of dragstart event to the map component. Can be used to stop map from panning when this component is dragged.
|
|
|
|
##### `captureClick` (Boolean)
|
|
|
|
- default: `true`
|
|
|
|
Stop propagation of click event to the map component. Can be used to stop map from calling the `onClick` callback when this component is clicked.
|
|
|
|
##### `captureDoubleClick` (Boolean)
|
|
|
|
- default: `true`
|
|
|
|
Stop propagation of dblclick event to the map component. Can be used to stop map from zooming when this component is double clicked.
|
|
|
|
##### `capturePointerMove` (Boolean)
|
|
|
|
- default: `false`
|
|
|
|
Stop propagation of pointermove event to the map component. Can be used to stop map from calling the `onMouseMove` or `onTouchMove` callback when this component is hovered.
|
|
|
|
## Styling
|
|
|
|
Like its Mapbox counterpart, this control relies on the mapbox-gl stylesheet to work properly. Make sure to add the stylesheet to your page.
|
|
|
|
## Source
|
|
|
|
[marker.js](https://github.com/visgl/react-map-gl/tree/6.1-release/src/components/marker.js)
|
|
|