Как преобразовать координаты Шейп-файла?
Я пытаюсь получить данные соседству в мое приложение, и у меня возникли проблемы с данными, которые я использую, которые я получил от здесь.
этот файл содержит шейп-файл, который имеет окрестности Сан-Франциско. Я запускаю 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