diff --git a/src/data/feature_index.js b/src/data/feature_index.js index c16eaf186d7..a47ce11d44d 100644 --- a/src/data/feature_index.js +++ b/src/data/feature_index.js @@ -11,7 +11,7 @@ import vt from '@mapbox/vector-tile'; import Protobuf from 'pbf'; import GeoJSONFeature from '../util/vectortile_to_geojson'; import { arraysIntersect } from '../util/util'; -import deriveIntegerId from '../util/derive_integer_id'; +import { setIntegerId } from '../util/integer_id'; import { OverscaledTileID } from '../source/tile_id'; import { register } from '../util/web_worker_transfer'; import EvaluationParameters from '../style/evaluation_parameters'; @@ -202,7 +202,7 @@ class FeatureIndex { } if (this.deriveIntegerId) { - deriveIntegerId(feature, this.deriveIntegerId); + setIntegerId(feature, this.deriveIntegerId); } const geojsonFeature = new GeoJSONFeature(feature, this.z, this.x, this.y); diff --git a/src/source/worker_tile.js b/src/source/worker_tile.js index c10e7b43d2b..a3e11b4da4a 100644 --- a/src/source/worker_tile.js +++ b/src/source/worker_tile.js @@ -10,7 +10,7 @@ import LineBucket from '../data/bucket/line_bucket'; import FillBucket from '../data/bucket/fill_bucket'; import FillExtrusionBucket from '../data/bucket/fill_extrusion_bucket'; import { warnOnce, mapObject, values } from '../util/util'; -import deriveIntegerId from '../util/derive_integer_id'; +import { setIntegerId } from '../util/integer_id'; import assert from 'assert'; import ImageAtlas from '../render/image_atlas'; import GlyphAtlas from '../render/glyph_atlas'; @@ -99,7 +99,7 @@ class WorkerTile { for (let index = 0; index < sourceLayer.length; index++) { const feature = sourceLayer.feature(index); if (this.deriveIntegerId) { - deriveIntegerId(feature, this.deriveIntegerId); + setIntegerId(feature, this.deriveIntegerId); } features.push({ feature, index, sourceLayerIndex }); } diff --git a/src/util/derive_integer_id.js b/src/util/derive_integer_id.js deleted file mode 100644 index 594bf697f55..00000000000 --- a/src/util/derive_integer_id.js +++ /dev/null @@ -1,14 +0,0 @@ -// @flow - -import murmur3 from 'murmurhash-js'; - -export default function deriveIntegerId(feature: VectorTileFeature, key: string) { - const value = feature.properties[key]; - if (value === undefined) return; - - if (typeof value === 'number' && value % 1 === 0) { - feature.id = value; - } else { - feature.id = murmur3(String(value)); - } -} diff --git a/src/util/integer_id.js b/src/util/integer_id.js new file mode 100644 index 00000000000..451e058a279 --- /dev/null +++ b/src/util/integer_id.js @@ -0,0 +1,18 @@ +// @flow + +import murmur3 from 'murmurhash-js'; + +export function setIntegerId(feature: VectorTileFeature, key: string) { + const value = feature.properties[key]; + if (value !== undefined) { + feature.id = getIntegerId(value); + } +} + +export function getIntegerId(value: mixed) { + const numValue = +value; + if (!isNaN(numValue) && numValue % 1 === 0) { + return numValue; + } + return murmur3(String(value)); +}