All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.bigdata.service.geospatial.GeoSpatial Maven / Gradle / Ivy

/**

Copyright (C) SYSTAP, LLC DBA Blazegraph 2006-2016.  All rights reserved.

Contact:
     SYSTAP, LLC DBA Blazegraph
     2501 Calvert ST NW #106
     Washington, DC 20008
     [email protected]

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/
/*
 * Created on July 27, 2015
 */
package com.bigdata.service.geospatial;

import org.openrdf.model.URI;
import org.openrdf.model.impl.URIImpl;

import com.bigdata.rdf.internal.gis.ICoordinate.UNITS;


/**
 * 

* A vocabulary for geospatial extension querying, designed to operate over the * default index configuration (lat, lon, time). *

* * Example: find all points in the rectangle spanned from (0.00001, 0.00002) * to (0.00003, 0.00003) with times between 1-3s. * *

   PREFIX geo: 
   SELECT ?res WHERE {
     ?res geo:search "inRectangle" .
     ?res geo:predicate  .
     ?res geo:spatialRectangleSouthWest "0.00001#0.00002" .
     ?res geo:spatialRectangleNorthEast "0.00003#0.00003" .
     ?res geo:timeStart "1" .
     ?res geo:timeEnd "3" .
   }
 * 
* * or * * Example: find all points in a 0.1 km circle around point (0.00002,0.00002) * with times between 1-3s. * *
   PREFIX geo: 
   SELECT ?res WHERE {
     ?res geo:search "inCircle" .
     ?res geo:predicate  .
     ?res geo:spatialCircleCenter "0.00002#0.00002" .
     ?res geo:spatialCircleRadius "0.1" .
     ?res geo:timeStart "1" .
     ?res geo:timeEnd "3" .
   }
 * 
* * @author Michael Schmidt * @version $Id$ */ public interface GeoSpatial { public static String CUSTOM_FIELDS_SEPARATOR = "#"; /** * Enum for implemented geo functions. */ public static enum GeoFunction { IN_CIRCLE("inCircle"), IN_RECTANGLE("inRectangle"), UNDEFINED("undefined"); GeoFunction(final String name) { this.name = name; } public static GeoFunction forName(String name) { for (GeoFunction e : GeoFunction.values()) { if (e.toString().equalsIgnoreCase(name)) { return e; } } return null; } @Override public String toString() { return name; } private String name; } public interface Options { /** * Option that may be set to specify a default for {@link GeoSpatial#SEARCH}, * to be used in geo service. Defaults to {@link GeoFunction#IN_CIRCLE}. */ String GEO_FUNCTION = GeoSpatial.class.getName() + ".defaultGeoFunction"; /** * Option that may be set to specify a default for {@link GeoSpatial#SPATIAL_DISTANCE_UNIT}, * to be used in geo service. Defaults to meters. */ String GEO_SPATIAL_UNIT = GeoSpatial.class.getName() + ".defaultSpatialUnit"; UNITS DEFAULT_GEO_SPATIAL_UNIT = UNITS.Kilometers; } /************************************************************************************************ * META DECLARATIONS * ************************************************************************************************/ /** * The namespace used for magic search predicates. */ final String NAMESPACE = "http://www.bigdata.com/rdf/geospatial#"; // do not use anymore -- need to be retained because it is linked by old vocabulary class @Deprecated final URI DEFAULT_DATATYPE= new URIImpl(NAMESPACE + "geoSpatialLiteral"); /** * The default datatype to be used for GeoSpatial literals. */ final String GEOSPATIAL_LITERAL_PREFIX_V1 = "http://www.bigdata.com/rdf/geospatial/literals/v1#"; final String GEOSPATIAL_LITERAL_V1_LAT_LON = GEOSPATIAL_LITERAL_PREFIX_V1 + "lat-lon"; final String GEOSPATIAL_LITERAL_V1_LAT_LON_TIME = GEOSPATIAL_LITERAL_PREFIX_V1 + "lat-lon-time"; final URI DEFAULT_DATATYPE_LAT_LON = new URIImpl(GEOSPATIAL_LITERAL_V1_LAT_LON); final URI DEFAULT_DATATYPE_LAT_LON_TIME = new URIImpl(GEOSPATIAL_LITERAL_V1_LAT_LON_TIME); /************************************************************************************************ * MAGIC PREDICATES * ************************************************************************************************/ /** * The name of the search function, pointing to a {@link GeoFunction}. */ final URI SEARCH = new URIImpl(NAMESPACE + "search"); /** * The datatype for literals we're interested in. If not specified, defaults * to DEFAULT_DATATYPE. */ final URI SEARCH_DATATYPE = new URIImpl(NAMESPACE + "searchDatatype"); /** * Pointer to the predicate used in scanned triples. */ final URI PREDICATE = new URIImpl(NAMESPACE + "predicate"); /** * Pointer to the context used in scanned triples. */ final URI CONTEXT = new URIImpl(NAMESPACE + "context"); /** * In case of a {@link GeoFunction#IN_CIRCLE} query only: center point of the bounding circle. */ final URI SPATIAL_CIRCLE_CENTER = new URIImpl(NAMESPACE + "spatialCircleCenter"); /** * In case of a {@link GeoFunction#IN_CIRCLE} query only: radius of the bounding circle, * specified in SPATIAL_UNIT. */ final URI SPATIAL_CIRCLE_RADIUS = new URIImpl(NAMESPACE + "spatialCircleRadius"); /** * In case of a {@link GeoFunction#IN_RECTANGLE} query only: south west border point of the bounding rectangle. */ final URI SPATIAL_RECTANGLE_SOUTH_WEST = new URIImpl(NAMESPACE + "spatialRectangleSouthWest"); /** * In case of a {@link GeoFunction#IN_RECTANGLE} query only: north east border point of the bounding rectangle. */ final URI SPATIAL_RECTANGLE_NORTH_EAST = new URIImpl(NAMESPACE + "spatialRectangleNorthEast"); /** * The spatial unit used for distances specified in the geospatial search request. */ final URI SPATIAL_UNIT = new URIImpl(NAMESPACE + "spatialUnit"); /** * Start time of the time interval to scan for. */ final URI TIME_START = new URIImpl(NAMESPACE + "timeStart"); /** * End time of the time interval to scan for. */ final URI TIME_END = new URIImpl(NAMESPACE + "timeEnd"); /** * End time of the time interval to scan for. */ final URI COORD_SYSTEM = new URIImpl(NAMESPACE + "coordSystem"); /** * #-separated list of custom fields to be queries, e.g. myField1#myField2 */ final URI CUSTOM_FIELDS = new URIImpl(NAMESPACE + "customFields"); /** * Lower bounds for custom fields, e.g. 10#20 */ final URI CUSTOM_FIELDS_LOWER_BOUNDS = new URIImpl(NAMESPACE + "customFieldsLowerBounds"); /** * Upper bounds for custom fields, e.g. 11#5000 */ final URI CUSTOM_FIELDS_UPPER_BOUNDS = new URIImpl(NAMESPACE + "customFieldsUpperBounds"); /** * Output variable; if set, this variable is bound to the locations component of the search result. */ final URI LOCATION_VALUE = new URIImpl(NAMESPACE + "locationValue"); /** * Output variable; if set, this variable is bound to the time component of the search result. */ final URI TIME_VALUE = new URIImpl(NAMESPACE + "timeValue"); /** * Output variable; if set, this variable is bound to the literal component "as is". */ final URI LITERAL_VALUE = new URIImpl(NAMESPACE + "literalValue"); /** * Output variable; if set, this variable is bound to the latitude component of the search result. */ final URI LAT_VALUE = new URIImpl(NAMESPACE + "latValue"); /** * Output variable; if set, this variable is bound to the longitude component of the search result. */ final URI LON_VALUE = new URIImpl(NAMESPACE + "lonValue"); /** * Output variable; if set, this variable is bound to the longitude component of the search result. */ final URI COORD_SYSTEM_VALUE = new URIImpl(NAMESPACE + "coordSystemValue"); /** * Output variable; if set, this variable is bound to the values for the custom fields, * separated by CUSTOM_FIELDS_SEPARATOR (in case there are multiple custom fields) */ final URI CUSTOM_FIELDS_VALUES = new URIImpl(NAMESPACE + "customFieldsValues"); /** * Output variable; if set, this variable is bound to a combined representation of the * locations + time component of the search result, separated through the CUSTOM_FIELDS_SEPARATOR. */ final URI LOCATION_AND_TIME_VALUE = new URIImpl(NAMESPACE + "locationAndTimeValue"); }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy