Om man får punktkoordinater är de ganska ofta i koordinatsystemet WGS84, vilket är det koordinatsystem som Google Map och många GPS:er använder. Samtidig ska punkterna ofta läggas ut på en karta som är i den svenska standardprojektionen SWEREF99. Man måste alltså ändra projektion för punkterna så att de också anges i SWEREF99.
Koordinater anges med hjälp av en CRS-sträng eller en CRS-kod. Info om vilken CRS-sträng som motsvarar en viss projektion kan man hitta på bland annat http://spatialreference.org/. WGS84 motsvaras till exempel av CRS-strängen “+proj=longlat +datum=WGS84”.
Så här kan man göra för att översätta punktkoordinater till olika koordinatsystem:
library(spatial)
library(srgdal)
library(tidyverse)
# Läs in koordinater i WGS84-format (det format som t.ex. används av Google-maps)
dfadresser <- tibble::tribble(
~lat, ~lon,
59.8051214, 17.6896049,
59.7270467, 17.8089790,
59.9013531, 17.0176058,
59.9398745, 17.8720678,
60.0347762, 17.3069286,
59.9651196, 17.7671378,
59.8408899, 17.6307211,
59.5692486, 17.5310160,
59.5402218, 17.4972200,
59.7264353, 17.8079230
)
# Projection string for SWEREF99
SWEREF99TM <- "+proj=utm +zone=33 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"
# Skapa data frame med koordinater i SWEREF99
coordinates(dfadresser) = c("lon", "lat")
proj4string(dfadresser) = CRS("+proj=longlat +datum=WGS84")
koordSWEREF <- spTransform(dfadresser, CRS(SWEREF99TM))
dfadressSWEREF <- as_data_frame(koordSWEREF)
head(dfadressSWEREF)
# Nu är koordinaterna ändrade från WGS84 till SWEREF99
# A tibble: 6 x 2
# lon lat
# <dbl> <dbl>
# 1 650874. 6632770.
# 2 657936. 6624358.
# 3 612861. 6642145.
# 4 660454. 6648197.
# 5 628523. 6657526.
# 6 654477. 6650757.
Nästa steg kan vara att koppla koordinaterna till vilket län, kommun och tätort de tillhör. Det kan göras med “extract”-funktionen från “raster”-paketet (tack Björn Schulte-Herbrüggen från Region Uppsala för koden!):
# Vill man lägga på information från shape-filen om vilken kommun,
# tätort och län varje punkt ligger i kan man använda raster-paketets
# extract()-funktion. Koden, inkl. fria shape-filer från Lantmäteriet
# kan laddas hem från https://github.com/christianlindell/demokoordinat
path <- getwd()
kommun <- readOGR(paste0(path, "/", "karta"),"ak_riks")
tatort <- readOGR(paste0(path, "/", "karta"), "mb_riks")
# extract data
dfdata_kommun <- data.frame(coordinates(dfadressSWEREF),
raster::extract(kommun, dfadressSWEREF))
dfdata_tatort <- data.frame(coordinates(dfadressSWEREF),
raster::extract(tatort, dfadressSWEREF))
# merge dfs
dfdata_kommun1 <- dfdata_kommun %>%
select(lon, lat, LANSNAMN, KOMMUNNAMN) %>%
mutate(concat = paste(lat,lon,sep="_")) %>%
distinct()
dfdata_tatort1 <- dfdata_tatort %>%
select(lon, lat, KATEGORI, NAMN1) %>%
mutate(concat = paste(lat,lon,sep="_")) %>%
distinct()
dffinal <- merge(x=dfdata_tatort1[,c("concat","KATEGORI", "NAMN1")], y=dfdata_kommun1, by="concat")
dffinal <- dffinal %>% select(lon, lat, kommun=KOMMUNNAMN, lan=LANSNAMN, tatort=KATEGORI, tatort.namn=NAMN1)
head(dffinal)
# lon lat kommun lan tatort tatort.namn
# 1 641195.6 6602861 Håbo Uppsala län Tätort Råby
# 2 642982.7 6606165 Håbo Uppsala län Tätort Bålsta
# 3 657879.6 6624288 Knivsta Uppsala län Tätort Knivsta
# 4 657936.1 6624358 Knivsta Uppsala län Tätort Knivsta
# 5 650874.0 6632770 Uppsala Uppsala län Tätort Sävja
# 6 647413.9 6636619 Uppsala Uppsala län Tätort Uppsala
Koden och shapefilerna (fria filer från Lantmäteriet) kan laddas ned från GitHub