// Libraries import React, {FunctionComponent, useEffect, useState} from 'react' import {Map, TileLayer} from 'react-leaflet' import Control from 'react-leaflet-control' import 'leaflet/dist/leaflet.css' // Components import {BingMap} from './bing-maps/BingMap' import {LayerSwitcher} from './LayerSwitcher' // Utils import {preprocessData} from './processing/tableProcessing' import {ZOOM_FRACTION, getMinZoom, getRowLimit} from '../../utils/geo' // Types import {GeoLayerConfig} from '../..' import {Config, Table} from '../../types' interface Props extends Partial { width: number height: number table: Table stylingConfig: Partial } const Geo: FunctionComponent = props => { const { allowPanAndZoom, height, lat, latLonColumns, layers, lon, mapStyle, s2Column, stylingConfig, tileServerConfiguration, useS2CellID, width, zoom, } = props const {tileServerUrl, bingKey} = tileServerConfiguration const mapRef = React.createRef() useEffect(() => { if (width && height) { mapRef.current?.leafletElement._onResize() } }, [width, height]) const {table, detectCoordinateFields} = props const [preprocessedTable, setPreprocessedTable] = useState( table ? preprocessData( table, getRowLimit(props.layers), useS2CellID || !detectCoordinateFields, latLonColumns, s2Column ) : null ) useEffect(() => { const newTable = preprocessData( props.table, getRowLimit(props.layers), useS2CellID || !detectCoordinateFields, latLonColumns, s2Column ) setPreprocessedTable(newTable) }, [table, detectCoordinateFields]) if (width === 0 || height === 0) { return null } const onViewportChange = (viewport: {center?: number[]; zoom?: number}) => { const {onViewportChange} = props if (onViewportChange) { onViewportChange(viewport.center[0], viewport.center[1], viewport.zoom) } } const latLon = preprocessedTable.getLatLon(0) const mapCenter = { lat: latLon ? latLon.lat : lat, lon: latLon ? latLon.lon : lon, } return ( {bingKey ? ( ) : ( )} {layers.map((layer, index) => { if (!preprocessedTable) { return } return ( ) })} {preprocessedTable && preprocessedTable.isTruncated() && (
Results are truncated. More...
)}
) } export default Geo