2010年1月11日月曜日

OpenLayers 48c Filter Encoding3 - 「ゆりかもめ」の表示

OpenLayers.Filter.Comparison は、「OpenLayers 20a GeoRSS で Pisca ウェッブアルバムの写真を表示1」で使っています。
GML ドキュメントには、直接、オプションとしてフィルタを設定できます。

OpenLayers.layer.WFS では、フィルタを一度、XML ドキュメントとして書き出します。

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>OpenLayers48 Filter Encoding</title>
<link rel="stylesheet" href="./theme/default/style.css" type="text/css" />
<link rel="stylesheet" href="./examples/style.css" type="text/css" />

<!-- OpenLayers ライブラリ -->
<script src="./lib/Firebug/firebug.js"></script>
<script src="./lib/OpenLayers.js"></script>

<!-- Proj4js ライブラリ -->
<script type="text/javascript" src="./lib/proj4js/lib/proj4js-compressed.js"></script>
<script type="text/javascript" src="./lib/proj4js/lib/projCode/tmerc.js"></script>
<script type="text/javascript" src="./lib/proj4js/lib/defs/EPSG2456.js"></script>

<!-- Filter Encoding コード -->

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

function init() {
OpenLayers.ProxyHost="/cgi-bin/proxy.cgi?url=";
// 東京都用 map の設定
options = {
projection: new OpenLayers.Projection("EPSG:2456"),
displayProjection: new OpenLayers.Projection("EPSG:4326"),
maxResolution: 'auto',
units: 'meters',
maxExtent: new OpenLayers.Bounds(-279000,1054000,-185000,1104000)
};
map = new OpenLayers.Map("map", options);
// ここまで
// 東京都レイヤ
baselayer = new OpenLayers.Layer.WMS( "Tokyo Kukaku Sen WMS",
"http://192.168.1.6/cgi-bin/mapserv?",
{
map: '/home/user/mapfile/tokyo_bmi_pgis_img2.map',
layers: 'kukaku',
format: 'image/png'
});

// ここまで
// 「第3セクタ」レイヤ

var style = new OpenLayers.Util.extend({});
style.strokeColor='#ff0000';
style.strokeWidth= 2;

var filter0 = new OpenLayers.Filter.Comparison({
type: OpenLayers.Filter.Comparison.EQUAL_TO,
property: "opc",
value: "ゆりかもめ"
});

var formatFilter = new OpenLayers.Format.Filter();
var xml = new OpenLayers.Format.XML();
var filters = xml.write(formatFilter.write(filter0));

// これでもOK
// var filters = "<Filter><PropertyIsEqualTo><PropertyName>opc</PropertyName><Literal>ゆりかもめ</Literal></PropertyIsEqualTo></Filter>";

layer1 = new OpenLayers.Layer.WFS( "Third Sector Line",
"http://192.168.1.6/cgi-bin/mapserv?",
{
map: '/home/user/mapfile/tokyo_pf_pgis.map',
typename: 'thirdsec',
filter: filters,
transparent: true,
format: 'image/png'
},{
styleMap: new OpenLayers.StyleMap(style),
projection: new OpenLayers.Projection("EPSG:4326")
});

// layer1.refresh({force:true}); // キャッシュをクリアしたいとき

// ここまで

map.addLayers([baselayer, layer1]);

map.addControl(new OpenLayers.Control.LayerSwitcher());
map.addControl(new OpenLayers.Control.MousePosition());
map.addControl(new OpenLayers.Control.ScaleLine());
map.zoomToMaxExtent();
}

</script>
</head>
<body onload="init()">
<h1 id="title">OpenLayers48 Filter Encoding</h1>
<div id="map" class="smallmap"></div>
</body>
</html>

0 件のコメント: