Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

output format option #128

Open
Shaunson26 opened this issue Jan 27, 2023 · 3 comments
Open

output format option #128

Shaunson26 opened this issue Jan 27, 2023 · 3 comments

Comments

@Shaunson26
Copy link

Shaunson26 commented Jan 27, 2023

Is it possible to simply use rmapshaper to convert between json types e.g.

mapshaper -i input.geojson -o output.topojson format=topojson

I see in utils.R and sys_mapshaper(), that the cmd_args object created would not currently allow this option

cmd_args <- c(sys_mem, shQuote(in_data_file), command, "-o", shQuote(out_data_file))

would it be simple enough to allow a format parameter somewhere?

# some earlier format parameter wrangling if argument supplied .. resulting in something like this
cmd_args <- c(sys_mem, shQuote(in_data_file), command, "-o", shQuote(out_data_file), 'format=topojson')

if I run system2(ms_path, cmd_args), with command="", then i get a file type convert occurring .. so it seems to work

@Shaunson26
Copy link
Author

I had a play with this .. required a new ms_change_format() function and some minor changes to sys_mapshaper()..

Assuming you only allow file changes (only use of sys_mapshaper()) ..

Allow sys_mapshaper() to have format and outfile parameters, where if missing, format='' and outfile will be the current default temp_geojson(), and then introduce format to cmd_args

sys_mapshaper <- function(data, data2 = NULL, command, sys_mem = 8, format, outfile) {

  ...

  if (!missing(format)){
    format = paste0('format=', format)
  } else {
    format = ''
  }

  if(!missing(outfile)){
    out_data_file <- outfile
  } else {
    out_data_file <- temp_geojson()
  }

  if (!is.null(data2)) {
    cmd_args <- c(sys_mem, shQuote(in_data_file), command, shQuote(in_data_file2), "-o", shQuote(out_data_file), format)
  } else {
    cmd_args <- c(sys_mem, shQuote(in_data_file), command, "-o", shQuote(out_data_file), format)
  }

  system2(ms_path, cmd_args)

 ...
}

A new function

ms_change_format <- function(input, output, format, sys_mem = 8) {
  # check format, or file extention if format missing: shapefile|geojson|topojson|json|dbf|csv|tsv|svg
  sys_mapshaper(data = input, command = '', sys_mem = sys_mem, outfile = output, format = format)
}

Note that mapshaper say this about thr output parameter -o

format=shapefile|geojson|topojson|json|dbf|csv|tsv|svg Specify output format. If the format= option is missing, Mapshaper tries to infer the format from the output filename. If no filename is given, Mapshaper uses the input format. The json format is an array of objects containing data properties for each feature.

res <- 
  ms_change_format(input = geo_temp,
                   output =  topo_temp,
                   format = 'topojson')
Allocating 8 GB of heap memory
[o] Wrote C:\Users\Shaunus\AppData\Local\Temp\RtmpekjpbW\file6ac57152d61.topojson
``

@ateucher
Copy link
Owner

ateucher commented Apr 4, 2023

Hey @Shaunson26 sorry for the long delay in replying here. I'll have to think about this a bit more. I can understand the desire to convert geojson to topojson but that's not really the intent of this package. I feel like it belongs more in the domain of geojsonio as it's converting between formats rather than spatial operations. Did the work over there satisfy your need?

@Shaunson26
Copy link
Author

We solved the issue over there.

I do still think allowing a fuller suite of the mapshaper options in rmapshaper would be good - viewing it as an R port of mapshaper - but I'll leave that in your hands 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants