This is a React equivalent of Goong's Marker Control, which can be used to render custom icons at specific locations on the map.
import * as React from 'react';
import ReactMapGL, {Marker} from '@goongmaps/goong-map-react';
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.
import * as React from 'react';
import ReactMapGL, {Marker} from '@goongmaps/goong-map-react';
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>
);
}
latitude
(Number, required)Latitude of the marker.
longitude
(Number, required)Longitude of the marker.
offsetLeft
(Number)0
Offset of the marker from the left in pixels, negative number indicates left.
offsetTop
(Number)0
Offset of the marker from the top in pixels, negative number indicates up.
draggable
(Boolean)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)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)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)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)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)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.
Like its Goong counterpart, this control relies on the goong-js stylesheet to work properly. Make sure to add the stylesheet to your page.