Forcer le SRID dans les vues dans Postgis 2.0

9

J'ai un problème très délicat: j'ai une base de données Postgis 2.0, utilisée comme banque de données pour Geoserver 2.1.3

J'ai une table avec une colonne de géométrie (forme nommée), avec SRID 4326

J'ai créé une vue comme celle-ci:

CREATE VIEW pippo AS SELECT st_geometryn(shape,1) as geom FROM events

Et puis j'ai publié la vue en utilisant geoserver. Tout fonctionne, sauf pour les demandes GetFeatureInfo, qui échoue avec l'erreur «Opération sur des géométries SRID mixtes Un simple

select * from geometry_columns

renvoie que le SRID de pippo.geom est 0 (mais devrait être 4326)

J'ai essayé aussi avec cette définition pour la vue

CREATE VIEW pippo AS SELECT st_setsrid(st_geometryn(shape,1), 4326) as geom FROM events

mais j'ai encore SRID = 0 dans les geometry_columns .... une aide?

Voici comment la couche est définie dans Geoserver: entrez la description de l'image ici

solution de contournement

J'ai trouvé une solution de contournement pour résoudre non pas le problème lui-même, mais pour permettre à Geoserver d'effectuer une recherche spatiale sur les demandes GetFeatureInfo:

au lieu de créer une vue et de la publier, j'ai publié une couche SQL définie directement dans le géoserveur. Dans le formulaire de définition de couche, cela m'a permis de sélectionner le bon type de gemmétrie et le SRID et tout fonctionne maintenant!

Tommaso
la source

Réponses:

8

Vous pouvez utiliser un typmod pour spécifier le srid dans la geometry_columnsvue, quelque chose comme

CREATE VIEW pippo AS
SELECT st_geometryn(shape,1)::geometry(Geometry, 4326) as geom
FROM events

Le manuel contient plus d'informations.

gomatteo
la source
0

Dans les couches, vous pouvez voir le CRS (système de référence de coordonnées)

entrez la description de l'image ici

Vous pouvez forcer le CRS dans Geoserver

http://docs.geoserver.org/2.1.3/user/webadmin/data/layers.html#webadmin-layers

entrez la description de l'image ici

Mapperz
la source
Geoserver recherche dans geometry_columns le CRS natif de la couche, qui dans mon cas est 0. J'ai édité la réponse en joignant la définition de couche dans Geoserver
Tommaso