From 9101a214c2b38c1a7bb154c3b48f4a1b3ce63ea4 Mon Sep 17 00:00:00 2001 From: Mat Booth Date: Thu, 14 Feb 2019 18:25:01 +0000 Subject: [PATCH 3/3] Remove dep on missing google geometry library --- lucene/CHANGES.txt | 5 - .../s2-geometry-library-java-1.0.0.jar.sha1 | 1 - .../s2-geometry-library-java-LICENSE-ASL.txt | 202 ------------ .../s2-geometry-library-java-NOTICE.txt | 0 lucene/spatial-extras/ivy.xml | 2 - .../spatial/prefix/tree/S2PrefixTree.java | 157 --------- .../spatial/prefix/tree/S2PrefixTreeCell.java | 297 ------------------ .../spatial/prefix/tree/S2ShapeFactory.java | 40 --- .../prefix/tree/SpatialPrefixTreeFactory.java | 2 - .../spatial/spatial4j/Geo3dShapeFactory.java | 24 +- .../spatial/prefix/tree/S2PrefixTreeTest.java | 113 ------- .../spatial/spatial4j/Geo3dRptTest.java | 23 +- .../lucene/spatial3d/geom/GeoS2Shape.java | 202 ------------ .../spatial3d/geom/GeoS2ShapeFactory.java | 50 --- .../spatial3d/geom/StandardObjects.java | 1 - 15 files changed, 7 insertions(+), 1112 deletions(-) delete mode 100644 lucene/licenses/s2-geometry-library-java-1.0.0.jar.sha1 delete mode 100644 lucene/licenses/s2-geometry-library-java-LICENSE-ASL.txt delete mode 100644 lucene/licenses/s2-geometry-library-java-NOTICE.txt delete mode 100644 lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTree.java delete mode 100644 lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeCell.java delete mode 100644 lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2ShapeFactory.java delete mode 100644 lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeTest.java delete mode 100644 lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2Shape.java delete mode 100644 lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2ShapeFactory.java diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt index 67aba94..eeee301 100644 --- a/lucene/CHANGES.txt +++ b/lucene/CHANGES.txt @@ -690,11 +690,6 @@ New Features (Lance Norskog, Grant Ingersoll, Joern Kottmann, Em, Kai Gülzau, Rene Nederhand, Robert Muir, Steven Bower, Steve Rowe) -* LUCENE-8126: Add new spatial prefix tree (SPT) based on google S2 geometry. - It can only be used currently with Geo3D spatial context and it provides - improvements on indexing time for non-points shapes and on query performance. - (Ignacio Vera, David Smiley). - Improvements * LUCENE-8081: Allow IndexWriter to opt out of flushing on indexing threads diff --git a/lucene/licenses/s2-geometry-library-java-1.0.0.jar.sha1 b/lucene/licenses/s2-geometry-library-java-1.0.0.jar.sha1 deleted file mode 100644 index ef4e3ee..0000000 --- a/lucene/licenses/s2-geometry-library-java-1.0.0.jar.sha1 +++ /dev/null @@ -1 +0,0 @@ -f95b25589b40b5b0965deb592445073ff3efa299 diff --git a/lucene/licenses/s2-geometry-library-java-LICENSE-ASL.txt b/lucene/licenses/s2-geometry-library-java-LICENSE-ASL.txt deleted file mode 100644 index 03c7bfc..0000000 --- a/lucene/licenses/s2-geometry-library-java-LICENSE-ASL.txt +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed 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. \ No newline at end of file diff --git a/lucene/licenses/s2-geometry-library-java-NOTICE.txt b/lucene/licenses/s2-geometry-library-java-NOTICE.txt deleted file mode 100644 index e69de29..0000000 diff --git a/lucene/spatial-extras/ivy.xml b/lucene/spatial-extras/ivy.xml index c3d982f..df67503 100644 --- a/lucene/spatial-extras/ivy.xml +++ b/lucene/spatial-extras/ivy.xml @@ -25,8 +25,6 @@ - - diff --git a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTree.java b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTree.java deleted file mode 100644 index f77c578..0000000 --- a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTree.java +++ /dev/null @@ -1,157 +0,0 @@ -/* - * 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}. - * - * The tree can be configured on how it divided itself by providing an arity. The default arity is 1 - * which divided every sub-cell in 4 (except the first level that is always divided by 6) . Arity 2 - * divides sub-cells in 16 and arity 3 in 64 sub-cells. - * - * @lucene.experimental - */ -public class S2PrefixTree extends SpatialPrefixTree { - - - /** - * Factory for creating {@link S2PrefixTree} instances with useful defaults - */ - protected static class Factory extends SpatialPrefixTreeFactory { - - @Override - protected int getLevelForDistance(double degrees) { - S2PrefixTree grid = new S2PrefixTree(ctx, S2PrefixTree.getMaxLevels(1)); - return grid.getLevelForDistance(degrees); - } - - @Override - protected SpatialPrefixTree newSPT() { - return new S2PrefixTree(ctx, - maxLevels != null ? maxLevels : S2PrefixTree.getMaxLevels(1)); - } - - } - - //factory to generate S2 cell shapes - protected final S2ShapeFactory s2ShapeFactory; - protected final int arity; - - /** - * Creates a S2 spatial tree with arity 1. - * - * @param ctx The provided spatial context. The shape factor of the spatial context - * must implement {@link S2ShapeFactory} - * @param maxLevels The provided maximum level for this tree. - */ - public S2PrefixTree(SpatialContext ctx, int maxLevels) { - this(ctx, maxLevels, 1); - } - - /** - * Creates a S2 spatial tree with provided arity. - * - * @param ctx The provided spatial context. The shape factor of the spatial context - * must implement {@link S2ShapeFactory} - * @param maxLevels The provided maximum level for this tree. - * @param arity The arity of the tree. - */ - public S2PrefixTree(SpatialContext ctx, int maxLevels, int arity) { - super(ctx, maxLevels); - if (!(ctx.getShapeFactory() instanceof S2ShapeFactory)) { - throw new IllegalArgumentException("Spatial context does not support S2 spatial index."); - } - this.s2ShapeFactory = (S2ShapeFactory) ctx.getShapeFactory(); - if (arity <1 || arity > 3) { - throw new IllegalArgumentException("Invalid value for S2 tree arity. Possible values are 1, 2 or 3. Provided value is " + arity + "."); - } - this.arity = arity; - } - - /** - * Get max levels for this spatial tree. - * - * @param arity The arity of the tree. - * @return The maximum number of levels by the provided arity. - */ - public static int getMaxLevels(int arity) { - return S2CellId.MAX_LEVEL/arity + 1; - } - - @Override - public int getLevelForDistance(double dist) { - if (dist == 0){ - return maxLevels; - } - int level = S2Projections.MAX_WIDTH.getMinLevel(dist * DistanceUtils.DEGREES_TO_RADIANS); - int roundLevel = level % arity != 0 ? 1 : 0; - level = level/arity + roundLevel; - return Math.min(maxLevels, level + 1); - } - - @Override - public double getDistanceForLevel(int level) { - if (level == 0) { - return 180; - } - return S2Projections.MAX_WIDTH.getValue(arity * (level - 1)) * DistanceUtils.RADIANS_TO_DEGREES; - } - - @Override - public Cell getWorldCell() { - return new S2PrefixTreeCell(this, null); - } - - @Override - public Cell readCell(BytesRef term, Cell scratch) { - S2PrefixTreeCell cell = (S2PrefixTreeCell) scratch; - if (cell == null) { - cell = (S2PrefixTreeCell) getWorldCell(); - } - cell.readCell(this, term); - return cell; - } - - @Override - public CellIterator getTreeCellIterator(Shape shape, int detailLevel) { - if (!(shape instanceof Point)) { - return super.getTreeCellIterator(shape, detailLevel); - } - Point p = (Point) shape; - S2CellId id = S2CellId.fromLatLng(S2LatLng.fromDegrees(p.getY(), p.getX())).parent(arity * (detailLevel - 1)); - List cells = new ArrayList<>(detailLevel); - for (int i=0; i < detailLevel - 1; i++) { - cells.add(new S2PrefixTreeCell(this, id.parent(i * arity))); - } - cells.add(new S2PrefixTreeCell(this, id)); - return new FilterCellIterator(cells.iterator(), null); - } -} \ No newline at end of file diff --git a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeCell.java b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeCell.java deleted file mode 100644 index e9b5818..0000000 --- a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeCell.java +++ /dev/null @@ -1,297 +0,0 @@ -/* - * 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.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; - -import com.google.common.geometry.S2CellId; -import org.apache.lucene.util.BytesRef; -import org.locationtech.spatial4j.shape.Shape; -import org.locationtech.spatial4j.shape.SpatialRelation; - -/** - * This class represents a S2 pixel in the RPT. - * - * @lucene.internal - */ -class S2PrefixTreeCell implements CellCanPrune { - - //Faces of S2 Geometry - private static S2CellId[] FACES = new S2CellId[6]; - - static { - FACES[0] = S2CellId.fromFacePosLevel(0, 0, 0); - FACES[1] = S2CellId.fromFacePosLevel(1, 0, 0); - FACES[2] = S2CellId.fromFacePosLevel(2, 0, 0); - FACES[3] = S2CellId.fromFacePosLevel(3, 0, 0); - FACES[4] = S2CellId.fromFacePosLevel(4, 0, 0); - FACES[5] = S2CellId.fromFacePosLevel(5, 0, 0); - } - - /*Special character to define a cell leaf*/ - private static final byte LEAF = '+'; - /*Tokens are used to serialize cells*/ - private static final byte[] TOKENS = {'.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', - 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', - 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'}; - /*Map containing mapping between tokens and integer values*/ - private static final Map PIXELS; - - static { - PIXELS = new HashMap<>(TOKENS.length); - for (int i = 0; i < TOKENS.length; i++) { - PIXELS.put(TOKENS[i], i); - } - } - - S2CellId cellId; - int level; //cache level - S2PrefixTree tree; - - SpatialRelation shapeRel = null; - boolean isLeaf; - Shape shape = null; - - S2PrefixTreeCell(S2PrefixTree tree, S2CellId cellId) { - this.cellId = cellId; - this.tree = tree; - setLevel(); - if (getLevel() == tree.getMaxLevels()) { - setLeaf(); - } - } - - void readCell(S2PrefixTree tree, BytesRef ref) { - isLeaf = false; - shape = null; - shapeRel = null; - this.tree = tree; - cellId = getS2CellIdFromBytesRef(ref); - setLevel(); - if (isLeaf(ref) || getLevel() == tree.getMaxLevels()) { - setLeaf(); - } - } - - @Override - public SpatialRelation getShapeRel() { - return shapeRel; - } - - @Override - public void setShapeRel(SpatialRelation rel) { - shapeRel = rel; - } - - @Override - public boolean isLeaf() { - return isLeaf; - } - - @Override - public void setLeaf() { - isLeaf = true; - } - - @Override - public BytesRef getTokenBytesWithLeaf(BytesRef result) { - result = getTokenBytesNoLeaf(result); - //max levels do not have leaf - if (isLeaf() && !(getLevel() == tree.getMaxLevels())) { - //Add leaf byte - result.bytes[result.offset + result.length] = LEAF; - result.length++; - } - return result; - } - - @Override - public BytesRef getTokenBytesNoLeaf(BytesRef result) { - if (result == null) { - result = new BytesRef(); - } - getBytesRefFromS2CellId(cellId, result); - return result; - } - - @Override - public int getLevel() { - return this.level; - } - - /** - * Cache level of cell. - */ - private void setLevel() { - if (this.cellId == null) { - this.level = 0; - } else { - assert cellId.level() % tree.arity == 0; - this.level = (this.cellId.level() / tree.arity) + 1; - } - } - - @Override - public CellIterator getNextLevelCells(Shape shapeFilter) { - S2CellId[] children; - if (cellId == null) { // this is the world cell - children = FACES; - } else { - int nChildren = (int) Math.pow(4, tree.arity); - children = new S2CellId[nChildren]; - children[0] = cellId.childBegin(cellId.level() + tree.arity); - for (int i = 1; i < nChildren; i++) { - children[i] = children[i - 1].next(); - } - } - List cells = new ArrayList<>(children.length); - for (S2CellId pixel : children) { - cells.add(new S2PrefixTreeCell(tree, pixel)); - } - return new FilterCellIterator(cells.iterator(), shapeFilter); - } - - @Override - public Shape getShape() { - if (shape == null) { - if (cellId == null) { //World cell - shape = tree.getSpatialContext().getWorldBounds(); - } else { - shape = tree.s2ShapeFactory.getS2CellShape(cellId); - } - } - return shape; - } - - @Override - public boolean isPrefixOf(Cell c) { - if (cellId == null) { - return true; - } - S2PrefixTreeCell cell = (S2PrefixTreeCell) c; - return cellId.contains(cell.cellId); - } - - @Override - public int compareToNoLeaf(Cell fromCell) { - if (cellId == null) { - return 1; - } - S2PrefixTreeCell cell = (S2PrefixTreeCell) fromCell; - return cellId.compareTo(cell.cellId); - } - - /** - * Check if a cell is a leaf. - * - * @param ref The Byteref of the leaf - * @return true if it is a leaf, e.g last byte is the special Character. - */ - private boolean isLeaf(BytesRef ref) { - return (ref.bytes[ref.offset + ref.length - 1] == LEAF); - } - - /** - * Get the {@link S2CellId} from the {@link BytesRef} representation. - * - * @param ref The bytes. - * @return the corresponding S2 cell. - */ - private S2CellId getS2CellIdFromBytesRef(BytesRef ref) { - int length = ref.length; - if (isLeaf(ref)) { - length--; - } - if (length == 0) { - return null; //world cell - } - int face = PIXELS.get(ref.bytes[ref.offset]); - S2CellId cellId = FACES[face]; - long id = cellId.id(); - for (int i = ref.offset + 1; i < ref.offset + length; i++) { - int thisLevel = i - ref.offset; - int pos = PIXELS.get(ref.bytes[i]); - // first child at level - id = id - (id & -id) + (1L << (2 * (S2CellId.MAX_LEVEL - thisLevel * tree.arity))); - // next until pos - id = id + pos * ((id & -id) << 1); - } - return new S2CellId(id); - } - - /** - * Codify a {@link S2CellId} into its {@link BytesRef} representation. - * - * @param cellId The S2 Cell id to codify. - * @param bref The byteref representation. - */ - private void getBytesRefFromS2CellId(S2CellId cellId, BytesRef bref) { - if (cellId == null) {//world cell - bref.length = 0; - return; - } - int length = getLevel() + 1; - byte[] b = bref.bytes.length >= length ? bref.bytes : new byte[length]; - b[0] = TOKENS[cellId.face()]; - for (int i = 1; i < getLevel(); i++) { - int offset = 0; - int level = tree.arity * i; - for (int j = 1; j < tree.arity; j++) { - offset = 4 * offset + cellId.childPosition(level - tree.arity + j); - } - b[i] = TOKENS[4 * offset + cellId.childPosition(level)]; - } - bref.bytes = b; - bref.length = getLevel(); - bref.offset = 0; - } - - @Override - public int getSubCellsSize() { - if (cellId == null) { //root node - return 6; - } - return (int) Math.pow(4, tree.arity); - } - - @Override - public int hashCode() { - if (cellId == null) { - return super.hashCode(); - } - return this.cellId.hashCode(); - } - - @Override - public boolean equals(Object o) { - S2PrefixTreeCell cell = (S2PrefixTreeCell) o; - return Objects.equals(cellId, cell.cellId); - } - - @Override - public String toString() { - if (cellId == null) { - return "0"; - } - return cellId.toString(); - } -} \ No newline at end of file diff --git a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2ShapeFactory.java b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2ShapeFactory.java deleted file mode 100644 index 1306f60..0000000 --- a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/S2ShapeFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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 com.google.common.geometry.S2CellId; -import org.locationtech.spatial4j.shape.Shape; -import org.locationtech.spatial4j.shape.ShapeFactory; - -/** - * Shape factory for Spatial contexts that support S2 geometry. It is an extension of - * Spatial4j {@link ShapeFactory}. - * - * @lucene.experimental - */ -public interface S2ShapeFactory extends ShapeFactory{ - - /** - * Factory method for S2 cell shapes. - * - * @param cellId The S2 cell id - * @return the shape representing the cell. - */ - Shape getS2CellShape(S2CellId cellId); -} diff --git a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/SpatialPrefixTreeFactory.java b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/SpatialPrefixTreeFactory.java index d88e41a..6e537dd 100644 --- a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/SpatialPrefixTreeFactory.java +++ b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/prefix/tree/SpatialPrefixTreeFactory.java @@ -54,8 +54,6 @@ public abstract class SpatialPrefixTreeFactory { instance = new QuadPrefixTree.Factory(); else if ("packedQuad".equalsIgnoreCase(cname)) instance = new PackedQuadPrefixTree.Factory(); - else if ("s2".equalsIgnoreCase(cname)) - instance = new S2PrefixTree.Factory(); else { try { Class c = classLoader.loadClass(cname); diff --git a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/spatial4j/Geo3dShapeFactory.java b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/spatial4j/Geo3dShapeFactory.java index 071c775..5c03f20 100644 --- a/lucene/spatial-extras/src/java/org/apache/lucene/spatial/spatial4j/Geo3dShapeFactory.java +++ b/lucene/spatial-extras/src/java/org/apache/lucene/spatial/spatial4j/Geo3dShapeFactory.java @@ -20,10 +20,6 @@ package org.apache.lucene.spatial.spatial4j; import java.util.ArrayList; import java.util.List; -import com.google.common.geometry.S2Cell; -import com.google.common.geometry.S2CellId; -import com.google.common.geometry.S2Point; -import org.apache.lucene.spatial.prefix.tree.S2ShapeFactory; import org.apache.lucene.spatial3d.geom.GeoBBox; import org.apache.lucene.spatial3d.geom.GeoBBoxFactory; import org.apache.lucene.spatial3d.geom.GeoCircle; @@ -36,7 +32,6 @@ import org.apache.lucene.spatial3d.geom.GeoPointShape; import org.apache.lucene.spatial3d.geom.GeoPointShapeFactory; import org.apache.lucene.spatial3d.geom.GeoPolygon; import org.apache.lucene.spatial3d.geom.GeoPolygonFactory; -import org.apache.lucene.spatial3d.geom.GeoS2ShapeFactory; import org.apache.lucene.spatial3d.geom.PlanetModel; import org.locationtech.spatial4j.context.SpatialContext; import org.locationtech.spatial4j.context.SpatialContextFactory; @@ -47,13 +42,14 @@ import org.locationtech.spatial4j.shape.Point; import org.locationtech.spatial4j.shape.Rectangle; import org.locationtech.spatial4j.shape.Shape; import org.locationtech.spatial4j.shape.ShapeCollection; +import org.locationtech.spatial4j.shape.ShapeFactory; /** - * Geo3d implementation of {@link S2ShapeFactory} + * Geo3d implementation of {@link ShapeFactory} * * @lucene.experimental */ -public class Geo3dShapeFactory implements S2ShapeFactory { +public class Geo3dShapeFactory implements ShapeFactory { private final boolean normWrapLongitude; private SpatialContext context; @@ -241,20 +237,6 @@ public class Geo3dShapeFactory implements S2ShapeFactory { return new Geo3dMultiPolygonBuilder(); } - @Override - public Shape getS2CellShape(S2CellId cellId) { - S2Cell cell = new S2Cell(cellId); - GeoPoint point1 = getGeoPoint(cell.getVertexRaw(0)); - GeoPoint point2 = getGeoPoint(cell.getVertexRaw(1)); - GeoPoint point3 = getGeoPoint(cell.getVertexRaw(2)); - GeoPoint point4 = getGeoPoint(cell.getVertexRaw(3)); - return new Geo3dShape<>(GeoS2ShapeFactory.makeGeoS2Shape(planetModel, point1, point2, point3, point4), context); - } - - private GeoPoint getGeoPoint(S2Point point) { - return planetModel.createSurfacePoint(point.get(0), point.get(1), point.get(2)); - } - /** * Geo3d implementation of {@link org.locationtech.spatial4j.shape.ShapeFactory.PointsBuilder} interface to * generate {@link GeoPoint}. diff --git a/lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeTest.java b/lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeTest.java deleted file mode 100644 index f3bfe3e..0000000 --- a/lucene/spatial-extras/src/test/org/apache/lucene/spatial/prefix/tree/S2PrefixTreeTest.java +++ /dev/null @@ -1,113 +0,0 @@ -/* - * 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 com.carrotsearch.randomizedtesting.annotations.Repeat; -import com.google.common.geometry.S2CellId; -import com.google.common.geometry.S2Projections; -import org.apache.lucene.spatial.spatial4j.Geo3dSpatialContextFactory; -import org.apache.lucene.util.BytesRef; -import org.apache.lucene.util.LuceneTestCase; -import org.junit.Test; -import org.locationtech.spatial4j.context.SpatialContext; -import org.locationtech.spatial4j.shape.Point; - -/** - * Test for S2 Spatial prefix tree. - */ -public class S2PrefixTreeTest extends LuceneTestCase{ - - @Test - @Repeat(iterations = 10) - public void testCells() { - int face = random().nextInt(6); - S2CellId id = S2CellId.fromFacePosLevel(face, 0, 0); - int arity = random().nextInt(3) + 1; - int level = random().nextInt(S2PrefixTree.getMaxLevels(arity)); - level = level * arity; - for (int i = 0; i < level; i++) { - int pos = random().nextInt(4); - id = id.childBegin(); - if (pos == 0) continue; - id = id.next(); - if (pos == 1) continue; - id = id.next(); - if (pos == 2) continue; - id = id.next(); - } - S2PrefixTree tree = new S2PrefixTree(new Geo3dSpatialContextFactory().newSpatialContext(), S2PrefixTree.getMaxLevels(arity), arity); - S2PrefixTreeCell cell = new S2PrefixTreeCell(tree, id); - BytesRef ref = cell.getTokenBytesWithLeaf(null); - if (random().nextBoolean()) { - int newOffset = random().nextInt(10) + 1; - byte[] newBytes = new byte[ref.bytes.length + newOffset]; - for (int i = 0; i < ref.bytes.length; i++) { - newBytes[i + newOffset] = ref.bytes[i]; - } - ref.bytes = newBytes; - ref.offset = ref.offset + newOffset; - } - S2PrefixTreeCell cell2 = new S2PrefixTreeCell(tree, null); - cell2.readCell(tree, ref); - assertEquals(cell, cell2); - } - - @Test - @Repeat(iterations = 10) - public void testDistanceAndLevels() { - S2PrefixTree tree = new S2PrefixTree(new Geo3dSpatialContextFactory().newSpatialContext(), S2PrefixTree.getMaxLevels(1), 1); - - double randomDist = random().nextDouble() * 5; - int levelDistance = tree.getLevelForDistance(randomDist); - double distanceLevel = tree.getDistanceForLevel(levelDistance); - assertTrue(randomDist > distanceLevel); - - - tree = new S2PrefixTree(new Geo3dSpatialContextFactory().newSpatialContext(), S2PrefixTree.getMaxLevels(2), 2); - - levelDistance = tree.getLevelForDistance(randomDist); - distanceLevel = tree.getDistanceForLevel(levelDistance); - assertTrue(randomDist > distanceLevel); - - tree = new S2PrefixTree(new Geo3dSpatialContextFactory().newSpatialContext(), S2PrefixTree.getMaxLevels(3), 3); - - levelDistance = tree.getLevelForDistance(randomDist); - distanceLevel = tree.getDistanceForLevel(levelDistance); - assertTrue(randomDist > distanceLevel); - - } - - @Test - @Repeat(iterations = 10) - public void testPrecision() { - int arity = random().nextInt(3) +1; - SpatialContext context = new Geo3dSpatialContextFactory().newSpatialContext(); - S2PrefixTree tree = new S2PrefixTree(context, S2PrefixTree.getMaxLevels(arity), arity); - double precision = random().nextDouble(); - int level = tree.getLevelForDistance(precision); - Point point = context.getShapeFactory().pointXY(0, 0); - CellIterator iterator = tree.getTreeCellIterator(point, level); - S2PrefixTreeCell cell = null; - while (iterator.hasNext()) { - cell = (S2PrefixTreeCell)iterator.next(); - } - assertTrue(cell.getLevel() == level); - double precisionCell = S2Projections.MAX_WIDTH.getValue(cell.cellId.level()); - assertTrue(precision > precisionCell); - } -} \ No newline at end of file diff --git a/lucene/spatial-extras/src/test/org/apache/lucene/spatial/spatial4j/Geo3dRptTest.java b/lucene/spatial-extras/src/test/org/apache/lucene/spatial/spatial4j/Geo3dRptTest.java index 327b65c..cc4cd31 100644 --- a/lucene/spatial-extras/src/test/org/apache/lucene/spatial/spatial4j/Geo3dRptTest.java +++ b/lucene/spatial-extras/src/test/org/apache/lucene/spatial/spatial4j/Geo3dRptTest.java @@ -27,8 +27,6 @@ import org.apache.lucene.spatial.composite.CompositeSpatialStrategy; import org.apache.lucene.spatial.prefix.RandomSpatialOpStrategyTestCase; import org.apache.lucene.spatial.prefix.RecursivePrefixTreeStrategy; import org.apache.lucene.spatial.prefix.tree.GeohashPrefixTree; -import org.apache.lucene.spatial.prefix.tree.QuadPrefixTree; -import org.apache.lucene.spatial.prefix.tree.S2PrefixTree; import org.apache.lucene.spatial.prefix.tree.SpatialPrefixTree; import org.apache.lucene.spatial.query.SpatialOperation; import org.apache.lucene.spatial.serialized.SerializedDVStrategy; @@ -36,7 +34,6 @@ import org.apache.lucene.spatial3d.geom.GeoAreaShape; import org.apache.lucene.spatial3d.geom.GeoPath; import org.apache.lucene.spatial3d.geom.GeoPathFactory; import org.apache.lucene.spatial3d.geom.GeoPoint; -import org.apache.lucene.spatial3d.geom.GeoPointShape; import org.apache.lucene.spatial3d.geom.GeoPolygonFactory; import org.apache.lucene.spatial3d.geom.PlanetModel; import org.apache.lucene.spatial3d.geom.RandomGeo3dShapeGenerator; @@ -53,18 +50,9 @@ public class Geo3dRptTest extends RandomSpatialOpStrategyTestCase { private SpatialPrefixTree grid; private RecursivePrefixTreeStrategy rptStrategy; - private void setupGrid() { - int type = random().nextInt(4); - if (type == 0) { - this.grid = new GeohashPrefixTree(ctx, 2); - } else if (type == 1) { - this.grid = new QuadPrefixTree(ctx, 5); - } else { - int arity = random().nextInt(3) + 1; - this.grid = new S2PrefixTree(ctx, 5 - arity, arity); - } + private void setupGeohashGrid() { + this.grid = new GeohashPrefixTree(ctx, 2);//A fairly shallow grid this.rptStrategy = newRPT(); - this.rptStrategy.setPruneLeafyBranches(random().nextBoolean()); } protected RecursivePrefixTreeStrategy newRPT() { @@ -81,7 +69,7 @@ public class Geo3dRptTest extends RandomSpatialOpStrategyTestCase { factory.planetModel = planetModel; ctx = factory.newSpatialContext(); - setupGrid(); + setupGeohashGrid(); SerializedDVStrategy serializedDVStrategy = new SerializedDVStrategy(ctx, getClass().getSimpleName() + "_sdv"); this.strategy = new CompositeSpatialStrategy("composite_" + getClass().getSimpleName(), @@ -123,7 +111,7 @@ public class Geo3dRptTest extends RandomSpatialOpStrategyTestCase { } @Test - @Repeat(iterations = 30) + @Repeat(iterations = 10) public void testOperations() throws IOException { setupStrategy(); @@ -134,9 +122,6 @@ public class Geo3dRptTest extends RandomSpatialOpStrategyTestCase { protected Shape randomIndexedShape() { int type = shapeGenerator.randomShapeType(); GeoAreaShape areaShape = shapeGenerator.randomGeoAreaShape(type, planetModel); - if (areaShape instanceof GeoPointShape) { - return new Geo3dPointShape((GeoPointShape) areaShape, ctx); - } return new Geo3dShape<>(areaShape, ctx); } diff --git a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2Shape.java b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2Shape.java deleted file mode 100644 index b4c5d06..0000000 --- a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2Shape.java +++ /dev/null @@ -1,202 +0,0 @@ -/* - * 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.spatial3d.geom; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -/** - * Fast implementation of a polygon representing S2 geometry cell. There are no checks validating that - * points are convex therefore users must be provide four points in CCW or the logic will fail. - * - * @lucene.internal - */ -class GeoS2Shape extends GeoBasePolygon { - - /** The first point */ - protected final GeoPoint point1; - /** The second point */ - protected final GeoPoint point2; - /** The third point */ - protected final GeoPoint point3; - /** The fourth point */ - protected final GeoPoint point4; - - /** The first plane */ - protected final SidedPlane plane1; - /** The second plane */ - protected final SidedPlane plane2; - /** The third plane */ - protected final SidedPlane plane3; - /** The fourth plane */ - protected final SidedPlane plane4; - - /** Notable points for the first plane */ - protected final GeoPoint[] plane1Points; - /** Notable points for second plane */ - protected final GeoPoint[] plane2Points; - /** Notable points for third plane */ - protected final GeoPoint[] plane3Points; - /** Notable points for fourth plane */ - protected final GeoPoint[] plane4Points; - - /** Edge point for this S2 cell */ - protected final GeoPoint[] edgePoints; - - /** - * It builds from 4 points given in CCW. It must be convex or logic will fail. - * - *@param planetModel is the planet model. - *@param point1 the first point. - *@param point2 the second point. - *@param point3 the third point. - *@param point4 the four point. - */ - public GeoS2Shape(final PlanetModel planetModel, GeoPoint point1, GeoPoint point2, GeoPoint point3, GeoPoint point4) { - super(planetModel); - this.point1 = point1; - this.point2 = point2; - this.point3 = point3; - this.point4 = point4; - - // Now build the four planes - this.plane1 = new SidedPlane(point4, point1, point2); - this.plane2 = new SidedPlane(point1, point2, point3); - this.plane3 = new SidedPlane(point2, point3, point4); - this.plane4 = new SidedPlane(point3, point4, point1); - - //collect the notable points for the planes - this.plane1Points = new GeoPoint[]{point1, point2}; - this.plane2Points = new GeoPoint[]{point2, point3}; - this.plane3Points = new GeoPoint[]{point3, point4}; - this.plane4Points = new GeoPoint[]{point4, point1}; - - this.edgePoints = new GeoPoint[]{point1}; - } - - /** - * Constructor for deserialization. - * @param planetModel is the planet model. - * @param inputStream is the input stream. - */ - public GeoS2Shape(final PlanetModel planetModel, final InputStream inputStream) throws IOException { - this(planetModel, - (GeoPoint) SerializableObject.readObject(inputStream), - (GeoPoint) SerializableObject.readObject(inputStream), - (GeoPoint) SerializableObject.readObject(inputStream), - (GeoPoint) SerializableObject.readObject(inputStream)); - } - - @Override - public void write(final OutputStream outputStream) throws IOException { - SerializableObject.writeObject(outputStream, point1); - SerializableObject.writeObject(outputStream, point2); - SerializableObject.writeObject(outputStream, point3); - SerializableObject.writeObject(outputStream, point4); - } - - - @Override - public boolean isWithin(final double x, final double y, final double z) { - return plane1.isWithin(x, y, z) && - plane2.isWithin(x, y, z) && - plane3.isWithin(x, y, z) && - plane4.isWithin(x, y, z); - } - - - @Override - public GeoPoint[] getEdgePoints() { - return edgePoints; - } - - @Override - public boolean intersects(final Plane p, final GeoPoint[] notablePoints, final Membership... bounds) { - return p.intersects(planetModel, plane1, notablePoints, plane1Points, bounds, plane2, plane4) || - p.intersects(planetModel, plane2, notablePoints, plane2Points, bounds, plane3, plane1) || - p.intersects(planetModel, plane3, notablePoints, plane3Points, bounds, plane4, plane2) || - p.intersects(planetModel, plane4, notablePoints, plane4Points, bounds, plane1, plane3); - } - - @Override - public boolean intersects(GeoShape geoShape) { - return geoShape.intersects(plane1, plane1Points, plane2, plane4) || - geoShape.intersects(plane2, plane2Points, plane3, plane1) || - geoShape.intersects(plane3, plane3Points, plane4, plane2) || - geoShape.intersects(plane4, plane4Points, plane1, plane3); - } - - @Override - public void getBounds(Bounds bounds) { - super.getBounds(bounds); - bounds.addPlane(planetModel, plane1, plane2, plane4) - .addPlane(planetModel, plane2, plane3, plane1) - .addPlane(planetModel, plane3, plane4, plane2) - .addPlane(planetModel, plane4, plane1, plane3) - .addPoint(point1).addPoint(point2).addPoint(point3).addPoint(point4); - } - - @Override - public double outsideDistance(DistanceStyle distanceStyle, double x, double y, double z) { - final double planeDistance1 = distanceStyle.computeDistance(planetModel, plane1, x,y,z, plane2, plane4); - final double planeDistance2 = distanceStyle.computeDistance(planetModel, plane2, x,y,z, plane3, plane1); - final double planeDistance3 = distanceStyle.computeDistance(planetModel, plane3, x,y,z, plane4, plane2); - final double planeDistance4 = distanceStyle.computeDistance(planetModel, plane4, x,y,z, plane1, plane3); - - final double pointDistance1 = distanceStyle.computeDistance(point1, x,y,z); - final double pointDistance2 = distanceStyle.computeDistance(point2, x,y,z); - final double pointDistance3 = distanceStyle.computeDistance(point3, x,y,z); - final double pointDistance4 = distanceStyle.computeDistance(point4, x,y,z); - - return Math.min( - Math.min( - Math.min(planeDistance1, planeDistance2), - Math.min(planeDistance3, planeDistance4)), - Math.min( - Math.min(pointDistance1, pointDistance2), - Math.min(pointDistance3, pointDistance4))); - } - - @Override - public boolean equals(Object o) { - if (!(o instanceof GeoS2Shape)) - return false; - GeoS2Shape other = (GeoS2Shape) o; - return super.equals(other) && other.point1.equals(point1) - && other.point2.equals(point2) && other.point3.equals(point3) - && other.point4.equals(point4); - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + point1.hashCode(); - result = 31 * result + point2.hashCode(); - result = 31 * result + point3.hashCode(); - result = 31 * result + point4.hashCode(); - return result; - } - - @Override - public String toString() { - return "GeoS2Shape: {planetmodel="+planetModel+", point1=" + point1 +", point2=" + point2 +", point3=" + point3 +", point4=" + point4+ "}"; - } - -} - diff --git a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2ShapeFactory.java b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2ShapeFactory.java deleted file mode 100644 index 848b2e6..0000000 --- a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/GeoS2ShapeFactory.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 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.spatial3d.geom; - -/** - * Class which constructs a GeoPolygon representing S2 google pixel. - * - * @lucene.experimental - */ -public class GeoS2ShapeFactory { - - private GeoS2ShapeFactory() { - } - - /** - * Creates a convex polygon with 4 planes by providing 4 points in CCW. - * This is a very fast shape and there are no checks that the points currently define - * a convex shape. - * - * @param planetModel The planet model - * @param point1 the first point. - * @param point2 the second point. - * @param point3 the third point. - * @param point4 the four point. - * @return the generated shape. - */ - public static GeoPolygon makeGeoS2Shape(final PlanetModel planetModel, - final GeoPoint point1, - final GeoPoint point2, - final GeoPoint point3, - final GeoPoint point4) { - return new GeoS2Shape(planetModel, point1, point2, point3, point4); - } -} - diff --git a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardObjects.java b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardObjects.java index 4e0acae..bcebf43 100644 --- a/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardObjects.java +++ b/lucene/spatial3d/src/java/org/apache/lucene/spatial3d/geom/StandardObjects.java @@ -75,7 +75,6 @@ class StandardObjects { classRegsitry.put(PlanetModel.class, 35); classRegsitry.put(GeoDegeneratePath.class, 36); classRegsitry.put(GeoExactCircle.class, 37); - classRegsitry.put(GeoS2Shape.class, 38); for (Class clazz : classRegsitry.keySet()){ codeRegsitry.put(classRegsitry.get(clazz), clazz); -- 2.20.1