8

アプリケーションに近隣データを取得しようとしていますが、使用しているデータに問題があり、ここから取得しました。

このファイルには、サンフランシスコの近隣を含むシェープファイルが含まれています。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

4 に答える 4

6

シェープ ファイルから取得したデータは、投影された地理データです。

あなたの質問から、データを緯度/経度で表示したいだけのように思えます。それを取得するには、データを再投影する必要があります。私は Ruby の専門家ではありませんが、簡単な Web 検索で、georuby は再投影http://georuby.rubyforge.org/をサポートしていませんが、 rgeoはサポートしていることがわかります。http://www.daniel-azuma.com/blog/archives/28

地図投影法について詳しく知りたい場合は、こちらをご覧ください。

ところで、http://gis.stackexchange.com という GIS (地理情報システム) の専門家向けの stackexchange サイトがあります。

于 2011-08-06T22:49:06.420 に答える
1

これはまだビューのログを取得していることに気付きました。RGeo で苦労しましたが、別の解決策があります。ruby コードを実行する前に、外で変換を行うことができる、または行う意思がある場合は、ogr2ogr をチェックしてください。

ここの下部にある私のコメントに詳細があります: How Can I Use (Ruby) RGeo to Transform (Unproject) Coordinates

于 2011-08-10T22:24:48.837 に答える
0

OSGB36 British National Grid 形式から WGS84 形式 (10 進度) に Shapefile で提供されるポイントを変換したかったので、この質問に出くわしました。これを理解するのに多くの時間を費やしたので、このコードが役立つことを願っています.

このコードは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
于 2015-03-05T09:58:35.160 に答える