如何转换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