【问题标题】:Use KML to generate geometry使用 KML 生成几何图形
【发布时间】:2014-05-02 17:02:29
【问题描述】:

我在问是否有人已经完成了以下描述。我什至不知道这是否可能。

我想使用 KML 文件生成记录在我的 PostgreSQL 数据库中的多边形(使用 PostGIS)。

【问题讨论】:

  • 您是问如何将 KML 文件导入 Postgres 或如何从 Postgres/GIS 生成 KML?
  • 这是关于将 KML 导入 Postgres。我发现这个 GEM 似乎与我的研究相匹配:GeoRuby 我目前正在研究它。如果我有一些确凿的结果,我会告诉你的。
  • 如果不行,试试 ogr2ogr
  • 谢谢。我做的。我添加了一个来自 iNaturalist 的链接,对我有很大帮助
  • 太棒了。一旦是 postgis,您可以选择一大堆格式,例如 geojson amd kml。

标签: postgresql kml postgis rails-geocoder rgeo


【解决方案1】:

我终于做到了

geometry = GeoRuby::SimpleFeatures::MultiPolygon.new
doc = kml =~ /\<kml / ? Nokogiri::XML(kml) : Nokogiri::XML.fragment(kml)
doc.search('Polygon').each_with_index do |hpoly,i|
  poly = GeoRuby::SimpleFeatures::Geometry.from_kml(hpoly.to_s)
end
geometry.empty? ? nil : geometry

kml文件直接就是我应用open方法上传的文件。

我从inaturalist的这份文档中找到了很多灵感

顺便说一句。我发现了另一个问题:存储它。 我没有找到任何方法将来自 GeoRuby 的点转换(和投影)到 RGeo。这就是为什么我最终自己解析它的原因:

@doc = Nokogiri::XML(kml)
@doc.css('Placemark').each do |placemark| 
  coordinates = placemark.at_css('coordinates')

  if coordinates
    coordinates.text.split(' ').each do |coordinate|
      (lon,lat,elevation) = coordinate.split(',')
      points << Geo::StorageFactory.point(lon.to_f, lat.to_f)
      print "#{lat},#{lon}"
        puts "\n"
      end

  end
end

@area = Geo::StorageFactory.polygon(Geo::StorageFactory.line_string(points)).projection

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2018-04-17
    • 1970-01-01
    相关资源
    最近更新 更多