基盤地図情報50m標高を変換してみた
まあ、仕様書とにらめっこして、データを取っていけばいいだけなので問題なし。読み飛ばしで問題があったんですが。
XPathを使ってみた
ファイルシステムよろしく "/" で要素を区切ってパスを表現して、このパス条件に合致する要素を引き出すというもの。ただし名前空間は自前で指定してやる必要があります。デフォルトの名前空間も厳密に指定してあげる必要があります。
次のような名前空間解決のためのオブジェクトを用意します。
Dim xmlNameMgr As New System.Xml.XmlNamespaceManager(xpNav.NameTable) xmlNameMgr.AddNamespace("default", "http://fgd.gsi.go.jp/spec/2008/FGD_DLD_Schema") xmlNameMgr.AddNamespace("jps", "http://www.gsi.go.jp/GIS/jpgis/standardSchemas2.0_2008-03")
パスを見つけるのは次の通り。
Dim xpVarsDem As System.Xml.XPath.XPathNodeIterator xpVarsDem = xpNav.Select("/default:GI/default:dataset/default:DEM", xmlNameMgr)
基盤地図情報(JPGIS)の50m標高の場合です。他のデータでは別のパスやらになることと思います。
でも、なんか面倒くさい…。
50m標高でズレが生じたが仕様書ちゃんと見ろと何度も(以下略)
50m標高は2次メッシュで1ファイル、1ファイルごとに標高点が200*200の40000個あるというもの。標高点要素自体には位置情報が無く、メッシュコードとかで隅っこを計算して、左上(北西)から右下(南東)にシリアルに並べているのを前提に
…という認識に若干間違いが。
まず気づいたのが40000個無いというもの。末尾を切ってる場合があります。
40000個無いのを考慮しても、別のところで、サイクリックにずれた感じのものが出ました。
で仕様書読み返すと、開始メッシュ位置が 0 0 とは限らないです。
ていうかXMLみたいな冗長なもの使うんだったら、40000個でそろえてくれたらいいのに…。