-
Notifications
You must be signed in to change notification settings - Fork 4
/
README.Rmd
127 lines (100 loc) · 2.95 KB
/
README.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
---
output: github_document
---
<!-- README.md is generated from README.Rmd. Please edit that file -->
[![CRAN_Status_Badge](http://www.r-pkg.org/badges/version-ago/shadow)](https://cran.r-project.org/package=shadow)
[![CRAN_Downloads_Badge](http://cranlogs.r-pkg.org/badges/last-month/shadow)](https://cran.r-project.org/package=shadow)
```{r, echo=FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "README-"
)
```
### Introduction
`shadow` is an R package for geometric shadow calculations in an urban environment. A detailed description can be found in the [R Journal paper (2019)](https://journal.r-project.org/archive/2019/RJ-2019-024/RJ-2019-024.pdf):
[![Abstract](README-abstract.png)](https://journal.r-project.org/archive/2019/RJ-2019-024/RJ-2019-024.pdf)
### Installation
CRAN version:
```{r installation1, eval=FALSE}
install.packages("shadow")
```
GitHub version:
```{r installation2, eval=FALSE}
install.packages("remotes")
remotes::install_github("michaeldorman/shadow")
```
## Documentation
The complete documentation can be found at [https://michaeldorman.github.io/shadow/](https://michaeldorman.github.io/shadow/).
### Quick demo
```{r demo1}
library(shadow)
library(raster)
# Point
location = rgeos::gCentroid(build)
# Time
time = as.POSIXct(
"2004-12-24 13:30:00",
tz = "Asia/Jerusalem"
)
# Location in geographical coordinates
proj4string(location) = CRS("+init=epsg:32636")
location_geo = sp::spTransform(
location,
CRS("+init=epsg:4326")
)
crs(location) = NA
# Solar position
solar_pos = maptools::solarpos(
crds = location_geo,
dateTime = time
)
solar_pos
# Shadow height at a single point
h = shadowHeight(
location = location,
obstacles = build,
obstacles_height_field = "BLDG_HT",
solar_pos = solar_pos
)
# Result
h
# Visualization
sun = shadow:::.sunLocation(
location = location,
sun_az = solar_pos[1, 1],
sun_elev = solar_pos[1, 2]
)
sun_ray = ray(from = location, to = sun)
build_outline = as(build, "SpatialLinesDataFrame")
inter = rgeos::gIntersection(build_outline, sun_ray)
plot(build)
plot(sun_ray, add = TRUE, col = "yellow")
plot(location, add = TRUE)
text(location, paste(round(h, 2), "m"), pos = 3)
plot(inter, add = TRUE, col = "red")
# Raster template
ext = as(extent(build)+50, "SpatialPolygons")
r = raster(ext, res = 2)
# Shadow height surface
height_surface = shadowHeight(
location = r,
obstacles = build,
obstacles_height_field = "BLDG_HT",
solar_pos = solar_pos,
parallel = 2
)
# Visualization
plot(height_surface, col = grey(seq(0.9, 0.2, -0.01)))
contour(height_surface, add = TRUE)
plot(build, add = TRUE, border = "red")
text(rgeos::gCentroid(build, byid = TRUE), build$BLDG_HT)
text(location, paste(round(h, 2), "m"), pos = 3, col = "red", font = 2)
plot(sun_ray, add = TRUE, col = "yellow")
plot(inter, add = TRUE, col = "red")
plot(location, add = TRUE)
```
```{r, include=FALSE}
x = list.files(pattern = "^README-.*\\.png$")
file.copy(x, "docs/", overwrite = TRUE)
```