Transformation de SRID 900913 en 4326 avec PostGis

8

J'ai deux tables Postgres avec différents SRID: 4326 et 900913. Je veux convertir ce dernier en 4326. J'ai d'abord changé le SRID en utilisant:

Select UpdateGeometrySRID('table', 'geomcolumn', 4326).  

J'ai ensuite transformé les données de référence en utilisant:

update table set geomcolumn = ST_Transform (geomcolumn, 4326). 

Cela semblait fonctionner. Mais lorsque j'ai changé le paramètre SRS de la couche appropriée dans TileMill en WGS84, j'obtiens cette erreur:

Détecté hors zone géographique.

Vraisemblablement, la transformation n'a pas fonctionné, mais on ne sait pas pourquoi.

rpahne
la source
Je suppose que vous voulez WGS84, qui est EPSG: 4326, pas 4236.
AndreJ
Question rapide: Tilemill est-il plus rapide si la géométrie est WGS84? Cela vaut-il la peine de convertir chaque couche qui utilise une projection 900913 en WGS84? Désolé .. Je suis un noob SIG;)
Georg

Réponses:

22

La transformation a échoué pour votre cas, car la commande UpdateGeometrySRID modifie simplement les métadonnées, mais ne transforme pas les coordonnées. Et lorsque vous tentez une transformation de 4326 à> 4326, aucune transformation n'est effectuée car les SRID sont égaux.


Si vous avez PostGIS 2.x avec une table comme celle-ci:

CREATE TABLE my_table (
  gid serial primary key,
  geom geometry(Point,900913),
  name text not null
);

la bonne façon de transformer et de modifier le système de référence spatiale d'une colonne géométrique consiste à utiliser le ALTER TABLE DDL:

ALTER TABLE my_table
    ALTER COLUMN geom TYPE geometry(Point,4326) USING ST_Transform(geom,4326);
Mike T
la source
J'essaie de faire la même chose mais je n'arrive pas à faire fonctionner cette commande ALTER TABLE. ALTER TABLE Detail_Building_buildinglayer ALTER COLUMN Geometry TYPE geometry (Polygon, 900913) USING ST_Transform (geom, 2954); L'erreur que j'obtiens est que la relation "detail_building_buildinglayer" n'existe pas. Je ne comprends pas parce que c'est le nom de ma table et non une relation.
Tyler Veinot du
@TylerVeinot voir stackoverflow.com/q/21796446/327026
Mike T
Merci, c'était le problème; le programme qui a créé la table de géométrie l'a appelée Géométrie et non géom. Après avoir lu ce post, j'ai essayé des guillemets pour qu'il recherche "Géométrie" mais il a quand même échoué. J'ai donc changé le nom de la colonne de géométrie en geom, exécuté la requête et cela a fonctionné; après que je viens de changer le nom en "Géométrie". Je pense que le nom et l'affaire posaient problème.
Tyler Veinot
1
Avez-vous changé le nom de la colonne de base de données à la place du nom de la colonne dans le script SQL ??? Jésus!
Magno C
0

Cela a fonctionné pour moi avec cette séquence:

CREATE TABLE tabla_900913 AS (SELECT ST_TRANSFORM(geom, 4326) FROM "tabla_4326")
Luis Angel Vega Panta
la source