5. Läs in spatiala data

PostGIS stöds av en mängd olika bibliotek och applikationer och erbjuder många alternativ för att ladda data.

Vi kommer först att ladda våra arbetsdata från en databasbackupfil och sedan gå igenom några standardmetoder för att ladda olika GIS-dataformat med hjälp av vanliga verktyg.

5.1. Läsa in säkerhetskopian

  1. I PgAdmin-webbläsaren högerklickar du på databasikonen nyc och väljer sedan alternativet Restore….

    _images/data_loading_1.png
  2. Browse to the location of your workshop data data directory (available in the workshop data bundle), and select the nyc_data.backup file.

    _images/data_loading_2.png
  3. Klicka på fliken Restore options, bläddra ner till avsnittet Do not save och växla Owner till Yes.

    _images/data_loading_2a.png
  4. Klicka på knappen Restore. Återställningen av databasen bör slutföras utan fel.

    _images/data_loading_3.png
  5. När inläsningen är klar högerklickar du på databasen nyc och väljer alternativet Refresh för att uppdatera klientinformationen om vilka tabeller som finns i databasen.

    _images/data_loading_4.png

Observera

Om du vill öva på att ladda data från de inbyggda spatiala formaten, istället för att använda PostgreSQL db-säkerhetskopieringsfilerna som just täckts, kommer nästa par avsnitt att vägleda dig genom att ladda med olika kommandoradsverktyg och QGIS DbManager. Observera att du kan hoppa över dessa avsnitt om du redan har laddat data med pgAdmin.

5.2. Laddar med ogr2ogr

ogr2ogr är ett kommandoradsverktyg för konvertering av data mellan GIS-dataformat, inklusive vanliga filformat och vanliga spatiala databaser.

Windows:
  • Byggnader av ogr2ogr kan hämtas från GIS Internals.

  • ogr2ogr ingår som en del av QGIS Install och är tillgänglig via OSGeo4W Shell -

  • Byggnader av ogr2ogr kan hämtas från MS4W.

MacOS:
  • Om du installerade Postgres.app hittar du ogr2ogr i katalogen /Applications/Postgres.app/Contents/Versions/*/bin.

  • Slutligen, om du har installerat HomeBrew kan du installera paketet gdal för att få tillgång till ogr2ogr

Linux:
  • Om du installerade QGIS från paket bör ogr2ogr redan vara installerad och finnas på din PATH som en del av paketen gdal eller libgdal*.

Postgis workshopdatakatalog innehåller en 2000/-underkatalog, som innehåller shape-filer från 2000 års folkräkning, som ersattes av data från 2010 års folkräkning. Vi kan öva på att ladda data med hjälp av dessa filer för att undvika namnkollisioner med de data som vi redan har laddat med hjälp av backup-filen. Se till att du befinner dig i underkatalogen 2000/ med skalet när du utför dessa instruktioner:

export PGPASSWORD=mydatabasepassword

I stället för att skicka lösenordet i anslutningssträngen lägger vi det i miljön, så att det inte syns i processlistan medan kommandot körs.

Observera att du i Windows måste använda set i stället för export.

ogr2ogr \
  -nln nyc_census_blocks_2000 \
  -nlt PROMOTE_TO_MULTI \
  -lco GEOMETRY_NAME=geom \
  -lco FID=gid \
  -lco PRECISION=NO \
  Pg:"dbname=nyc host=localhost user=pramsey port=5432" \
  nyc_census_blocks_2000.shp

För att öka den visuella tydligheten visas dessa rader med \, men de bör skrivas på en rad i ditt skal.

Kommandot ogr2ogr har ett stort antal alternativ, och vi använder bara en handfull av dem här. Här följer en rad-för-rad-förklaring av kommandot.

ogr2ogr \

Namnet på den exekverbara filen! Du kan behöva se till att den körbara filen finns i din PATH eller använda den fullständiga sökvägen till den körbara filen, beroende på din installation.

-nln nyc_census_blocks_2000 \

Alternativet nln står för ”new layer name” och anger det tabellnamn som ska skapas i måldatabasen.

-nlt PROMOTE_TO_MULTI \

Alternativet nlt står för ”new layer type” (ny lagertyp). I synnerhet för inmatning av shape-filer är den nya lagertypen ofta en ”geometri med flera delar”, så systemet måste i förväg få veta att det ska använda ”MultiPolygon” i stället för ”Polygon” för geometritypen.

-lco GEOMETRY_NAME=geom \
-lco FID=gid \
-lco PRECISION=NO \

Alternativet lco står för ”alternativ för skapande av lager”. Olika drivrutiner har olika skapningsalternativ, och vi använder tre alternativ för PostgreSQL-drivrutinen här.

  • GEOMETRY_NAME anger kolumnnamnet för geometrikolumnen. Vi föredrar ”geom” framför standardnamnet, så att våra tabeller matchar standardkolumnnamnen i workshopen.

  • FID anger kolumnnamnet för primärnyckeln. Återigen föredrar vi ”gid” som är den standard som används i workshopen.

  • PRECISION styr hur numeriska fält representeras i databasen. Standardinställningen när en shape-fil laddas är att använda databasens ”numeriska” typ, som är mer exakt men ibland svårare att arbeta med än enkla siffertyper som ”heltal” och ”dubbel precision”. Vi använder ”NO” för att stänga av den ”numeriska” typen.

Pg:"dbname=nyc host=localhost user=pramsey port=5432" \

Ordningen på argumenten i ogr2ogr är ungefär: körbar, sedan alternativ, sedan destination plats, sedan källplats. Så det här är destinationen, anslutningssträngen för vår PostgreSQL-databas. ”Pg:” -delen är drivrutinens namn och sedan finns anslutningssträngen inom citattecken (eftersom den kan ha inbäddade mellanslag).

nyc_census_blocks_2000.shp

Källdatauppsättningen är i det här fallet den shape-fil som vi läser. Det är möjligt att läsa flera lager i en anrop genom att ange anslutningssträngen här och sedan följa den med en lista över lagernamn, men i det här fallet har vi bara en shape-fil att ladda.

5.3. Shapefiler? Vad är det för något?

Du kanske frågar dig själv - ”Vad är den här shapefile-grejen?” En ”shapefile” hänvisar vanligtvis till en samling filer med .shp, .shx, .dbf och andra tillägg på ett gemensamt prefixnamn (t.ex. nyc_census_blocks). Den faktiska shapefilen avser specifikt filer med tillägget .shp. Emellertid är filen .shp ensam ofullständig för distribution utan de nödvändiga stödfilerna.

Obligatoriska filer:

  • .shp-shape-format; själva geometrin för objektet

  • .shx-format för formindex; ett positionsindex för geometrin för objektet

  • .dbf-attributformat; kolumnerade attribut för varje form, i dBase III

Valfria filer inkluderar:

  • .prj-projektionsformat; koordinatsystemet och projektionsinformation, en vanlig textfil som beskriver projektionen med hjälp av välkänt textformat

Verktyget shp2pgsql gör formdata användbara i PostGIS genom att konvertera dem från binärdata till en serie SQL-kommandon som sedan körs i databasen för att ladda data.

5.4. Laddar med shp2pgsql

Filen :shp2pgsql konverterar Shape-filer till SQL. Det är ett konverteringsverktyg som är en del av PostGIS-kodbasen och levereras med PostGIS-paket. Om du installerade PostgreSQL lokalt på din dator kan du upptäcka att shp2pgsql har installerats tillsammans med den, och den är tillgänglig i den körbara katalogen för din installation.

Till skillnad från ogr2ogr, ansluter inte shp2pgsql direkt till destinationsdatabasen, den skickar bara ut SQL-ekvivalenten till den inmatade shape-filen. Det är upp till användaren att skicka SQL till databasen, antingen med en ”pipe” eller genom att spara SQL i en fil och sedan läsa in den.

Här är ett exempel på ett anrop som laddar samma data som tidigare:

export PGPASSWORD=mydatabasepassword

shp2pgsql \
  -D \
  -I \
  -s 26918 \
  nyc_census_blocks_2000.shp \
  nyc_census_blocks_2000 \
  | psql dbname=nyc user=postgres host=localhost

Här följer en förklaring av kommandot rad för rad.

shp2pgsql \

Det körbara programmet! Det läser källdatafilen och skickar ut SQL som kan skickas till en fil eller skickas till psql för att laddas direkt i databasen.

-D \

Flaggan D anger att programmet ska generera ”dump-format”, som är mycket snabbare att ladda än standardformatet ”insert-format”.

-I \

Flaggan I talar om för programmet att skapa ett spatialt index på tabellen efter att laddningen är klar.

-s 26918 \

Flaggan s talar om för programmet vad som är ”spatial reference identifier (SRID)” för data. Källdata för denna workshop är alla i ”UTM 18”, för vilket SRID är 26918 (se nedan).

nyc_census_blocks_2000.shp \

Den källformade filen som ska läsas.

nyc_census_blocks_2000 \

Det tabellnamn som ska användas när destinationstabellen skapas.

| psql dbname=nyc user=postgres host=localhost

Verktygsprogrammet genererar en ström av SQL. Operatorn ”|” tar den strömmen och använder den som indata till databasterminalprogrammet psql. Argumenten till psql är bara anslutningssträngen för destinationsdatabasen.

5.5. SRID 26918? Vad är det med den?

Det mesta av importprocessen är självförklarande, men även erfarna GIS-proffs kan snubbla över en SRID.

En ”SRID” står för ”Spatial Reference IDentifier” Den definierar alla parametrar för våra datas geografiska koordinatsystem och projektion. En SRID är praktisk eftersom den samlar all information om en kartprojektion (som kan vara ganska komplex) i ett enda nummer.

Du kan se definitionen av vår verkstads kartprojektion genom att slå upp den antingen i en databas online,

eller direkt i PostGIS med en fråga till tabellen spatial_ref_sys.

SELECT srtext FROM spatial_ref_sys WHERE srid = 26918;

Observera

Tabellen PostGIS spatial_ref_sys är en OGC-standardtabell som definierar alla spatiala referenssystem som är kända för databasen. De data som levereras med PostGIS listar över 3000 kända spatiala referenssystem och detaljer som behövs för att transformera / projicera mellan dem.

I båda fallen ser du en textuell representation av det 26918 spatiala referenssystemet (vackert utskrivet här för tydlighetens skull):

PROJCS["NAD83 / UTM zone 18N",
  GEOGCS["NAD83",
    DATUM["North_American_Datum_1983",
      SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],
      AUTHORITY["EPSG","6269"]],
    PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],
    UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],
    AUTHORITY["EPSG","4269"]],
  UNIT["metre",1,AUTHORITY["EPSG","9001"]],
  PROJECTION["Transverse_Mercator"],
  PARAMETER["latitude_of_origin",0],
  PARAMETER["central_meridian",-75],
  PARAMETER["scale_factor",0.9996],
  PARAMETER["false_easting",500000],
  PARAMETER["false_northing",0],
  AUTHORITY["EPSG","26918"],
  AXIS["Easting",EAST],
  AXIS["Northing",NORTH]]

Om du öppnar filen nyc_neighborhoods.prj från datakatalogen ser du samma projektionsdefinition.

Data som du får från lokala myndigheter, t.ex. New York City, är vanligtvis i en lokal projektion som anges med ”state plane” eller ”UTM”. Vår projektion är ”Universal Transverse Mercator (UTM) Zone 18 North” eller EPSG:26918.

5.6. Saker att prova: Visa data med hjälp av QGIS

qGIS, är en GIS-visare/-redigerare för skrivbordet som gör det möjligt att snabbt titta på data. Du kan visa ett antal dataformat, inklusive platta shapefiler och en PostGIS-databas. Det grafiska gränssnittet gör det enkelt att utforska dina data, samt enkel testning och snabb styling.

Prova att använda den här programvaran för att ansluta din PostGIS-databas. Programmet kan laddas ner från https://qgis.org

Du måste först skapa en anslutning till en PostGIS-databas genom att använda menykommandot: Layer->Add Layer->PostGIS Layers->New och sedan fylla i anvisningarna. När du har en anslutning kan du lägga till lager genom att klicka på connect och välja en tabell som ska visas.

5.7. Läs in data med hjälp av QGIS DbManager

QGIS levereras med ett verktyg som heter DbManager som gör att du kan ansluta till olika typer av databaser, inklusive en PostGIS-aktiverad databas. När du har konfigurerat en PostGIS-databasanslutning går du till Database->DbManager och expanderar till din databas enligt nedan:

_images/qgis_dbmanager.png

Därifrån kan du använda menyalternativet Import Layer/File för att ladda många olika spatiala format. Förutom att du kan ladda data från många olika spatiala format och exportera data till många olika format, kan du också lägga till ad hoc-frågor i Canvas eller definiera vyer i din databas med hjälp av den markerade skiftnyckelikonen.