Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Pythonで点群を読んでみよう
Search
Taro Matsuzawa aka. btm
October 25, 2020
Programming
2.9k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Pythonで点群を読んでみよう
OSC 2020 Aizu LT大会資料
Taro Matsuzawa aka. btm
October 25, 2020
More Decks by Taro Matsuzawa aka. btm
See All by Taro Matsuzawa aka. btm
OpenLayers ext TypeScript declarationの開発
smellman
0
670
平成生まれのためのUNIX&IT歴 史講座 ~番外編~
smellman
2
600
掛川城の点群データをiTownsで表示しよう
smellman
0
360
そのJavascript、全部TypeScriptにしちゃえ
smellman
1
270
大容量SSDとOpenStreetMap
smellman
0
180
MapLibreとtile.openstretmap.jpで始めるベクトル地図プログラミング
smellman
1
680
国内向けタイルサーバの構築と運用について
smellman
0
1.8k
Python/Javascriptで読む点群
smellman
1
5.5k
日本のCommunity向け タイルサーバの現状
smellman
0
2.8k
Other Decks in Programming
See All in Programming
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
3
340
一参加者から『中の人』へ 〜全通PHPerがブースに立って学んだ、カンファレンスを100倍楽しむコツ〜
wp_daisuke
0
150
thread_parallel_with_free-threaded_Python_and_NumPy.pdf
riku_sakamoto
0
330
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
460
『寄り添うラジオ』をAIで作る 体験価値から逆算した、会話しないUXと品質設計
theoriatec2024
3
180
仕様駆動開発による爆速プロダクト開発 / Bakusoku Spec Driven Development
kobakei
0
110
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
1
550
Streamlitで実現する自然言語データアプリ開発
ayumu_yamaguchi
0
280
iOSDC Japan 2026 - Swiftで作って学ぼう!データベース自作入門
kaseken
2
160
Jetpack Compose メカニズム
skydoves
0
420
選挙速報を多くのユーザーへ 届ける Live Activities 設計
hamayokokuririn
0
140
モバイル交通系ICへのチャージ実例から考える、クロスプラットフォーム開発におけるiOS実機テスト設計とCI運用
yusuga
1
470
Featured
See All Featured
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
240
Building Applications with DynamoDB
mza
96
7.2k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
410
Rails Girls Zürich Keynote
gr2m
96
14k
Practical Orchestrator
shlominoach
192
12k
The Cult of Friendly URLs
andyhume
79
7k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
500
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
Transcript
OSC2020 Aizu 松澤太郎(タイル三兄弟) Pythonで 点群を 読んでみよう
自己紹介
タイル三兄弟の一味 Twitter: @smellman 日本UNIXユーザ会理事、OSGeo日本支部理事、OpenStreetMap Foundation Japanメン バー React NativeとかRuby on
RailsとかPythonとかやってる地理系プログラマー ブレイクコアクラスタ 自己紹介
点群とは Pythonで読む 地図のイベントの宣伝(時間があまったら) 今日のお題
点群とは
地理で使われるデータの一種 レーザー測量やSfMなどで得られたPoint Data群 Point Cloudという 3Dでの地図表現でよく使われるデータ 最近では自動運転とかSmartうんたらかんたら 点群とは https://tiles.smellman.org/kakegawa/index-itowns.html
las(LASer format)及びlaz(zip圧縮したもの)が有名 lasの仕様書は公開されている https://www.asprs.org/wp-content/uploads/2010/12/LAS_1_4_r13.pdf las1.2〜1.4が一般的に使われている バージョンの違いはヘッダー及び扱えるものの差 フォーマット
Potree 独自のストラクチャを持つもの。専用のコンバータ PotreeConverter を使う。 一時期PotreeConverterが商用ソフトになった(現在はBSDライセンス)。 Cesium or iTown 3D Tiles
に対応。OSSのコンバータでは entwine か py3dtiles が有名。 点群を表示するWebライブラリ
Pythonで読む
lasデータは仕様が公開されている 静岡県がlasデータをたくさん公開している https://pointcloud.pref.shizuoka.jp/ Creative Commons License 4.0 バイナリを読むプログラムを書くのに良い題材となる 今回の本題
Pythonに限らずだいたいのプログラミング言語には標準でバイナリを読むモジュールがある Pythonの場合 struct を利用する https://docs.python.org/ja/3/library/struct.html Javascriptで読む話はFOSS4G Japan 2020 Onlineでやります スポンサー講演でバイナリ読む話するの頭おかしい
Pythonで読む
lasの仕様書を手元に置きます import struct をします open(file_path, ‘rb’) でファイルを開きます rb = read
only, binary structで一つずつ読み込んでいきます 読み方
こんな感じのコードになります 先頭を読む import struct f = open(‘your.las’, ‘rb’) file_signature =
b"".join(list(struct.unpack('4c', f.read(1*4)))).decode(‘ascii') print(file_signature) f.close() # 閉じておく
こんな感じのコードになります File Source IDを読む import struct f = open(‘your.las’, ‘rb’)
file_signature = b"".join(list(struct.unpack('4c', f.read(1*4)))).decode(‘ascii') (file_source_id,) = struct.unpack(‘H’, f.read(2)) print(file_source_id) f.close() # 閉じておく tupleで返ってくるので注意
f.read関数はファイルを読む開始位置をずらしていきます 例えば二回f.readを使うと… f.read(4) f.read(3) 開始位置が7へ移動する read関数 read(4) 0 read(3) N
struct.unpackで読んだバイナリをどのようにアサインするかを決める struct.unpack('4c', f.read(1*4)) char[4] struct.unpack('<L', f.read(4)) unsinged long (リトルエンディアン) struct.unpack
Lasのフォーマットのドキュメントを読みながらひたすらstruct.unpackを並べていく 随時printするなりして問題ないかチェックする unit testを書いても良い わりと単純にPythonでは読むことができる 逆を言うとJavascriptはクセがすごい あとは突き合わせをしていく
こんな感じになる def header(self, f): file_signature = b"".join(list(struct.unpack('4c', f.read(1*4)))).decode('ascii') (file_source_id,) =
struct.unpack('H', f.read(2)) (global_encoding,) = struct.unpack('H', f.read(2)) (guid_data1,) = struct.unpack('<L', f.read(4)) (guid_data2,) = struct.unpack('H', f.read(2)) (guid_data3,) = struct.unpack('H', f.read(2)) guid_data4 = struct.unpack('<8B', f.read(1*8)) …
LASのversion minorによってヘッダの大きさが変わる LAS 1.2 -> 227byte LAS 1.3 -> 235byte
LAS 1.4 -> 375byte 必ずversion checkを入れること 読む上で注意点
ヘッダーにOffset to point dataという値があるので、ここに f.seek をして読み始める データそのものの読み方も仕様を読みながら。 実際の値はscale factorとoffsetの組み合わせになるとかもちゃんと仕様に書いてあるの で見逃さないこと。
点群そのものを読む
地図のイベント
FOSS4G Conferenceは地図のOSSのイベントとして世界各地で行われている 日本では東京、関西、北海道、東海、新潟などで開催されている OSSなプログラムの紹介やサービスの紹介から政府系の発表など、様々な発表がある 昨年のFOSS4G Niigataでは政府CIO補佐官が基調講演 FOSS4G Conference
OpenStreetMapのマッパーやエンジニアの祭典 2017年に国際カンファレンスを会津若松に誘致 日本では1〜2年単位で開催 去年はお休み State of the MAP
コロナのせいでオンラインへ 開催日を調整して、State of the Map Japan 2020 と FOSS4G 2020
JAPAN Online を 2020年11月7日、8日の2日連続で開催 今年のイベント
202011݄7 202011݄8 ޕલ FOSS4G JP 2020 Online νϡʔτϦΞϧσΠ ޕޙ State
of the Map FOSS4G JP 2020 Online ίΞσΠ ࠙ձ λΠϜεέδϡʔϧ
スポンサーセッションで今回の話+Javascript版を話します。 スポンサーセッションで バイナリを読む話 スポンサーとは? FOSS4Gにて
State of the Map Japan 2020 https://stateofthemap.jp/2020/ FOSS4G 2020 Japan
Online https://www.osgeo.jp/events/foss4g-2020/foss4g-2020-japan-online 参加者募集
OpenStreetMap JP https://osm.jp OSGeo日本支部 https://www.osgeo.jp コミュニティサイト