如何转换Shapefile的坐标?

我正在尝试将邻居数据存入我的应用程序,并且我遇到了我正在使用的数据的问题,我从这里得到了这些数据。

此文件包含具有旧金山邻域的shapefile。 我正在运行Ruby on Rails框架,我目前正在使用GeoRuby来解析shapefile。

代码如下所示:

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之间时,所有点都具有数百万的值。 看一个示例点:

 , 

这些坐标值的格式是什么? 如何将它们转换为对我有意义的值? (即基于SRID 4326 WGS84空间参考系统的纬度/经度)

先感谢您!

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

从你的问题来看,听起来你真的只是想把你的数据放在lat / long。 为此,您需要重新投影数据。 我不是一个ruby家伙,但快速网络搜索显示georuby不支持重投影http://georuby.rubyforge.org/ ,但rgeo确实如此。 http://www.daniel-azuma.com/blog/archives/28

如果您想了解更多有关地图投影的信息,请查看此处 。

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

我注意到这仍然是一个视图记录。 我最终与RGeo挣扎,但还有另一种解决方案。 如果您能够/愿意在执行ruby代码之外/之前进行转换,请查看ogr2ogr。

我在底部的评论中有更多细节: 如何使用(Ruby)RGeo转换(取消)项目坐标

我遇到了这个问题,因为我想将Shapefile中提供的点从OSGB36英国国家网格格式转换为WGS84格式(十进制度)。 我花了很多时间搞清楚这一点,所以希望这段代码能certificate是有用的。

此代码使用ffi-ogr gem并需要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 

我遇到了同样的问题:想要将预测的地理数据转换为Lat / Long值。

ogr2ogr工具比我预期的更容易使用。

安装:

apt-get install gdal-bin

获取有关shapefile的信息:

ogrinfo data.shp -al -so

转换为Lat / Long和JSON:

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