国土地理院基盤地図情報・数値標高モデルのダウンロード,CSV ファイルへの変換
国土地理院の共通ID,パスワードの発行を受ける
利用条件などは,利用者で確認すること.
- 基盤地図情報サイトのページを開く
- 「基盤地図情報のダウンロード」をクリック
- 「新規登録」をクリック
- 条件を確認する
同意する場合は続行する.
- 所定の項目を記入して,「登録確認へ」をクリック.
- 登録内容を確認して,「登録する」をクリック.
- 電子メールで送られてきた指示に従って,本登録を行う
- 画面で登録完了を確認する.
- 電子メールで ID とパスワードが通知されるので確認する.
基盤地図情報のダウンロード
利用条件などは,利用者で確認すること.
- 基盤地図情報サイトのページを開く
- 「基盤地図情報のダウンロード」をクリック
- 「ログイン 」をクリック
- ログイン操作を行う
- アンケートへの回答
- 「ダウンロード」のところで,「数値標高モデル」の
「ファイル選択へ」をクリック
- 検索条件を指定する.
- データを選択する
- 選択リストを確認し,
「ダウンロードファイル確認へ」をクリック
- ダウンロードしたいものを選び,ダウンロードする
- ファイルがダウンロードされるので,確認する.
FG GML DEM データ前処理(C プログラム)
FG GML DEM データを次の手順で csv ファイルに変換するプログラム(C プログラム)
/* usage: ./a.out FG-GML-5130-05-dem10b-20090201.xml */
#include<stdio.h>
int main(int argc, char **argv)
{
FILE *fp;
char* header_name= "header.txt";
char buf[1000];
int low_x, low_y;
int high_x, high_y;
float lower_corner_x, lower_corner_y;
float upper_corner_x, upper_corner_y;
int state;
int i, j;
/* read header */
fp = fopen( header_name, "r" );
if ( fp == NULL ) {
fprintf(stderr, "error, %s", header_name);
return -1;
}
fgets(buf, sizeof(buf), fp);
sscanf(buf, "%d %d", &low_x, &low_y);
fgets(buf, sizeof(buf), fp);
sscanf(buf, "%d %d", &high_x, &high_y);
fgets(buf, sizeof(buf), fp);
sscanf(buf, "%f %f", &lower_corner_x, &lower_corner_y);
fgets(buf, sizeof(buf), fp);
sscanf(buf, "%f %f", &upper_corner_x, &upper_corner_y);
close(fp);
printf("low_x, low_y, high_x, high_y, lower_corner_x, lower_corner_y, upper_corner_x, upper_corner_y\n");
printf("%d, %d, ", low_x, low_y);
printf("%d, %d, ", high_x, high_y);
printf("%f, %f, ", lower_corner_x, lower_corner_y);
printf("%f, %f\n", upper_corner_x, upper_corner_y);
/* open data file */
fp = fopen( argv[1], "r" );
if ( fp == NULL ) {
fprintf(stderr, "error");
return -1;
}
i = 0;
j = 0;
state = 0;
while (fgets(buf, sizeof(buf), fp) != NULL) {
if ( state == 0 ) {
if (strcmp("<gml:tupleList>\r\n", buf) == 0) {
state = 1;
}
}
else if ( state == 1 ) {
if (strcmp("</gml:tupleList>\r\n", buf) == 0) {
state = 2;
}
else {
if ( j < high_y ) {
printf("%d,%d,%s", i, j, buf);
i++;
if ( i > high_x ) {
i = 0;
j++;
}
}
}
}
}
}
複数ファイルの一括変換のための bash スクリプト
#!/bin/bash
cp FG_GML_DEM5福岡.zip /tmp
cd /tmp
unzip FG_GML_DEM5福岡.zip
unzip FG-GML-5030-05-DEM5B.zip
for i in *.xml; do
echo $i
rm -f /tmp/header.txt
touch /tmp/header.txt
grep '' $i | sed 's/gml:low//g' | sed 's/<>//g' | sed 's/<\/>//g' >> /tmp/header.txt
grep '' $i | sed 's/gml:high//g' | sed 's/<>//g' | sed 's/<\/>//g' >> /tmp/header.txt
grep '' $i | sed 's/gml:lowerCorner//g' | sed 's/<>//g' | sed 's/<\/>//g' >> /tmp/header.txt
grep '' $i | sed 's/gml:upperCorner//g' | sed 's/<>//g' | sed 's/<\/>//g' >> /tmp/header.txt
#
rm -f /tmp/a.xml
nkf -w $i > /tmp/a.xml
./a.out /tmp/a.xml > `basename $i .xml`.csv
done
Rシステムを用いてプロット
#!/bin/bash
rm -f /tmp/a.$$.csv
for i in *.csv; do
cat $i | sed 's/-9999.00/-0.9999/g' | tail -n +3 > /tmp/a.$$.csv
cp /tmp/a.$$.csv $i
done
require(data.table)
require(ggplot2)
T <- data.table( read.csv("FG-GML-5030-05-91-DEM5B-20110915.csv", header=FALSE, as.is=TRUE) )
ggplot(T, aes(x=V1, y=V2, fill=V4)) + geom_tile() + scale_fill_gradientn("frequency", colours = terrain.colors(100))