Я пытаюсь найти способ превратить обычную линию карты в кривую Безье, как это предусмотрено Turf.js< /а>
Фрагменты там не особенно полезны — у них есть переменная addToMap
, но не сказано, что с ней делать — и я не могу понять, как добавить строку на карту в React.
Вот как я сейчас рисую стандартную/прямую линию:
const [route] = useState<FeatureCollection<LineString>>({
type: 'FeatureCollection',
features: [
{
type: 'Feature',
geometry: {
type: 'LineString',
coordinates: [
[originAirport.longitude, originAirport.latitude],
[destinationAirport.longitude, destinationAirport.latitude],
],
},
properties: {},
},
],
}); const [lineLayer] = useState({id: 'route', source: 'route', type: 'line', paint: {'line-width': 2, 'line-color': '#007cbf', }, });
Позже, в ответе:
<Source
id="map-line"
type="geojson"
data={{
...route,
features: [
{
...route.features[0],
geometry: {
...route.features[0].geometry,
coordinates: [
[originAirport.longitude, originAirport.latitude],
[destinationAirport.longitude, destinationAirport.latitude],
],
},
},
],
}}
>
<Layer {...lineLayer} />
</Source>
Я попытался обернуть координаты в turf.bezierSpline
fn, но это не удалось. Другого способа добавить не нашел.
Я использую react-mapb-gl
, но по его интеграции с turf.js не так много информации. Я также попытался добавить дополнительный исходный слой, например:
const line = turf.lineString([
[-76.091308, 18.427501],
[-76.695556, 18.729501],
]);
const curved = turf.bezierSpline(line);
в ответ:
<Source id="test" type="geojson" data={curved}>
<Layer {...lineLayer} />
</Source>