2011-08-06 23 views
8

Estoy tratando de obtener datos del barrio en mi aplicación, y estoy teniendo problemas con los datos que estoy usando, que obtuve del here.¿Cómo puedo transformar las coordenadas de un Shapefile?

Este archivo contiene un shapefile que tiene los vecindarios de San Francisco. Estoy ejecutando un framework de Ruby on Rails, y actualmente estoy usando GeoRuby para analizar el shapefile.

El código es el siguiente:

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 

El código es capaz de analizar el archivo, pero no soy capaz de entender las coordenadas según la interpretación. Todos los puntos tienen valores en millones, cuando esperaría coordenadas entre -180 y 180, para latitud y longitud válidas. Eche un vistazo a un punto de ejemplo:

<GeoRuby::SimpleFeatures::Point:0x00000104566a08 @srid=4326, @with_z=false, \ 
    @with_m=false, @x=6015402.9999795845, @y=2114960.4999904726, @z=0.0, @m=0.0>, 

¿Cuál es el formato de estos valores de coordenadas? ¿Cómo puedo convertirlos a valores que sean significativos para mí? (es decir, latitud/longitud según el SRID 4326 < => sistema de referencia espacial WGS84)

¡Gracias de antemano!

Respuesta

6

Los datos que tiene del archivo de forma son projected geographic data.

De su pregunta parece que realmente preferiría tener sus datos en lat/long. Para obtener eso, necesita reproyectar sus datos. No soy un chico ruby, pero una búsqueda rápida en la web revela que georuby no admite la reproyección http://georuby.rubyforge.org/, sin embargo, rgeo sí. http://www.daniel-azuma.com/blog/archives/28

Si desea obtener más información acerca de las proyecciones de mapas, consulte here.

Por cierto hay un sitio para StackExchange GIS (sistemas de información geográfica) expertos llaman http://gis.stackexchange.com

+0

Más específi Por supuesto, debe transformarse a través de Proj.4 http://virtuoso.rubyforge.org/rgeo/RGeo/CoordSys/Proj4.html –

+0

Muchas gracias, y he estado tratando de probar esto por un día completo ahora . No puedo probarlo todavía porque ahora me encontré con esto: https://github.com/dazuma/rgeo/issues/6 Afortunadamente, puedo solucionarlo y luego aceptar su respuesta. – Larry

1

Me di cuenta de esto todavía está consiguiendo un registro de puntos de vista. Terminé luchando con RGeo, pero hay otra solución. Si puede/desea hacer su conversión fuera/antes de ejecutar su código ruby, consulte ogr2ogr.

Hay más detalles en mi comentario en la parte inferior aquí: How Can I Use (Ruby) RGeo to Transform (Unproject) Coordinates

0

me encontré con esta pregunta, ya que quería transformar puntos suministrados en un archivo shape de formato OSGB36 británica National Grid al formato WGS84 (grados decimales) . Pasé mucho tiempo averiguando esto, así que espero que este código sea útil.

Este código utiliza la gema ffi-ogr y requiere la biblioteca 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 
0

que tenían el mismo problema: quería convertir datos geográficos proyectados a los valores de latitud/longitud.

La herramienta ogr2ogr fue mucho más fácil de usar de lo que esperaba.

Para instalar:

apt-get install gdal-bin

Obtener información sobre el archivo de formas:

ogrinfo data.shp -al -so

Convertir a Lat/Long y JSON:

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

+0

Estoy intentando con el mismo comando anterior pero obtengo un error de no poder abrir, solo tengo archivo de forma. Necesita .shx y .dbf también. – Guru

Cuestiones relacionadas