Advertisement
Guest User

Untitled

a guest
Sep 16th, 2016
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.49 KB | None | 0 0
  1. # make dead-ends ratio map
  2.  
  3. library('ks')
  4. library('raster')
  5.  
  6. # connect to database
  7. library("RPostgreSQL")
  8. driver <- dbDriver("PostgreSQL")
  9. connection <- dbConnect(driver, dbname="", password="", user="", host="localhost")
  10.  
  11. cities = read.csv('cities.csv',stringsAsFactors=FALSE)
  12.  
  13. # iterate over cities
  14. for( i in 1:length(cities$name)){
  15. city = cities[i,'name']
  16. epsg = cities[i,'epsg']
  17. print(paste('working on',city))
  18.  
  19. d = dbGetQuery(connection,paste(
  20. "SELECT",
  21. "km,flags,",
  22. "car_comp AS cc,",
  23. "bike_comp AS bc,",
  24. "foot_comp AS fc,",
  25. "car_directness AS cd,",
  26. "bike_directness AS bd,",
  27. "foot_directness AS fd,",
  28. "ST_X(ST_Transform(ST_Centroid(geom_way),",epsg,")) AS x,", # meters
  29. "ST_Y(ST_Transform(ST_Centroid(geom_way),",epsg,")) AS y", # meters
  30. "FROM",city
  31. ))
  32.  
  33. # calculate grid resolution
  34. cell_size = 250 # square cell size in METERS
  35. bandwidth = 2000^2 # meters^2
  36. xres = round((max(d$x)-min(d$x)) / cell_size)
  37. yres = round((max(d$y)-min(d$y)) / cell_size)
  38.  
  39. # subset for each mode
  40. car = d[!is.na(d$cc),c('x','y','km','cc','cd')]
  41. #bike = d[!is.na(d$bc),c('x','y','km','bc','bd')]
  42. #foot = d[!is.na(d$fc),c('x','y','km','fc','fd')]
  43.  
  44. # calculate the KDE
  45. total_kde = kde(
  46. x=matrix(c(car$x,car$y),length(car$x),2),
  47. w=car$km / sum(car$km) * length(car$km),
  48. H=matrix(c(bandwidth,0,0,bandwidth),2),
  49. xmin=c(min(d$x),min(d$y)),
  50. xmax=c(max(d$x),max(d$y)),
  51. gridsize=c(xres,yres),
  52. approx.cont=FALSE,
  53. verbose=TRUE
  54. )
  55. # rasterize
  56. total = raster(total_kde)
  57. projection(total) = CRS(paste0('+init=epsg:',epsg))
  58. # scale to the length of road
  59. total = (total / sum(total_kde$estimate)) * sum(car$km)
  60.  
  61. # deadends
  62. deadcar = car[car$cc==-1,]
  63. dead_kde = kde(
  64. x=matrix(c(deadcar$x,deadcar$y),length(deadcar$x),2),
  65. w=deadcar$km / sum(deadcar$km) * length(deadcar$km),
  66. H=total_kde$H, # reuse H from the total version
  67. xmin=c(min(d$x),min(d$y)),
  68. xmax=c(max(d$x),max(d$y)),
  69. gridsize=c(xres,yres),
  70. verbose=TRUE
  71. )
  72. # rasterize
  73. dead = raster(dead_kde)
  74. projection(dead) = CRS(paste0('+init=epsg:',epsg))
  75. # scale to the length of dead-end road
  76. dead = (dead / sum(dead_kde$estimate)) * sum(deadcar$km)
  77.  
  78. # Percent Dead-ends
  79. percent = dead / total
  80. percent[is.na(percent)] = 0
  81. percent[percent>1] = 1
  82.  
  83. banded_raster = addLayer(total,dead,percent)
  84. names(banded_raster) = c('car_total','car_dead','car_percent')
  85.  
  86. # output the file as geotiff
  87. writeRaster(
  88. banded_raster,
  89. filename=paste0('data/ratio-rasters/',city,'_car.tiff'),
  90. format='GTiff',
  91. overwrite=TRUE
  92. )
  93. }
  94.  
  95. dbDisconnect(connection)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement