Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Non-mercator Projection with Mapnik
Search
Tak Yanagida
November 01, 2014
Programming
1.3k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Non-mercator Projection with Mapnik
地図投影法の概要と、Mapnikによるベクタデータの非メルカトル図法でのレンダリング
FOSS4G Tokyo 2014で発表した資料です。
Tak Yanagida
November 01, 2014
More Decks by Tak Yanagida
See All by Tak Yanagida
How much we have to study English?
tyanagida
0
120
Functional Programming Applied in JS
tyanagida
0
120
Brief Introduction of jQuery Mobile
tyanagida
0
140
PowerShell for LL Users
tyanagida
0
1.3k
Other Decks in Programming
See All in Programming
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
2k
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
200
Oxcを導入して開発体験が向上した話
yug1224
4
310
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
760
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
240
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.4k
dRuby over BLE
makicamel
2
340
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.7k
JavaDoc 再入門
nagise
1
340
Signal Forms: Beyond the Basics @ngBaguette 2026 in Paris
manfredsteyer
PRO
0
250
RTSPクライアントを自作してみた話
simotin13
0
600
エージェンティックRAGにAWSで入門しよう!
har1101
8
1.5k
Featured
See All Featured
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.3k
The Spectacular Lies of Maps
axbom
PRO
1
810
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
Bash Introduction
62gerente
615
220k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
210
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
210
Google's AI Overviews - The New Search
badams
0
1k
Why Our Code Smells
bkeepers
PRO
340
58k
Fireside Chat
paigeccino
42
3.9k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.5k
Transcript
Non-mercator projection with Mapnik (株) オンターゲット 柳田 岳洋 @tyanagida FOSS4Gで2地点比較地図を作る方法
地図投影法の概要と、 Mapnikによるベクタデータの 非メルカトル図法でのレンダリング
自己紹介 • お好みダムサーチ公開中 (Japanese Dam Finder) http://maps.ontarget.cc/dams/ • 本業はWebアプリ開発と、 新規Webサービスのコンサルティング
きっかけ / Motivation • Twitterでこの画像が話題になっていた • 投影法、なに使ってるの? • 切り張りして重ねていいの? *当画像の原典は検索したが確認でき
ず。数多く転載されている中から、 http://ameblo.jp/colonic4/entry- 11596544945.html より引用。 まずは投影法のお勉強
投影法: 形による分類 (Map Projection Basics) 円筒図法 円錐図法 方位図法
投影法: 性質による分類 • 投影法について詳しくは、 「地図投影法」(政春尋志, 朝倉書店, 2011)参照 http://amzn.to/1zPWM6I 名前 性質
正積 面積が正しい 正角 角度が正しい 正距 距離が正しい 任意の場所で 微小範囲で 特定条件で (例: 中心から任意の点) 風向は正しく描ける。 長距離の方位は正しくない。 “ただし”
投影法の検討 • 2地点を同条件で描画したい • 距離と面積の両方を比較したい • 2地点をそれぞれ、同一条 件の方位図法で投影 • 正距と正積の2種類を作成
(Decided to go with Azimuthal projection, Both equal-area and equidistant)
元データ選定 (Choosing Source Data) • ベクターデータが必要 • できれば世界をカバーしているもの • (とりあえず)データ量が手軽なもの
• Natural Earthを使用 http://www.naturalearthdata.com Public Domain 複数のシェープファイル 全データでもzipすれば300MB弱 *上記でうまくダウンロードできない場合は、GitHubからもダウンロード可能 https://github.com/nvkelso/natural-earth-vector
投影ツールの選定 • スクリプト言語(Python他)で操作できる • 対応している投影法が多い 等距離円など、計算した データを重ねたいから 色々な投影法で見比べ てみたかったから •
Mapnikを採用 OSMのレンダリングや、TileMillのバックエンドで使われ ていて実績十分 Pythonから呼び出すAPIあり 投影変換には定番のPROJ.4ライブラリを使用 • 他には、MapServer(shp2img)、GMT、d3.geo なども検討
Mapnikの使い方 • Ubuntu用に、Mapnik公式バイナリあり • 自分は仮想マシン内で使用 いわゆるDOS/Vマシン Windows7 VirtualBox Ubuntu12.04 •
Python用公式Introductionをたどると、 Natural Earthを無投影した画像ができる Python初心者でもOK 簡単!
ここから意外と難しい • OSMで使われている割に、情報が少ない • ドキュメントやAPIがイマイチ整理されてない 英語はもちろん、ときにはソースのC++も読む • zoom()とpan()があるけど、zoom_to_box()してからでないと 動作保証されない •
CSVはファイルからも配列からも読み込めるが、GeoJSONは ファイルからしか読み込めない (WKTを使って解決) • 正しいGeoJSONでもエラーになることがある (属性の順序に隠れた制約あり) 自分がハマった例 自助努力重要! GitHubのIssueやWikiに 少し投稿しました
Mapnikの重要な概念 • 3種類の座標がある 経緯度 投影面座標 画面座標 zoom_to_box() zoom() pan() たいてい巨大
(1000万とか) PROJ.4を使っている ツールは、たぶん同じ forward() inverse() 描画範囲 (envelope) 関数名 ちょっとハマった
投影法の指定方法 • PROJ.4は投影変換のデファクト。QGIS他、ほ とんどのFOSS4Gツールで採用されている • 投影法の指定は、長い文字列 +proj=merc +a=6378137 +b=6378137 +lat_ts=0.0
+lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs • 「投影法名 proj4」でWeb検索するのが速い +proj=laea +lat_0=中心緯度 +lon_0=中心経度 +x_0=0 +y_0=0 • Lambert Azimuthal Equal Area 「ランベルト正積 方位図法」の英語名 例:Webメルカトル図法の場合
等距離円の描画 / Drawing equidistant circle • 地図上で、円になるとは限らない • 中心から、いろいろな方向に、一定距離進ん だ点の集合を描画する
• “Geodesic問題”を解けば良い • GeographicLibを使って、90角形を描画 • 他に、PROJ.4付属のgeodが使えるかも http://geographiclib.sourceforge.net/ 方位線も、同様に GeographicLibで描画
完成した図 ランベルト正積方位図法 (Lambert Azimuthal Equal Area) Webメルカトル図法 (Web Mercator) •
等距離円は、内側から50km, 100km, 200km • 左図:この範囲・解像度だと、正積・正距方位図法はまったく 同一画像になった • 右図:破線は本州に対する等距離円、実線は北海道に対す るもの
• 任意の場所を中心に、方位図法で比較して みたい • 試作第1弾として「どこでも方位図法」公開 (“Azimuthal Map, Anywhere”) 水曜に公開したばかり
Mapnikではなく、d3.jsを使用 今後の展開 (To be continued) • 北海道と本州程度の緯度差でも、メルカトル 図法では誤差が大きいことが確認できた http://maps.ontarget.cc/azmap/