行政区域描画用にダウンロードしたxmlは、以下のように要素や属性に名前空間の接頭辞が指定されています。

<AdmArea  gml:id="K4_1">
  <fid>fgoid:10-00150-11-1000-1421</fid>
    ----- 中略 -----
  <gml:posList>
 37.846999 139.681006
 37.847174 139.681394
          :
 37.846999 139.680794
 37.846999 139.681006
  </gml:posList>
    ----- 中略 -----
</AdmArea>

この例で、座標部分のデータを取出す場合、以下の通り指定しても「<gml:posList>」にはアクセスできません。

$(xml).find('AdmArea').each(function(){
  var coords = $("gml:posList", this).text();

接頭辞付きの要素にアクセスするには、次の2通りの方法があります。

  • その1
  • $(xml).find('AdmArea').each(function(){
    	
      var coords = $("gml\\:posList", posList).text();
    
  • その2
  • $(xml).find('AdmArea').each(function(){
    	
      var coords = $('[nodeName="gml:posList"]', posList).text();
    

注:nodeNameが使用できるのは、jQuery-1.6.x までです。jQuery-1.7.x 以降は、「その1」に示した方式を使用します。

上の方法を使用して、の属性値を取得して見る。

$(xml).find('AdmBdry').each(function(){
	var admAttr  = $(this).attr("gml\\:id")); //名前空間付属性の指定

属性値の場合、「:」をエスケープすると値が取得できません。nodeNameでも同じです。 属性値の場合は、余計なことをしないでそのまま指定すれば取得できます。

$(xml).find('AdmBdry').each(function(){
	var admAttr  = $(this).attr('gml:id')); //名前空間付属性の指定

前にも述べたが、都道府県界(正確には、道界と言うデータは存在しないので都府県界)データにバグ(?)があり、 余分な境界が描かれたり、欠落したりする部分があります。従って、より正確を期す場合には、余分なデータを削除して、 不足分を補完することが必要になります。

ここでは、余分なデータを特定できるツールを作成してみました。余分な境界をクリックすると、 要素 AdmBdry の id 属性を表示しますので、それをキーにxmlから要素 AdmBdry 配下の全要素を削除して行けば クリーンなデータ作成できると思いますが、データのバグ状況を見るため、この作業は実施しておりません。

要素 AdmBdry の id 属性を表示するツール

(注)境界が二重に定義されている箇所もあるようです。本来、薄い赤で表示されるはずの境界が、濃い赤で表示されている部分が それにあたります。