Guest User

Untitled

a guest
Aug 7th, 2018
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.40 KB | None | 0 0
  1. esri2sf <- function(url, outFields=c("*"), where="1=1", token='') {
  2. library(httr)
  3. library(jsonlite)
  4. library(sf)
  5. library(dplyr)
  6. layerInfo <- jsonlite::fromJSON(
  7. httr::content(
  8. httr::POST(
  9. url,
  10. query=list(f="json", token=token),
  11. encode="form",
  12. config = httr::config(ssl_verifypeer = FALSE)
  13. ),
  14. as="text"
  15. )
  16. )
  17. print(layerInfo$type)
  18. geomType <- layerInfo$geometryType
  19. print(geomType)
  20. queryUrl <- paste(url, "query", sep="/")
  21. esriFeatures <- getEsriFeatures(queryUrl, outFields, where, token)
  22. simpleFeatures <- st_read(esriFeatures)
  23. return(simpleFeatures)
  24. }
  25.  
  26. getEsriFeatures <- function(queryUrl, fields, where, token='') {
  27. ids <- getObjectIds(queryUrl, where, token)
  28. if(is.null(ids)){
  29. warning("No records match the search critera")
  30. return()
  31. }
  32. idSplits <- split(ids, ceiling(seq_along(ids)/500))
  33. results <- lapply(idSplits, getEsriFeaturesByIds, queryUrl, fields, token)
  34. merged <- unlist(results, recursive=FALSE)
  35. return(merged)
  36. }
  37.  
  38. getObjectIds <- function(queryUrl, where, token=''){
  39. # create Simple Features from ArcGIS servers json response
  40. query <- list(
  41. where=where,
  42. returnIdsOnly="true",
  43. token=token,
  44. f="json"
  45. )
  46. responseRaw <- httr::content(
  47. httr::POST(
  48. queryUrl,
  49. body=query,
  50. encode="form",
  51. config = httr::config(ssl_verifypeer = FALSE)),
  52. as="text"
  53. )
  54. response <- jsonlite::fromJSON(responseRaw)
  55. return(response$objectIds)
  56. }
  57.  
  58. getEsriFeaturesByIds <- function(ids, queryUrl, fields, token=''){
  59. # create Simple Features from ArcGIS servers json response
  60. query <- list(
  61. objectIds = paste(ids, collapse=","),
  62. outFields = paste(fields, collapse=","),
  63. token = token,
  64. outSR = '4326',
  65. f = "geojson"
  66. )
  67. responseRaw <- httr::content(
  68. httr::POST(
  69. queryUrl,
  70. body=query,
  71. encode="form",
  72. config = httr::config(ssl_verifypeer = FALSE)
  73. ))
  74. return(responseRaw)
  75. }
  76.  
  77. generateToken <- function(server, uid, pwd='', expiration=5000){
  78. # generate auth token from GIS server
  79. if (pwd=='') {
  80. pwd <- rstudioapi::askForPassword("pwd")
  81. }
  82. query <- list(
  83. username=uid,
  84. password=pwd,
  85. expiration=expiration,
  86. client="requestip",
  87. f="json"
  88. )
  89. url <- paste(server, "arcgis/admin/generateToken", sep="/")
  90. r <- httr::POST(url, body=query, encode="form")
  91. token <- jsonlite::fromJSON(httr::content(r, "parsed"))$token
  92. return(token)
  93. }
Add Comment
Please, Sign In to add comment