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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
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
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
170
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
760
net-httpのHTTP/2対応について
naruse
0
480
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2.1k
Lessons from Spec-Driven Development
simas
PRO
0
190
Agentic UI
manfredsteyer
PRO
0
160
AI 時代のソフトウェア設計の学び方
masuda220
PRO
29
12k
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
670
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
510
Lemonade + Foundry Toolkit でお手軽アプリ開発
seosoft
1
330
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
160
Composerを使ったサプライチェーン攻撃の様子を眺めてみる #phpstudy
o0h
PRO
2
250
Featured
See All Featured
The Art of Programming - Codeland 2020
erikaheidi
57
14k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
230
Product Roadmaps are Hard
iamctodd
PRO
55
12k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
780
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.3k
The Cult of Friendly URLs
andyhume
79
6.9k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
180
The Impact of AI in SEO - AI Overviews June 2024 Edition
aleyda
5
1.1k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
620
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
1
190
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/