2017-04-22 4 views
-1

J'importe des formes polygonales dans une base de données PostGIS, en utilisant Python (GeoPandas, SQLAlchemy, GeoAlchemy2). J'ai suivi les instructions mentionnées here.PostGIS: Conversion de texte hexadécimal WKT/WKB/WKB en polygone

J'ai une base de données avec une table nommée maps_region avec une colonne/champ appelé geom.

Je peux obtenir le champ Polygone (nommé geom) pour importer dans la table de base de données PostGIS au format texte (WKT, WKB et WKB Hex), mais, je suis incapable de convertir avec succès cette colonne de texte en un bon Format de polygone dans la base de données.

J'ai essayé d'importer avec le champ geom dans plusieurs formats différents - au format WKT (Well-Known Text), au format WKB et WKB Hex - mais je n'ai pas pu convertir en Polygone à partir de l'un des trois formats.

Par exemple, j'importeraient des formes dans le champ geom au format WKT, puis convertis au format WKB Hex, en utilisant la commande suivante, ce qui a bien fonctionné:

database=> UPDATE maps_region SET geom = ST_GeomFromText(geom, 4326); 
UPDATE 28 

Cependant, lorsque je tente alors convertir le champ geom d'un format text dans un type Polygon, je reçois les erreurs suivantes:

database=> ALTER TABLE maps_region ALTER COLUMN geom TYPE Geometry(POLYGON, 4326); 
ERROR: Geometry type (MultiPolygon) does not match column type (Polygon) 
database=> ALTER TABLE maps_region ALTER COLUMN geom TYPE Geometry(MULTIPOLYGON, 4326); 
ERROR: Geometry type (Polygon) does not match column type (MultiPolygon) 

J'ai essayé les deux sens: la conversion à Polygon, et la conversion à Mult iPolygon-- et ni travaillé. Au lieu de cela, les messages d'erreur ont été simplement inversés!

Toute aide serait grandement, grandement appréciée.

Merci d'avance!

Répondre

0

Je me suis rendu compte que les formes étaient enregistrées en format mixte: toutes sauf une étaient au format Polygon, tandis qu'une était au format MultiPolygon - see here. On dirait que cela explique suffisamment la question/conversion invalide.