Как преобразовать координаты Шейп-файла?

Я пытаюсь получить данные соседству в мое приложение, и у меня возникли проблемы с данными, которые я использую, которые я получил от здесь.

этот файл содержит шейп-файл, который имеет окрестности Сан-Франциско. Я запускаю Ruby on Rails framework, и в настоящее время я использую 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 ответов


данные из формы файл по прогнозам географическим.

из вашего вопроса похоже, что вы действительно предпочли бы иметь свои данные в lat/long. Чтобы получить это, вам нужно перепроектировать свои данные. Я не рубиновый парень, но быстрый поиск в интернете показывает, что georuby не поддерживает reprojection http://georuby.rubyforge.org/, однако rgeo делает. http://www.daniel-azuma.com/blog/archives/28

Если вы хотите узнать больше о картографических проекций имеют вид здесь.

кстати есть сайт stackexchange для экспертов ГИС (геоинформационных систем) под названием http://gis.stackexchange.com


Я заметил, что это все еще получает журнал просмотров. Я закончил борьбу с RGeo, но есть другое решение. Если вы можете/хотите выполнить преобразование снаружи/перед выполнением кода ruby, проверьте ogr2ogr.

есть более подробная информация в моем комментарии внизу здесь: как я могу использовать (Ruby) RGeo для преобразования (непроектных) координат


я столкнулся с этим вопросом, поскольку хотел преобразовать точки, поставляемые в Шейп-файле из британского Национального формата сетки OSGB36 в формат WGS84 (десятичные Градусы). Я потратил много времени, выясняя это, поэтому надеюсь, что этот код окажется полезным.

этот код использует 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

получить информацию о вашем шейп:

ogrinfo data.shp -al -so

преобразовать в Lat / Long и JSON:

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