2013年11月25日月曜日

23 - OpenLayers で地図を重ねる 2 - 数値標高モデルの画像の地図を重ねる1

23-2 東京都の地図に数値標高モデルの画像の地図を重ねる
「基盤地図情報閲覧コンバートソフト」で作成した東京都の数値標高モデルの画像は、最初、緯度経度の表示で投影法が設定されていません。

user@debian7-vmw:~/mapdata/tokyo$ gdalinfo tokyo10m.png
Driver: PNG/Portable Network Graphics
Files: tokyo10m.png
       tokyo10m.pgw
Size is 2310, 1467
Coordinate System is `'
Origin = (138.873693408405359,36.000160021331652)
Pixel Size = (0.000487353665300,-0.000397437712900)
Image Structure Metadata:
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  ( 138.8736934,  36.0001600)
Lower Left  ( 138.8736934,  35.4171189)
Upper Right ( 139.9994804,  36.0001600)
Lower Right ( 139.9994804,  35.4171189)
Center      ( 139.4365869,  35.7086395)
Band 1 Block=2310x1 Type=Byte, ColorInterp=Red
Band 2 Block=2310x1 Type=Byte, ColorInterp=Green
Band 3 Block=2310x1 Type=Byte, ColorInterp=Blue

このデータは、nippon_nlni_tokyo_pgis.map のような投影法を設定していない(または EPSG:4236)地図には表示できます。
私は、管理のため投影法を設定しました。

user@debian7-vmw:~/mapdata/tokyo$ gdal_translate
Usage: gdal_translate
---
[-of format] <- ファイル形式
---
[-a_srs srs_def] <- 投影法(空間参照系)
---

GDAL 1.9.0, released 2011/12/29

---
The following format drivers are configured and support output:
---
  GTiff: GeoTIFF <- -of(format)を設定しないとこれになる
---
  PNG: Portable Network Graphics
---

user@debian7-vmw:~/mapdata/tokyo$ gdal_translate -of PNG -a_srs "EPSG:4326" tokyo10m.png tokyo10m-epsg4326.png
Input file size is 2310, 1467
0...10...20...30...40...50...60...70...80...90...100 - done.
user@debian7-vmw:~/mapdata/tokyo$ gdalinfo tokyo10m-epsg4326.png
Driver: PNG/Portable Network Graphics
Files: tokyo10m-epsg4326.png
       tokyo10m-epsg4326.png.aux.xml
Size is 2310, 1467
Coordinate System is:
GEOGCS["WGS 84",
    DATUM["WGS_1984",
        SPHEROID["WGS 84",6378137,298.257223563,
            AUTHORITY["EPSG","7030"]],
        AUTHORITY["EPSG","6326"]],
    PRIMEM["Greenwich",0,
        AUTHORITY["EPSG","8901"]],
    UNIT["degree",0.0174532925199433,
        AUTHORITY["EPSG","9122"]],
    AUTHORITY["EPSG","4326"]]
Origin = (138.873693408405359,36.000160021331652)
Pixel Size = (0.000487353665300,-0.000397437712900)
Image Structure Metadata:
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  ( 138.8736934,  36.0001600) (138d52'25.30"E, 36d 0' 0.58"N)
Lower Left  ( 138.8736934,  35.4171189) (138d52'25.30"E, 35d25' 1.63"N)
Upper Right ( 139.9994804,  36.0001600) (139d59'58.13"E, 36d 0' 0.58"N)
Lower Right ( 139.9994804,  35.4171189) (139d59'58.13"E, 35d25' 1.63"N)
Center      ( 139.4365869,  35.7086395) (139d26'11.71"E, 35d42'31.10"N)
Band 1 Block=2310x1 Type=Byte, ColorInterp=Red
Band 2 Block=2310x1 Type=Byte, ColorInterp=Green
Band 3 Block=2310x1 Type=Byte, ColorInterp=Blue

nippon_nlni_tokyo_pgis.map に 次のようにレイヤ(tokyo_height)を設定します。

---
LAYER
 NAME tokyo_height
 TYPE RASTER
 STATUS ON
 DATA "../mapdata/tokyo/tokyo10m-epsg4236.png"
 MINSCALEDENOM 1000    # 不適当な縮尺で使用されないように。
 MAXSCALEDENOM 1000000
 METADATA
  "wms_title" "Tokyo Height 10m WMS LAYER"
  "wms_srs" "EPSG:2451 EPSG:4326"
 END
END
---

ol003-nippon_bmi_akiruno.pgis.html に次のように 東京都の高度数値モデルの画像レイヤ(tokyo_height)を layer0 に設定します。

---
<script type="text/javascript">
 var map, layer0, layer1, layer2, layer3, layer4;

---
   layer0 = new OpenLayers.Layer.WMS( "Tokyo Height WMS",
    "http://192.168.1.200/cgi-bin/mapserv?",
    {
     map: '/home/user/mapfile/nippon_nlni_tokyo_pgis.map',
     layers: 'tokyo_height',
     format: 'image/png'
   });
---
   layer3 = new OpenLayers.Layer.WMS( "Tokyo Kuiki WMS",
    "http://192.168.1.200/cgi-bin/mapserv?",
    {
     map: '/home/user/mapfile/nippon_nlni_tokyo_pgis.map',
     layers: 'tokyo_kuiki',
//     transparent: true,
     format: 'image/png'
   });
---
  map.addLayers([layer0, layer3, layer1, layer2, layer4]);
---
       
layer0 は表示されませんでした。









Overlays のチェックをすべて外し、Base Layer の表示されない地図上を右クリックして、「画像の情報を表示」をクリックします。








「ページ情報」ウィンドウの「URL」の
一つを右クリックして「コピー」をクリックします。










http://localhost/cgi-bin/mapserv?map=home%2Fuser%2Fmapfile%2Fglobal.map&layers=countries&mode=map&map_imagetype=png&mapext=-0.6591796875+33.0908203125+11.9091796875+45.6591796875&imgext=-0.6591796875+33.0908203125+11.9091796875+45.6591796875&map_size=286+286&imgx=143&imgy=143&imgxy=286+286

Web ブラウザのアドレスバーに貼付けして Enter キーをクリックすると、「mapserv」というファイルがダウンロードされます。内容は、

msWMSLoadGetMapParams(): WMS server error. Invalid SRS given : SRS must be valid for all requested layers.

とあります。

OpenLayers Layers ページ
http://docs.openlayers.org/library/layers.html

の「Raster Layers」に投影法は固定されて、クライアント側では変更できないとあります。
ol001-nippon_nlni_tokyo_pgis.html に次のようにレイヤ(layer0)を設定すると東京都の高度数値モデル(tokyo10m-epsg4326.png)の地図は表示されます。

---
<script type="text/javascript">
 var lon = 139.5;
 var lat = 35.7;
 var zoom = 9;
 var map, layer0, layer1, layer2;

 function init(){
  map = new OpenLayers.Map('map');

  layer0 = new OpenLayers.Layer.WMS( "Tokyo Height WMS",
   "http://192.168.1.200/cgi-bin/mapserv?",
   {
    map: '/home/user/mapfile/nippon_nlni_tokyo_pgis.map',
    layers: 'tokyo_height',
    format: 'image/png'
  });

  layer1 = new OpenLayers.Layer.WMS( "Tokyo Kuiki WMS",
   "http://192.168.1.200/cgi-bin/mapserv?",
   {
    map: '/home/user/mapfile/nippon_nlni_tokyo_pgis.map',
    layers: 'tokyo_kuiki',
    transparent: true,
    format: 'image/png'
   });

---
  map.addLayers([layer0, layer1, layer2]);
---

0 件のコメント: