2011-08-06 7 views
8

Próbuję wprowadzić dane dotyczące dzielnicy do mojej aplikacji i mam problemy z danymi, których używam, które dostałem od here.Jak mogę przekształcić współrzędne pliku Shapefile?

Ten plik zawiera plik shapefile z okolicami San Francisco. Używam frameworka Ruby on Rails i obecnie używam GeoRuby do parsowania pliku shape.

Kod wygląda następująco:

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 

Kod jest w stanie przetworzyć plik, ale nie jestem w stanie zrozumieć, jak interpretować współrzędne. Wszystkie punkty mają wartości w milionach, kiedy spodziewam się współrzędnych od -180 do 180, dla prawidłowej szerokości i długości geograficznej. Spójrz na przykładowy punkt:

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

Jaki jest format tych współrzędnych wartości? Jak mogę przekonwertować je na wartości, które są dla mnie znaczące? (tj. szerokość/długość geograficzna oparta na SRID 4326 < => przestrzenny układ odniesienia WGS84)

Z góry dziękuję!

Odpowiedz

6

Dane, które masz z pliku kształtu, to projected geographic data.

Z twojego pytania wynika, że ​​naprawdę wolisz mieć swoje dane w sieci. Aby to zrobić, musisz zreorganizować swoje dane. Nie jestem facetem z rubinem, ale szybkie wyszukiwanie w sieci ujawnia, że ​​georuby nie obsługuje reprojection http://georuby.rubyforge.org/, jednak robi to rgeo. http://www.daniel-azuma.com/blog/archives/28

Jeśli chcesz dowiedzieć się więcej o rzutach map, spójrz na here.

Nawiasem mówiąc nie jest to strona Stack Exchange Network dla GIS (Geographic systemów informatycznych) Eksperci nazywa http://gis.stackexchange.com

+0

Więcej specyfi cally, musisz przekształcić przez Proj.4 http://virtuoso.rubyforge.org/rgeo/RGeo/CoordSys/Proj4.html –

+0

Dziękuję bardzo, i próbowałem przetestować to przez cały dzień teraz . Nie mogę go jeszcze przetestować, ponieważ teraz mam na to ochotę: https://github.com/dazuma/rgeo/issues/6 Mam nadzieję, że będę mógł obejść to i zaakceptować twoją odpowiedź. – Larry

0

natknąłem to pytanie ponieważ chciałem przekształcić punkty dostarczonych w Shapefile z formatu OSGB36 brytyjski National Grid w formacie WGS84 (stopnie dziesiętne) . Spędziłem dużo czasu na zastanawianiu się nad tym, więc mam nadzieję, że ten kod okaże się przydatny.

Ten kod wykorzystuje ffi-ogr gem i wymaga biblioteki 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

miałem ten sam problem: chciał konwertować prognozowanych geodanych do Lat Long wartości /.

Narzędzie ogr2ogr było znacznie łatwiejsze w użyciu, niż się spodziewałem.

Aby zainstalować:

apt-get install gdal-bin

Uzyskaj informacje o swojej shapefile:

ogrinfo data.shp -al -so

konwertować do Lat/Long i JSON:

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

+0

Próbuję za pomocą tego samego polecenia powyżej, ale otrzymuję błąd braku możliwości otwarcia, mam tylko plik kształtu, który potrzebuje również .shx i .dbf. – Guru

Powiązane problemy