Importez un fichier CSV volumineux dans PostGIS

12

J'essaie d'importer des fichiers CSV dans PostGIS. Suite à ce post , j'ai déjà créé des tableaux. J'ai trouvé d'autres suggestions disant que je pouvais exécuter la commande de copie.

Si j'exécute cette commande:

COPY table FROM '/Users/macbook/file.csv' DELIMITERS ',' CSV HEADER;

il n'a pas copié la table du tout. Il dit que "table" n'est pas reconnu.

J'ai essayé ceci:

COPY moulding
(Borough,Block,Lot,CD,CT2010,CB2010,SchoolDist,Council,ZipCode,FireComp,PolicePrct,Address,ZoneDist1,ZoneDist2,ZoneDist3,ZoneDist4,Overlay1,Overlay2,SPDist1,SPDist2,LtdHeight,AllZoning1,AllZoning2,SplitZone,BldgClass,LandUse,Easements,OwnerType,OwnerName,LotArea,BldgArea,ComArea,ResArea,OfficeArea,RetailArea,GarageArea,StrgeArea,FactryArea,OtherArea,AreaSource,NumBldgs,NumFloors,UnitsRes,UnitsTotal,LotFront,LotDepth,BldgFront,BldgDepth,Ext,ProxCode,IrrLotCode,LotType,BsmtCode,AssessLand,AssessTot,ExemptLand,ExemptTot,YearBuilt,BuiltCode,YearAlter1,YearAlter2,HistDist,Landmark,BuiltFAR,ResidFAR,CommFAR,FacilFAR,BoroCode,BBL,CondoNo,Tract2010,XCoord,YCoord,ZoneMap,ZMCode,Sanborn,TaxMap,EDesigNum,APPBBL,APPDate,PLUTOMapID,Version)
FROM
'/Users/macbook/file.csv'
DELIMITERS
','
CSV HEADER;

mais ça n'a pas marché non plus.

Un exemple d'un tel ensemble de données peut être téléchargé à partir de ce lien :

Dois-je créer un modèle puis l'exécuter?

user3001937
la source
3
Avez-vous essayéCOPY moulding FROM '/Users/macbook/file.csv' DELIMITERS ',' CSV HEADER;
underdark
Avez-vous une table nommée tabledans votre schéma public?
Luís de Sousa
Non ! J'essaie d'importer ce fichier à l'aide de la fonction de copie.
user3001937
Utilisez-vous vraiment CSV ou Shapefile? Votre question dit CSV, mais l'exemple est shp ... Aussi, quelle version de postgis utilisez-vous?
BradHards
@BradHards: Si vous téléchargez le fichier, je trouve le fichier avec l'extension CSV. J'utilise la dernière version de Postgis. psql (9.3.1, serveur 9.3.2)
user3001937

Réponses:

10

Vous y êtes presque, mais je pense que le problème pourrait être la table dans laquelle vous chargez.

Vous devez avoir déjà créé une table dans PostGIS avec les bons types de colonnes

Par exemple

CREATE TABLE nycdata (
    BOROUGH varchar,
    BLOCK varch,
    DATE date,
    VERSION numeric);

Mais vous devez faire correspondre le type de colonne avec le même type de données dans le CSV.

Vous pouvez voir tous les types de données ici http://www.postgresql.org/docs/9.1/static/datatype.html

Une fois que vous avez créé la table, vous pouvez ensuite utiliser la commande d'origine

COPY nycdata FROM '/Users/macbook/data.csv' DELIMITERS ',' CSV HEADER;

Vous devrez ensuite créer des index et une géométrie

tjmgis
la source
4

Cela peut également être fait avec GDAL en utilisant un fichier .vrt, bien qu'il puisse être gourmand en mémoire.

Votre vrt ressemblerait à:

<OGRVRTDataSource> 
<OGRVRTLayer name="feature_name"> 
    <SrcDataSource>your_csv.csv</SrcDataSource> 
    <GeometryType>wkbPoint</GeometryType> 
    <LayerSRS>EPSG:27700</LayerSRS> 
    <GeometryField encoding="PointFromColumns" x="Eastings" y="Northings"/> 
</OGRVRTLayer> 

Alors simplement:

ogr2ogr -progress -nln table_name_doesnt_need_to_exist -skipfailures  PostgreSQL PG:"dbname='dbname' host='localhost' port='5432'  user='username' password='password'" vrt_filename.vrt

Pour un guide complet, voir:

Chargement des données CSV OS CodePoint dans PostGIS

HeikkiVesanto
la source