2009年9月27日日曜日

OpenLayers で東京都の地図表示 5c 東京都の公共施設を追加3

tokyo_bmi_pgis_img.html に tokyo_pf_pgis.map の pf_tokyo レイヤをオーバーレイしてみます。
これにより、tokyo_pf_pgis.map の gyoseikai レイヤ(layer3)pf_tokyo レイヤ(layer4) が再投影されます。

地図を拡大するため、コントロールパネルの "+" を3回クリックすると、公共施設の位置が表示されました。

1 layer3 と layer4 を追加。
2 この地図の投影(projection:プロジェクション)。
3 マウスの位置(MousePosition)を度数表示にするための設定。(できませんでした。)

---
<script type="text/javascript">
var map, layer1, layer2, layer3, layer4;
function init(){
map = new OpenLayers.Map('map', {
projection: new OpenLayers.Projection("EPSG:2456"), //<-2
displayProjection: new OpenLayers.Projection("EPSG:4326"), //<-3
maxResolution: 'auto',
units: 'meters',
maxExtent: new OpenLayers.Bounds(-279000,1054000,-185000,1104000)
});

layer1 = new OpenLayers.Layer.WMS( "Tokyo Height WMS",
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/nob61/mapfile/tokyo_bmi_pgis_img.map',
layers: 'height',
format: 'image/png'
});

layer2 = new OpenLayers.Layer.WMS( "Tokyo Kukaku Sen WMS",
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/nob61/mapfile/tokyo_bmi_pgis_img.map',
layers: 'kukaku',
transparent: true,
format: 'image/png'
});

layer3 = new OpenLayers.Layer.WMS( "Tokyo Gyoseikai mlit WMS",
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/nob61/mapfile/tokyo_pf_pgis.map',
layers: 'gyoseikai',
transparent: true,
format: 'image/png'
});

layer4 = new OpenLayers.Layer.WMS( "Tokyo Public Facilities WMS", //<-1
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/nob61/mapfile/tokyo_pf_pgis.map',
layers: 'pf_tokyo',
transparent: true,
format: 'image/png'
});

map.addLayers([layer1, layer2, layer3, layer4]); //<-1
map.addControl(new OpenLayers.Control.LayerSwitcher());
map.addControl(new OpenLayers.Control.MousePosition()); //<-3
map.zoomToMaxExtent()

}
</script>
---


8 件のコメント:

未熟者 さんのコメント...

はじめまして。
私は、今学校でOpenlayersの勉強をしています。まだまだ勉強不足ですが...
そこで、質問があります。
EditingToolbar というものがありますが、それにUndoのような機能を付け加えることは可能なのでしょうか?
教えていただければと思います。
よろしくお願い致します。

nobmob さんのコメント...

NavigationHistory コントロールコントロールパネルを使うと擬似的に使えるかもしれません。
(別のディスクのDebianにあるので後で確かめてみます。)
「擬似的に」と言うのは、描画した工程だけでなく、地図を拡大縮小した工程も対象になるからです。
このブログの「OpenLayers 15j 操作を 戻る・進む ボタン(2008.10.16)」や OpenLayers ホームページの example の 「Map Navigation History Example」を参照してみてください。

以前のバージョンには、UndoRedo コントロールがあったようですが、現在はないようです。

私もググってみましたが、ピッタリしたものは見つかりませんでした。

未熟者 さんのコメント...

回答して頂きありがとうございます。
OpenLayersに新たな機能を付け加えたいと思い、それでUndoのようなものをと思ったのですが...
自力で付け加えることは可能なのでしょうか?

nobmob さんのコメント...
このコメントは投稿者によって削除されました。
nobmob さんのコメント...

私自身は OpenLayers はユーザレベルなので、コードを作成することはかなり困難です。

未熟者さんの考えている機能のレベルはどのくらいのものでしょうか?

OpenLayers の機能として採用を望んでいるのでしょうか?それとも自分の独自機能でしょうか?

他にも、機能作成の理由、作業時間、スキルなどの条件がありますので、それに合った計画を考えてみてください。

それが分かればいいアドバイスができるかもしれません。

未熟者 さんのコメント...

やはり難しいんですね...

何かしら新しい機能(独自の機能です)を付け加えなくてはならない課題なんです。

OpenLayersは超のつく初心者です。
1週間でやれと言われ、どんな機能がいいのかも分からず困ってしまいまして...
何かアドバイス頂ければ幸いです。
何度も申し訳ありません。
よろしくお願いいたします。

nobmob さんのコメント...

NavigationHistory コントロールパネルは動作できませんでした。すいません。

EditingToolbar の流れで考えてみました。

1 描画した図をすべて削除するのは destroyFeatures を使用して簡単にできました。

2 selectControl で選択した図だけ削除するのを試しましたが、うまくできませんでした。

3 OpenLayers の examples の 「Snapping & Splitting」に undo 動作のヒントになるようなコードがありました。

自分では確認できないものもあって申し訳ないのですが、できそうなものを試してみてください。

未熟者 さんのコメント...

分かりました。
試してみます。
本当にお手数おかけしました。
ありがとうございます!!
助かりました(^-^)

また、何かありましたらアドバイス等頂きたいと思います。
よろしくお願いいたします。