#1 Thu 24 November 2016 17:33
- vincent52
- Participant occasionnel
- Date d'inscription: 21 Sep 2016
- Messages: 15
Spatialite
Bonjour à tous,
dans le cadre de mon travail, j'ai calculé les distances de chaque communes par rapport aux limites départementales qui l'entourent.
J'ai fait une requête Spatialite en utilisant la fonction st_distance.
Je me retrouve avec un résultat de cette forme :
code_commune limite dpt DISTANCE
21 52 XX
21 89 XX
21 58 XX
21 71
22 ETC
22
22
Pour me permettre d'agencer le tableau comme je veux ( en l'occurence une ligne par commune), je cherche à assigner au sein de chaque code commune, un id unique à chaque distance (une sous clé primaire en quelque sorte :p). Voila ce que j'aimerais faire :
code_commune ID limite dpt DISTANCE
21 1 21 XX
21 2 89 XX
21 3 58 XX
21 4 71
22 1 ETC
22 2
22 3
Est ce quelqu'un sait comment faut il s'y prendre ?
Merci d'avance et bonne soirée
Hors ligne
#2 Thu 24 November 2016 23:08
- Lsam
- Participant assidu
- Date d'inscription: 27 Nov 2013
- Messages: 157
Re: Spatialite
Bonsoir,
L'ID que tu veux créer ne semble être qu'un ID de département. Que veux-tu faire ensuite exactement ?
Sinon tu peux faire une commande du genre :
Code:
select code_commune, case "limite dpt" when 21 then 1 when 89 then 2 when ETC end
ou mieux ajouter cet ID dans ta table dpts puis le sélectionner lors de ta jointure spatiale.
Hors ligne
#3 Fri 25 November 2016 13:37
- vincent52
- Participant occasionnel
- Date d'inscription: 21 Sep 2016
- Messages: 15
Re: Spatialite
Bonjour et merci pour votre réponse,
Non ça ne correspond pas à un ID département puisque les départements reviennent dans plusieurs communes. J'ai environ 200 000 distances pour 36000 communes (de 6 à 7 limites inter départementales par commune)
En fait je voudrais mettre ces résultats en colonnes afin d'avoir une seule ligne par commune :
code_commune dep dep1(le plus proche) dep 2 dep 3 distance 1 distance 2 distance 3 etc
Du coup l'idée d'affecter un ID à chaque distance au sein de chaque code commune me semble la plus simple pour transposer mon tableau...(en sachant que les distance sont déja classées du plus petit au plus grand pour chaque code com). Mais je ne connais pas la manip SQL adéquate (si elle existe).
Hors ligne
#4 Fri 25 November 2016 13:42
Re: Spatialite
Vincent,
Lit cette page : https://www.postgresql.org/docs/9.1/sta … indow.html avec un generate_series(1, 1000) tu dois pouvoir t'en sortir.
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#5 Fri 25 November 2016 13:47
Re: Spatialite
Aouch, c'est du spatialite ;(
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#6 Fri 25 November 2016 14:47
- Lsam
- Participant assidu
- Date d'inscription: 27 Nov 2013
- Messages: 157
Re: Spatialite
Bonjour,
Je ferais une agrégation avec :
Code:
WITH tri as (SELECT x.code_commune, x.dep, y.dep dpt, st_distance(x.geom,y.geom) distance from <ta_jointure> order by 4) SELECT tri.code_commune, tri.dep, group_concat(tri.dpt,','), group_concat(tri.distance,',') from tri GROUP BY 1,2
En espérant qu'il conserve bien l'ordre des départements selon les distances à ta commune... (pas vérifié)
Puis export en CSV et traitement dans un tableur en important avec ',' comme séparateur de champ
Mais si tu veux un rendu selon tes colonnes directement dans spatialite, là je sèche.
Dernière modification par Lsam (Fri 25 November 2016 14:48)
Hors ligne
#7 Sat 26 November 2016 11:51
- vincent52
- Participant occasionnel
- Date d'inscription: 21 Sep 2016
- Messages: 15
Re: Spatialite
Merci Lsam, ça devrait le faire! avant de convertir les données dans excel, il faut juste supprimer les guillemets et le tour est joué!
ps : dans mon test, l'ordre est bien conservé
Hors ligne