Urbgeo/gisdbv-0.1: Forskjell mellom sideversjoner

Fra hbrgeo
Ingen redigeringsforklaring
Linje 1: Linje 1:
=Etablering av UrbGeo GISdatabase=
=Etablering av UrbGeo GISdatabase=
I dette dokumentet viser steg-for-steg dokumentasjon av urbgeo-gisdatabase i PostgreSQL.
Dette dokumentet viser steg-for-steg dokumentasjon av GIS-databasen urbgeo med DBMS PostgreSQL.
==Oppretting av databaser og hjelpedata==
==Oppretting av databaser og hjelpedata==
Føresetnaden er at PostgreSQL 9.x med tilhøyrande gis-ekstensjon postgis er installert på ein linux-maskin. Denne dokumentasjonen er basert på Ubuntu Linux 14.04 LTS, postgreSQL 9.5 og postgis 2.2.2. Det er også ein føresetnad at database-brukaren har privilegier til å opprette databaser. Videre blir alle filer lagra i katalogen /home/[brukernamn]/urbgeo med underkatalogar.
Forutsetningen er at PostgreSQL 9.x med tilhørende GIS-ekstensjon postgis er installert på ein linux-maskin. Denne dokumentasjonen er basert på Ubuntu Linux 14.04 LTS, postgreSQL 9.5 og postgis 2.2.2. Det er også en forutsetning at database-brukeren har privilegier til å opprette databaser. Videre blir alle filer lagret i katalogen /home/[brukernamn]/urbgeo med underkataloger.




Linje 24: Linje 24:
</pre>
</pre>


For å sjekke at alt er i orden kan du logga på databasen med psql -d urbgeo vil prompten vere urbgeo=#
For å sjekke at alt er i orden kan du logge på databasen med psql -d urbgeo vil prompten vere urbgeo=#


Logg av med \q
Logg av med \q
===Lasting av hjelpetabellar===


Første steg blir å laste databasen med hjelpetabellar som i all hovudsak inneheld data om den administrative inndelinga, namn på byar og kjeldeidentifikasjon. Utgangspunkt er data frå NSD (Norsk Samfunnsvitenskaplig Datatjenste), Arkivverket og Hallstein Myklebost, Norges tettbygde steder.
Første steg blir å laste databasen med hjelpetabellar som i all hovudsak inneheld data om den administrative inndelinga, namn på byar og kjeldeidentifikasjon. Utgangspunkt er data frå NSD (Norsk Samfunnsvitenskaplig Datatjenste), Arkivverket og Hallstein Myklebost, Norges tettbygde steder.
Linje 32: Linje 36:
Nedanfor er script for å opprette databaser og laste inn data frå dei ulike formata
Nedanfor er script for å opprette databaser og laste inn data frå dei ulike formata


===Lasting av hjelpetabellar===
====Tettsted og by====
 
Første hjelpetabell er definisjon og data for tettstader. Data er henta frå Hallstein Myklebust, Tettsteder i Norge 1875-1950. Myklebosts tettstadnummer er nytta som primærnøkkel for byane i urbgeo. HMID=Hallstein Myklebust ID. Merk at encoding er sett til Latin1 sidan csv-fila er laga med MS-Excel under Windows 10.
Første hjelpetabell er definisjon og data for tettstader. Data er henta frå Hallstein Myklebust, Tettsteder i Norge 1875-1950. Myklebosts tettstadnummer er nytta som primærnøkkel for byane i urbgeo. HMID=Hallstein Myklebust ID. Merk at encoding er sett til Latin1 sidan csv-fila er laga med MS-Excel under Windows 10.


Linje 65: Linje 68:
   "Hmkode" VARCHAR(50),
   "Hmkode" VARCHAR(50),
   "Kommuner" VARCHAR(255),
   "Kommuner" VARCHAR(255),
   "AsciiName" VARCHAR(25)
   "AsciiName" VARCHAR(25),
  PRIMARY KEY (hmid)
);
);


COPY hallmykl FROM '/home/arne/urbgeo/hmexp.csv' DELIMITER ';' CSV HEADER QUOTE '"' ENCODING 'LATIN1' NULL '';
COPY hallmykl FROM '/home/arne/urbgeo/hmexp.csv' DELIMITER ';' CSV HEADER QUOTE '"' ENCODING 'LATIN1' NULL '';
update "hallmykl" set asciiname = 'Mo i Rana' where asciiname='Mo';


</pre>
</pre>
Merk at noen av tettstedene i perioder er del av en kommune og var ikke selvstendig bykommune. Noen av tettstedene hadde også så liten befolkning at de vil falle bort fra de fleste definisjoner av "by". Og så er det noen av tettstedene som fikk bystatus etter 1910.
====Kommuner og fylker====


Neste datafil er kommunenefila for 1910. Denne er trekt ut frå kommunedatabasen i NSD. Kommunedatabasen har muligheit for å lage kommunefiler for eit tidspunkt (år). Den aktuelle fila er for år 1910. Lista frå NSD-kommunedatabase som inneheld nsd-kommunenr (nsdknr) og nsd-kommunenamn (nsdknam) er overført (copy-paste) til MS-Excel. I MS-Excel er kommunenr brukt for å leggje til fylkesnummer. Fylkesnummer er danna ved funksjonen avrund.ned(nsdknr/100;0). I tillegg er det konstruert ein fjerde kolonne som viser om kommuna er by eller landsbygd. Dette feltet er konstruert med funksjonen: Hvis(nsdknr-(fylkenr*100)<10;1;0). Dvs. dersom nsdknr - fylkesnr*100 er mindre enn 10, så er kommuna ein bykommune.
Neste datafil er kommunenefila for 1910. Denne er trekt ut frå kommunedatabasen i NSD. Kommunedatabasen har muligheit for å lage kommunefiler for eit tidspunkt (år). Den aktuelle fila er for år 1910. Lista frå NSD-kommunedatabase som inneheld nsd-kommunenr (nsdknr) og nsd-kommunenamn (nsdknam) er overført (copy-paste) til MS-Excel. I MS-Excel er kommunenr brukt for å leggje til fylkesnummer. Fylkesnummer er danna ved funksjonen avrund.ned(nsdknr/100;0). I tillegg er det konstruert ein fjerde kolonne som viser om kommuna er by eller landsbygd. Dette feltet er konstruert med funksjonen: Hvis(nsdknr-(fylkenr*100)<10;1;0). Dvs. dersom nsdknr - fylkesnr*100 er mindre enn 10, så er kommuna ein bykommune.
<pre class="code">
-- Oppretter kommunefil for Norge i 1910
DROP TABLE IF EXISTS "nsd1910a";
CREATE TABLE "nsd1910a" (
  "nsdknr" INTEGER NOT NULL,
  "nsdknamn" VARCHAR(25),
  "fylke" INTEGER,
  "byland" INTEGER,
  PRIMARY KEY (nsdknr)
);
COPY nsd1910a FROM '/home/arne/urbgeo/data/nsdexp10.csv' DELIMITER ';' CSV HEADER QUOTE '"' ENCODING 'LATIN1' NULL '';
Alter table nsd1910a add column asciiname varchar(25);
Alter table nsd1910a add column hmid integer;
-- Genererer asciiname uten nordiske teikn og standardiserer namn til gjeldande namn (Kristiania til Oslo)
update "nsd1910a" set asciiname = replace(nsdknamn,'å','aa');
update "nsd1910a" set asciiname = replace(asciiname,'Å','Aa');
update "nsd1910a" set asciiname = replace(asciiname,'æ','e');
update "nsd1910a" set asciiname = replace(asciiname,'ø','o');
update "nsd1910a" set asciiname = replace(asciiname,'Ø','O');
update "nsd1910a" set asciiname = replace(asciiname,'Æ','E');
update "nsd1910a" set asciiname = replace(asciiname,'Kristiania','Oslo');
update "nsd1910a" set asciiname = replace(asciiname,'Fredrikshald','Halden');
-- Sjekk av koblingene og standardisering
select count(*) from nsd1910a, hallmykl where nsd1910a.nsdknamn=hallmykl.tettstad;
select count(*) from nsd1910a, hallmykl where nsd1910a.asciiname=hallmykl.asciiname;
-- Setter hmid i nsd1910a fila
update nsd1910a set hmid=hallmykl.hmid from hallmykl where nsd1910a.asciiname=hallmykl.asciiname;
-- Kontroll av tettsteder som ikke bystatus i 1910
select hallmykl.hmid, hallmykl.tettstad, nsd1910a.nsdknamn from hallmykl left join nsd1910a on hallmykl.asciiname=nsd1910a.asciiname where nsd1910a.hmid is null;
</pre>
====Tellekretser og bytabell i 1910====
På grunnlag av tellekretsene i 1910-tellingen blir det dannet tre tabeller: ED-tabellen (Enumeration District), Bytabell og en kildetabell.
<pre class="code">
-- Oppretter tabell for teljekrets (ed)
DROP TABLE IF EXISTS "ed1910";
CREATE TABLE "ed1910" (
  "id" VARCHAR(25) NOT NULL,
  "kildeid" INTEGER NOT NULL,
  "kretsnr" VARCHAR(25) NOT NULL,
  "tk_navn" VARCHAR(255),
  "sogn" VARCHAR(50),
  "prestegjeld" VARCHAR(50),
  "herred_by" VARCHAR(50),
  "merknader" VARCHAR(255),
  PRIMARY KEY (kildeid, kretsnr)
);
COPY ed1910 FROM '/home/arne/urbgeo/data/ft1910heleKrets.csv' DELIMITER ';' CSV HEADER QUOTE '"' ENCODING 'utf-8' NULL '';
-- Legg til ekstra felt id ed
Alter table ed1910 add column asciiname varchar(25);
alter table ed1910 add column byland INTEGER;
-- Standardiserer asciiname
update ed1910 set asciiname = replace(herred_by,'å','aa');
update ed1910 set asciiname = replace(asciiname,'Å','Aa');
update ed1910 set asciiname = replace(asciiname,'æ','e');
update ed1910 set asciiname = replace(asciiname,'ø','o');
update ed1910 set asciiname = replace(asciiname,'Ø','O');
update ed1910 set asciiname = replace(asciiname,'Æ','E');
update ed1910 set asciiname = replace(asciiname,'Kristiania','Oslo');
update ed1910 set asciiname = replace(asciiname,'Fredrikshald','Halden');
update ed1910 set asciiname = replace(asciiname,'Trondhjem','Trondheim');
update ed1910 set asciiname = replace(asciiname,'Porsgrund','Porsgrunn');
update ed1910 set asciiname = replace(asciiname,'Stenkjer','Steinkjer');
update ed1910 set asciiname = 'Sokndal' where prestegjeld is null and herred_by='Sogndal';
-- Merker teljekretser som er i by
update ed1910 set byland=1 from hallmykl  where ed1910.asciiname=hallmykl.asciiname;
-- Oppretter bytabell for 1900-teljinga
DROP TABLE IF EXISTS "by1910";
CREATE TABLE "by1910" (
  "hmid" INTEGER NOT NULL,
  "bynamn" VARCHAR(25),
  "nsdknr" INTEGER,
  "asciiname" VARCHAR(25)
);
-- laster bytabellen frå teljekretsar
insert into by1910 (hmid,bynamn,nsdknr,asciiname) select count(*), herred_by, count(*), min(asciiname) from ed1910 where byland=1 group by herred_by;
update by1910 set hmid=hallmykl.hmid from hallmykl where by1910.asciiname=hallmykl.asciiname;
update by1910 set nsdknr=nsd1910a.nsdknr from nsd1910a where by1910.asciiname=nsd1910a.asciiname;
alter table by1910 add  primary key (hmid);
-- oppretter kildetabell frå teljekretser
DROP TABLE IF EXISTS "kilde1910";
CREATE TABLE "kilde1910" (
  "hmid" INTEGER,
  "kildeid" INTEGER NOT NULL,
  "asciiname" VARCHAR(25),
  PRIMARY KEY (kildeid)
);
insert into kilde1910 (hmid,kildeid,asciiname) select count(*), kildeid, min(asciiname) from ed1910 where byland=1 group by kildeid;
-- Merker aller kilder med tettstadid (byid)
update kilde1910 set hmid=hallmykl.hmid from hallmykl where kilde1910.asciiname=hallmykl.asciiname;
</pre>
====Folketellingen 1900====
På tilsvarende måte er det generert hjelpetabeller for [gisdb/ft1900|1900-tellingen]

Sideversjonen fra 13. nov. 2016 kl. 06:26

Etablering av UrbGeo GISdatabase

Dette dokumentet viser steg-for-steg dokumentasjon av GIS-databasen urbgeo med DBMS PostgreSQL.

Oppretting av databaser og hjelpedata

Forutsetningen er at PostgreSQL 9.x med tilhørende GIS-ekstensjon postgis er installert på ein linux-maskin. Denne dokumentasjonen er basert på Ubuntu Linux 14.04 LTS, postgreSQL 9.5 og postgis 2.2.2. Det er også en forutsetning at database-brukeren har privilegier til å opprette databaser. Videre blir alle filer lagret i katalogen /home/[brukernamn]/urbgeo med underkataloger.


Opprette database frå linux prompt
~$cd
~$mkdir urbgeo
~$cd urbgeo
~$createdb urbgeo

Logge på database urbgeo frå linux prompt
~$psql -d urbgeo

Prompt i psql er databasenamn og =#

Laste postgis ekstensjon

urbgeo=#create extension postgis;


For å sjekke at alt er i orden kan du logge på databasen med psql -d urbgeo vil prompten vere urbgeo=#

Logg av med \q


Lasting av hjelpetabellar

Første steg blir å laste databasen med hjelpetabellar som i all hovudsak inneheld data om den administrative inndelinga, namn på byar og kjeldeidentifikasjon. Utgangspunkt er data frå NSD (Norsk Samfunnsvitenskaplig Datatjenste), Arkivverket og Hallstein Myklebost, Norges tettbygde steder.

Nedanfor er script for å opprette databaser og laste inn data frå dei ulike formata

Tettsted og by

Første hjelpetabell er definisjon og data for tettstader. Data er henta frå Hallstein Myklebust, Tettsteder i Norge 1875-1950. Myklebosts tettstadnummer er nytta som primærnøkkel for byane i urbgeo. HMID=Hallstein Myklebust ID. Merk at encoding er sett til Latin1 sidan csv-fila er laga med MS-Excel under Windows 10.

--DROP DATABASE IF EXISTS "urbgeo";
--CREATE DATABASE "urbgeo";

\c "urbgeo";

--
-- Table structure for table 'hallmykl'
--


DROP TABLE IF EXISTS "hallmykl";

CREATE TABLE "hallmykl" (
  "HMID" INTEGER NOT NULL,
  "Fylke" VARCHAR(25),
  "Tettstad" VARCHAR(25),
  "Kommune" VARCHAR(25),
  "F1875" INTEGER,
  "F1890" INTEGER,
  "F1900" INTEGER,
  "F1910" INTEGER,
  "F1920" INTEGER,
  "F1930" INTEGER,
  "F1946" INTEGER,
  "F1959" INTEGER,
  "HMType" VARCHAR(50),
  "Hmkode" VARCHAR(50),
  "Kommuner" VARCHAR(255),
  "AsciiName" VARCHAR(25),
  PRIMARY KEY (hmid)
);

COPY hallmykl FROM '/home/arne/urbgeo/hmexp.csv' DELIMITER ';' CSV HEADER QUOTE '"' ENCODING 'LATIN1' NULL '';

update "hallmykl" set asciiname = 'Mo i Rana' where asciiname='Mo';

Merk at noen av tettstedene i perioder er del av en kommune og var ikke selvstendig bykommune. Noen av tettstedene hadde også så liten befolkning at de vil falle bort fra de fleste definisjoner av "by". Og så er det noen av tettstedene som fikk bystatus etter 1910.

Kommuner og fylker

Neste datafil er kommunenefila for 1910. Denne er trekt ut frå kommunedatabasen i NSD. Kommunedatabasen har muligheit for å lage kommunefiler for eit tidspunkt (år). Den aktuelle fila er for år 1910. Lista frå NSD-kommunedatabase som inneheld nsd-kommunenr (nsdknr) og nsd-kommunenamn (nsdknam) er overført (copy-paste) til MS-Excel. I MS-Excel er kommunenr brukt for å leggje til fylkesnummer. Fylkesnummer er danna ved funksjonen avrund.ned(nsdknr/100;0). I tillegg er det konstruert ein fjerde kolonne som viser om kommuna er by eller landsbygd. Dette feltet er konstruert med funksjonen: Hvis(nsdknr-(fylkenr*100)<10;1;0). Dvs. dersom nsdknr - fylkesnr*100 er mindre enn 10, så er kommuna ein bykommune.


-- Oppretter kommunefil for Norge i 1910

DROP TABLE IF EXISTS "nsd1910a";

CREATE TABLE "nsd1910a" (
  "nsdknr" INTEGER NOT NULL,
  "nsdknamn" VARCHAR(25),
  "fylke" INTEGER,
  "byland" INTEGER, 
   PRIMARY KEY (nsdknr)
);

COPY nsd1910a FROM '/home/arne/urbgeo/data/nsdexp10.csv' DELIMITER ';' CSV HEADER QUOTE '"' ENCODING 'LATIN1' NULL '';

Alter table nsd1910a add column asciiname varchar(25);
Alter table nsd1910a add column hmid integer;

-- Genererer asciiname uten nordiske teikn og standardiserer namn til gjeldande namn (Kristiania til Oslo)

update "nsd1910a" set asciiname = replace(nsdknamn,'å','aa');
update "nsd1910a" set asciiname = replace(asciiname,'Å','Aa');
update "nsd1910a" set asciiname = replace(asciiname,'æ','e');
update "nsd1910a" set asciiname = replace(asciiname,'ø','o');
update "nsd1910a" set asciiname = replace(asciiname,'Ø','O');
update "nsd1910a" set asciiname = replace(asciiname,'Æ','E');
update "nsd1910a" set asciiname = replace(asciiname,'Kristiania','Oslo');
update "nsd1910a" set asciiname = replace(asciiname,'Fredrikshald','Halden');

-- Sjekk av koblingene og standardisering

select count(*) from nsd1910a, hallmykl where nsd1910a.nsdknamn=hallmykl.tettstad;
select count(*) from nsd1910a, hallmykl where nsd1910a.asciiname=hallmykl.asciiname;

-- Setter hmid i nsd1910a fila
update nsd1910a set hmid=hallmykl.hmid from hallmykl where nsd1910a.asciiname=hallmykl.asciiname;

-- Kontroll av tettsteder som ikke bystatus i 1910

select hallmykl.hmid, hallmykl.tettstad, nsd1910a.nsdknamn from hallmykl left join nsd1910a on hallmykl.asciiname=nsd1910a.asciiname where nsd1910a.hmid is null;

Tellekretser og bytabell i 1910

På grunnlag av tellekretsene i 1910-tellingen blir det dannet tre tabeller: ED-tabellen (Enumeration District), Bytabell og en kildetabell.


-- Oppretter tabell for teljekrets (ed)

DROP TABLE IF EXISTS "ed1910";

CREATE TABLE "ed1910" (
  "id" VARCHAR(25) NOT NULL,
  "kildeid" INTEGER NOT NULL,
  "kretsnr" VARCHAR(25) NOT NULL,
  "tk_navn" VARCHAR(255),
  "sogn" VARCHAR(50),
  "prestegjeld" VARCHAR(50),
  "herred_by" VARCHAR(50),
  "merknader" VARCHAR(255),
  PRIMARY KEY (kildeid, kretsnr)
);

COPY ed1910 FROM '/home/arne/urbgeo/data/ft1910heleKrets.csv' DELIMITER ';' CSV HEADER QUOTE '"' ENCODING 'utf-8' NULL '';

-- Legg til ekstra felt id ed

Alter table ed1910 add column asciiname varchar(25);
alter table ed1910 add column byland INTEGER;

-- Standardiserer asciiname

update ed1910 set asciiname = replace(herred_by,'å','aa');
update ed1910 set asciiname = replace(asciiname,'Å','Aa');
update ed1910 set asciiname = replace(asciiname,'æ','e');
update ed1910 set asciiname = replace(asciiname,'ø','o');
update ed1910 set asciiname = replace(asciiname,'Ø','O');
update ed1910 set asciiname = replace(asciiname,'Æ','E');
update ed1910 set asciiname = replace(asciiname,'Kristiania','Oslo');
update ed1910 set asciiname = replace(asciiname,'Fredrikshald','Halden');
update ed1910 set asciiname = replace(asciiname,'Trondhjem','Trondheim');
update ed1910 set asciiname = replace(asciiname,'Porsgrund','Porsgrunn');
update ed1910 set asciiname = replace(asciiname,'Stenkjer','Steinkjer');
update ed1910 set asciiname = 'Sokndal' where prestegjeld is null and herred_by='Sogndal';

-- Merker teljekretser som er i by

update ed1910 set byland=1 from hallmykl  where ed1910.asciiname=hallmykl.asciiname;

-- Oppretter bytabell for 1900-teljinga

DROP TABLE IF EXISTS "by1910";

CREATE TABLE "by1910" (
  "hmid" INTEGER NOT NULL,
  "bynamn" VARCHAR(25),
  "nsdknr" INTEGER,
  "asciiname" VARCHAR(25)

);


-- laster bytabellen frå teljekretsar

insert into by1910 (hmid,bynamn,nsdknr,asciiname) select count(*), herred_by, count(*), min(asciiname) from ed1910 where byland=1 group by herred_by;

update by1910 set hmid=hallmykl.hmid from hallmykl where by1910.asciiname=hallmykl.asciiname;
update by1910 set nsdknr=nsd1910a.nsdknr from nsd1910a where by1910.asciiname=nsd1910a.asciiname;

alter table by1910 add  primary key (hmid);

-- oppretter kildetabell frå teljekretser

DROP TABLE IF EXISTS "kilde1910";

CREATE TABLE "kilde1910" (
  "hmid" INTEGER,
  "kildeid" INTEGER NOT NULL,
  "asciiname" VARCHAR(25),
  PRIMARY KEY (kildeid)
);

insert into kilde1910 (hmid,kildeid,asciiname) select count(*), kildeid, min(asciiname) from ed1910 where byland=1 group by kildeid;

-- Merker aller kilder med tettstadid (byid)

update kilde1910 set hmid=hallmykl.hmid from hallmykl where kilde1910.asciiname=hallmykl.asciiname;

Folketellingen 1900

På tilsvarende måte er det generert hjelpetabeller for [gisdb/ft1900|1900-tellingen]