#1 Thu 24 March 2016 11:12
- pouniok
- Juste Inscrit !
- Date d'inscription: 24 Mar 2016
- Messages: 2
Lignes, intersections, buffers - Comment bien procéder ?
Bonjour à tous,
Je travaille avec des agriculteurs qui ont des boitiers GPS sur leurs machines, et j'aimerais faire un traitement un peu particulier avec ces points GPS.
Un agriculteur va travailler sur plusieurs champs, et je vais pouvoir reconstituer sa trajectoire en reliant les points GPS par date et heure.
Ensuite, je voudrais trouver un moyen de dire qu'il a une grosse machine qui travaille avec un rayon de 4 mètres autour du point GPS, puis regrouper ces zones de travail en les recoupant avec le champ (pour ne pas avoir de zone travaillée sur des chemins par exemple).
Voici une petite image pour m'expliquer :
[img]http://i.imgur.com/RyQ4k4R.png?1[/img]
1. C'est la trajectoire GPS (à partir des points reliés en ligne)
2. C'est la trajectoire séparée par champ
3. C'est la trajectoire par champ qui est étirée de 4m de chaque côté pour avoir la zone travaillée
4. C'est la zone travaillée qui est recoupée avec le champ pour ne pas dépasser
J'ai créé une requête qui fonctionne mais elle a deux soucis. Elle me dit que je ne peux pas faire d'union de mes zones travaillées par champ car j'ai déjà une fonction d'agrégat des points GPS en ligne, et elle est assez longue à s'exécuter.
Voici la requête :
Code:
SELECT ST_Intersection( -- Recoupe les zone travaillée avec les champs ST_Buffer( -- Etend les lignes dans les champs de 4m de chaque coté (ST_Dump( -- Separe toutes les intersections entre trajectoire et champs pour ne pas les relier ST_Intersection( -- Intersection entre la trajectoire GPS et les champs ST_MakeLine(gps.geom ORDER BY gps.date), -- Creation de la ligne avec les points GPS (SELECT ST_Union(geom) from champs) -- Union des formes des champs ) )).geom::geography, 4), -- Taille de la zone travaillée (SELECT ST_Union(geom) from champs)) -- Union des formes des champs ) as geom FROM gps WHERE gps.date = '2016-02-29' GROUP BY gps.machine
Si jamais quelqu'un connais un moyen d'améliorer cette requête, pour faire les choses plus simplements ou utiliser les indexes un peu plus pour aller plus vite je suis preneur.
Merci pour votre aide !
Pou.
Hors ligne
#2 Thu 24 March 2016 12:32
- gustavecoste
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 24 Apr 2013
- Messages: 118
Re: Lignes, intersections, buffers - Comment bien procéder ?
Bonjour,
Pourquoi ne pas faire le découpage qu'après le buffer afin de n'avoir à le faire qu'une seule fois? En gros passer l'étape 2.
Gustave Coste
Hors ligne
#3 Thu 24 March 2016 14:20
- pouniok
- Juste Inscrit !
- Date d'inscription: 24 Mar 2016
- Messages: 2
Re: Lignes, intersections, buffers - Comment bien procéder ?
Bonjour Gustave,
Le problème lorsque je fais le découpage après buffer, c'est que la partie de la trajectoire en dehors du champ peut recouvrir une partie du champ, et donc je me retrouve à la fin avec des zones de travail qui n'existent pas.
Mon exemple n'est pas assez précis pour le deviner mais si le trait rouge de l'image 1 continuait pour contourner les champs, alors il se pourrait que tout le coté adjacent à la route soit noté comme travaillé !
Dernière modification par pouniok (Thu 24 March 2016 14:21)
Hors ligne
#4 Thu 24 March 2016 14:22
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3197
- Site web
Re: Lignes, intersections, buffers - Comment bien procéder ?
Bonjour,
Une première idée
A partir de l'ensemble des points GPS je crée une BBox qui est le xmin,ymin et xmax, ymax de l'ensemble de points.
Je sélectionne les champs qui ont une intersection avec cette BBox.
Je crée la polyligne par gps.geom et gps.date.
J'obtiens les polylignes résultantes de l'intersection avec les champs.
application buffer.
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne