lucene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (LUCENE-8126) Spatial prefix tree based on S2 geometry
Date Wed, 10 Jan 2018 19:23:01 GMT

    [ https://issues.apache.org/jira/browse/LUCENE-8126?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16320914#comment-16320914
] 

ASF GitHub Bot commented on LUCENE-8126:
----------------------------------------

Github user dsmiley commented on a diff in the pull request:

    https://github.com/apache/lucene-solr/pull/302#discussion_r160773175
  
    --- Diff: lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTree.java
---
    @@ -0,0 +1,111 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one or more
    + * contributor license agreements.  See the NOTICE file distributed with
    + * this work for additional information regarding copyright ownership.
    + * The ASF licenses this file to You under the Apache License, Version 2.0
    + * (the "License"); you may not use this file except in compliance with
    + * the License.  You may obtain a copy of the License at
    + *
    + *     http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +package org.apache.lucene.spatial.prefix.tree;
    +
    +import java.util.ArrayList;
    +import java.util.List;
    +
    +import com.google.common.geometry.S2CellId;
    +import com.google.common.geometry.S2LatLng;
    +import com.google.common.geometry.S2Projections;
    +import org.apache.lucene.util.BytesRef;
    +import org.locationtech.spatial4j.context.SpatialContext;
    +import org.locationtech.spatial4j.distance.DistanceUtils;
    +import org.locationtech.spatial4j.shape.Point;
    +import org.locationtech.spatial4j.shape.Shape;
    +
    +/**
    + * Spatial prefix tree for S2 Geometry. Shape factories for the given {@link SpatialContext}
must
    + * implement the interface {@link S2ShapeFactory}.
    + *
    + * @lucene.experimental
    + */
    +public class S2PrefixTree extends SpatialPrefixTree {
    +
    +    /**
    +     * Factory for creating {@link S2PrefixTree} instances with useful defaults
    +     */
    +    public static class Factory extends SpatialPrefixTreeFactory {
    +
    +        @Override
    +        protected int getLevelForDistance(double degrees) {
    +            S2PrefixTree grid = new S2PrefixTree(ctx, S2PrefixTree.MAX_LEVELS);
    +            return grid.getLevelForDistance(degrees);
    +        }
    +
    +        @Override
    +        protected SpatialPrefixTree newSPT() {
    +            return new S2PrefixTree(ctx,
    +                maxLevels != null ? maxLevels : S2PrefixTree.MAX_LEVELS);
    +        }
    +    }
    +
    +    //factory to generate S2 cell shapes
    +    protected final S2ShapeFactory s2ShapeFactory;
    +    public static final int MAX_LEVELS = S2CellId.MAX_LEVEL + 1;
    +
    +    public S2PrefixTree(SpatialContext ctx, int maxLevels) {
    +        super(ctx, maxLevels);
    +        if (!(ctx.getShapeFactory() instanceof S2ShapeFactory)) {
    +            throw new IllegalArgumentException("Spatial context does not support S2 spatial
index.");
    +        }
    +        this.s2ShapeFactory = (S2ShapeFactory) ctx.getShapeFactory();
    +    }
    +
    +    @Override
    +    public int getLevelForDistance(double dist) {
    +        if (dist ==0){
    +            return maxLevels;
    +        }
    +        return Math.min(maxLevels, S2Projections.MAX_WIDTH.getClosestLevel(dist * DistanceUtils.DEGREES_TO_RADIANS)
+1);
    +    }
    +
    +    @Override
    +    public double getDistanceForLevel(int level) {
    +        return S2Projections.MAX_WIDTH.getValue(level -1) * DistanceUtils.RADIANS_TO_DEGREES;
    --- End diff --
    
    nitpick: put space after that minus operator


> Spatial prefix tree based on S2 geometry
> ----------------------------------------
>
>                 Key: LUCENE-8126
>                 URL: https://issues.apache.org/jira/browse/LUCENE-8126
>             Project: Lucene - Core
>          Issue Type: New Feature
>          Components: modules/spatial-extras
>            Reporter: Ignacio Vera
>
> Hi [~dsmiley],
> I have been working on a prefix tree based on goggle S2 geometry (https://s2geometry.io/)
to be used mainly with Geo3d shapes with very promising results, in particular for complex
shapes (e.g polygons). Using this pixelization scheme reduces the size of the index, improves
the performance of the queries and reduces the loading time for non-point shapes. 
> If you are ok with this contribution and before providing any code I would like to understand
what is the correct/prefered approach:
> 1) Add new depency to the S2 library (https://mvnrepository.com/artifact/io.sgr/s2-geometry-library-java).
It has Apache 2.0 license so it should be ok.
> 2) Create a utility class with all methods necessary to navigate the S2 tree and create
shapes from S2 cells (basically port what we need from the library into Lucene).
> What do you think?



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org


Mime
View raw message