使用KML生成几何体

时间:2014-05-02 17:02:29

标签: postgresql kml postgis rails-geocoder rgeo

我是否有人已经做过以下描述。我甚至都不知道它是否可能。

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

1 个答案:

答案 0 :(得分:3)

我终于做到了

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