Le blog de Jean David TECHER, un Réunionnais à Saint-Priest/Lyon

Aller au contenu | Aller au menu | Aller à la recherche


< 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 >

jeudi 17 mai 2007

Connaître les points contenus dans un MULTILINESTRING

J'ai posté un message suite à question posée par un utilisateur de postgis dans la mailing-list à http://postgis.refractions.net/pipermail/postgis-users/2007-May/015680.html. Je n'ai pas essayé de la coder en C bien que celà soit possible mais en PL/PGSQL celà reste quand même aussi faisable. La facilité vient surtout du fait du type e géométrie employé : MULTILINESTRING. Pour cette dernière, PostGIS dispose de fonctionnalités intéressantes pour écrire une fonction en PL/PGSQL: pointn(), etc...

LA FONCTION

Il faut commencer par écrire un type en PostgreSQL qui aura la structure suivante

CREATE TYPE PointSetFromLinetype AS (idx_geom int4,idx_point  int4,point_x double precision, point_y double precision);
avec
  • idx_geom: l'indice de la nième LINESTRING;
  • idx_point: qui sera le nième point dans la LINESTRING en cours;
  • point_x, point_y: les coordonnées X et Y du point.

Quant à la fonction, on peut par exemple imaginer la fonction suivante

CREATE OR REPLACE FUNCTION points_from_linetype(geometry) RETURNS SETOF PointSetFromLinetype AS $$  
DECLARE
geom ALIAS FOR $1;
Idx_Geom int4 :=1;
Num_Geom int4 :=0;
Nb_Points_In_Ring int4;
Idx_Point int4 := 1;
j PointSetFromLinetype;
BEGIN 
/*
    Get the number of points
*/
SELECT INTO Num_Geom NumGeometries(multi(geom))+1 ;
/* Parsing the Geometry */
WHILE Idx_Geom < Num_Geom
     LOOP
         SELECT INTO Nb_Points_In_Ring npoints(GeometryN(multi(geom),Idx_Geom))+1;
          WHILE Idx_Point < Nb_Points_In_Ring
          LOOP
         	SELECT INTO j Idx_Geom,Idx_Point,x(pointn(GeometryN(multi(geom),Idx_Geom),Idx_Point)),y(pointn(GeometryN(multi(geom),Idx_Geom),Idx_Point));
         	RETURN NEXT  j;
      	        Idx_Point := Idx_Point + 1;
          END LOOP; -- End - FOR 1 
          Idx_Point := 1;
          Idx_Geom := Idx_Geom + 1;
     END  LOOP; -- End - while 
END;
$$ LANGUAGE plpgsql stable;
EXEMPLES D'UTILISATION

Pour le cas d'une simple LINESTRING, on aura

testgis=# SELECT * FROM points_from_linetype('LINESTRING(2 3,3 2,5 4)'::geometry);
 idx_geom | idx_point | point_x | point_y
----------+-----------+---------+---------
        1 |         1 |       2 |       3
        1 |         2 |       3 |       2
        1 |         3 |       5 |       4
(3 lignes)

Dans le cas d'un MULTILINESTRING, ce sera

testgis=# SELECT * FROM points_from_linetype('MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4))'::geometry);
 idx_geom | idx_point | point_x | point_y
----------+-----------+---------+---------
        1 |         1 |       0 |       0
        1 |         2 |       1 |       1
        1 |         3 |       1 |       2
        2 |         1 |       2 |       3
        2 |         2 |       3 |       2
        2 |         3 |       5 |       4
(6 lignes)

mercredi 16 mai 2007

PostgreSQL 8.0.et 8.1 ne seront plus maintenus sous Windows.

Je ne fais que relayer un billet de postgresqlfr.org paru hier à http://www.postgresqlfr.org/?q=node/1233. Comme expliqué, il faudra se préparer à migrer bientôt pour la 8.3 pour les développeurs sous Windows.

Faire un peu joujou avec GoogleEarth

Ayé j'ai fait mon premier fichier kml personnel - hors contexte professionnel bien sûr -. Il est disponible à http://www.davidgis.fr/download/jeandavidtecher.kml

Le bâtiment en question représente le bâtiment où je vis à savoir la Résidence Prado Lido. Le polygone qui est dessiné a pour représentation dans le système de projection WGS 84 pour une hauteur de 12 mètres -un peu ficitf je l'avoue , je ne connais pas vraiment la hauteur de mon bâtiment -:

SELECT GeomFromEWKT('SRID=4326;POLYGON((3.896026111319043 43.63077293064538 12,3.896125412083016 43.63129020374376 12,
3.896017722403089 43.63130336362247 12,3.896023316938252 43.6313529652266 12,
3.895547802871119 43.63140560406845 12,3.895538013117296 43.63135701466003 12,
3.895430322945158 43.63136612505183 12,3.895325433631279 43.63084986305638 12,
3.895428927275387 43.6308407529833 12,3.895543607566332 43.63132462175059 12,
3.896003736551513 43.63126793394599 12,3.895911429755532 43.63078305367532 12,
3.896026111319043 43.63077293064538 12))');

lundi 14 mai 2007

Samedi soir - barbecue et petit soirée devant Oggy et les cafards

Samedi soir avec Madame ca a été soirée barbecue. On a profité qu'il fasse bon en fin d'après-midi pour sortir le barbeuk' et le mettre sur le balcon. On a grillé quelques belle côtes de viandes. Une petite salade a accompagné notre belle viande. Madame avait aussi conconcté de belles saucisses blanches de Lorraine. Hum un régal !!!

Comme tous les samedis - comme on ne change pas une équipe qui gagne - vers 20h30, j'ai squatté le clic-clac de ma salle informatique, ma télécommande ATI Remote Wonder II en main. J'allume Tvtime et zou direction gulli pour regarder «Oggy et les cafards»


Oggy et les cafards: dans cet épisode, un taureau qui va lui faire voir de toutes les couleurs.

Comme toujours, tordu de rire j'ai été! Vers 22h30, j'ai ensuite zappé pour regarder «Ken le survivant» sur Mangas. Finalement je me suis endormi devant la télé après en regardant les infos sur LCI.