2019年10月7日月曜日

Debian 10 - 7 MapServer でマップファイルのテスト2

7-4 東京都の地図を表示7-4-1 ダウンロード
国土交通相は地理空間情報を推進するための一貫として、国土数値情報のダウンロードサービスをしてます。
このうちのJPGIS準拠データのダウンロードサービスから東京のデータをダウンロードして地図を表示してみます。「4. 交通」の「空港間流通量」もダウンロードします。

国土交通省
http://www.mlit.go.jp/index.html

の「政策情報・分野別一覧」の「国土政策」をクリックします。

国土政策
http://www.mlit.go.jp/kokudoseisaku/index.html

の「データ・情報コーナー」の「国土数値情報ダウンロードサービス」をクリックします。

国土数値情報ダウンロードサービス
http://nlftp.mlit.go.jp/ksj/index.html

で、東京の行政区域のデータをダウンロードします。
a 「JPGIS2.1」の「行政区域」をクリックします。
b 「データのダウンロード(2.各データ詳細)」で、「東京」のチェックボックスをクリックしてチェックし、「次へ」ボタンをクリックします。

c 「データのダウンロード(3.ファイルの選択)」で、最新のデータのチェックボックスをクリックしてチェックします。(2019-9-30現在 平成31年度)
「次へ」ボタンをクリックします。

d アンケートに回答します。

e データのダウンロード(4.国土数値情報利用約款)の内容を読み、「上記のことを理解しました。」で「はい」ボタンをクリックします。

f データのダウンロード(5.ダウンロード)で「ダウンロード」ボタンをクリックします。
ダイアログボックス---ダウンロードしますか?の「OK」ボタンをクリックします。


7-4-2 データの確認
ダウンロードしたファイルを解凍します。
nlni/tokyo というフォルダを作成し、そこにファイルを移動して解凍します。

user@deb10-vmw:~$ cd ダウンロード
user@deb10-vmw:~/ダウンロード$ ls
---
N03-190101_13_GML.zip
---
user@deb10-vmw:~/ダウンロード$ mkdir nlni
user@deb10-vmw:~/ダウンロード$ mkdir nlni/tokyo
user@deb10-vmw:~/ダウンロード$ mv N03-190101_13_GML.zip nlni/tokyo/
user@deb10-vmw:~/ダウンロード$ cd nlni/tokyo/
user@deb10-vmw:~/ダウンロード/nlni/tokyo$ ls
N03-190101_13_GML.zip
user@deb10-vmw:~/ダウンロード/nlni/tokyo$ unzip -j N03-190101_13_GML.zip
Archive:  N03-190101_13_GML.zip
  inflating: KS-META-N03-19_13_170101.xml  
  inflating: N03-19_13_190101.dbf    
  inflating: N03-19_13_190101.geojson  
  inflating: N03-19_13_190101.prj    
  inflating: N03-19_13_190101.shp    
  inflating: N03-19_13_190101.shx    
  inflating: N03-19_13_190101.xml

user@deb10-vmw:~/ダウンロード/nlni/tokyo$ ls
KS-META-N03-19_13_190101.xml  N03-19_13_190101.geojson  N03-19_13_190101.shx
N03-190101_13_GML.zip         N03-19_13_190101.prj      N03-19_13_190101.xml
N03-19_13_190101.dbf          N03-19_13_190101.shp
データがどのようになっているか、N03-19_13_190101.dbf を LibreOffice Calc で開きます。
(データ量が多いと開かない場合があります。)
アクティビティ -> アプリケーションを表示する(左側の一番下のアイコン) -> LibreOffice Calc


「開く」ボタン
をクリックします。




文字列は日本語(Shift-JIS)にします。







「一般的な I/O エラー。」と表示されました。
エラーの理由はわかりませんでした。
Windows の LibreOffice で開いてみました。


確かめたら LibreOffice を閉じます。


7-4-3 地図の表示
 最初に、マップデータ N03-19_13_190101 の情報を知るために管理ツール gdal-bin を使います。
ないときは、Synaptic パッケージマネージャでインストールします。
nlni/tokyo フォルダを mapdata フォルダへ移動し、利用可能なレイヤ名を表示します。

user@deb10-vmw:~/ダウンロード/nlni/tokyo$ cd ../../
user@deb10-vmw:~/ダウンロード$ ls
---
nlni
---
user@deb10-vmw:~/ダウンロード$ mv nlni/ ../mapdata/
user@deb10-vmw:~/ダウンロード$ cd ../mapdata/
user@deb10-vmw:~/mapdata$ ls
110m_cultural  land_ocean_ice_2048.jpg  land_ocean_ice_2048.jpgw  nlni
user@deb10-vmw:~/mapdata$ cd nlni/
user@deb10-vmw:~/mapdata/nlni$
user@deb10-vmw:~/mapdata/nlni$ ls
tokyo
user@deb10-vmw:~/mapdata/nlni$ ogrinfo tokyo
INFO: Open of `tokyo'
      using driver `ESRI Shapefile' successful.
1: N03-19_13_190101 (Polygon)
次に、N03-19_13_190101 レイヤのデータを表示します。

user@deb10-vmw:~/mapdata/nlni$ ogrinfo -summary tokyo N03-19_13_190101
INFO: Open of `tokyo'
      using driver `ESRI Shapefile' successful.

Layer name: N03-19_13_190101
Metadata:
  DBF_DATE_LAST_UPDATE=2019-02-08
Geometry: Polygon
Feature Count: 6187
Extent: (136.065309, 20.422746) - (153.986844, 35.898424)
Layer SRS WKT:
GEOGCS["GCS_JGD_2011",
    DATUM["JGD_2011",
        SPHEROID["GRS_1980",6378137.0,298.257222101]],
    PRIMEM["Greenwich",0.0],
    UNIT["Degree",0.0174532925199433],
    AUTHORITY["Esri","6668"]]
N03_001: String (10.0) -> 都道府県名
N03_002: String (20.0) -> 支庁・振興局名
N03_003: String (20.0) -> 郡・政令市名
N03_004: String (20.0) -> 市区町村名
N03_007: String (5.0) -> 行政区域コード
属性名は、

データのダウンロード(2.各データの詳細)国土数値情報 行政区域データ
http://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N03.html

にあります。
このレイヤは、Geometry: Polygon からポリゴンデータであることが分かります。
また、Extent: (136.065309, 20.422746) - (153.986844, 35.898424)は座標で緯度経度を表し、レイヤの範囲が分かります。

これをもとに、マップファイルを作成します。

user@deb10-vmw:~/mapdata/nlni$ cd ../../mapfile/
user@deb10-vmw:~/mapfile$ vim tokyo_shp.map
MAP
 NAME tokyo_shp_map #任意の名前
 STATUS ON
 SIZE 600 300
 EXTENT 136.065309 20.422746 153.986844 35.898424 #ogrinfoで得た情報から
 UNITS DD
 SHAPEPATH "../mapdata/nlni/tokyo" #シェイプファイルの相対位置
 IMAGECOLOR 255 255 255
  WEB
  IMAGEPATH "/home/user/public_html/ms_tmp/"
  IMAGEURL "/~user/ms_tmp/"
 END
 LAYER
  NAME gyoseikuiki #任意の名前
  TYPE POLYGON #ogrinfoで得た情報から
  STATUS ON
  DATA "N03-19_13_190101.shp"
  CLASS
   NAME "City Boundaries" #任意の名前
   STYLE
    OUTLINECOLOR 153 153 153 #面の外周の色(灰色)
   END
  END
 END
END #MAP END
shp2imgで地図を確認します。

user@deb10-vmw:~/mapfile$ shp2img -m tokyo_shp.map -o tokyo_shp.png


画像ビューワで確認すると、範囲が広すぎるのが分かります。
今回は、諸島部分を除いた範囲にします。

---
EXTENT 138.85 35.4 140 35.975
---

全体は次の様になります。

user@deb10-vmw:~/mapfile$ vim tokyo_shp.map
MAP
 NAME tokyo_shp_map
 STATUS ON
 SIZE 600 300
 EXTENT 138.85 35.4 140 35.975 #修正
 UNITS DD
 SHAPEPATH "../mapdata/nlni/tokyo"
 IMAGECOLOR 255 255 255
 WEB
  IMAGEPATH "/home/user/public_html/ms_tmp/"
  IMAGEURL "/~user/ms_tmp/"
 END
 LAYER
  NAME gyoseikuiki
  TYPE POLYGON
  STATUS ON
  DATA "N03-19_13_190401.shp"
  CLASS
   NAME "City Boundaries"
   STYLE
    OUTLINECOLOR 153 153 153
   END
  END
 END
END #MAP END
shp2imgで地図を確認します。

user@deb10-vmw:~/mapfile$ shp2img -m tokyo_shp.map -o tokyo_shp.png


Web ブラウザのアドレスバーに次のように入力して Enter キーを押します。

http://localhost/cgi-bin/mapserv?mode=browse&template=openlayers&layer=gyoseikuiki&map=/home/user/mapfile/tokyo_shp.map



7-4-4 LABELの日本語表示
地図に市区町村名を表示します。
地図に市区町村名(ラベル)を表示するには、マップファイルに次のように追加します。

user@deb10-vmw:~/mapfile$ vim tokyo_shp.map
---
 LAYER
  NAME gyoseikuiki
  TYPE POLYGON
  STATUS ON
  DATA "N03-19_13_190101.shp"
  LABELITEM "N03_004" #LABELを使うときのフィールドの属性値の指定
  CLASS
   NAME "City Boundaries"
   STYLE
    OUTLINECOLOR 153 153 153
   END
   LABEL #追加
    MINFEATURESIZE 40 #フィーチャがラベルを表示する最小サイズ
   END #LABEL
  END
 END
---
Web ブラウザのアドレスバーに次のように入力して Enter キーを押します。

http://localhost/cgi-bin/mapserv?mode=browse&template=openlayers&layer=gyoseikuiki&map=/home/user/mapfile/tokyo_shp.map

次のようにエラーが表示されました。


エラーログを見てみます。

user@deb10-vmw:~/mapfile$ su -
パスワード:
root@deb10-vmw:~# vim /var/log/apache2/error.log
---
[Wed Oct 02 11:23:35.141330 2019] [cgid:error] [pid 1173:tid 140487826528000] [client ::1:55018] End of script output before headers: mapserv

「End of script output before headers: mapserv」でネット検索すると cgi で文字コードが違うことでエラーが表示されることがあるとありました。属性 N03_004 の文字コードが shift-jis のためと思われます。

日本語を表示できるように次のようにします。
次の内容の fonts.txt というファイルを作成します。
マップファイルと同じフォルダに保存します。

root@deb10-vmw:~# exit
user@deb10-vmw:~/mapfile$ vim fonts.txt
vl-gothic /usr/share/fonts/truetype/vlgothic/VL-Gothic-Regular.ttf
vl-pgothic /usr/share/fonts/truetype/vlgothic/VL-PGothic-Regular.ttf
ipafont-gothic /usr/share/fonts/opentype/ipafont-gothic/ipag.ttf
ipafont-pgothic /usr/share/fonts/opentype/ipafont-gothic/ipagp.ttf

(それぞれパッケージ名は、fonts-vlgothic、 fonts-ipafont-gothicです。)

どれか1行でOKです。
[フォント名] [フォントがある場所の絶対パス] という内容になっています。
フォント名は任意のわかりやすい名前をつけてください。
パスは Synaptic パッケージマネージャで、例えば gothic で検索するとパッケージ一覧が表示されます。
インストールされているパッケージを選択し、プロパティをクリックしてインストール済みファイルタブをクリックすると、パスが表示されます。
インストールされていないときは、Synaptic パッケージマネージャでインストールしてください。(上記以外にも日本語フォントがあります。)

マップファイル全体は次のようになります。

user@deb10-vmw:~/mapfile$ vim tokyo_shp.map
MAP
 NAME tokyo_shp_map
 STATUS ON
 SIZE 600 300
 EXTENT 138.85 35.4 140 35.975
 UNITS DD
 SHAPEPATH "../mapdata/nlni/tokyo"
 IMAGECOLOR 255 255 255
 FONTSET "fonts.txt" #追加
 WEB
  IMAGEPATH "/home/user/public_html/ms_tmp/"
  IMAGEURL "/~user/ms_tmp/"
 END
 LAYER
  NAME gyoseikuiki
  TYPE POLYGON
  STATUS ON
  DATA "N03-17_13_170101.shp"
  LABELITEM "N03_004"
  CLASS
   NAME "City Boundaries"
   STYLE
    OUTLINECOLOR 153 153 153
   END
   LABEL
    MINFEATURESIZE 40
    TYPE TRUETYPE #フォントのタイプ
    FONT vl-gothic #fonts.txt で指定したフォント名
    ENCODING SJIS #マップデータのエンコード
    SIZE 8 #フォントサイズ
   END
  END
 END
END #MAP END

Web ブラウザのアドレスバーに次のように入力して Enter キーを押します。

http://localhost/cgi-bin/mapserv?mode=browse&template=openlayers&layer=gyoseikuiki&map=/home/user/mapfile/tokyo_shp.map


0 件のコメント: