mirror of https://gitee.com/antv-l7/antv-l7
73 lines
1.6 KiB
TypeScript
73 lines
1.6 KiB
TypeScript
import { PolygonLayer, Scene } from '@antv/l7';
|
|
import { Map } from '@antv/l7-maps';
|
|
import React, { useEffect, useState } from 'react';
|
|
import { useEuropeData, addEuropeLayers } from './useLine';
|
|
|
|
export default () => {
|
|
const { geoData } = useEuropeData();
|
|
const [scene, setScene] = useState<Scene>();
|
|
|
|
useEffect(() => {
|
|
if (!scene) {
|
|
const mapScene = new Scene({
|
|
id: 'map',
|
|
map: new Map({
|
|
pitch: 0,
|
|
style: 'light',
|
|
center: [-96, 37.8],
|
|
zoom: 3,
|
|
interactive: true,
|
|
}),
|
|
});
|
|
setScene(mapScene);
|
|
}
|
|
|
|
if (geoData && scene) {
|
|
const layer = new PolygonLayer({
|
|
autoFit: true,
|
|
})
|
|
.source(geoData.country, {
|
|
transforms: [
|
|
{
|
|
type: 'join',
|
|
sourceField: 'country',
|
|
targetField: 'NAME',
|
|
data: geoData.turnout,
|
|
},
|
|
],
|
|
})
|
|
// .scale('turnout', {
|
|
// type: 'quantize', // the input domain and output range of a diverging scale always has exactly three elements
|
|
// // domain: [40, 70, 90],
|
|
// })
|
|
.shape('fill')
|
|
.color('turnout', [
|
|
'#b2182b',
|
|
'#f9b393',
|
|
'#f8f6e9',
|
|
'#9fc7e0',
|
|
'#2166ac',
|
|
])
|
|
.style({
|
|
opacity: 1,
|
|
});
|
|
|
|
scene?.addLayer(layer);
|
|
addEuropeLayers(geoData, scene, layer);
|
|
}
|
|
return () => {
|
|
scene?.destroy();
|
|
};
|
|
}, [geoData]);
|
|
|
|
return (
|
|
<div
|
|
id="map"
|
|
style={{
|
|
height: '500px',
|
|
position: 'relative',
|
|
}}
|
|
/>
|
|
);
|
|
};
|