rgeo-activerecord 0.4.5 gemを使用してPostGIS 1.5データベースに接続するproj4サポート付きのrgeo 0.3.19を使用しているレールアプリがあります。
私のアプリには、地理的なポイント、半径、および多角形を含む Region というモデルがあります。新しいリージョンを保存しようとすると、リージョンのジオファクトリのバッファ関数を使用して、半径と地理的ポイントを使用してポリゴンを作成します。
これは、地域モデルに使用されているジオファクトリーです
GEOFACTORY = RGeo::Geographic.projected_factory(:buffer_resolution => 8, :projection_proj4 => '+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs', :projection_srid => 3857)
私が使用している Projection_srid は、Apple および Google マップのメルカトル図法 3857 のものです。問題は、作成されているバッファーが、Apple マップまたは Google マップで描画しているものと同じサイズではないことです。たとえば、組み込みの MapKit 関数 MKCircle を使用すると、
[MKCircle circleWithCenterCoordinate:self.coordinate radius:50];
このように円を描いて重ねていきます。
しかし、データベース内のポリゴン形状を構成するバッファ関数から作成された座標を取得し、それらを Google マップにプロットすると、これが得られます。
ご覧のとおり、同じ投影システムを使用して作成されたポリゴンは、実際よりも小さくなっています。この問題は、定義された半径のサイズに基づいて指数関数的に制御不能になります。また、同じ結果が得られた RGeo で定義されている simple_mercator ファクトリを使用しようとしました。
経度、緯度の投影されたポイントがバッファリングされると、間違ったサイズのポリゴンが作成される理由について、誰かが洞察を持っていることを願っています。