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.4k
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
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.3k
高専、大学編入、そして未踏へ〜プロダクト開発とキャリアの歩み - Technical College, University Transfer, and On to “Mitou” / My Journey in Product Development and Career
pkmiya
0
140
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
640
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
160
不幸な GC
chencmd
0
880
Claude Codeを組織的に動かして月400PRを実現した話
happy_ryo
0
260
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
360
業務時間外もAIに働いてもらう話
colorful12
3
10k
週末にAI-DLCを本気で回したら$1,600溶けた
hbashimizu
0
130
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
2
340
RSSとCodexを使ってX投稿自動化してみた
ochtum
0
110
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
3
470
Featured
See All Featured
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.5k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
200
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
440
Six Lessons from altMBA
skipperchong
29
4.5k
How to Ace a Technical Interview
jacobian
281
24k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
270
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.1k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
How GitHub (no longer) Works
holman
316
150k
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/