2009年12月24日木曜日

OpenLayers 41g Styled Layer Descriptor (SLD) - 鉄道 の WFS のHTML コード1

鉄道(railroad)の他のレイヤを設定してみます。
最初に、「JR 在来線」レイヤを追加してみます。

---
<script type="text/javascript">
var format = new OpenLayers.Format.SLD();
var map, sld, layerName, baselayer, layer1, layer2; // layer2 追加

function init() {
var url = "./sld_line_simple.xml";
OpenLayers.loadURL(url, null, null, loadSuccess);
}
// getDefaultStyle 追加
function getDefaultStyle(sld, layerName) {
var styles = sld.namedLayers[layerName].userStyles;
var style;
for(var i=0; i<styles.length; ++i) {
style = styles[i];
if(style.isDefault) {
break;
}
}
return style;
}


function loadSuccess(req) {
OpenLayers.ProxyHost="/cgi-bin/proxy.cgi?url="; // 追加
sld = format.read(req.responseXML || req.responseText);
// 東京都用 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'
});

layer1 = new OpenLayers.Layer.WFS( "Shinkansen", // 修正
"http://192.168.1.6/cgi-bin/mapserv?",
{
map: '/home/user/mapfile/tokyo_pf_pgis.map',
typename: 'shinkansen',  // 修正
transparent: true,
format: 'image/png'
},{
styleMap: new OpenLayers.StyleMap(sld, "Shinkansen"),
projection: new OpenLayers.Projection("EPSG:4326")
});
// 「JR 在来線」レイヤ追加
layer2 = new OpenLayers.Layer.WFS( "JR Line",
"http://192.168.1.6/cgi-bin/mapserv?",
{
map: '/home/user/mapfile/tokyo_pf_pgis.map',
typename: 'jrline',
transparent: true,
format: 'image/png'
},{
styleMap: new OpenLayers.StyleMap(getDefaultStyle(sld, "JRLine")),
projection: new OpenLayers.Projection("EPSG:4326")
});

map.addLayers([baselayer, layer1, layer2]); // layer2 追加
// ここまで
// WFS のときはマップコントロールをこの位置へ
map.addControl(new OpenLayers.Control.LayerSwitcher());
map.addControl(new OpenLayers.Control.MousePosition());
map.addControl(new OpenLayers.Control.ScaleLine());
map.zoomToMaxExtent();
}

</script>
---

sld_line_simple.xml に JRline 用の sld を追加します。

<?xml version="1.0" encoding="UTF-8"?>
<sld:StyledLayerDescriptor version="1.0.0"
xmlns:sld="http://www.opengis.net/sld"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:gml="http://www.opengis.net/gml"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd">
<sld:NamedLayer>
<sld:Name>Shinkansen</sld:Name>
<sld:UserStyle>
<sld:Name>ShinkansenDefault</sld:Name>
<sld:IsDefault>1</sld:IsDefault>
<sld:FeatureTypeStyle>
<sld:Rule>
<sld:Name>justAStyler</sld:Name>
<sld:LineSymbolizer>
<sld:Stroke>
<sld:CssParameter name="stroke">
<ogc:Literal>#0000ff</ogc:Literal>
</sld:CssParameter>
<sld:CssParameter name="stroke-width">
<ogc:Literal>1</ogc:Literal>
</sld:CssParameter>
</sld:Stroke>
</sld:LineSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>
</sld:NamedLayer>

<!-- JRLine 用 -->

<sld:NamedLayer>
<sld:Name>JRLine</sld:Name>
<sld:UserStyle>
<sld:Name>JRLineDefault</sld:Name>
<sld:IsDefault>1</sld:IsDefault>
<sld:FeatureTypeStyle>
<sld:Rule>
<sld:Name>justAStyler</sld:Name>
<sld:LineSymbolizer>
<sld:Stroke>
<sld:CssParameter name="stroke">
<ogc:Literal>#ff0000</ogc:Literal>
</sld:CssParameter>
<sld:CssParameter name="stroke-width">
<ogc:Literal>1</ogc:Literal>
</sld:CssParameter>
</sld:Stroke>
</sld:LineSymbolizer>
</sld:Rule>
</sld:FeatureTypeStyle>
</sld:UserStyle>
</sld:NamedLayer>

</sld:StyledLayerDescriptor>

ブラウザで表示すると次のように警告が表示されます。



データが多いので表示に時間がかかるようです。
「処理を続行」ボタンをクリックし続けて地図を表示します。

0 件のコメント: