· 6 years ago · Oct 05, 2019, 07:14 AM
1---
2title: "Distanzbestimmung"
3output: html_document
4---
5
6```{r setup, include=FALSE}
7knitr::opts_chunk$set(echo = TRUE)
8```
9
10## Lade Pakete und setze API Key
11
12```{r Pakete laden und API Key setzen}
13# Pakete laden
14library(readxl)
15library(googleway)
16library(ggmap)
17library(sf)
18library(dplyr)
19
20#API Key bestimmen
21set_key()
22api_key <- ""
23register_google(key=api_key)
24
25```
26
27## Geocoding und Distanzen bestimmen
28Da die googledistance u.Ä. Funktionen keine Flug-, sondern maximal Fahrtzeiten und -distanzen berechnen, können diese nicht für unsere Beispiele verwendet werden. Die Verwendung wäre lediglich für nationale Adressen möglich, bei denen von einer Routenentscheidung per Auto oder Zug ausgegangen werden kann. Für einige internationale Adressen hingegen ist die Funktion nicht anwendbar (wegen Übersee).Stattdessen werden die Geodaten (Koordinaten) der Adressen bestimmt und mit diesen die Distanzen berechnet.
29<!-- 1. Beispielstrings für Distanzen/Orte bestimmen (national und international) -->
30<!-- 2. Geodaten für diese Orte bestimmen -->
31<!-- 3. Die Distanzen zwischen Orten in einem String bestimmen -->
32
33Zunächst müssen die Adressen für eine Variable aufgerufen werden. Dabei gilt zu beachten, dass die Adressen-Kombinationen in einer Kooperation erhalten bleiben müssen und die Ergebnisse am Ende wieder den ursprünglichen Daten zugeordnet werden können.
34```{r Aufrufen der Adressen}
35# Lade Datensatz -> Faustnetzwerk
36df<- read_excel("//faust/Abtuebergreifend/Projekte/DEKIF/DZHW Hannover/AP5/Adressrecherche/Gesamttabelle/förderlinien_gesamt.xlsx", col_types = rep("text",51))
37# df <-read_excel(paste("/Users/maltehuckstadt/Documents/GitHub/AP5/Adressrecherche/",
38# "R-Codes/Datenaufbereitung/förderlinien_gesamt.xlsx", sep = ""),
39# col_types = rep("text",51)) # rep("text",50) : alle 50 eingelesen
40# # Spalten-Vektoren sind "text"
41
42# Erstelle Subset mit Distanz-relevanten Variablen
43df_Antr_Inst <- subset(df, select = c(Antr_Inst))
44
45#Dummy-subset für interne Codierung
46df_Antr_Inst <- data.frame(head(df_Antr_Inst, 10))
47
48```
49
50Im nächsten Schritt wird an jede Spalte (a1) eine Spalte (a2) angefügt, die die Adressinformationen [PLZ City, Country] für die Adressen aus (a1) enthält.
51
52```{r Anfügen einer Adressspalte}
53#eine Spalte wird an jede Adressspalte angefügt, die lediglich die Adressinformationen enthält (hier Bsp. Antr_Inst), mehrere Adressinformationen müssen beibehalten werden
54df_Antr_Inst <- transform(df_Antr_Inst, geo_Antr_Inst=stringr::str_extract_all(Antr_Inst, "\\[\\d+\\s\\w+\\,\\s\\w+\\]", simplify=TRUE), stringsAsFactors=FALSE)
55
56#in dieser Spalte müssen NAs mit leeren Einträgen ersetzt werden
57df_Antr_Inst$geo_Antr_Inst.1[is.na(df_Antr_Inst$geo_Antr_Inst.1)]<-""
58
59```
60Nun müssen die Adressspalten umcodiert werden in die entsprechenden Geodaten pro Eintrag.
61
62```{r Geocodierung}
63#die eckigen Klammer ([ ]) müssen entfernt werden, für geo_Antr_Inst.1
64df_Antr_Inst$geo_Antr_Inst.1 <- str_replace_all(df_Antr_Inst$geo_Antr_Inst.1, "(\\[)|(\\])", "")
65
66#die eckigen Klammer ([ ]) müssen entfernt werden, für geo_Antr_Inst.2
67df_Antr_Inst$geo_Antr_Inst.2 <- str_replace_all(df_Antr_Inst$geo_Antr_Inst.2, "(\\[)|(\\])", "")
68
69#das Format data.frame muss bestätigt werden
70df_Antr_Inst <- as.data.frame(df_Antr_Inst)
71
72#die Spalte geo_Antr_Inst.1 mit den Adressen wird geocodiert
73df_Antr_Inst <- mutate_geocode(df_Antr_Inst, geo_Antr_Inst.1)
74
75#die Spalte geo_Antr_Inst.2 mit den Adressen wird geocodiert
76df_Antr_Inst <- mutate_geocode(df_Antr_Inst, geo_Antr_Inst.2)
77
78```
79
80
81```{r Distanzen zwischen Geodaten berechnen}
82distanz_sfc <- st_sfc(st_point(c(df_Antr_Inst$lon, df_Antr_Inst$lat)), st_point(c(df_Antr_Inst$lon, df_Antr_Inst$lat))) #funktioniert nicht
83
84
85```
86
87```{r Distanzen zwischen Geodaten berechnen (Muster-Beispiel)}
88#st_distance erlaubt Distanzenmatrix für variable Anzahl an Distanz-Kombinationen
89# Erstelle Geodaten-Liste für nationale Werte
90geo_national_sfc <- st_sfc(st_point(c(13.3,52.5)), st_point(c(7.84,48.0)), st_point(c(10.5, 52.3)), crs = 4326)
91
92geo_national_matrix <- st_distance(geo_national_sfc)
93geo_national_matrix
94
95# Erstelle Geodaten-Liste für internationale Werte
96geo_international_sfc <- st_sfc(st_point(c(-64.4, 45.9)), st_point(c(7.84,48.0)), st_point(c(13.3,52.5)), crs = 4326)
97geo_international_matrix <- st_distance(geo_international_sfc)
98
99```