0

OSM データをオープン ソースの Minecraft ポート (javascript - voxel.jsで記述) に変換中です。JavaScript のレンディションは、各ボクセル (立方メートルとして任意に定義) が単一の原点 (x,y,z)(0,0,0) からの関係として作成されるように記述されています。

例として、ボクセルの立方体チャンクを作成したい場合、原点 (0,0,0) に対する関係としてボクセルを生成するだけです: [(0,0,0),(1,0,0) 、(0,1,0)...]。

私の質問は次のとおりです。OSM データをエクスポートしました。標準の XML 出力 (.osm) はノードを緯度と経度でプロットします。私の最初の考えは、 Haversine 式を使用して任意の原点 (0,0,0) = (37.77559, -122.41392) から各ノードの距離を計算し、距離をメートルに変換し、 (0,0,0) との関係としてプロットします。

しかし、他にも多くのエクスポート形式 (.osm.pbf、.osm2pgsql、.imposm) が利用できることに気付きました。ノードを同様の方法 (緯度、経度) でプロットすると想定していますが、データベース (PostgreSQL など) に直接インポートできるものもあります。

PostGIS のような PG アドオンを使用している人たちのことは聞いたことがありますが、(これが GIS に飛び込むのは初めてなので) 私はそれらの機能に慣れておらず、PostGISのようなものが OSM データを 2D ボクセル グリッドにプロットするのに役立つかどうかも知りません。

PostGIS のようなアドオン内に、2 つの緯度/経度ポイント間の距離を動的に計算し、それらを x、y 方式でプロットできる機能はありますか?

基本的に、私の質問は次のとおりです。OSM データを x、y グリッドにプロットするスクリプトを作成すると、車輪の再発明になりますか、それともより効率的な方法はありますか?

4

2 に答える 2

1

OSM データはデフォルトで WGS84 (EPSG:4326) 投影法であり、これは楕円体地球に基づいており、緯度と経度を度単位で測定します。

ほとんどのマップ タイルは、EPSG:900913 "Google" 球状メルカトル図法で生成されます。この図法は球体の地球に基づいており、緯度と経度は原点からメートル単位で測定されます。

900913 プロジェクションが要件に非常にうまく適合するようです。

2 つの間で変換するためのコードを 次に示します。

osm2psqlの使用を検討してください。インポート プロセス中に、すべての OSM マップ データが 900913 投影法に変換されます。残っているのは、簡単にアクセスできる Postgres データベース内の OSM マップ データのすべてのノード、ライン、およびポリゴンのデータベースです。

最初はこのプロセスに戸惑いましたが、非常に簡単で、OSM データを使用する際に多くの柔軟性が得られます。

于 2013-02-11T13:20:50.853 に答える
1

球座標 (LatLon、WGS84 を使用) から Google 球メルカトル図法などのデカルト座標に変換する必要があります。

疑似コードで

    transform(double lat, double lon) {

double wgs84radius = 6378137;
double shift = PI * wgs84radius;
double x = lon * shift / 180;
double y = log(tan((90+lat)*PI/360)/ (PI/180);
return {x,y}
}

これが最も簡単な方法です。Lat/Lon は角度であり、x と y は (0/0) からの距離であることに注意してください。

于 2013-02-11T14:57:51.583 に答える