Le blogue de djay

Sortie de PostGIS 1.4.1

Ce matin, la nouvelle version de PostGIS 1.4.1 a été annoncée par Paul Ramsey, le lien pour télécharger cette version est ici.

La version 1.4.1 de PostGIS est maintenant disponible. C'est une version mineure qui permet de résoudre certain problèmes rencontrés depuis la version 1.4.0.

  • #241, problème avec ST_LineCrossingDirection
  • #210, erreur de segmentation dans ST_Union pour les valeurs NULLs
  • #277, problème lors de l'utilisation de grandes valeurs numériques en entrée
  • #179, ST_MakeLine crash coté serveur avec des valeurs NULL
  • #253, resultat inconsistents lors de l'utilisation de l'opérateur ~=
  • #276, ST_AsGML produisant des chaînes GML non compatibles
  • #239, problème mémoire avec les fonctions ST_As*
  • #272, ST_LineCrossingDirection
  • #316, problème de récupération des géométries invalides avec une plus grande dimension

Posted in 2 commentaires | 5319 lectures

Posté par djay le 17 Décembre, 2009 - 13:22.

La liste des présentations FOSS4G 2009

La liste des présentations acceptées par le comité de sélection du prochain FOSS4G qui se tiendra à Sydney a été publiée aujourd'hui. Une quantité impressionnante de présentations a été proposée cette année, plus de 183 présentations pour seulement 85 sélectionnées, sans compter les 52 articles scientifiques proposés dont seulement 12 ont été retenus.

Au passage, cous constaterez sans doute que bon nombre de présentations mentionnent l'utilisation de PostGIS dans les solutions développées et qui seront présentées lors du FOSS4G 2009.

Autre point qui me semble important : le retour du grand Paul Ramsey à cette conférence pour la présentation intitulée The State of PostGIS, il sera aussi responsable de workshop mais ce n'est pas le sujet ici...

Posted in 2 commentaires | 4110 lectures

Posté par djay le 20 Juillet, 2009 - 11:50.

Problème avec les couches PostGIS depuis MapServer avec PostgreSQL 8.3

Lors de migration de vos serveur de bases de données PostgreSQL vers une version 8.3, un problème survient avec les versions de MapServer mises à disposition dans MS4W. Pour une couche de type PostGIS, vous obtenez en effet une message d'erreur du type :

Warning: [MapServer Error]: msDrawMap(): Failed to draw layer named 'layer1'. in D:\MapJaxDist\ms4w\apps\mapjax\interface\gestion\update\index.php on line 297

Warning: [MapServer Error]: prepare_database(): Error declaring cursor: ERROR: current transaction is aborted, commands ignored until end of transaction block With query string: DECLARE mycursor BINARY CURSOR FOR SELECT asbinary(force_collection(force_2d(wkb_geometry)),'NDR'),OID::text from septolis_departements_l93 WHERE wkb_geometry && setSRID('BOX3D(-109363.162923348 5996601,1450962.16291935 7163567)'::BOX3D, find_srid('','septolis_departements_l93','wkb_geometry') ) in D:\MapJaxDist\ms4w\apps\mapjax\interface\gestion\update\index.php on line 297

Warning: [MapServer Error]: msPOSTGISLayerRetrievePGVersion(): Error executing POSTGIS statement (msPOSTGISLayerRetrievePGVersion():select substring(version() from 12 for (position('on' in version()) - 13)) in D:\MapJaxDist\ms4w\apps\mapjax\interface\gestion\update\index.php on line 297

Fatal error: Call to a member function saveImage() on a non-object in D:\MapJaxDist\ms4w\apps\mapjax\interface\gestion\update\index.php on line 298

La partie importante de ces messages d'erreur mentionne l'erreur MapServer dans la fonction msPOSTGISLayerRetrievePGVersion. La requête utilisée pour récupérer le numéro de version de PostgreSQL ne fonctionne pas. Si on regarde de plus prêt, rien de très compliqué ici, on utilise la chaine retournée par la fontion version() de PostgreSQL.

Dans notre cas, la fonction version() renvoit : PostgreSQL 8.3.7, compiled by Visual C++ build 1400. Ainsi il n'est pas possible d'utiliser la position de la chaîne 'on' dans ce résultat étant donnée qu'elle n'y est pas.

La solution la plus simple est d'utiliser le script SQL ci-dessous qui se contente de renommer la fonction version() intiallement présente dans PostgreSQL en initial_version_func puis de déclarer une fonction version qui renvoie une chaîne correcte pour ce cas d'utilisation :

; Renommage de la fonction version
ALTER FUNCTION version() RENAME TO initial_version_func;

; Définition de la nouvelle fonction version
CREATE OR REPLACE FUNCTION version() RETURNS VARCHAR AS
$$
DECLARE
   vers text;
   rec record;
BEGIN
   FOR rec in EXECUTE $q$ SELECT 'PostgreSQL 8.3.7 on win32, compiled Visual C++ build 1400' as version$q$
   LOOP
     RETURN rec.version;
   END LOOP;
   RETURN '';
END
$$ LANGUAGE plpgsql;

Le problème est ainsi corrigé.

Il est à noté que, grâce aux corrections de Paul Ramsey, cette erreur ne devrait plus être présente dans les versions de MapServer sorties depuis le 11 avril 08 (cf. changeset 8003).

Posted in 4 commentaires | 3710 lectures

Posté par djay le 3 Juin, 2009 - 08:52.

MapServer 5.4.0 affichage de symboles aux extrémintés d'une ligne

Avec MapServer 5.4.0, l'affichage des extrémités des couches linéaires est maintenant facilité et possible à l'aide d'une seule couche.

Plus besoin donc de pré-traitement pour récupérer le début et la fin de la ligne requêtes suivantes, qui se faisait néanmoins très facilement avec des couches PostGIS. En utilisant, par exemple, les définitions de couches (1 et 2) ci-dessous ( la définition de la couche ligne de base est omise), respectivement pour le point de départ et le point final (on suppose que la table est <table>):

Définition de couche 1 :

LAYER
    CONNECTION ""
    CONNECTIONTYPE POSTGIS

    DATA "wkb_geometry1 from (SELECT startPoint( <table>.wkb_geometry) as wkb_geometry1,<table>.ogc_fid, CASE WHEN plus(pow((y(e)-y(s)),2),pow((x(e)-x(s)),2)) = 0 THEN 1 ELSE (180*(acos((x(e)-x(s))/sqrt(plus(pow((y(e)-y(s)),2),pow((x(e)-x(s)),2))))/pi()))-90 END as angle FROM (select ogc_fid, pointN(wkb_geometry,2) as e, startPoint(wkb_geometry) as s from <table>) as foo,  <table> WHERE foo.ogc_fid=<table>.ogc_fid)  as foo1 using unique ogc_fid using SRID=27572"

    NAME "espt_start"
    PROCESSING "CLOSE_CONNECTION=DEFER"
    STATUS OFF
    TOLERANCE 0
    TYPE POINT
    UNITS METERS
    CLASS
        NAME "espt_start1"
        STYLE
            ANGLE [angle]
            COLOR 250 8 255
            SIZE 10
            SYMBOL "triangle_isocele"
            WIDTH 1
        END
    END
END

Définition de couche 2 :

LAYER
    CONNECTION ""
    CONNECTIONTYPE POSTGIS

    DATA "wkb_geometry1 from (SELECT endPoint( 	<table>.wkb_geometry) as wkb_geometry1,<table>.ogc_fid, CASE WHEN plus(pow((y(e)-y(s)),2),pow((x(e)-x(s)),2)) = 0 THEN 1 ELSE (180*(acos((x(e)-x(s))/sqrt(plus(pow((y(e)-y(s)),2),pow((x(e)-x(s)),2))))/pi()))-270 END as angle FROM (select ogc_fid, pointN(wkb_geometry,numPoints(wkb_geometry)-1) as s, endPoint(wkb_geometry) as e from <table>) as foo,  poisson.total_especes2 WHERE foo.ogc_fid=<table>.ogc_fid)  as foo1 using unique ogc_fid using SRID=27572"

    NAME "espt_end"
    PROCESSING "CLOSE_CONNECTION=DEFER"
    STATUS OFF
    TOLERANCE 0
    TYPE POINT
    UNITS METERS
    CLASS
        NAME "espt_end1"
        STYLE
            ANGLE [angle]
            COLOR 250 8 255
            SIZE 10
            SYMBOL "triangle_isocele"
            WIDTH 1
    END
        END
    END


L'astuce consistait donc simplement à ajouter deux couches supplémentaires, l'une pour le point de départ et l'autre pour le point final (si votre symbol est orienté) en plus de la couche de la ligne elle-même. Avec la nouvelle version de MapServer 5.4.0, on peut utiliser l'option GEOMTRANSFORM d'une balise STYLE qui, comme son nom l'indique, permet de réaliser une opération sur une géométrie (end, start, buffer ...). Par exemple, si vous souhaitez afficher une barre perpendiculaire aux extrémités d'une ligne, voilà la définition d'une couche MapServer qui utilise ce nouveau paramètre :

LAYER
     CONNECTION ""
    CONNECTIONTYPE POSTGIS
    DATA "wkb_geometry FROM <table>"
    NAME "espt"
    PROCESSING "CLOSE_CONNECTION=DEFER"
    STATUS OFF
    TOLERANCE 0
    TYPE LINE
    UNITS METERS
    CLASS
        NAME "1"
        STYLE
        ANGLE 360
        COLOR 250 8 255
        SYMBOL 0
        WIDTH 2
    END
    STYLE
        ANGLE 360
        ANTIALIAS TRUE
        COLOR 0 0 255
        SIZE 5
        SYMBOL "l_oant_01_line"
        WIDTH 2
    END
    STYLE
        ANGLE AUTO
        ANTIALIAS TRUE
        COLOR 250 8 255
        MAXSIZE 100
        SIZE 10
        SYMBOL "openoffice_137"
        WIDTH 1
        GEOMTRANSFORM "end([wkb_geometry])"
    END
    STYLE
        ANGLE AUTO
        ANTIALIAS TRUE
        COLOR 250 8 255
        MAXSIZE 100
        SIZE 10
        SYMBOL "openoffice_137"
        WIDTH 1
        GEOMTRANSFORM "start([wkb_geometry])"
    END
    END
END

Il est donc maintenant possible de facilement afficher un symbole quelconque au début, à la fin ou pour les plus gourmands les deux Eye-wink

Attention, lors d'une interrogation de données, vous constaterez sans doute le même résultat que l'image ci-dessous, le trait horizontal est répété tout au long de la ligne :

Mapserver 5.4.0 pb


Lors de la sauvegarde des mapfiles à l'aide de l'API mapscript avec cette nouvelle version, j'ai rencontré un problème pour les couches ayant un STYLE utilisant ANGLE AUTO. Cette partie de la définition de la couche était remplacée par ANGLE 360. Du coup, j'ai créé le "patch" qui suit (applicable à l'aide de la commande patch -P0 mapserver.patch depuis le répertoire des sources de MapServer) pour corriger ce problème :

 
diff -ru ./mapfile.c ./mapfile.c
--- ./mapfile.c 2009-04-07 22:30:23.000000000 +0200
+++ ./mapfile.c 2009-04-28 23:52:43.000000000 +0200
@@ -1911,7 +1911,7 @@
style->minscaledenom=style->maxscaledenom = -1.0;
style->offsetx = style->offsety = 0; /* no offset */
style->antialias = MS_FALSE;
- style->angle = 360;
+ style->angle = 0;
style->autoangle= MS_FALSE;

style->opacity = 100; /* fully opaque */
style->_geomtransformexpression = NULL;
@@ -2127,7 +2127,9 @@
fprintf(stream, " STYLE\n");
if(style->numbindings > 0 && style->bindings[MS_STYLE_BINDING_ANGLE].item)
fprintf(stream, " ANGLE [%s]\n", style->bindings[MS_STYLE_BINDING_ANGLE].item);
- else if(style->angle != 0) fprintf(stream, " ANGLE %g\n", style->angle);
+ else if(style->angle != 0 && style->autoangle!=MS_TRUE)
+ fprintf(stream, " ANGLE %g\n", style->angle);
+ else if(style->autoangle==MS_TRUE) fprintf(stream, " ANGLE AUTO \n");

if(style->antialias) fprintf(stream, " ANTIALIAS TRUE\n");
writeColor(&(style->backgroundcolor), stream, "BACKGROUNDCOLOR", " ");

On utilise donc la propriété autoangle de style pour vérifier si l'angle doit être ajouté ou non. Au passage, vous noterez que l'on n'ajoute plus un angle de 360 par défaut si aucun angle n'est spécifié pour la couche en question (ref. #2991).

Un autre détail, en passant, concernant cette nouvelle version 5.4.0 de MapServer : la nécessité d'avoir le mot clef SYMBOLSET au début du fichier symbols.sym (la balise END n'est pas requise).

Posted in 5 commentaires | 4461 lectures

Posté par djay le 28 Avril, 2009 - 14:41.

Une nouvelle version de PROJ.4 (4.6.1)

Le 1er septembre 2008, Frank Warmerdam annonçait qu'une nouvelle version de PROJ été sortie : PROJ-4.6.1.

Au programme :

  • Mise à jour de nad/epsg à la version EPSG 6.17. Correction du problème de précision introduit dans la version précédente.
  • Ajout de la logique pour la projection tmerc afin qu'elle échoue plutôt que renvoiyer des résultats éronés dans des zones éloigné de plus de 90° du méridien centre (#5). Cette modification est temporaire et restera le temps qu'une meilleure solution soit trouvée.
  • Correction de gestion de texte supplémentaire dans cs2cs
  • Renommage de INSTALL en INSTALL.txt
  • La projection egc a été généralisée pour inclure la latitude de l'origine.
  • Ajout de la projection glabsgm (Gauss Laborde / Sphere Geometric Mean), et sa variation gstmerc.
  • Création du catalogue d'initialisation nad/IGNF.
  • Ajout du fichier ntf_r93.gsb
  • Ajout de l'option de compilation /Op dans nmake.opt pour éviter le bug d'optimisation de VC7 (#12)
  • Correction de plusieurs scripts de test qui fonctionneront lorsque les fichiers grid seront disponibles.

Posted in 4 commentaires | lire plus | 5366 lectures

Posté par djay le 5 Septembre, 2008 - 09:57.

Flux XML

Ouverture de session

Qui est en ligne

Il y a actuellement 1 utilisateur et 8 invités en ligne.
Locations of visitors to this page
Drupal Top Sites - Ultimate Drupal Exposure