私は OpenLayers マップを使用しており、異なる座標系を使用する異なるマップサーバーを使用したいと考えています。OpenLayers はそれを同じマップに統合し、座標系を自動的に変換できますか?
3 に答える
レイヤーによっては、実際には変換できないある種のベースレイヤー (マップ) が常に存在します。そのマップにデータ (マーカー、geo json など) を追加する場合は、ベースレイヤーが使用している投影法に変換する必要があります。
マーカーの場合、これは次の方法で簡単に実行できます。
// defining our coordinate systems
var google = new OpenLayers.Projection("EPSG:900913"),
latlon = new OpenLayers.Projection("EPSG:4326");
// transforming the location to the right coordinate system
var location = new OpenLayers.LonLat( 10, 10 ).transform( latlon, google );
// assuming you made an icon and marker layer
var marker = new OpenLayers.Marker( location, icon );
markerLayer.addMarker( marker );
あるシステムから別のシステムへの位置情報の変換については、Openlayers のドキュメントを参照してください。
マップ サーバーが異なるラスターを提供している場合は、うまくいかない可能性があります。
ただし、それらがベクトル (KML ファイルなど) または JavaScript で記述されたマップ オブジェクト (Dre の回答など) を提供している場合は、異なる投影法間で変換して、すべてのデータがベース マップと同じ投影法および座標系に表示されるようにすることができます。 . OpenLayers にはこのためのフックがあります (Dre の回答を参照) が、おそらく機能を提供する Proj4JS ライブラリを含める必要があります。
または、Proj4JS を使用して、プロットする前に座標を変換することもできます。
これは古い質問ですが、検索でこれに出くわし、これが他の人に役立つ場合に備えてチャイムを鳴らすかもしれないと思いました.
これは、提起された質問で直面した状況とは異なる場合がありますが、最近、同様の状況に遭遇しました。私の場合、2 つの異なる WMS プロバイダーからの出力を 1 つのマップに表示する必要がありました。1 つは EPSG:900913 でサービスを提供し、もう 1 つは EPSG:3857 でサービスを提供しました。これらが機能的に同等であることを知っていたので、サービスを機能させる方法でそれらを要求できれば、マップが出力で機能できるようになると考えました。私の地図は 900913 にあります (したがって、他のサービスはデフォルトでこの投影法の使用を要求します)。
他のサービスを正しくリクエストする方法は次のとおりです(情報を記入してください):
var myLayer = new OpenLayers.Layer.WMS(
"Name",
"URL", {
"layer": "layer"
});
myLayer.projection = "EPSG:3857";
通常?request=getCapabilities
、サービス URL に追加すると、目的のレイヤーの CRS タグで、サービスから利用できるプロジェクションを確認できます。