Indexation spatiale

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

Indexation spatiale

GregH
Bonjour,

J'ai essayé de mettre en oeuvre l'indexation spatiale, et de faire une enveloppe autour d'un point donné.

Dans SpatialDataSourceDecorator, il y a une méthode nommé getFullExtent() qui me retourne une Envelope.

Je me suis posé deux questions :
1° Que fait cette méthode ? Je n'ai pas trouvé la doc associée
2° En utilisant une enveloppe, je ne trouve pas de méthodes qui me permettent de limiter la taille (un périmètre) une fois appliquée à
SpatialDataSourceDecorator. Y a-t-il une solution alternative ?

Merci pour vos réponses
Reply | Threaded
Open this post in threaded view
|

Re: Indexation spatiale

ebocher
Administrator
Hello,

Le 1 avril 2010 10:27, GregH [via OrbisGIS] <[hidden email]> a écrit :
Bonjour,

J'ai essayé de mettre en oeuvre l'indexation spatiale, et de faire une enveloppe autour d'un point donné.

Dans SpatialDataSourceDecorator, il y a une méthode nommé getFullExtent() qui me retourne une Envelope.

Le full extent retrouve l'enveloppe de toutes les geometries de la couche.

Je me suis posé deux questions :
1° Que fait cette méthode ? Je n'ai pas trouvé la doc associée
2° En utilisant une enveloppe, je ne trouve pas de méthodes qui me permettent de limiter la taille (un périmètre) une fois appliquée à
SpatialDataSourceDecorator. Y a-t-il une solution alternative ?


Pour utiliser les indexes spatiaux, il faut procéder de la sorte :

dsf.getSourceManager().register("landcover2000",
                new File(internalData + "landcover2000.shp"));

        DataSource ds = dsf.getDataSource("landcover2000");

        SpatialDataSourceDecorator sds = new SpatialDataSourceDecorator(ds);
        sds.open();

        // Find all geometries around a buffer area 200

        Envelope env = sds.getGeometry(0).buffer(200).getEnvelopeInternal();

        DefaultSpatialIndexQuery query = new DefaultSpatialIndexQuery(env, sds
                .getMetadata().getFieldName(sds.getSpatialFieldIndex()));
        Iterator<Integer> it = sds.queryIndex(query);

        while (it.hasNext()) {
            Integer index = it.next();

            Geometry g = sds.getGeometry(index);

            System.out.println(g.toText());
        }

        sds.close();

Erwan.



Merci pour vos réponses



View message @ http://n2.nabble.com/Indexation-spatiale-tp4835825p4835825.html
To start a new topic under OrbisGIS Developers, email [hidden email]
To unsubscribe from OrbisGIS Developers, click here.




--
École Centrale de Nantes
Institut de recherche en sciences et techniques de la ville
BP 92101
1 rue de la Noë, 44321 NANTES Cedex 3
France
Tél : 02 40 37 68 67
http://www.irstv.cnrs.fr/
Reply | Threaded
Open this post in threaded view
|

Re: Indexation spatiale

GregH
Bonjour,

J'ai essayé de mettre en oeuvre cette méthode.

Toutefois, je n'arrive pas à trouver de méthodes qui me permettent de réduire la taille d'une enveloppe.
Par exemple, définir une enveloppe à partir d'un point données et limiter cette enveloppe à une zone de 100 mètre.

Avez-vous une idée?

Grégory
Reply | Threaded
Open this post in threaded view
|

Re: Indexation spatiale

ebocher
Administrator

Bonjour,

Si j'ai bien compris vous souhaitez construire une enveloppe à partir d'un point et d'une distance donnée. Pour cela vous pouvez faire

geom.buffer(20).getEnvelopeInternal();

ou geom est votre geometrie de type point et 20 la distance de la zone tampon.

Erwan.



Reply | Threaded
Open this post in threaded view
|

Re: Indexation spatiale

GregH
Bonjour,

Nous avons essayé de mettre en oeuvre c'est partie de votre code :

Envelope env = sds.getGeometry(0).buffer(200).getEnvelopeInternal();

        DefaultSpatialIndexQuery query = new DefaultSpatialIndexQuery(env, sds
                .getMetadata().getFieldName(sds.getSpatialFieldIndex()));
        Iterator<Integer> it = sds.queryIndex(query);

        while (it.hasNext()) {
            Integer index = it.next();

            Geometry g = sds.getGeometry(index);

            System.out.println(g.toText());
        }

Nous avons un problème au niveau DefaultSpatialIndexQuery query. Enfin nous pensons !!!

En effet lorsque nous comptons le nombre d'objet grâce à la boucle, peu importe la distance que nous indiquons dans le buffer, nous obtenons toujours le même nombre d'objet. Nous n'arrivons pas à résoudre le problème.

Si vous avez une idée sur le problème qu'il peut y avoir !!!

Grégory
Reply | Threaded
Open this post in threaded view
|

Re: Indexation spatiale

ebocher
Administrator
Bonjour,

Pouvez-vous préciser le problème avec un échantillon de votre code ?

Erwan.

Le 21 avril 2010 16:04, GregH [via OrbisGIS] <[hidden email]> a écrit :
Bonjour,

Nous avons essayé de mettre en oeuvre c'est partie de votre code :

Envelope env = sds.getGeometry(0).buffer(200).getEnvelopeInternal();

        DefaultSpatialIndexQuery query = new DefaultSpatialIndexQuery(env, sds
                .getMetadata().getFieldName(sds.getSpatialFieldIndex()));
        Iterator<Integer> it = sds.queryIndex(query);

        while (it.hasNext()) {
            Integer index = it.next();

            Geometry g = sds.getGeometry(index);

            System.out.println(g.toText());
        }

Nous avons un problème au niveau DefaultSpatialIndexQuery query. Enfin nous pensons !!!

En effet lorsque nous comptons le nombre d'objet grâce à la boucle, peu importe la distance que nous indiquons dans le buffer, nous obtenons toujours le même nombre d'objet. Nous n'arrivons pas à résoudre le problème.

Si vous avez une idée sur le problème qu'il peut y avoir !!!

Grégory


View message @ http://n2.nabble.com/Indexation-spatiale-tp4835825p4937162.html
To start a new topic under OrbisGIS Developers, email [hidden email]
To unsubscribe from OrbisGIS Developers, click here.