SQL Server 2014 Express Reporting Services で空間マップを作成する

 

公開されているShapeデータをSQL Serverにジオメトリーデータとして取り込み、人口などの統計データをマッピングして、Reporting Servicesにより主題図を作成してみる。
作成のポイントはShapeファイルの入手だと思う。2012年くらいに一度作ったきりで、Shapeファイルの入手先URLがなくなっていたり、IE11でダウンロードできなかったり。Shapeファイルの入手に一番手間取ったかな。

私は統計学やGISに関する知識はないので、その辺のところはあしからず。

 

完成イメージ

BingMaps切替01

 

お品書き

 

 

 

Shapeファイルを入手する

※世界測地系緯度経度形式で統一する。

渋谷区の街区境界線Shapeファイル

地図で見る統計(統計GIS) 政府統計の総合窓口 GJ01000001
http://www.e-stat.go.jp/SG1/estat/toukeiChiri.do?method=init

上記への行き方は
トップページ > 地図や図表で見る > 地図で見る統計(統計GIS)

2014/10/5現在IE11ではダウンロードできなので、SH-08EのChromでダウンロードした。

Screenshot_2014-10-05-17-04-26

「平成22年度国税調査(小地域)2010/10/1」を選び、男女別人口総数及び世帯数をチェックし、「統計表各種ダウンロードへ」をクリックする。
Screenshot_2014-10-06-15-16-15

東京都、渋谷区を選んで「検索」をクリックする。
Screenshot_2014-10-05-17-04-09

境界データにある「世界測地系緯度経度・Shape形式」をダウンロードする。
Screenshot_2014-10-06-15-16-41

A002005212010DDSWC13113.zip がダウンロードされる。それを解凍する。解凍すると下記の4つのファイルがあり、渋谷区の街区境界線Shapeファイルは「h22ka13113.shp」である。このShapeファイルには、属性情報として街区名、人口、世帯数等の数値情報も含まれる。

  • h22ka13113.dbf
  • h22ka13113.prj
  • h22ka13113.shp
  • h22ka13113.shx

 

中学校区境界、小学校区境界、学校、福祉施設、バス停、行政区域のShapeファイル

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

JPGIS2.1から下図赤枠をクリックし、それぞれ東京都のShapeファイルをダウンロードする。
国土数値情報ダウンロード

ダウンロードしたら解凍する。なお、何のShapeファイルかわからなくなってしまうので、ダウンロードしたzipファイル名の後ろに識別できる値を入れておくといいかも。
Shapeファイル置き場

 

ShapeファイルをSQL Server にインポートする

ダウンロードしたShapeファイルをSQL Serverのデータベースにインポートする方法は、ShapeShape2SQLを使ってShapeデータをジオメトリーとしてSQL Serverにインポートする を参照。

インポート時にテーブルが自動生成されるが、テーブル名はShapeファイルと同じに設定されているので、これだと何のデータであるかわからなくなるから、元にしたShapeファイル名とデータ種類が分かるようなテーブル名にするといいと思う。

渋谷区街区境界線

Shape2SQL渋谷区街区

インポートしてできたテーブル「渋谷区街区_h22ka13113」をSELECTしてみる。平成22年度国勢調査の人口動態データなので、人口や世帯数も含まれている。現在無償で入手できる最も粒度が細かい平面のShapeファイルは、この街区だと思う。番地や号までの粒度があるといいのになあと・・・
渋谷区街区01渋谷区街区02

(注意!空間結果のズレ)

e-STATから入手できる世界測地系のShapeファイルは、平面直角座標系と緯度経度の2つある。国土数値情報から入手できる世界測地系のShapeファイルは、緯度経度だけなので、平面直角座標系をインポートしてしまうと座標が合わず Management Studio での空間結果ではズレが生じる。

e-STAT世界測地系平面直角座標系(面データ)と国土数値情報世界測地系緯度経度(点データ)のズレ
estat世界測地系平面直角座標系と国土数値情報世界測地系経度緯度

e-STATでは日本測地系緯度経度も公開されているが、世界測地系緯度経度とはやはりずれてしまう。

e-STAT日本測地系緯度経度(面データ)と国土数値情報世界測地系緯度経度(点データ)のズレ
estat日本測地系経度緯度と国土数値情報世界測地系経度緯度

 

小学校学区域と小学校

(小学校学区域)

国土数値情報のデータは都道府県単位なので、東京都全域の小学校学区域がインポートされた。
小学校学区域_東京都01小学校学区域_東京都02

WHERE [A27_005] = '13113' で渋谷区の学区域だけに絞りんでみる。
小学校学区域_渋谷区

(小学校)

渋谷区立の小学校に絞り込んだが、小学校は点データなので、よくわからない。
小学校_渋谷区01

そこで、小学校学区域と重ねてみる。とても小さな点だが、小学校とその学区域が重なった。
小学校_渋谷区02
渋谷区街区と小学校を重ねてみる。
小学校_渋谷区03

中学校区域

中学校のは学区域データはあるが、中学校の点データは入手できなかった。
中学校学区域01

渋谷区全体

行政区域から渋谷区を抽出。
WHERE [N03_007] = '13113'
渋谷区全体01
属性情報(行政区域名など)が文字化けしている。
渋谷区全体02

福祉施設

渋谷区の福祉施設を抽出。福祉施設も点でよくわからないので渋谷区全体と重ねてみる。
福祉施設01福祉施設02

 

レポートビルダーでマップを作成する

 

レポートビルダーでMAPを作成する

レポートビルダーを起動する。
レポートビルダ01

新しいレポート → マップウィザード をクリックする。
レポートビルダ02

レポートビルダ03
レポートビルダ04
新規をクリックする。
レポートビルダ05
名前に「DS_GIS」を入れて「ビルド」をクリックする。
レポートビルダ06
サーバ名を入れる。これから作るMAPレポートのアクセスユーザにデータベース「GIS」選択権を付与する前提なので「Windows認証を使用する」にチェックする。
レポートビルダ07
接続できた。作業しているアカウントにアクセス権がないと接続できない。
レポートビルダ08
レポートビルダ09
レポートビルダ10
マップの空間データを含むクエリを選ぶ。ここではストアドプロシージャ「getShibuyaMap」を選んだ。これくらいの内容でストアドプロシージャは大げさだが、後にもう少し複雑なデータ取得に拡張しようと思うので、ストアドプロシージャにした。

USE [GIS]
GO

/****** Object: StoredProcedure [dbo].[getShibuyaMap] Script Date: 2014/10/06 23:00:48 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
CREATE PROCEDURE [dbo].[getShibuyaMap]

AS
BEGIN

SET NOCOUNT ON;

SELECT
'渋谷区街区' as データ区分
,*
FROM [dbo].[渋谷区街区_h22ka13113]
END

GO

レポートビルダ11
ストアドプロシージャ「getShibuyaMap」の実行結果に含まれる空間データから、MAPが描画される。
レポートビルダ12
大きさを拡大し、Bing Maps のレイヤーを埋め込むにチェック。
レポートビルダ13
人口数をバブルで表現するので、バブルマップを選ぶ。
レポートビルダ14
分析データセットを選ぶ。ここでは人口が含まれるクエリが含まれる「DataSet1」を選ぶ。DataSet1はマップの空間データと人口数、世帯数を含むストアドプロシージャ「getShibuyaMap」のこと。空間データと別のクエリを指定することもできる。
レポートビルダ15
レポートビルダ16
レポートビルダ17
ページの大きさを調整、マップの大きさを調整(赤枠)、タイトルを入れたりフォントを変更。
レポートビルダ18
プレビューしてみる。
レポートビルダ19
ちょっと小さいので大きくしよう。
レポートビルダ20
適当にキャンバスを大きくする。
レポートビルダ21
プレビューするとこんな感じ。
レポートビルダ22

 


Bing Maps の表示を切替可能なように変更する


Bing Mapsなし、道路、航空写真、ハイブリッドを選べるようにする。BingMaps切替01


まず切替用のパラメータを作成する



BingMaps切替02
パラメータ名(名前)をBingMapsにし、プロンプト(利用者に見せるタイトル)も同じBingMapsにする。
BingMaps切替03
選択肢を設定する。ラベルは利用者に見せる値、値はレポートが実際に受け取る値。
BingMaps切替04
規定値をRoad(道路)にする
BingMaps切替05
パラメータの値が変更されたら再表示するようにする。
BingMaps切替06


 


パラメータの値に応じてBing Mapsの表示を切り替えるようにする


Bing MapsはTitleLayer1にあるので、タイトルのプロパティを選ぶ。
BingMaps切替07
Bing Mapsの既定を「道路」にして作成していたので「道路」が選ばれている。パラメータの値に応じて切り替えるので fx をクリックして式を埋め込む。
BingMaps切替08
=Switch(Parameters!BingMaps.Value = "Road","Road",Parameters!BingMaps.Value = "Aerial","Aerial",Parameters!BingMaps.Value = "Hybrid","Hybrid",Parameters!BingMaps.Value = "No","Road")
定数としてRoad(道路)、Aerial(航空写真)、Hybrid(Hybrid)があることがわかる。前述の選択肢はここの定数を確認して設定した。
BingMaps切替09
種類が「<式>」に変わった。
BingMaps切替10
次に、「なし」を選んだ時にBing Mapsを非表示にする設定。
BingMaps切替11
=IIf(Parameters!BingMaps.Value = "No","Hidden","Visible")
BingMaps切替12
BingMaps切替13


以上でBing Mapsの表示切替設定はおわり。


プレビューするとBing Mapsの表示切替が可能になっている。ただし、プレビューなので選択肢切替と同時に表示が切り替わらない。
BingMaps切替01


 


レポートを保存する


レポート保存01
適当な場所に保存する。
レポート保存02


 


レポートサーバにアップロードし公開する


作成したRDLファイルをアップロードし、アクセス権を付与することでブラウザで閲覧できる状態、つまり公開ということになる。


 


レポートサーバにGIS用のフォルダを作成する


レポートマネージャを開き新しいフォルダを作成する。DS作成01


フォルダ名をGISとした。
DS作成02


フォルダ「GIS」ができた。この中にSQL Serverへ接続するためのデータソースやレポートオブジェクトであるRDLファイルを置くことにする。
DS作成03


共有データソースを作成


MAP用のデータベースは「GIS」とした。レポートにデータソースを埋め込んだが、データベース「GIS」に接続するためのデータソースをレポートサーバ上に配置して、異なるレポート間でデータソースを共有するようにするので、レポートサーバ上にデータソースを配置する。


フォルダ「GIS」に移動する。
DS作成04


新しいデータソースをクリック。
DS作成05


DS作成06


以上でデータソースの作成はおわり。


 


レポートアップロードする


レポートマネージャを開き、GISフォルダに移動する。
RDLアップロード01
ファイルのアップロードをクリック。
RDLアップロード02
作成済のRDLを選ぶ。
RDLアップロード03
RDLアップロード04
アップロードされた。
RDLアップロード05


レポートへのアクセス権を付与する


管理を選ぶ
RDLアップロード06
「アイテムのセキュリティを編集」をクリック
RDLアップロード07
フォルダの既定値はローカルの Administrators だけにアクセス権が付与されているけど、それを無視してこのRDLに独自のアクセス権を付与する?かどうか聞かれるので、OK。
RDLアップロード08
「新しいロールの割り当て」をクリック。
RDLアップロード09
ユーザ名かグループ名を入れる。
RDLアップロード10
新たにアクセスできるユーザが一人増えた。
RDLアップロード11


レポートのデータソースを埋め込みからレポートサーバ上の共有データソースに変更する


アップロードしたRDLのデータソースは埋め込まれているので、サーバ上の共有データソースに切り替える。


RDLアップロード12
「共有データソース」を選び「参照」をクリック。
RDLアップロード13
先ほど作成した「DS_GIS」を選んでOK。
RDLアップロード14
必ず「適用」をクリック。適用しないと反映されない。
RDLアップロード15
レポートサーバで確認するとレポートがある。
RDLアップロード16


 


ブラウザで開いてみる


うちの環境では、URLは下記のとおり。アクセス権を付与されていれば、IEは管理者として実行する必要なし。



ttp://sn78sh7/ReportServer/Pages/ReportViewer.aspx?%2fGIS%2f%e5%b9%b3%e6%88%9022%e5%b9%b4%e5%ba%a6%e5%9b%bd%e7%a8%8e%e8%aa%bf%e6%9f%bb%e8%a1%97%e5%8c%ba%e5%88%a5%e6%b8%8b%e8%b0%b7%e5%8c%ba%e4%ba%ba%e5%8f%a3%e4%b8%96%e5%b8%af%e6%95%b0&rs:Command=Render



RDLアップロード18
既定でBing Mapsは道路。
RDLアップロード19
航空写真を選ぶ。おや、自動でレポートが再表示されない。右にあるレポートを表示しないと切り替わらかった。原因は後日調べる。タイトル(BingMaps)が変わっただけだから、再描画不要判定された?
RDLアップロード20
ハイブリッドを選択。
RDLアップロード21
なし を選択。
RDLアップロード22
PDFにエクスポートしてみる。
RDLアップロード23
ちょっと時間かかる。
RDLアップロード24
ダウンロードしたPDF。あれれ、一部か欠けてる。データ取得でタイムオーバー?
RDLアップロード25
もう一回エクスポートしてみる。さっきよりよくなった。
RDLアップロード27


以上、Shapeファイルを取り込んで、SQL Server のReporting Services 上でマップを作成する方法の紹介おわり。


次回は、ダウンロードした学校等のShapeファイルを、今回作成したMAPにレイヤーとして追加したり、分析データを追加したりといったことを書いてみようと思う。

コメント

このブログの人気の投稿

ダブルクォーテーションで括られたCSVカ​ンマ区切りテキストファイルを SQL Server で Bulk Insert する方法

PowerShellでTSV/CSVの列を絞り込んで抽出し、(先頭/行末)からN行出力する

IKEAの鏡を壁に取り付ける