Windows Live の記事にて前にGeoRSSを取り上げました。GeoRSSで表された各経緯度にそれぞれ違ったアイコンを表示したい場合、各RSSアイテムの<description>内にアイコン画像のURLを含めて、Virtual Earthで処理するときにそのアイコン画像URLを抽出してカスタムアイコンに利用していました。少しスマートでない方法だったわけですが、Virtual Earth Map ControlにGeoRSSを処理するときに異なったアイコンを表示指定する方法がありました。
次のようなRSSアイテムを使うことでアイコン画像を指定します。<icon>部分がそうです。ただしこの<icon>はGeoRSSの仕様でもなくて、RSSの仕様にもないですよねぇ? Virtual Earth用に勝手に作ったものかもしれません。
<item>
<link>http://weather.livedoor.com/area/46/132.html?r=rss</link>
<title>[ 今日の天気 ] 鹿児島 - 曇のち晴 - 最高気温28℃ - 5月31日(土)</title>
<description>
31日(土)の天気は曇のち晴最低気温は20℃でしょう。
</description>
<pubDate>Sat, 31 May 2008 05:00:00 +0900</pubDate>
<georss:point xmlns:georss="http://www.georss.org/georss">31.52997 130.604439</georss:point>
<icon>http://image.weather.livedoor.com/img/icon/12.gif</icon>
</item>
ただし、これだけだと自動で<icon>部分のURLを使用してくれないので、GeoRSSの各アイテムを処理するとき次のように書きます。
// ImportShapeLayerDataメソッドで指定する関数
function onFeedLoaded(layer) {
for (var i = 0; i < layer.GetShapeCount(); ++i) {
var s = layer.GetShapeByIndex(i);
s.SetCustomIcon(s.IconId);
}
}
記事ではWCF + VB.NETにてGeoRSSのフィードも作っていました。SyndicationItemクラスを使って<icon>を含めたRSSを出力する場合は、ElementExtensionsプロパティを使います。
' item は SyndicationItemオブジェクト
item.ElementExtensions.Add(<icon><%= "アイコンのURL" %></icon>)
GeoRSSをVirtual Earthを使う場合、以上を使ってみてくださいね。
記事: 「使ってみよう! Windows Live SDK/API:第5回 Virtual Earth,VECollection and GeoRSS」
参考: Creating Custom Icons for a GeoRSS Collection - MSDN Forums