GIS奮闘記

元GISエンジニアの技術紹介ブログ。主にPythonを使用。

スポンサーリンク

GISを使った便利で面白いWEBサイトのまとめ

本日は「GISを使った便利で面白いWEBサイトのまとめ」を書いてみようと思います。以前と比べてGISがより身近な存在になり、様々なデータの可視化サイトなどが人気を博しているかと思います。その中でも私のイチ押しを本日は紹介します。

1.Tweetping

Twitterのつぶやきがあった地点をリアルタイムで世界地図上に表示するサイトです。
https://www.tweetping.net/

f:id:sanvarie:20181022141741p:plain

2.Twitter + GNIP - Mapbox

基本的にはTweetpingと同じなのですが、AndroidやiPhone、BlackBerryといった端末別に結果を絞り込むことができます。
https://www.mapbox.com/labs/twitter-gnip/brands/#5/38.000/-95.000

f:id:sanvarie:20181022142100p:plain

3.CYBERTHREAT REAL-TIME MAP

カスペルスキーが公開しているセキュリティ上の脅威を可視化したサイトです。
https://cybermap.kaspersky.com/

f:id:sanvarie:20181022143837p:plain

4.Flight Radar 24

飛行機の現在位置をリアルタイムで可視化するサイトです。とんでもない数の飛行機が世界中を飛び回っていることがわかりますね。
https://www.flightradar24.com/60,15/6

f:id:sanvarie:20181022144516p:plain

5.Esri CityEngine Portland 3D City

ポートランドを3D化したマップサービスです。かっこいいですね。
http://www.arcgis.com/apps/CEWebViewer/viewer.html?3dWebScene=04b66d38061849149d3c59c9d07604c0

f:id:sanvarie:20181022144943p:plain

6.Nine Point Five Earthquake Visualization

過去30年に起きた地震を可視化したサイトです。プレートに沿って地震が起きていることがわかります。日本はもうマップ上で見えなくなるくらい地震が起きていますね。http://www.ninepointfive.org/

f:id:sanvarie:20181022144151p:plain

7.geojson.io

GeoJSONをブラウザ上で作成・編集することができるサイトです。
geojson.io

f:id:sanvarie:20181022142419p:plain

8.mapshaper

地図情報の簡素化のためのサイトですが、私はShape、geojsonを相互変換するサイトとしても利用しています。
https://mapshaper.org/

f:id:sanvarie:20181022142829p:plain

9.Geocoding

ジオコーディングを行うサイトです。
http://www.geocoding.jp/

f:id:sanvarie:20181022143234p:plain

ジオコーディングって何?という方は以下のエントリーを読んでみてください。
www.gis-py.com

10.緯度・経度と地心直交座標の相互換算 - 国土地理院

緯度・経度と座標の相互変換を行うサイトです。
https://vldb.gsi.go.jp/sokuchi/surveycalc/surveycalc/transf.html

f:id:sanvarie:20181022143456p:plain

かなり駆け足になってしまいましたが、以上です。今回紹介した以外にもとても面白いサイトがたくさんあるので、ぜひお気に入りのサイトを探してみてください。

あまり日常生活で意識することは無いと思うのですが、GISは我々の生活に欠かせないものになっています。これからもますます便利なサイトができると思うので、本当に楽しみですね。

foliumを使ってみよう

本日はfoliumについて書いてみたいと思います。

foliumとは

WEBマップを作成するためのライブラリです。Leafletというjavascriptのライブラリーがベースになっているようです。WEBサイトに以下のように簡単にインタラクティブなマップを組み込むことができます。

f:id:sanvarie:20181022104917p:plain

インストール

pip install foliumですね

環境

Python2.7.3
jupyter notebook
Windows10

ベースとなる地図について

foliumでは色々な地図タイルを指定することができます

https://github.com/python-visualization/folium/tree/master/folium/templates/tiles

  1. mapboxbright
  2. cartodbdark_matter
  3. cartodbpositron
  4. cloudmade
  5. mapbox
  6. mapboxcontrolroom
  7. openstreetmap
  8. stamenterrain
  9. stamentoner
  10. stamenwatercolor

今回はOpenStreetMap をタイルに指定してみようと思います。OpenStreetMapって何?という方は以下のエントリーを読んでみてください。

www.gis-py.com

サンプルコード

import folium

m = folium.Map(
    location=[-31.950527,115.860457],
    tiles='OpenStreetMap',
    zoom_start=10
)

m

たったこれだけですね。本当に簡単です。

f:id:sanvarie:20181022105832p:plain

緯度経度とマップ読み込み時のズームレベルは任意で指定できます。今回はオーストラリアのパースの地図を表示させてみました。

ただ、これだけだと面白くないので、このマップにポイントをプロットしたいと思います。使用するデータは以下エントリーで作成した西オーストラリアのAirbnbのShapeファイルです。

www.gis-py.com

サンプルコード

import folium
import geopandas

m = folium.Map(
    location=[-31.950527,115.860457],
    tiles='OpenStreetMap',
    zoom_start=10
)

data = geopandas.GeoDataFrame.from_file(r"D:\gis-py\geopandas\airbnb\accommodation.shp")
gjson = data[1:100].to_json() # 数が多すぎるのでデータをしぼる

points = folium.features.GeoJson(gjson)

m.add_child(points)
m

Shapeの全データをプロットするとメモリエラーを起こしてしまったので、データを100件にしぼりましたが、ばっちりですね。

f:id:sanvarie:20181022122402p:plain

f:id:sanvarie:20181022122525p:plain

WEBマップの作成がこんなに簡単にできるなんて一昔前は考えられなかったですね。GIS系のPythonライブラリが年々充実してきている気がします。本当に便利なので、ぜひ使ってみてください。

geopyを使ってジオコーディングをしてみよう

さて、本日はgeopyを使ってジオコーディングをしてみようと思います。

f:id:sanvarie:20181019110343p:plain

geopyとは

ジオコーディング用のPythonライブラリですね。GIS系のPythonライブラリではかなりメジャーです。ジオコーディングとは?という方は以下のエントリーをご参照ください。
www.gis-py.com

インストール

pip install geopy でOKです。

サンプルコード

東京都庁をジオコーディングしてみようと思います。

# -*- coding: utf-8 -*-
from geopy.geocoders import Nominatim

geolocator = Nominatim(user_agent="test")
location = geolocator.geocode(u"東京都庁")

print(location.address)       #住所
print(location.latitude)      #緯度
print(location.longitude)     #経度
print(location.raw)           #ジオコーディングした結果の全ての情報

簡単ですね。最後のlocation.rawはジオコーディングした結果の全ての情報が格納されています。非常に便利です。

f:id:sanvarie:20181019104542p:plain

pandasとの連携

pandasのデータフレームにデータを格納することもできます。pandasについては以下エントリーで紹介しています。興味のある方はぜひ読んでみてください。

www.gis-py.com

www.gis-py.com

サンプルコード

東京、大阪、福岡のジオコーディング結果をpandasのデータフレームに格納するサンプルです。

# -*- coding: utf-8 -*-
import pandas as pd
df = pd.DataFrame({'name': [u'東京', u'大阪', u'福岡']})

from geopy.geocoders import Nominatim
geolocator = Nominatim()

from geopy.extra.rate_limiter import RateLimiter
geocode = RateLimiter(geolocator.geocode, min_delay_seconds=1)
df['location'] = df['name'].apply(geocode)

df['point'] = df['location'].apply(lambda loc: tuple(loc.point) if loc else None)

print df['location']
print ""
print df['point']

これも簡単にできました。

f:id:sanvarie:20181019105307p:plain

ジオコーディングするなら鉄板のライブラリですので、興味のある方はぜひ使ってみてください。

GISデータを無料でダウンロードできる便利サイトのまとめ

さて、本日はGISデータを無料でダウンロードできる便利サイトのまとめを書いてみたいと思います。自分はよく仕事でこういったサイトを利用するのですが、みなさんはどうでしょうか?非常に便利なデータが無料でダウンロードできますので、これからGISに取り組んでいこうという方はぜひ利用してみてください。

各々の目的によって使用されるデータは異なるかと思いますが、以下のサイトを利用すれば、大抵のことはできるかと思います。

1.国土地理院 基盤地図情報

行政区画の境界線、道路縁、建物の外周線、数値標高モデル(DEM)のデータなどをダウンロードできます。基盤地図情報ダウンロードサービス

数値標高モデル(DEM)に関して興味のある方は以下のエントリーを読んでみてください。
www.gis-py.com

2.国土地理院 地理空間情報ライブラリー

「地理院地図」として国土地理院が提供する地図をKML形式でダウンロードできます。http://geolib.gsi.go.jp/node/2537

3.国土政策局 位置参照情報

日本全国の大字町丁目または街区単位の座標をCSV形式でダウンロードできます。
位置参照情報ダウンロードサービス

4.国土数値情報

全国の河川、避難施設、鳥獣保護区、鉄道 など様々なデータをShape形式などでダウンロードできます。
http://nlftp.mlit.go.jp/ksj/index.html

5.J-SHIS 地震ハザードステーション

全国の地盤データなどをShape形式などでダウンロードできます。私は兄が家を購入する際、実際にこちらのデータを使用して地盤の強度を調べました。
J-SHIS 地震ハザードステーション

地盤データに興味がある方は以下エントリーを読んでみてください。
www.gis-py.com

6.ESRI

日本地図のデータをShape形式でダウンロードできます。私は日本地図を使う際は必ずこのデータを使用します。
全国市区町村界データ | ESRIジャパン

ESRI日本地図データに興味がある方は以下エントリーを読んでみてください。
www.gis-py.com

7.総務省統計局 e-Stat

各府省が公表する統計データがまとめられており、国勢調査、経済センサス、農林業センサス等の統計データをShape形式などでダウンロードできます。
地図で見る統計(統計GIS) | 政府統計の総合窓口


ざっとこんなところでしょうか。ちなみに私が一番よく利用するサイトは「基盤地図情報」ですね。こんな便利なデータを無償で提供していただけるとは本当にありがたいです。

mxdperfstatを使ってみよう

ArcGISを使っていて、速度が気になることはありませんか?もしかしたらお使いのGISデータの速度改善ができるかもしれません。

ArcGISをお使いの方であればMXDはご存知かと思います。ただ、MXDの速度を計測したことはありますでしょうか?

そんな時はmxdperfstatを使えば大丈夫です。

ESRI公式のツールではなく、サポートはされていないのですが、無償で使用することができます。たしか、ESRI内の有志が集まって作ったとかだと思いました(ESRIの方に聞いたのですが、詳細は忘れてしまいました)。

以下のサイトからダウンロードできます。
https://www.arcgis.com/home/item.html?id=a269d03aa1c840638680e2902dadecac

こんな感じですね。
f:id:sanvarie:20181016160308p:plain

データ

神奈川県のポリゴンと適当な施設のポイントをmxdにしてみました。これを使用します。
f:id:sanvarie:20181017102527p:plain

使い方

以下のようにコマンドを入力してください(使用するexeのバージョンはお使いのArcGISに合わせてください)。スケールはオプションで付けることができます。ですので、各スケールによるパフォーマンスも測ることがことができます。

mxdperfstat10.4.exe -mxd C:\mxdperfstat\kanagawa.mxd -scale 2000


f:id:sanvarie:20181017103352p:plain

こんな感じでXMLが出力されます。これをEXCELなどで見ることができます。
f:id:sanvarie:20181017103501p:plain

EXCELで開くとこんな感じですね。「Refresh Time (sec)」列を見ると各レイヤの読み込み時間が表示されます。サンプルデータはデータ数が少ないのであまり差は出ていませんが、ここの値が大きければパフォーマンスに改善の余地があることがわかります。
f:id:sanvarie:20181017104040p:plain

GISのパフォーマンスの数値化というのはなかなか困難な作業かと思います(遅いとか早いとかは主観によるものですので)。もしそういったことにお悩みであればmxdperfstatを使ってみてはいかがでしょうか。

GISエンジンおよびサービスのまとめ

今日は私が日常的に使用しているGISエンジンおよびサービスについてまとめてみようと思います。エンジンという言葉は普段あまり耳にすることは無いと思いますが、ソフトウェアと考えて問題ないと思います。GISデータを扱うためのソフトウェアですね。

GISって何?という方は以下のエントリーを読んでみてください。
www.gis-py.com


GISの導入を考えており、どのエンジンにするか選定中という方は当エントリーを参考にしていただけると幸いです。GISエンジンは使用しないけど、世の中にいったいどういったGISエンジンやサービスがあるのか興味があるという方もぜひ参考にしていただければと思います。

1.ArcGIS

言わずと知れたGIS界の巨人ESRIが展開するGISエンジンです。様々な製品を展開しており、正直、私もすべてを把握できてはいません。

ArcGIS製品で私がよく使用するものは以下です。
①ArcGIS Desktop
GISデータを参照、編集することができるソフトです。ArcGIS Desktop | ESRIジャパン

f:id:sanvarie:20181016102438p:plain

おそらくこれがあれば、ほとんどのGIS関連の業務は事足りるのではないでしょうか。分析や色分け機能などがとても充実しており、綺麗な地図を作成することができます。


②ArcGIS Engine
ArcGIS Desktopで大抵のことはできてしまうのですが、例えば、特定の業務を行う際、ArcGIS Desktopだと少し物足りない、もしくは、作業手順が煩雑になるという場合、必要なGISアプリを開発することもあるかと思います。その際に使用するのがArcGIS Engineです。ざっくりいうとライブラリですね。これを使用すれば痒い所に手が届くアプリを開発することができます。
ArcGIS Engine | ESRIジャパン


③ArcPy
製品というわけではないと思うのですが、ArcGISをインストールすると一緒にインストールされるのがこのArcPyです。作業の自動化はしたいが、ArcGIS Engineを使うほどではないという場合に非常におすすめです。名前から推測できるかと思いますが、Pythonを使ってArcGISデータを扱うことができます。ArcGIS Desktop上で使用することができるので、とても便利です。

f:id:sanvarie:20181016103731p:plain

ArcPyについては色々なエントリーを書いていますので、ぜひ読んでみてください。
www.gis-py.com


※使ってみたいサービス
④ArcGIS Online
近年、ESRIが力を入れているクラウド GISです。ユーザーがいつでもどこでも手軽に利用できるというメリットがあります。ただ、使用料が従量課金制というのがいまいちかなと個人的には思っています(ただし、参照のみの場合は無償)。
ArcGIS Online | ESRIジャパン

2.SIS

ArcGISほどメジャーなGISエンジンではありませんが、こちらも私はよく使用します。Cadcorpという会社が販売しているGISエンジンです。https://www.cadcorp.com/

こちらの会社もESRIほどではないですが、色々な製品を展開しています。

SIS製品で私がよく使用するものは以下です。
①SIS Map Modeller
GISデータを参照、編集することができるソフトです。
f:id:sanvarie:20181016104339p:plain

この製品の特長としては色々なファイルを開くことができるということでしょうか。この点に関してはArcGIS Desktopに勝っているのではないかと思います。

あと、ArcGIS Desktopは大容量のShapeファイルを開こうとしたりすると、頻繁に落ちたりするのですが、SIS Map Modellerではまずそういったことはありません。また、ArcGISのデータ形式であるFGDBはよく壊れたりするのですが、SISのデータ形式であるbdsは壊れることはあまりありません。こういったところは本当にSISは非常によくできており、もう少しメジャーになってもいいのではないかと思うエンジンですね。

②SIS SDK
ArcGIS Engineと同じように、SISをベースとしたアプリケーションを開発する際に使用します。

3.QGIS

ArcGISやSISと異なり、こちらは無償のGISエンジンです。無償といってもその機能はとても充実しています。参照、編集に関しては有償のエンジンとの差はほとんどないかもしれません。ただ、細かい分析などをしたい場合はArcGISに軍配が上がるかと思います。個人でGISエンジンを利用する場合はQGISを選ぶ方が大多数ではないでしょうか。

①QGIS Desktop
GISデータを参照、編集することができるソフトです。ArcGIS DesktopやSIS Map Modellerと同じですね。

f:id:sanvarie:20181016110753p:plain

4.Google Map

こちらは言うまでもないでしょうか。世界ナンバーワンのGISサービスですね。
Google マップ

f:id:sanvarie:20181016113000p:plain


Google Maps APIを使用すればGoogle Mapを使用してGISアプリを作ることができます。Google Maps APIに興味がある方は以下を読んでみてください。

www.gis-py.com

5.Google Earth

Google Mapほどではないにしろ、こちらも人気のGISサービスですね。Google Earth

f:id:sanvarie:20181016115313p:plain

うーん、かっこいい。

6.地理院地図

国土地理院が展開するGISサービスですね。少しマニアックになってしまいますが、GIS関係の仕事をしている方はよく使われるのではないでしょうか。
地理院地図

Google Mapとは違った見た目ですが、渋くて自分は大好きですね。
f:id:sanvarie:20181016115609p:plain

7.OpenStreetMap

OpenStreetMap(OSM)は、道路地図などの地理情報データを誰でも利用できるよう、 フリーの地理情報データを作成することを目的としたプロジェクトです。地図版のWikipediaといったところでしょうか。

OpenStreetMap

f:id:sanvarie:20181016122753p:plain

OpenStreetMapに興味がある方はぜひこちらを読んでみてください。
www.gis-py.com


個人的な評価はざっとこんな感じでしょうか。やはり機能面は有償のGISエンジンが優れていると思いますが、価格や手軽さを考慮すると無償のGISの存在というのはとても大きいと思います。ただ、どのエンジンやサービスを使うべきというのは無くて、各々の目的に適したものを使用されるのがいいかと思います。

GIS 無償 機能 手軽さ
ArcGIS × ×
SIS × ×
QGIS ×
Google Map
Google Earth
地理院地図
OSM

geopandasを使ってShapeファイルを作成しよう! ~Airbnbのデータを可視化してみよう~

さて、今回はgeopandas第二弾です。前回はgeopandasの簡単な使い方を紹介しましたが、今回はもう少し掘り下げてShapeファイルの作成をしてみようと思います。

geopandas第一弾に関しては以下をご参照ください。
www.gis-py.com

本エントリーの後に第三弾も書きました。より詳しくgeopandasについて説明したエントリーです。ぜひ読んでみてください。
www.gis-py.com

Airbnbとは?

Airbnb(エアビーアンドビー)は、宿泊施設・民宿を貸し出す人向けのウェブサイトである。世界192カ国の33,000の都市で80万以上の宿を提供している。そうです。私は興味はあるのですが、一度も利用したことがありません・・・いつか使ってみたいですね!
Airbnb - Wikipedia

データ

以下のサイトからAirbnbのオープンデータをダウンロードすることができます。しかし、日本のデータがない!日本ではあまり人気がないからでしょうか?
Get the Data - Inside Airbnb. Adding data to the debate.

なので、今回はブログ主に馴染み深い西オーストラリアのデータを使用したいと思います。

赤枠が今回使用したデータです。上の赤枠が宿泊施設データを格納したCSV、下の赤枠が地形データを格納したgeojsonですね。
f:id:sanvarie:20181012105442p:plain

実行環境

Windows7 64bit
ArcGIS Desktop10.4.1
Python2.7.3

サンプルコード

ダウンロードしたCSVとgeojsonからShapeファイルを作成するサンプルです。

# -*- coding: utf-8 -*-
import pandas as pd
import geopandas
from shapely.geometry import Point

#csvの読み込み
df = pd.read_csv(r"D:\gis-py\geopandas\airbnb\listings.csv")

#ポイント作成
geometry = [Point(xy) for xy in zip(df.longitude, df.latitude)]
geo_df = geopandas.GeoDataFrame(df, geometry=geometry)

#Shape出力
geo_df.to_file(driver='ESRI Shapefile', filename=r"D:\gis-py\geopandas\airbnb\accommodation.shp")

#geojsonの読み込み
df2 = geopandas.read_file(r"D:\gis-py\geopandas\airbnb\neighbourhoods.geojson")

#Shape出力
df2.to_file(driver='ESRI Shapefile', filename=r"D:\gis-py\geopandas\airbnb\western_Australia.shp")

ものすごいあっさり作れてしまいました。本当に便利なライブラリですね。ArcMapを使用して作成したShapeを確認してみます。

f:id:sanvarie:20181012110339p:plain

おぉーまさしく西オーストラリアですね!そして、宿泊施設は都市部に集中していることがわかりますね。たしかオーストラリアの真ん中らへんは砂漠地帯だったと思うので、宿泊施設がほとんどないことも納得がいきます。

属性はこんな感じです。各宿泊施設のWEBサイトに載っているような情報(値段とか場所とか)が入っているみたいですね。

f:id:sanvarie:20181012111238p:plain

ちなみに西オーストラリア最大の都市であるパースの宿泊施設が何個あるか空間検索して調べてみました。

f:id:sanvarie:20181012111644p:plain

なんと710個!やはり都市部は違いますね。

今回の記事ではgeopandasを使用すれば、本当に簡単にShapeを作成することができるということがわかりました。ただ、もっと色々な機能を有しているライブラリですので、応用すればもっと色々なことができるかと思います。これを機にぜひ使ってみてはいかがでしょうか。

以上、今回は「geopandasを使ってShapeファイルを作成しよう! ~Airbnbのデータを可視化してみよう~」でした。