ラベル units dd meters の投稿を表示しています。 すべての投稿を表示
ラベル units dd meters の投稿を表示しています。 すべての投稿を表示

2008年9月16日火曜日

OpenLayers 10c unitsがddとmeterのレイヤ

続いて、WMSサーバの設定をします。
マップの投影を元にもどします。
それから、WEB オブジェクトの METADATA と railroad と public_facilities レイヤ(LAYER)の METADATA を次のようにします。

MAP
NAME kanagawa_mlit_pgis_map
STATUS ON
SIZE 600 300
# EXTENT 138.91 35.12 139.84 35.68
EXTENT -83624.557161 -96269.254733 -3366.679476 -36305.074927
UNITS dd
IMAGECOLOR 255 255 255
IMAGETYPE png
FONTSET "fonts.txt"
PROJECTION
"init=epsg:4612"
END

WEB
IMAGEPATH "/home/user/ka-map/htdocs/tmp/kacache/"
IMAGEURL "/ka-map/tmp/kacache/"
METADATA
"wms_title" "Kamakura mlit Map WMS Server"
"wms_srs" "EPSG:2451 EPSG:4612" #修正
"wms_onlineresource" "http://localhost/cgi-bin/mapserv?map=/home/user/mapfile/kanagawa_mlit_pgis.map"
"wms_encoding" "utf-8"
"wms_feature_info_mime_type" "text/html"
"wfs_title" "Kamakura mlit Map WFS Server"
"wfs_srs" "EPSG:2451 EPSG:4612" #修正
END
END
---
LAYER
NAME railroad
---
METADATA
"group_title" "鉄道"
"wms_title" "Railroad Map WMS Layer"
"wms_srs" "EPSG:4612" #追加
"wfs_title" "Railroad Map WFS Layer"
"searchfield" "lin"
"fields" "lin:鉄道,opc:会社"
END
---
LAYER
NAME public_facilities
---
METADATA
"group_title" "公共施設"
"wms_title" "Public Facilities Kanagawa mlit WMS Layer"
"wms_srs" "EPSG:4612" #追加
"wfs_title" "Public Facilities Kanagawa mlit WFS Layer"
"gml_featureid" "place_id"
"gml_include_items" "all"
"gml_exclude_items" ""
"searchfield" "na0"
"fields" "na0:公共施設,ads:住所"
END
---

Eclipse を起動して wms_meters.html を開き、次のように layer3 を追加します。

---
<script type="text/javascript">
var map, layer1, layer2, layre3;
---
layer3 = new OpenLayers.Layer.WMS( "RailRoad mlit WMS",
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/user/mapfile/kanagawa_mlit_pgis.map',
layers: 'railroad',
transparent: true,
format: 'image/png'
},
{
projection: 'EPSG:4612'
}
);

map.addLayer(layer3);
map.addLayers([layer1, layer2]);
map.addControl(new OpenLayers.Control.LayerSwitcher());
map.zoomToMaxExtent();
}
</script>
---


OpenLayers 10a unitsがddとmeterのレイヤ

OpenLayers 10a units(計測単位) が dd と meter のレイヤを同じ地図に表示します。

OpenLayers 7 で units が meter のレイヤを表示しました。
OpenLayers.Map のオプションを

maxResolution: 'auto',
units: 'meters',
maxExtent: new OpenLayers.Bounds(-83624.557161,-96269.254733,-3366.679476,-36305.074927)

で地図を表示できるようになったので、units が dd(degree) のレイヤもこのオプションで表示できるようにします。

もう一度、神奈川県の基盤地図情報のデータを調べてみましょう。
AdmAreaのデータの概要をみてみます。

user@debian:~/mapdata$ ogrinfo -summary kanagawa AdmArea
INFO: Open of `kanagawa'
using driver `ESRI Shapefile' successful.

Layer name: AdmArea
Geometry: Polygon
Feature Count: 115
Extent: (-83624.557161, -96269.254733) - (-3366.679476, -36305.074927)
Layer SRS WKT:
PROJCS["JGD2000_Japan_Zone_9", <-1
GEOGCS["GCS_JGD_2000",
DATUM["Japanese_Geodetic_Datum_2000",
SPHEROID["GRS_1980",6378137.0,298.257222101]], <-2
PRIMEM["Greenwich",0.0],
UNIT["Degree",0.0174532925199433]],
PROJECTION["Transverse_Mercator"], <-3
PARAMETER["False_Easting",0.0],
PARAMETER["False_Northing",0.0],
PARAMETER["Central_Meridian",139.833333333333], <-4
PARAMETER["Scale_Factor",0.9999],
PARAMETER["Latitude_Of_Origin",36], <-5
UNIT["Meter",1.0]]
ID: String (8.0)
UUID: String (24.0)
PRESENCE: Real (11.0)
FINISHED: Real (11.0)
ORGGILVL: String (8.0)
ORGMDID: String (8.0)
TYPE: String (8.0)
NAME: String (25.0)
CODE: Integer (8.0)


<-番号 はそれぞれ

1 座標系 JGD2000(新日本測地系)ゾーン9
2 楕円体 GRS_1980
3 図法 横メルカトール図法 (tmerc)
4 中央子午線 139.83... (lon_0)
5 原点緯度 36 (lat_0)

を表しています。
/usr/share/proj/epsg から、JGD2000 に関係するコードをみてみます。

user@debian:/usr/share/proj$ grep -A1 JGD2000 epsg
# JGD2000
<4612> +proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs <>
--
...
# JGD2000 / Japan Plane Rectangular CS IX
<2451> +proj=tmerc +lat_0=36 +lon_0=139.8333333333333 +k=0.9999 +x_0=0 +y_0=0 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs <>
...

上は、経緯度表示、下は、平面直角座標系の定義のIXです。
これから、基盤地図情報の神奈川県のEPSGコードは 2451になります。

OpenLayers 10d unitsがddとmeterのレイヤ

public_facilities レイヤを追加したり、ズームをかえたりして試してみました。kamakura_pgis.map を WMSサーバに修正し、chojisen,kenchiku,doro,tetsudoレイヤを WMS で利用できるようにしました。

---
MAP
NAME kamakura_pgis_map
STATUS ON
SIZE 600 300
EXTENT -31337.715508 -77650.134635 -21796.513842 -70055.061952
UNITS meters
IMAGECOLOR 255 255 255
IMAGETYPE png
FONTSET "fonts.txt"
PROJECTION
"init=epsg:2451"
END

WEB
IMAGEPATH "/home/user/ka-map/htdocs/tmp/kacache/"
IMAGEURL "/ka-map/tmp/kacache/"
METADATA
"wms_title" "Kamakura Map WMS Server"
"wms_srs" "EPSG:2451"
END
END
---

各レイヤの METADATA に wms_title を次の用に設定します。

chojisen - "wms_title" "Chojikai_Sen"
kenchiku - "wms_title" "Kamakura Map Kenchiku"
doro - "wms_title" "Kamakura Map Doro"
tetsudo - "wms_title" "Kamakura Map Tetsudo"


wms_meter.html を鎌倉市の地図用にコピー、修正した wms_meter2.html の一部。

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

function init(){
map = new OpenLayers.Map('map', {
maxResolution: 'auto',
displayProjection: new OpenLayers.Projection("EPSG:2451"),
units: 'meters',
maxExtent: new OpenLayers.Bounds(-31337.715508,-77650.134635,-21796.513842,-70055.061952)
}
);
layer1 = new OpenLayers.Layer.WMS( "Kamakura Chojikai Sen WMS",
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/nob61/mapfile/kamakura_pgis.map',
layers: 'chojisen,kenchiku,doro,tetsudo',
format: 'image/png'
},
{
projection: 'EPSG:2451'
}
);

layer2 = new OpenLayers.Layer.WMS( "Public Facilities mlit WMS",
"http://localhost/cgi-bin/mapserv?",
{
map: '/home/nob61/mapfile/kanagawa_mlit_pgis.map',
layers: 'public_facilities',
transparent: true,
format: 'image/png'
},
{
projection: 'EPSG:4612',
singleTile: true
}
);

map.addLayer(layer2);
map.addLayer(layer1);
map.addControl(new OpenLayers.Control.LayerSwitcher());
map.zoomToMaxExtent();
}
</script>
---


OpenLayers 10b unitsがddとmeterのレイヤ

国土数値地図の神奈川県の地図をマップの投影をかえて表示してみます。
kanagawa_mlit_pgis.map のマップ(MAP)の PROJECTION を EPSG:2451 にします。
(以前に EPSG:2451 に設定しましたが、EPSG:4612 が正しい設定です。)
コードに合わせて EXTENT を次のように設定します。

MAP
NAME kanagawa_mlit_pgis_map
STATUS ON
SIZE 600 300
# EXTENT 138.91 35.12 139.84 35.68
EXTENT -83624.557161 -96269.254733 -3366.679476 -36305.074927
UNITS dd
IMAGECOLOR 255 255 255
IMAGETYPE png
FONTSET "fonts.txt"
PROJECTION
"init=epsg:2451"
END
---

また、国土数値地図の座標系は JGD2000(新日本測地系)で、EPSGコードは 4612になります。
各レイヤの PROJECTION を EPSG:4612 にします。

---
LAYER
NAME gyoseikai
---
PROJECTION
"init=epsg:4612"
END
TEMPLATE temp_tokyo_shp.html
END

LAYER
NAME gun_seirei
---
PROJECTION
"init=epsg:4612"
END
TEMPLATE temp_tokyo_shp.html
END

LAYER
NAME railroad
---
PROJECTION
"init=epsg:4612"
END
TEMPLATE temp_railroad.html
END

LAYER
NAME public_facilities
---
PROJECTION
"init=epsg:4612"
END
TEMPLATE temp_facilities_pgis.html
END
---

ka-Map で地図を表示します。
地図が表示されないときは、shp2img で試してみてください。

user@debian:~/mapfile$ shp2img -m kanagawa_mlit_pgis.map -o kanagawa_mlit_pgis.png