Как я могу преобразовать координаты шейп-файла? - PullRequest
8 голосов
/ 06 августа 2011

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

Этот файл содержит шейп-файл с окрестностями Сан-Франциско. Я использую среду 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 голосов
/ 07 августа 2011

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

Судя по вашему вопросу, вы бы предпочли, чтобы ваши данные были в широте / долготе. Для этого вам необходимо перепроектировать ваши данные. Я не рубиновый парень, но быстрый поиск в сети показывает, что георуби не поддерживает репроекцию http://georuby.rubyforge.org/,, а rgeo -. http://www.daniel -azuma.com / блог / архив / 28

Если вы хотите узнать больше о проекциях карты, посмотрите здесь .

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

1 голос
/ 11 августа 2011

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

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

0 голосов
/ 06 ноября 2015

У меня была та же проблема: хотел преобразовать прогнозируемые геоданные в значения широты и долготы.

Инструмент ogr2ogr был намного проще в использовании, чем я ожидал.

Для установки:

apt-get install gdal-bin

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

ogrinfo data.shp -al -so

Преобразование в лат / лонг и JSON:

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

0 голосов
/ 05 марта 2015

Я сталкивался с этим вопросом, поскольку хотел преобразовать точки, поставляемые в шейп-файле, из формата OSGB36 British National Grid в формат 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
...