一覧へ   前へ<<  >>次へ


イギリスの地方行政区の境界線のダウンロード (2016年11月24日更新)

下準備


まず、作業の始める前に、イギリスのサイトから、地方行政区ごとの人口のデータをダウンロードしました。

人口データだけに加工したExcelファイルはこちら
  ↓
england_population.zip

解凍するとExcelデータの先頭行に lad2014_code と書かれた列があります。

多分、2014年版のLocal administrative (地方行政区)のコードという意味なのでしょう。

E06000001
E06000002
E06000003
E06000004
E06000005
E06000006


とありますが、これら(UK boundary lat long data E06000001、など)をキーワードに検索してみると、境界データを提供しているサイトにたどりつきました。





ダウンロードサイト


ここのサイトから地方行政区の境界データをダウンロード

http://statistics.data.gov.uk/doc/statistical-geography/E06000005
ダウンロード用マクロ

手入力は大変なので、Excelマクロを利用して、3秒間隔で順次ダウンロードさせました。
三流君というサイトの例を参考に組み換え。Do whileのところはもう少しマシな書き方があると思いますが、やっつけ仕事的に進めてしまいました。


'URLDownloadToFile API from URLMON.
Private Declare Function URLDownloadToFile Lib "urlmon" Alias _
"URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _
szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long

Sub repeat_download()

Dim strFNAME As String 'ダウンロード先(パス+ファイル名)
Dim returnValue

a = 1

For i = 2 To 370

strURL = Worksheets(1).Cells(i, 3)

strFNAME = Worksheets(1).Cells(i, 1) & ".json"


'ファイル名をブックのパス+test.pdfとする
strFNAME = "C:\Users\Takayuki\Desktop\UK\" & strFNAME

'URLDownloadToFile API をコールする
returnValue = URLDownloadToFile(0, strURL, strFNAME, 0, 0)

'結果の表示
MsgBox "結果は:" & returnValue
'MsgBox strFNAME & "に保存されました"

'読みこみ完了まで待つ
'30秒後を計算して、待つ
time10 = DateAdd("s", 3, Now())
Do While a = 1
DoEvents
If time10 < Now() Then
Exit Do
End If
DoEvents
Loop

Next i


End Sub

残念ながら、EnglandとWalesのみしかデータが存在せず、北アイルランドとスコットランドのものがありませんでした。


ダウンロードできた全てのjsonデータを圧縮したもの。



UK_Boundaries.zip



文字の変換


で、ダウンロードしたデータを開くと、

-1.242824973767965,54.722253435826524],[-1.239264136944496,54.72138459394879],[-1.2272829

こんな感じで、扱いにくい印象の並びであったので、再びExcelマクロにてReplace関数を利用して、 ],[ を改行(vbCrLf)に変換、,をvbTabでタブに変換。

以下の例は、E06000001_boundary.jsonを対象として処理しているものです。




Sub データ変換()

Open ThisWorkbook.Path + "\E06000001_boundary.json" For Input As #1

Do While Not EOF(1)

Line Input #1, strText

Loop

Close #1

strText = Replace(strText, "],[", vbCrLf)

'strText = Replace(strText, "[[", "")
'strText = Replace(strText, "]]", "")
strText = Replace(strText, "}}", "")
strText = Replace(strText, ",", vbTab)


Open ThisWorkbook.Path + "\test.txt" For Output As #1

Print #1, strText

Close #1

End Sub
変換した緯度経度データで散布図を描く


Hartlepoolという街のデータのようですが、

-1.242505139 54.72242039
-1.241920567 54.7227133
-1.241956476 54.72245291


のように、緯度経度のデータとして、散布図を作成。


地図で見ると


こんな形のようなので、だいたい合っているようです。

追々、全てのデータを変換して、自作地図ソフトで表示させてみます。