///<inheritdoc/>
        public (string, IndexEntry <T>) Insert(Geometry geom, T value)
        {
            var key   = _geohasher.Encode(geom, _precision);
            var entry = new IndexEntry <T>
            {
                Geom  = geom,
                Value = value
            };

            _trieMap.Add(key, entry);
            return(key, entry);
        }
        ///<inheritdoc/>
        public (string, IndexEntry <T>) Insert(Geometry geom, T value)
        {
            if (_reverseIndex.ContainsKey(value))
            {
                throw new InvalidOperationException($"This value already exists in the index. Use {nameof(InsertOrUpdate)} instead");
            }

            var key   = _geohasher.Encode(geom, _precision);
            var entry = new IndexEntry <T>
            {
                Geom  = geom,
                Value = value
            };

            _trieMap.Add(key, entry);
            _reverseIndex[value] = entry;
            return(key, entry);
        }