001: /*
002: * This file is part of the GeOxygene project source files.
003: *
004: * GeOxygene aims at providing an open framework which implements OGC/ISO specifications for
005: * the development and deployment of geographic (GIS) applications. It is a open source
006: * contribution of the COGIT laboratory at the Institut Géographique National (the French
007: * National Mapping Agency).
008: *
009: * See: http://oxygene-project.sourceforge.net
010: *
011: * Copyright (C) 2005 Institut Géographique National
012: *
013: * This library is free software; you can redistribute it and/or modify it under the terms
014: * of the GNU Lesser General Public License as published by the Free Software Foundation;
015: * either version 2.1 of the License, or any later version.
016: *
017: * This library is distributed in the hope that it will be useful, but WITHOUT ANY
018: * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
019: * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
020: *
021: * You should have received a copy of the GNU Lesser General Public License along with
022: * this library (see file LICENSE if present); if not, write to the Free Software
023: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024: *
025: */
026:
027: package fr.ign.cogit.geoxygene.util.index;
028:
029: import java.util.List;
030:
031: import fr.ign.cogit.geoxygene.spatial.coordgeom.DirectPosition;
032: import fr.ign.cogit.geoxygene.spatial.coordgeom.GM_Envelope;
033: import fr.ign.cogit.geoxygene.spatial.geomroot.GM_Object;
034: import fr.ign.cogit.geoxygene.feature.FT_Feature;
035: import fr.ign.cogit.geoxygene.feature.FT_FeatureCollection;
036:
037: /**
038: * Interface pour un index spatial.
039: * Les selections se font au sens large : tout objet intersectant la zone d'extraction est renvoye.
040: *
041: * @author Thierry Badard, Arnaud Braun & Sébastien Mustière
042: * @version 1.0
043: */
044:
045: public interface SpatialIndex {
046:
047: /** Renvoie les paramètres de l'index.
048: * Ce que contient exactement cette liste peut être différent pour chaque type d'index.
049: *
050: * Pour un dallage: renvoie une ArrayList de 4 éléments
051: * - 1er élément : Class égal à Dallage.class
052: * - 2ème élément : Boolean indiquant si l'index est en mode MAJ automatique ou non
053: * - 3ème élément : GM_Envelope décrivant les limites de la zone couverte
054: * - 4ème élément : Integer exprimant le nombre de cases en X et Y.
055: *
056: */
057: public List getParametres();
058:
059: /** Indique si l'on a demande une mise a jour automatique. */
060: public boolean hasAutomaticUpdate();
061:
062: /** Demande une mise a jour automatique.
063: * NB: Cette méthode ne fait pas les éventuelles MAJ qui
064: * auriant ête faites alors que le mode MAJ automatique n'était
065: * pas activé.
066: */
067: public void setAutomaticUpdate(boolean auto);
068:
069: /** Met a jour l'index avec le FT_Feature.
070: * Si cas vaut +1 : on ajoute le feature.
071: * Si cas vaut -1 : on enleve le feature.
072: * Si cas vaut 0 : on modifie le feature.*/
073: public void update(FT_Feature value, int cas);
074:
075: /** Selection dans le carre dont P est le centre, de cote D.
076: * NB: D peut être nul. */
077: public FT_FeatureCollection select(DirectPosition P, double D);
078:
079: /** Selection a l'aide d'un rectangle. */
080: public FT_FeatureCollection select(GM_Envelope env);
081:
082: /** Selection des objets qui intersectent un objet geometrique quelconque. */
083: public FT_FeatureCollection select(GM_Object geometry);
084:
085: /** Selection des objets qui croisent ou intersectent un objet geometrique quelconque.
086: *
087: * @param strictlyCrosses
088: * Si c'est TRUE : ne retient que les objets qui croisent (CROSS au sens JTS)
089: * Si c'est FALSE : ne retient que les objets qui intersectent (INTERSECT au sens JTS)
090: * Exemple : si 1 ligne touche "geometry" juste sur une extrémité,
091: * alors avec TRUE cela ne renvoie pas la ligne, avec FALSE cela la renvoie
092: */
093: public FT_FeatureCollection select(GM_Object geometry,
094: boolean strictlyCrosses);
095:
096: /** Selection a l'aide d'un objet geometrique quelconque et d'une distance.
097: * NB: D peut être nul*/
098: public FT_FeatureCollection select(GM_Object geometry,
099: double distance);
100:
101: }
|