我有一个 Sinatra 应用程序,我正在使用post
GeoJSON(多边形)到.. 在我之前,我正在寻找一个 gem/脚本来将 JSON 转换为 KML。到电子邮件(使用邮件gem)。
我能找到的最接近的东西是georuby,它似乎还没有这样的转换,肯定有办法......??或者也许这更好地手动实现:?
Ruby 新手(来自 Python/JavaScript 背景),因此非常感谢您的小步骤!
编辑:为了我的目的,更容易(“手动”)转换坐标,并插入模板 kml erb/ 字符串。
(我也找不到将 KML 转换为 GeoJSON 的纯 Ruby 库......?)
如果ogr2ogr
二进制文件在您的系统上可用并且您可以写入 tmp 目录:
require 'tmpdir'
require 'fileutils'
tmpdir = Dir.mktmpdir
geojson_path = File.join(tmpdir, 'a.geojson') # the input
kml_path = File.join(tmpdir, 'a.kml') # the output
File.open(geojson_path, 'w') do |f|
# params[:geojson] is from the web request
f.write params[:geojson]
end
Kernel.system 'ogr2ogr', '-f', 'KML', kml_path, geojson_path
# now you can email kml
kml = File.read(kml_path)
FileUtils.rm_rf tmpdir
您可以使用名为FFI-OGR的新 gem来执行此操作。
FFI 或Foreign Function Interface允许 Ruby 调用用其他语言编写的函数,而无需编写本机代码。FFI-OGR 在 Ruby 中包装了 OGR 的 C 实现。
添加gem 'ffi-ogr', git: 'https://github.com/scooterw/ffi-ogr'
到您的Gemfile
并运行bundle install
. 然后,在您进行转换的任何脚本中,您将编写如下内容:
require 'ffi-ogr'
# read in GeoJSON
geojson = OGR.read 'path/to/file.geojson'
# output as KML, write to file
geojson.to_kml 'destination/of/file.kml'
GeoRuby 是相当新的,工具还没有很好地构建。但是,@scooterw正在领导开发一些具有基本功能的 Ruby 工具。
查看FOSS4G 2014 中的示例了解更多信息,并加入Github 上的 GeoRubyists 组。