これはなに? †
最近地図の View では、EPSG:3857 がデファクトスタンダードになっている
平面地図上の地点を北に何メートル、東に何メートルで表す
平面の地図描画するには EPSG:3857 は確かに扱いやすい
一方でデータは EPSG:4326 (=WGS84 ≒JGD2000) が主流
球体上の位置を角座標系 (緯度、経度) で表す
データとしてはこちらのほうが扱いやすい。現実にわれわれが生きているのは地球 の上なので
View では EPSG:3857 でデータを扱い、格納データが EPSG:4328 のときどうするか?
練習用Dockerコンテナ https://github.com/kagyuu/DockerExam/tree/master/ubuntu_mapserver
Map Server †
MAP
IMAGETYPE PNG
EXTENT -180 -90 180 90 # <Lower Left X> <Lower Left Y> <Upper Right X> <Upper Right Y>
SIZE 640 320
IMAGECOLOR 128 128 192
FONTSET "/opt/maps/fonts.list"
UNITS dd
PROJECTION
"init=epsg:4326"
END
# WEB
WEB
TEMPLATE "/opt/maps/template06.html"
IMAGEPATH "/var/www/html/tmp/"
IMAGEURL "/tmp/"
MINSCALEDENOM 200
MAXSCALEDENOM 177732952
METADATA
"wms_title" "MapServer Tutorial"
"wms_onlineresource" "/cgi-bin/mapserver?map=/opt/maps/map07.map"
"wms_srs" "EPSG:4326 EPSG:3857"
"wms_abstract" "Cities are joint point of rivers and road and railroads"
"wms_enable_request" "*"
END # End of METADATA
END # End of WEB
INCLUDE "map06_countries.map"
INCLUDE "map06_lakes.map"
INCLUDE "map06_rivers.map"
INCLUDE "map06_cities.map"
INCLUDE "map06_roads.map"
INCLUDE "map06_rails.map"
END # End of Map
別にえばって言う程のことはなくて WEB セクションの "wms_srs" に EPSG:3857 を付け足すだけ
[MAP][PROJECTION] は、Mapserver 内部の測地系
[MAP][WEB][METADATA][wms_srs] は、[それをどう見せるか] 兼 [外部システムに対してどの測地系を許可しているかの表明 ( manifest ) ]
Openlayers3 クライアント (デフォルトの測地系は、EPSG:3857)
Your borwser is not supporting object tag. Please use one of the latest browsers. Go to /OL3Exam/openlayers3.html
<!doctype html>
<html lang="en">
<head>
<link rel="stylesheet" href="http://openlayers.org/en/v3.0.0/css/ol.css" type="text/css">
<style>
.map {
height : 480px;
width : 800px;
border : 1px solid black;
}
</style>
<script src="http://openlayers.org/en/v3.0.0/build/ol.js" type="text/javascript"></script>
<title>OpenLayers 3 example</title>
</head>
<body>
<div id="map" class="map"></div>
<script type="text/javascript">
var layers = [
new ol.layer.Image({
source : new ol.source.ImageWMS({
url : 'cgi-bin/mapserv?map=/opt/maps/map07.map',
params: {
// these are simply added to http-get parameter
'LAYERS' : 'countries,lakes,rivers,cities,roads,rails',
'TRANSPARENT' : 'FALSE'
},
})
})
];
var map = new ol.Map({
target: 'map',
layers : layers,
view: new ol.View({
center: ol.proj.transform([135.0, 35.0], 'EPSG:4326', 'EPSG:3857'),
zoom: 4
})
});
</script>
</body>
</html>
Map Cache †
GIS Mapserver と基本的に同じ
MapCache? を apache の module としてインストールする [要ビルド]
apache2 に mod_mapcache を組み込む
/opt/mapcache/mapcache.xml (mapcache.conf で指定した設定ファイル)
<?xml version="1.0" encoding="UTF-8"?>
<mapcache>
<cache name="disk" type="disk">
<base>/tmp</base>
<symlink_blank/>
</cache>
<!--
<cache name="memcache" type="memcache">
<server>
<host>localhost</host>
<port>11211</port>
</server>
</cache>
-->
<source name="vmap0" type="wms">
<getmap>
<params>
<MAP>/opt/maps/map07.map</MAP>
<LAYERS>countries,rivers,lakes,roads,rails,cities</LAYERS>
</params>
</getmap>
<http>
<url>http://127.0.0.1/cgi-bin/mapserv</url>
<headers>
<User-Agent>mod_mapcache</User-Agent>
</headers>
</http>
</source>
<tileset name="test">
<source>vmap0</source>
<cache>disk</cache>
<grid>GoogleMapsCompatible</grid>
<format>PNG</format>
<metatile>5 5</metatile>
<metabuffer>10</metabuffer>
<expires>3600</expires>
</tileset>
<default_format>PNG</default_format>
<service type="wms" enabled="true">
<full_wms>assemble</full_wms>
<resample_mode>bilinear</resample_mode>
<format>PNG</format>
<maxsize>4096</maxsize>
</service>
<service type="wmts" enabled="true"/>
<service type="tms" enabled="true"/>
<service type="kml" enabled="true"/>
<service type="gmaps" enabled="true"/>
<service type="ve" enabled="true"/>
<service type="mapguide" enabled="true"/>
<service type="demo" enabled="true"/>
<errors>report</errors>
<lock_dir>/tmp</lock_dir>
<log_level>debug</log_level>
</mapcache>
Openlayers3 クライアント
Your borwser is not supporting object tag. Please use one of the latest browsers. Go to /OL3Exam/OpenLayers 3 example.html
<!doctype html>
<html lang="en">
<head>
<link rel="stylesheet" href="http://openlayers.org/en/v3.7.0/css/ol.css" type="text/css">
<style>
.map {
height : 480px;
width : 800px;
border : 1px solid black;
}
</style>
<script src="http://openlayers.org/en/v3.7.0/build/ol.js" type="text/javascript"></script>
<title>OpenLayers 3 example</title>
</head>
<body>
<div id="map" class="map"></div>
<script type="text/javascript">
var layers = [
new ol.layer.Tile({
source : new ol.source.TileWMS({
url : '/mapserver/mapcache?',
params: {
// these are simply added to http-get parameter
'LAYERS' : 'test',
'TRANSPARENT' : 'FALSE'
}
})
})
];
var map = new ol.Map({
target: 'map',
layers : layers,
view: new ol.View({
center: ol.proj.transform([135.0, 35.0], 'EPSG:4326', 'EPSG:3857'),
zoom: 2
})
});
</script>
</body>
</html>
なんか日付変更線マタギがうまくいかない ⇒ 3.7 で解消 †
GIS