如何转换Shapefile的坐标?

8
我正在尝试将社区数据导入我的应用程序中,但我使用的数据有问题,这些数据是从此处获取的。
该文件包含一个形状文件,其中包含旧金山的社区。我正在运行Ruby on Rails框架,目前正在使用GeoRuby解析形状文件。
代码如下:
def self.run_import
  shpfile = '/path/to/realtor_neighborhoods/realtor_neighborhoods'
  ShpFile.open(shpfile) do |shp|
    shp.each do |shape|
      # This gets the first (and only) Polygon from each MultiPolygon
      polygon = shape.geometry.geometries.first 
      puts polygon.inspect
    end
  end
end

代码能够解析文件,但我无法理解它所解释的坐标。所有点的值都在百万级别,而我期望有效的纬度和经度之间的坐标应该在-180到180之间。请看一个示例点:
<GeoRuby::SimpleFeatures::Point:0x00000104566a08 @srid=4326, @with_z=false, \
   @with_m=false, @x=6015402.9999795845, @y=2114960.4999904726, @z=0.0, @m=0.0>,

这些坐标值的格式是什么?我该如何将它们转换为对我有意义的值?(例如,基于SRID 4326 <=> WGS84空间参考系统的纬度/经度)谢谢!
4个回答

6

您从形状文件中获得的数据是投影地理数据

从您的问题中可以看出,您似乎更喜欢使用经度/纬度来处理数据。要做到这一点,您需要重新投影您的数据。我不是一个 Ruby 专家,但快速搜索网络表明 georuby 不支持重新投影 http://georuby.rubyforge.org/,然而 rgeo 支持。 http://www.daniel-azuma.com/blog/archives/28

如果您想了解更多关于地图投影的知识,请查看这里

顺便提一下,有一个专门为GIS(地理信息系统)专家设计的StackExchange网站,名为http://gis.stackexchange.com


更具体地说,您需要通过Proj.4进行转换 http://virtuoso.rubyforge.org/rgeo/RGeo/CoordSys/Proj4.html - Mike T
非常感谢,我已经尝试测试了整整一天了。现在实际上我还无法测试它,因为我遇到了这个问题: https://github.com/dazuma/rgeo/issues/6
希望我可以解决这个问题,然后接受你的答案。
- Larry

1

我注意到这个问题仍然有很多人浏览。我最终在使用RGeo时遇到了困难,但还有另一种解决方案。如果你能够/愿意在执行Ruby代码之外/之前进行转换,请查看ogr2ogr。

关于此问题,我的评论底部有更多详细信息: 如何使用(Ruby)RGeo转换(取消投影)坐标


0

我在寻找一个解决方案时遇到了这个问题,我想将Shapefile中提供的点从OSGB36英国国家网格格式转换为WGS84格式(十进制度)。我花了很多时间弄明白这个问题,希望这段代码对大家有所帮助。

这段代码使用ffi-ogr宝石,并需要GDAL库:

require 'ffi-ogr'

data = OGR.read file_name
new_spatial_ref = OGR.import_sr(4326, 'epsg')

data.layers.each do |layer|
  transformer = OGR::CoordinateTransformation.find_transformation(layer.spatial_ref, new_spatial_ref)

  layer.features.each do |feature|
    geometry = OGR::Tools.cast_geometry(feature.geometry)
    geometry.transform(transformer)

    # Do something with geometry here
  end
end

0

我曾遇到同样的问题:想要将投影地理数据转换为经纬度数值。

ogr2ogr工具比我预期的要容易使用得多。

安装方法:

apt-get install gdal-bin

获取关于您的形状文件的信息:

ogrinfo data.shp -al -so

转换为经纬度和JSON格式:

ogr2ogr -f GeoJSON -t_srs WGS84 data.json data.shp


我正在尝试使用上面相同的命令,但是出现了无法打开的错误,我只有shape文件,需要.shx和.dbf文件吗? - Gourav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接