diff --git a/CHANGELOG.md b/CHANGELOG.md index 19dc5cec6..c5afcea6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## Not released - GeocoderWidget: Fix detection of lat,lng coordinates with whitespace +- Remove 'spatialFiltersResolution' and 'dataResolution' parameters from widgets [#930](https://github.com/CartoDB/carto-react/pull/930) ## 3.1.0 diff --git a/packages/react-api/src/api/model.js b/packages/react-api/src/api/model.js index f007382b6..4ce3ad701 100644 --- a/packages/react-api/src/api/model.js +++ b/packages/react-api/src/api/model.js @@ -110,9 +110,6 @@ export function executeModel(props) { if (spatialDataColumn) queryParams.spatialDataColumn = spatialDataColumn; if (spatialDataType !== 'geo') { - if (source.spatialFiltersResolution !== undefined) { - queryParams.spatialFiltersResolution = source.spatialFiltersResolution; - } queryParams.spatialFiltersMode = source.spatialFiltersMode || 'intersects'; } } diff --git a/packages/react-api/src/types.d.ts b/packages/react-api/src/types.d.ts index 1c56959aa..358022e32 100644 --- a/packages/react-api/src/types.d.ts +++ b/packages/react-api/src/types.d.ts @@ -43,10 +43,8 @@ export type SourceProps = { type: MapTypesType['QUERY'] | MapTypesType['TABLE'] | MapTypesType['TILESET']; connection: string; geoColumn?: string; - dataResolution?: number; spatialDataType?: string; spatialDataColumn?: string; - spatialFiltersResolution?: number; aggregationExp?: string; aggregationResLevel?: number; credentials?: Credentials; diff --git a/packages/react-redux/src/slices/cartoSlice.js b/packages/react-redux/src/slices/cartoSlice.js index a1bb50837..a44aa625d 100644 --- a/packages/react-redux/src/slices/cartoSlice.js +++ b/packages/react-redux/src/slices/cartoSlice.js @@ -204,8 +204,6 @@ export const createCartoSlice = (initialState) => { * @param {FiltersLogicalOperators=} data.filtersLogicalOperator - logical operator that defines how filters for different columns are joined together. * @param {import('@deck.gl/carto').QueryParameters} data.queryParameters - SQL query parameters. * @param {string=} data.geoColumn - (optional) name of column containing geometries or spatial index data. - * @param {number=} data.dataResolution - data resolution for spatial index data. - * @param {number=} data.spatialFiltersResolution - spatial filters resolution for spatial index data. * @param {string=} data.aggregationExp - (optional) for spatial index data. * @param {number=} data.aggregationResLevel - (optional) for spatial index data. * @param {string=} data.provider - (optional) type of the data warehouse. @@ -222,8 +220,6 @@ export const addSource = ({ geoColumn, spatialDataType, spatialDataColumn, - dataResolution, - spatialFiltersResolution, aggregationExp, aggregationResLevel, provider @@ -239,11 +235,9 @@ export const addSource = ({ filtersLogicalOperator, queryParameters, geoColumn, - dataResolution, aggregationResLevel, spatialDataType, spatialDataColumn, - spatialFiltersResolution, aggregationExp, provider } diff --git a/packages/react-widgets/__tests__/models/utils.test.js b/packages/react-widgets/__tests__/models/utils.test.js index 61d114751..4b0730d9c 100644 --- a/packages/react-widgets/__tests__/models/utils.test.js +++ b/packages/react-widgets/__tests__/models/utils.test.js @@ -49,26 +49,17 @@ describe('utils', () => { ['v3', { ...V3_SOURCE, type: 'tileset' }, false], ['v3/databricks', { ...V3_SOURCE, provider: 'databricks' }, false], ['v3/databricksRest', { ...V3_SOURCE, provider: 'databricksRest' }, true], - - [ - 'v3/h3/with dataResolution', - { ...V3_SOURCE, geoColumn: 'h3', dataResolution: 5 }, - true - ], + ['v3/h3', { ...V3_SOURCE, geoColumn: 'h3' }, true], [ - 'v3/h3-frompoint/without dataResolution', + 'v3/h3-frompoint', { ...V3_SOURCE, geoColumn: 'h3:geom', spatialDataType: 'geo' }, true ], + ['v3/quadbin', { ...V3_SOURCE, geoColumn: 'quadbin:abc' }, true], [ - 'v3/quadbin-frompoint/without dataResolution', + 'v3/quadbin-frompoint', { ...V3_SOURCE, geoColumn: 'quadbin:geom', spatialDataType: 'geo' }, true - ], - [ - 'v3/quadbin/with dataResolution', - { ...V3_SOURCE, geoColumn: 'quadbin:abc', spatialFiltersResolution: 5 }, - true ] ])('works correctly for %s', (_, source, expected) => { expect(isRemoteCalculationSupported({ source })).toEqual(expected); diff --git a/packages/react-widgets/src/hooks/useWidgetFetch.js b/packages/react-widgets/src/hooks/useWidgetFetch.js index 81762dc46..899054bb8 100644 --- a/packages/react-widgets/src/hooks/useWidgetFetch.js +++ b/packages/react-widgets/src/hooks/useWidgetFetch.js @@ -16,7 +16,6 @@ import { DEFAULT_INVALID_COLUMN_ERR } from '../widgets/utils/constants'; import useCustomCompareEffect from './useCustomCompareEffect'; import useWidgetSource from './useWidgetSource'; import { isRemoteCalculationSupported } from '../models/utils'; -import { getSpatialFiltersResolution } from '../models/spatialFiltersResolution'; export const WidgetStateType = { Loading: 'loading', @@ -86,7 +85,6 @@ export default function useWidgetFetch( ); const viewport = useSelector(selectViewport); - const viewState = useSelector((state) => state.carto.viewState); const spatialFilter = useSelector((state) => selectValidSpatialFilter(state, dataSource) ); @@ -95,31 +93,6 @@ export default function useWidgetFetch( [global, viewport, spatialFilter] ); - const enrichedSource = useMemo(() => { - if ( - !source || - !geometryToIntersect || - source.spatialDataType === 'geo' || - source.spatialFiltersResolution !== undefined || - !source.dataResolution - ) { - return source; - } - - if (source.spatialDataType === 'h3' || source.spatialDataType === 'quadbin') { - const spatialFiltersResolution = getSpatialFiltersResolution({ - source, - viewState, - spatialDataType: source.spatialDataType - }); - return { - ...source, - spatialFiltersResolution - }; - } - return source; - }, [geometryToIntersect, source, viewState.zoom, viewState.latitude]); - useCustomCompareEffect( () => { let outdated = false; @@ -133,7 +106,7 @@ export default function useWidgetFetch( onStateChange?.({ state: WidgetStateType.Loading }); modelFn({ - source: enrichedSource, + source, ...params, global, remoteCalculation, @@ -168,7 +141,6 @@ export default function useWidgetFetch( }, [ params, - enrichedSource, onError, isSourceReady, global, diff --git a/packages/react-widgets/src/index.d.ts b/packages/react-widgets/src/index.d.ts index 4bc0c4dd3..0c92d93e8 100644 --- a/packages/react-widgets/src/index.d.ts +++ b/packages/react-widgets/src/index.d.ts @@ -33,6 +33,5 @@ export { WidgetState, WidgetStateType } from './types'; export { isRemoteCalculationSupported as _isRemoteCalculationSupported, sourceAndFiltersToSQL as _sourceAndFiltersToSQL, - getSqlEscapedSource as _getSqlEscapedSource, - getSpatialFiltersResolution as _getSpatialFiltersResolution + getSqlEscapedSource as _getSqlEscapedSource } from './models/utils'; diff --git a/packages/react-widgets/src/index.js b/packages/react-widgets/src/index.js index 8e89f30d8..bf79ddc23 100644 --- a/packages/react-widgets/src/index.js +++ b/packages/react-widgets/src/index.js @@ -31,4 +31,3 @@ export { sourceAndFiltersToSQL as _sourceAndFiltersToSQL, getSqlEscapedSource as _getSqlEscapedSource } from './models/utils'; -export { getSpatialFiltersResolution as _getSpatialFiltersResolution } from './models/spatialFiltersResolution'; diff --git a/packages/react-widgets/src/models/spatialFiltersResolution.js b/packages/react-widgets/src/models/spatialFiltersResolution.js deleted file mode 100644 index 660591221..000000000 --- a/packages/react-widgets/src/models/spatialFiltersResolution.js +++ /dev/null @@ -1,87 +0,0 @@ -// stolen from deck.gl/modules/carto/src/layers/h3-tileset-2d.ts -const BIAS = 2; -function getHexagonResolution(viewport, tileSize) { - // Difference in given tile size compared to deck's internal 512px tile size, - // expressed as an offset to the viewport zoom. - const zoomOffset = Math.log2(tileSize / 512); - const hexagonScaleFactor = (2 / 3) * (viewport.zoom - zoomOffset); - const latitudeScaleFactor = Math.log(1 / Math.cos((Math.PI * viewport.latitude) / 180)); - - // Clip and bias - return Math.max(0, Math.floor(hexagonScaleFactor + latitudeScaleFactor - BIAS)); -} - -const maxH3SpatialFiltersResolutions = [ - [20, 14], - [19, 13], - [18, 12], - [17, 11], - [16, 10], - [15, 9], - [14, 8], - [13, 7], - [12, 7], - [11, 7], - [10, 6], - [9, 6], - [8, 5], - [7, 4], - [6, 4], - [5, 3], - [4, 2], - [3, 1], - [2, 1], - [1, 0] -]; - -const quadBinZoomMaxOffset = 4; - -const DEFAULT_TILE_SIZE = 512; -const DEFAULT_AGGREGATION_RES_LEVEL_H3 = 4; -const DEFAULT_AGGREGATION_RES_LEVEL_QUADBIN = 6; - -export function getSpatialFiltersResolution({ source, spatialDataType, viewState }) { - if (spatialDataType === 'geo') return undefined; - - const currentZoom = viewState.zoom ?? 1; - - const dataResolution = source.dataResolution ?? Number.MAX_VALUE; - - const aggregationResLevel = - source.aggregationResLevel ?? - (spatialDataType === 'h3' - ? DEFAULT_AGGREGATION_RES_LEVEL_H3 - : DEFAULT_AGGREGATION_RES_LEVEL_QUADBIN); - - const aggregationResLevelOffset = Math.max(0, Math.floor(aggregationResLevel)); - - const currentZoomInt = Math.ceil(currentZoom); - if (spatialDataType === 'h3') { - const tileSize = DEFAULT_TILE_SIZE; - const maxResolutionForZoom = - maxH3SpatialFiltersResolutions.find(([zoom]) => zoom === currentZoomInt)?.[1] ?? - Math.max(0, currentZoomInt - 3); - - const maxSpatialFiltersResolution = maxResolutionForZoom - ? Math.min(dataResolution, maxResolutionForZoom) - : dataResolution; - - const hexagonResolution = - getHexagonResolution( - { zoom: currentZoom, latitude: viewState.latitude }, - tileSize - ) + aggregationResLevelOffset; - - return Math.min(hexagonResolution, maxSpatialFiltersResolution); - } - - if (spatialDataType === 'quadbin') { - const maxResolutionForZoom = currentZoomInt + quadBinZoomMaxOffset; - const maxSpatialFiltersResolution = Math.min(dataResolution, maxResolutionForZoom); - - const quadsResolution = Math.floor(viewState.zoom) + aggregationResLevelOffset; - return Math.min(quadsResolution, maxSpatialFiltersResolution); - } - - return undefined; -} diff --git a/packages/react-widgets/src/models/utils.d.ts b/packages/react-widgets/src/models/utils.d.ts index ca3be1459..e0b6ad692 100644 --- a/packages/react-widgets/src/models/utils.d.ts +++ b/packages/react-widgets/src/models/utils.d.ts @@ -13,9 +13,3 @@ export function sourceAndFiltersToSQL(props: { }): string; export function getSqlEscapedSource(table: string, provider: Provider): string; - -export function getSpatialFiltersResolution(props: { - source: SourceProps; - spatialDataType: string; - viewState: ViewState; -}): number; diff --git a/packages/react-widgets/src/models/utils.js b/packages/react-widgets/src/models/utils.js index a0b12b421..e7d05d38a 100644 --- a/packages/react-widgets/src/models/utils.js +++ b/packages/react-widgets/src/models/utils.js @@ -1,13 +1,7 @@ -import { - AggregationTypes, - _filtersToSQL, - Provider -} from '@carto/react-core'; +import { AggregationTypes, _filtersToSQL, Provider } from '@carto/react-core'; import { FullyQualifiedName } from './fqn'; import { MAP_TYPES, API_VERSIONS } from '@carto/react-api'; -export { getSpatialFiltersResolution } from './spatialFiltersResolution'; - export function isRemoteCalculationSupported(props) { const { source } = props;