/* * Licensed to STRATIO (C) under one or more contributor license agreements. * See the NOTICE file distributed with this work for additional information * regarding copyright ownership. The STRATIO (C) 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 com.stratio.cassandra.lucene.testsAT.search; import com.stratio.cassandra.lucene.testsAT.BaseAT; import com.stratio.cassandra.lucene.testsAT.util.CassandraUtils; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import java.util.LinkedHashMap; import java.util.Map; import static com.stratio.cassandra.lucene.builder.Builder.*; /** * @author Eduardo Alonso {@literal <eduardoalonso@stratio.com>} */ public class GeoShapeSearchOverIndexedGeoPointsAT extends BaseAT { protected static CassandraUtils cassandraUtils; public static final Map<String, String> data1, data2, data3, data4, data5, data6, data7, data8, data9, data10, data11, data12; static { data1 = new LinkedHashMap<>(); data1.put("place", "'POINT_1'"); data1.put("longitude", "-3.793030"); data1.put("latitude", "40.435450"); data2 = new LinkedHashMap<>(); data2.put("place", "'POINT_2'"); data2.put("longitude", "-3.789382"); data2.put("latitude", "40.436169"); data3 = new LinkedHashMap<>(); data3.put("place", "'POINT_3'"); data3.put("longitude", "-3.789725"); data3.put("latitude", "40.446751"); data4 = new LinkedHashMap<>(); data4.put("place", "'POINT_4'"); data4.put("longitude", "-3.792343"); data4.put("latitude", "40.446522"); data5 = new LinkedHashMap<>(); data5.put("place", "'POINT_5'"); data5.put("longitude", "-3.804402"); data5.put("latitude", "40.444040"); data6 = new LinkedHashMap<>(); data6.put("place", "'POINT_6'"); data6.put("longitude", "-3.803630"); data6.put("latitude", "40.436724"); data7 = new LinkedHashMap<>(); data7.put("place", "'POINT_7'"); data7.put("longitude", "-3.792472"); data7.put("latitude", "40.440938"); data8 = new LinkedHashMap<>(); data8.put("place", "'POINT_8'"); data8.put("longitude", "-3.790541"); data8.put("latitude", "40.442113"); data9 = new LinkedHashMap<>(); data9.put("place", "'POINT_9'"); data9.put("longitude", "-3.794575"); data9.put("latitude", "40.443159"); data10 = new LinkedHashMap<>(); data10.put("place", "'POINT_10'"); data10.put("longitude", "-3.795648"); data10.put("latitude", "40.441264"); data11 = new LinkedHashMap<>(); data11.put("place", "'POINT_11'"); data11.put("longitude", "-3.796248"); data11.put("latitude", "40.442342"); data12 = new LinkedHashMap<>(); data12.put("place", "'POINT_12'"); data12.put("longitude", "-3.795862"); data12.put("latitude", "40.440676"); } @BeforeClass public static void setUpSuite() { cassandraUtils = CassandraUtils.builder("search") .withPartitionKey("place") .withClusteringKey() .withColumn("lucene", "text", null) .withColumn("place", "text", null) .withColumn("latitude", "decimal", null) .withColumn("longitude", "decimal", null) .withMapper("location", geoPointMapper("latitude", "longitude")) .build() .createKeyspace() .createTable() .createIndex() .insert(data1, data2, data3, data4, data5, data6, data7, data8, data9, data10, data11, data12) .refresh(); } @AfterClass public static void tearDownSuite() { cassandraUtils.dropIndex().dropTable().dropKeyspace(); } @Test public void testStarShapedIntersectsQuery() { //query star shaped shape cassandraUtils.filter(geoShape("location", "POLYGON((-3.798180 40.444563,-3.789082 40.442473,-3.796077 40.437835, " + "-3.793201 40.441427,-3.798180 40.444563))").operation("intersects")) .checkStringColumnWithoutOrder("place", "POINT_7", "POINT_8", "POINT_9"); } @Test public void testStarShapedIntersectsQuery2() { //query star shaped shape cassandraUtils.filter(geoShape("location", "POLYGON((-3.8012266 40.4384634, -3.7821293000000002 40.44178680000001, " + "-3.7937164 40.4453468, -3.7937164 40.453054, -3.8012266 40.4384634))").operation( "intersects")) .checkStringColumnWithoutOrder("place", "POINT_7", "POINT_8", "POINT_9", "POINT_10", "POINT_11", "POINT_12"); } @Test public void testConcaveShapesIntersectsQuery() { cassandraUtils.filter(geoShape("location", "POLYGON((-3.8033294999999994 40.4349602,-3.7986946 40.44511810000001," + "-3.785691299999999 40.445020199999995,-3.781742999999999 40.43427419999999," + "-3.7777947999999997 40.4497883,-3.8094234 40.44858,-3.8033294999999994 40.4349602))") .operation("intersects")) .checkStringColumnWithoutOrder("place", "POINT_3", "POINT_4", "POINT_5", "POINT_6"); } @Test public void testStarShapedContainsQuery() { //query star shaped shape cassandraUtils.filter(geoShape("location", "POLYGON((-3.798180 40.444563,-3.789082 40.442473,-3.796077 40.437835, " + "-3.793201 40.441427,-3.798180 40.444563))").operation("contains")) .checkStringColumnWithoutOrder("place"); } @Test public void testStarShapedContainsQuery2() { //query star shaped shape cassandraUtils.filter(geoShape("location", "POLYGON((-3.8012266 40.4384634, -3.7821293000000002 40.44178680000001, " + "-3.7937164 40.4453468, -3.7937164 40.453054, -3.8012266 40.4384634))").operation( "contains")).checkStringColumnWithoutOrder("place"); } @Test public void testConcaveShapesContainsQuery() { cassandraUtils.filter(geoShape("location", "POLYGON((-3.8033294999999994 40.4349602,-3.7986946 40.44511810000001," + "-3.785691299999999 40.445020199999995,-3.781742999999999 40.43427419999999," + "-3.7777947999999997 40.4497883,-3.8094234 40.44858,-3.8033294999999994 40.4349602))") .operation("contains")).checkStringColumnWithoutOrder("place"); } @Test public void testStarShapedIsWithinQuery() { //query star shaped shape cassandraUtils.filter(geoShape("location", "POLYGON((-3.798180 40.444563,-3.789082 40.442473,-3.796077 40.437835, " + "-3.793201 40.441427,-3.798180 40.444563))").operation("is_within")) .checkStringColumnWithoutOrder("place", "POINT_7", "POINT_8", "POINT_9"); } @Test public void testStarShapedIsWithinQuery2() { //query star shaped shape cassandraUtils.filter(geoShape("location", "POLYGON((-3.8012266 40.4384634, -3.7821293000000002 40.44178680000001, " + "-3.7937164 40.4453468, -3.7937164 40.453054, -3.8012266 40.4384634))").operation( "is_within")) .checkStringColumnWithoutOrder("place", "POINT_7", "POINT_8", "POINT_9", "POINT_10", "POINT_11", "POINT_12"); } @Test public void testConcaveShapesIsWithinQuery() { cassandraUtils.filter(geoShape("location", "POLYGON((-3.8033294999999994 40.4349602,-3.7986946 40.44511810000001," + "-3.785691299999999 40.445020199999995,-3.781742999999999 40.43427419999999," + "-3.7777947999999997 40.4497883,-3.8094234 40.44858,-3.8033294999999994 40.4349602))") .operation("is_within")) .checkStringColumnWithoutOrder("place", "POINT_3", "POINT_4", "POINT_5", "POINT_6"); } @Test public void testBufferShape() { cassandraUtils.filter(geoShape("location", "LINESTRING(-3.8033294999999994 40.4349602,-3.7986946 40.44511810000001," + "-3.785691299999999 40.445020199999995)").operation("intersects") .transform(bufferGeoTransformation().maxDistance( "500m"))) .checkStringColumnWithoutOrder("place", "POINT_3", "POINT_4", "POINT_6", "POINT_7", "POINT_8", "POINT_9", "POINT_10", "POINT_11", "POINT_12"); } }