Slide 1

Slide 1 text

OSM import tools and programming OSM のデー タ取り込みツー ルとプログラミング Taro Matsuzawa @smellman Georepublic Japan / OSMFJ / OSGeo.JP / jus

Slide 2

Slide 2 text

about me GIS programmer at Georepublic I don’t know “Geography” well. Specialty: Python / Ruby / Web browser / Unix OS Hobby: Breakcore

Slide 3

Slide 3 text

Topics File format OSM import tools Programming with OSM data (.osm, .pbf )

Slide 4

Slide 4 text

File format .osm, .osc (XML file) All nodes contain the location in the WGS84 reference system. Simplest format and readable for human. .osc is OSM Change file. .pbf (Protocol Bu ff er) Binary format and half of the size of gzipped osm file. .proto file defines format and many programming language supports Protocol Bu ff er. Some columns are delta‑encoded. .o5m, .o5c Design for small file size and fast processing. .osh History file includes all changes.

Slide 5

Slide 5 text

Compare Human reaable Process speed file size osm yes too slow biggest pbf no fast small o5m no fast small pbf is smaller than o5m but 7zip compressed o5m is smaller than pbf.

Slide 6

Slide 6 text

osmconvert osmconvert use to convert and process OpenStreetMap file. Supports .osm, .osc, .osh, .o5m, .o5c and .pbf files. Clip area with longiute and latitude, or Polygon. # i n s t a l l $ w g e t ‐ O ‐ h t t p : / / m . m . i 2 4 . c c / o s m c o n v e r t . c | c c ‐ x c ‐ ‐ l z ‐ O 3 ‐ o o s m c o n v e r t # c o n v e r t $ . / o s m c o n v e r t n o r w a y . p b f > n o r w a y . o s m # c l i p a r e a w i t h l o n g i t u d e a n d l a t i t u d e $ . / o s m c o n v e r t g e r m a n y . p b f ‐ b = 1 0 . 5 , 4 9 , 1 1 . 5 , 5 0 ‐ o = n u e r n b e r g . o 5 m # c l i p a r e a w i t h P o l y g o n . $ . / o s m c o n v e r t g e r m a n y . p b f ‐ B = h a m b u r g . p o l y ‐ o = h a m b u r g . p b f

Slide 7

Slide 7 text

osm import tools osm2pgsql imposm3 ogr2ogr osm2pgrouting

Slide 8

Slide 8 text

osm2pgsql Most famous tool to import osm data to postgresql. Written in C++ and libosmium. OpenStreetMap.org default style depends osm2pgsql. https://github.com/gravitystorm/openstreetmap‑ carto/blob/master/openstreetmap‑carto.style Control import tags with style file.

Slide 9

Slide 9 text

example # T h i s i s t h e . s t y l e f i l e f o r O p e n S t r e e t M a p C a r t o , w h i c h i s c u r r e n t l y # t h e s a m e a s t h e u p s t r e a m o s m 2 p g s q l s t y l e # p h s t o r e i s u s e d i n s t e a d o f p o l y g o n , n o c o l u m n t o p r e s e r v e c o m p a t i b i l i t y # w i t h o l d e r o s m 2 p g s q l v e r s i o n s # O s m T y p e T a g D a t a T y p e F l a g s n o d e , w a y a c c e s s t e x t l i n e a r n o d e , w a y a d d r : h o u s e n a m e t e x t l i n e a r n o d e , w a y a d d r : h o u s e n u m b e r t e x t l i n e a r n o d e , w a y a d d r : i n t e r p o l a t i o n t e x t l i n e a r n o d e , w a y a d m i n _ l e v e l t e x t l i n e a r n o d e , w a y a e r i a l w a y t e x t l i n e a r n o d e , w a y a e r o w a y t e x t p o l y g o n n o d e , w a y a m e n i t y t e x t p o l y g o n n o d e , w a y a r e a t e x t p o l y g o n # h a r d c o d e d s u p p o r t f o r a r e a = 1 / y e s = > p o l y g o n i s n o d e , w a y b a r r i e r t e x t l i n e a r n o d e , w a y b i c y c l e t e x t l i n e a r n o d e , w a y b r a n d t e x t l i n e a r n o d e , w a y b r i d g e t e x t l i n e a r n o d e , w a y b o u n d a r y t e x t l i n e a r

Slide 10

Slide 10 text

Imposm 3 Alternative osm import tool. Imposm 3 is written in Go. Imposm 2 is written in Python and configurations/mappings are not compatible. High performance and firster than osm2pgsql. Create table structrue with YAML/JSON file. We can design postgresql table structure for rendering server.

Slide 11

Slide 11 text

Notice: Imposm 3 Current master can't import japan pbf. Use osm2vectortiles/imposm3 instead of master branch. $ g i t c l o n e h t t p s : / / g i t h u b . c o m / o s m 2 v e c t o r t i l e s / i m p o s m 3 \ $ G O P A T H / s r c / g i t h u b . c o m / o m n i s c a l e / i m p o s m 3 $ c d $ G O P A T H / s r c / g i t h u b . c o m / o m n i s c a l e / i m p o s m 3 $ g i t r e s e t ‐ ‐ h a r d 0 6 0 f 4 1 1 1 f c a f 4 5 9 e 8 b 0 9 a 0 3 5 1 8 3 6 d f e 8 e b 4 d c 9 4 3 $ g o g e t $ g o i n s t a l l

Slide 12

Slide 12 text

osm2pgsql vs Imposm 3: table structures osm2pgsql controls tags with style file but it can't control table structures. Imposm 3 controls table structures and tags in json or yaml file (mapping file).

Slide 13

Slide 13 text

osm2pgsql table structures o s m _ j p _ o s m 2 p g s q l = # \ d L i s t o f r e l a t i o n s S c h e m a | N a m e | T y p e | O w n e r ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ + ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ + ‐ ‐ ‐ ‐ ‐ ‐ ‐ + ‐ ‐ ‐ ‐ ‐ ‐ ‐ p u b l i c | g e o g r a p h y _ c o l u m n s | v i e w | b t m p u b l i c | g e o m e t r y _ c o l u m n s | v i e w | b t m p u b l i c | p l a n e t _ o s m _ l i n e | t a b l e | o s m p u b l i c | p l a n e t _ o s m _ p o i n t | t a b l e | o s m p u b l i c | p l a n e t _ o s m _ p o l y g o n | t a b l e | o s m p u b l i c | p l a n e t _ o s m _ r o a d s | t a b l e | o s m p u b l i c | r a s t e r _ c o l u m n s | v i e w | b t m p u b l i c | r a s t e r _ o v e r v i e w s | v i e w | b t m p u b l i c | s p a t i a l _ r e f _ s y s | t a b l e | b t m ( 9 r o w s )

Slide 14

Slide 14 text

osm2pgsql table structures (2) o s m _ j p _ o s m 2 p g s q l = # \ d p l a n e t _ o s m _ p o l y g o n T a b l e " p u b l i c . p l a n e t _ o s m _ p o l y g o n " C o l u m n | T y p e | M o d i f i e r s ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ + ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ + ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ o s m _ i d | b i g i n t | a c c e s s | t e x t | a d d r : h o u s e n a m e | t e x t | a d d r : h o u s e n u m b e r | t e x t | a d d r : i n t e r p o l a t i o n | t e x t | a d m i n _ l e v e l | t e x t | a e r i a l w a y | t e x t | a e r o w a y | t e x t | a m e n i t y | t e x t | a r e a | t e x t | b a r r i e r | t e x t | b i c y c l e | t e x t | b r a n d | t e x t | b r i d g e | t e x t | b o u n d a r y | t e x t | b u i l d i n g | t e x t | . . .

Slide 15

Slide 15 text

imposm3 table structure (1) Design in mapping file b u i l d i n g s : f i e l d s : ‐ n a m e : o s m _ i d t y p e : i d ‐ n a m e : g e o m e t r y t y p e : g e o m e t r y ‐ k e y : n a m e n a m e : n a m e t y p e : s t r i n g ‐ n a m e : t y p e t y p e : m a p p i n g _ v a l u e m a p p i n g : b u i l d i n g : ‐ _ _ a n y _ _ t y p e : p o l y g o n

Slide 16

Slide 16 text

imposm3 table structure (2) o s m _ j p _ i m p o s m 3 = # \ d L i s t o f r e l a t i o n s S c h e m a | N a m e | T y p e | O w n e r ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ + ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ + ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ + ‐ ‐ ‐ ‐ ‐ ‐ ‐ p u b l i c | g e o g r a p h y _ c o l u m n s | v i e w | b t m p u b l i c | g e o m e t r y _ c o l u m n s | v i e w | b t m p u b l i c | o s m _ a d m i n | t a b l e | o s m p u b l i c | o s m _ a d m i n _ i d _ s e q | s e q u e n c e | o s m p u b l i c | o s m _ a e r o w a y s | t a b l e | o s m p u b l i c | o s m _ a e r o w a y s _ i d _ s e q | s e q u e n c e | o s m p u b l i c | o s m _ a m e n i t i e s | t a b l e | o s m p u b l i c | o s m _ a m e n i t i e s _ i d _ s e q | s e q u e n c e | o s m p u b l i c | o s m _ b a r r i e r p o i n t s | t a b l e | o s m p u b l i c | o s m _ b a r r i e r p o i n t s _ i d _ s e q | s e q u e n c e | o s m p u b l i c | o s m _ b a r r i e r w a y s | t a b l e | o s m p u b l i c | o s m _ b a r r i e r w a y s _ i d _ s e q | s e q u e n c e | o s m p u b l i c | o s m _ b u i l d i n g s | t a b l e | o s m p u b l i c | o s m _ b u i l d i n g s _ i d _ s e q | s e q u e n c e | o s m . . .

Slide 17

Slide 17 text

imposm3 table structure (3) # \ d o s m _ b u i l d i n g s T a b l e " p u b l i c . o s m _ b u i l d i n g s " C o l u m n | T y p e | M o d i f i e r s ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ + ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ + ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ ‐ i d | i n t e g e r | n o t n u l l d e f a u l t n e x t v a l ( ' o s m _ b u i l d i n g s _ i d _ s e q ' : : r e g c l a s o s m _ i d | b i g i n t | n a m e | c h a r a c t e r v a r y i n g | t y p e | c h a r a c t e r v a r y i n g | g e o m e t r y | g e o m e t r y ( G e o m e t r y , 3 8 5 7 ) | I n d e x e s : " o s m _ b u i l d i n g s _ p k e y " P R I M A R Y K E Y , b t r e e ( i d ) " o s m _ b u i l d i n g s _ g e o m " g i s t ( g e o m e t r y ) " o s m _ b u i l d i n g s _ g e o m _ g e o h a s h " b t r e e ( s t _ g e o h a s h ( s t _ t r a n s f o r m ( s t _ s e t s r i d ( b o x 2 d ( g e o m e t r y ) : : g e " o s m _ b u i l d i n g s _ o s m _ i d _ i d x " b t r e e ( o s m _ i d )

Slide 18

Slide 18 text

query in OSM‑bright osm2pgsql ( S E L E C T w a y , b u i l d i n g A S t y p e F R O M p l a n e t _ o s m _ p o l y g o n W H E R E b u i l d i n g N O T I N ( ' ' , ' 0 ' , ' f a l s e ' , ' n o ' ) O R D E R B Y S T _ Y M i n ( S T _ E n v e l o p e ( w a y ) ) D E S C ) A S d a t a imposm3 ( S E L E C T g e o m e t r y , t y p e , n a m e , a r e a F R O M o s m _ b u i l d i n g s O R D E R B Y S T _ Y M i n ( S T _ E n v e l o p e ( g e o m e t r y ) ) D E S C ) A S d a t a

Slide 19

Slide 19 text

benchmark osm2pgsql vs imposm3 osm2pgsql $ / u s r / b i n / t i m e . / o s m 2 p g s q l ‐ U o s m ‐ d o s m _ j p _ o s m 2 p g s q l \ ‐ S . . / d e f a u l t . s t y l e ‐ c ‐ C 2 0 0 0 ‐ ‐ f l a t ‐ n o d e s / t m p / f l a t n o d e \ ~ / d e v e l o p / o s m / d a t a / j a p a n ‐ 1 6 0 4 1 7 . o s m . p b f . . . O s m 2 p g s q l t o o k 1 0 5 7 s o v e r a l l 1 0 5 8 . 6 7 r e a l 9 8 5 . 2 9 u s e r 6 7 . 8 4 s y s imposm3 $ / u s r / b i n / t i m e i m p o s m 3 i m p o r t ‐ c o n n e c t i o n \ p o s t g i s : / / o s m : o s m @ l o c a l h o s t / o s m _ j p _ i m p o s m 3 ‐ m a p p i n g \ $ G O P A T H / s r c / g i t h u b . c o m / o m n i s c a l e / i m p o s m 3 / e x a m p l e ‐ m a p p i n g . y m l \ ‐ o p t i m i z e ‐ r e a d j a p a n ‐ 1 6 0 4 1 7 . o s m . p b f ‐ w r i t e . . . [ A u g 4 2 0 : 3 2 : 3 5 ] [ I N F O ] I m p o s m t o o k : 3 1 m 1 2 . 9 6 2 1 5 0 4 6 2 s 1 8 7 3 . 1 5 r e a l 2 1 3 2 . 9 7 u s e r 2 9 5 . 1 3 s y s

Slide 20

Slide 20 text

ogr2ogr ogr2ogr converts simple features data between file formats. ogr2ogr supports .osm file and pbf file. o g r 2 o g r ‐ ‐ c o n f i g O S M _ U S E _ C U S T O M _ I N D E X I N G N O \ ‐ s k i p f a i l u r e s ‐ f " E S R I S h a p e f i l e " \ s e n d a g a y a _ s h a p e f i l e s e n d a g a y a . o s m

Slide 21

Slide 21 text

osm2pgrouting Import tool for osm data to pgRouting database. Builds the routing network topology automatically.

Slide 22

Slide 22 text

Programming for OSM files.

Slide 23

Slide 23 text

Libraries for programmer osmium (C++, Python, Node.js) libosmpbfreader (C++) osmpbfreader‑rs (Rust) rust‑osm‑reader (Rust)

Slide 24

Slide 24 text

osmium C++ library for osm data. http://osmcode.org/libosmium/ It provide C++11 header library. Easy to contain your C++ product with cmake. osmium provide python binding (PyOsmium) and node.js binding (Node‑Osmium). Supports too many OpenStreetMap file format. Old versions are still used in many products. https://github.com/joto/osmium If you find the product use old version, it's pull‑request chance (or death road).

Slide 25

Slide 25 text

concept osmium provide simple interfaces. open many format (.osm, .osh, .osc, .pbf, ...) OSM Entity classes (Node, Way, Relation, Changesets, ...) Also provide iterator for tag. Basic Types (OSM id, version, user, Location, Segment(connection between two location), Box) process each OSM Entities in Handler

Slide 26

Slide 26 text

Handler Need to implement to process OSM Entities. i m p o r t o s m i u m a s o c l a s s F i l e S t a t s H a n d l e r ( o . S i m p l e H a n d l e r ) : d e f _ _ i n i t _ _ ( s e l f ) : o . S i m p l e H a n d l e r . _ _ i n i t _ _ ( s e l f ) s e l f . n o d e s = 0 s e l f . w a y s = 0 s e l f . r e l s = 0 d e f n o d e ( s e l f , n ) : s e l f . n o d e s + = 1 d e f w a y ( s e l f , w ) : s e l f . w a y s + = 1 d e f r e l a t i o n ( s e l f , r ) : s e l f . r e l s + = 1

Slide 27

Slide 27 text

libosmpbfreader and osmpbfreader‑rs libosmpbfreader is C++ library to read osm's pbf file. https://github.com/CanalTP/libosmpbfreader This library supports only osm id, location and tags. Can't make user stats. osmpbfreader‑rs is Rust library and same concept as libosmpbfreader. https://github.com/TeXitoi/osmpbfreader‑rs It's use iterator and match.

Slide 28

Slide 28 text

l e t r = s t d : : f s : : F i l e : : o p e n ( & s t d : : p a t h : : P a t h : : n e w ( f i l e n a m e ) ) . u n w r a p ( ) ; l e t m u t p b f = o s m p b f r e a d e r : : O s m P b f R e a d e r : : n e w ( r ) ; l e t m u t n b _ n o d e s = 0 ; l e t m u t s u m _ l o n = 0 . ; l e t m u t s u m _ l a t = 0 . ; l e t m u t n b _ w a y s = 0 ; l e t m u t n b _ w a y _ n o d e s = 0 ; l e t m u t n b _ r e l s = 0 ; l e t m u t n b _ r e l _ r e f s = 0 ;

Slide 29

Slide 29 text

f o r o b j i n p b f . i t e r ( ) { i f ! f i l t e r ( o b j . t a g s ( ) ) { c o n t i n u e ; } i n f o ! ( " { : ? } " , o b j ) ; m a t c h o b j { o s m p b f r e a d e r : : O s m O b j : : N o d e ( n o d e ) = > { n b _ n o d e s + = 1 ; s u m _ l o n + = n o d e . l o n ; s u m _ l a t + = n o d e . l a t ; } o s m p b f r e a d e r : : O s m O b j : : W a y ( w a y ) = > { n b _ w a y s + = 1 ; n b _ w a y _ n o d e s + = w a y . n o d e s . l e n ( ) ; } o s m p b f r e a d e r : : O s m O b j : : R e l a t i o n ( r e l ) = > { n b _ r e l s + = 1 ; n b _ r e l _ r e f s + = r e l . r e f s . l e n ( ) ; } } }

Slide 30

Slide 30 text

rust‑osm‑reader (pbf‑reader) rust‑osm‑reader is Rust implementation and uses multithreaded approach for reading data. https://gitlab.com/oleksandromelchuk/rust‑osm‑reader This library also supports only osm id, location and tags. But I hacked to get user name. use Concurrency and match Package name has problem, pbf is not used only OpenStreeetMap.

Slide 31

Slide 31 text

l e t ( m u t n o d e _ t x , n o d e _ r x ) = m p s c : : c h a n n e l : : < P B F D a t a > ( ) ; l e t h = t h r e a d : : s p a w n ( m o v e | | { r e t u r n r e a d _ p b f ( & " s r c / s a m p l e . p b f " . t o _ s t r i n g ( ) , 1 0 , & m u t n o d e _ t x ) ; } ) ; l e t m u t n o d e s _ c o u n t = 0 ; l e t m u t t a g s _ c o u n t = 0 ; / / i n a l l e n t i t i e s l e t m u t w a y _ c o u n t = 0 ; l e t m u t r e l _ c o u n t = 0 ; l e t m u t i n f o _ c o u n t = 0 ; l e t m u t s t r i n g s _ c o u n t = 0 ; l e t m u t t o t a l _ s t r i n g s _ c o u n t = 0 ; l e t m u t s t r i n g s _ i n d e x = H a s h M a p : : n e w ( ) ; l o o p { m a t c h n o d e _ r x . r e c v ( ) { O k ( p b f d a t a ) = > {

Slide 32

Slide 32 text

m a t c h p b f d a t a { P B F D a t a : : N o d e s S e t ( s e t ) = > { f o r ( i d , n o d e ) i n s e t { n o d e s _ c o u n t = n o d e s _ c o u n t + 1 ; t a g s _ c o u n t = t a g s _ c o u n t + n o d e . t a g s . t a g s . l e n ( ) ; i f ! n o d e . t a g s . t a g s . i s _ e m p t y ( ) { m a t c h s t r i n g s _ i n d e x . g e t ( & n o d e . t a g s . s t r i n g _ t a b l e _ i d ) { S o m e ( s m a p ) = > { l e t k v s = n o d e . t a g s . g e t _ k e y s _ v a l s ( s m a p ) ; a s s e r t _ e q ! ( k v s . l e n ( ) , n o d e . t a g s . t a g s . l e n ( ) ) ; f o r ( k , v ) i n k v s { p r i n t l n ! ( " N o d e i d { } t a g s [ { } : { } ] " , i d , k , v ) ; } } N o n e = > { p r i n t l n ! ( " E r r o r " ) ; } } } } } P B F D a t a : : W a y s S e t ( s e t ) = > { / / . . .

Slide 33

Slide 33 text

osmium(C++) benchmark % / u s r / b i n / t i m e . / e x a m p l e s / o s m i u m _ c o u n t \ . . / . . / . . / . . / d a t a / t a i w a n ‐ l a t e s t . o s m . p b f N o d e s : 5 3 4 2 2 6 0 W a y s : 5 6 3 7 8 6 R e l a t i o n s : 1 4 0 5 9 0 . 5 8 r e a l 2 . 2 3 u s e r 0 . 2 1 s y s % / u s r / b i n / t i m e . / e x a m p l e s / o s m i u m _ c o u n t \ . . / . . / . . / . . / d a t a / j a p a n ‐ 1 6 0 4 1 7 . o s m . p b f N o d e s : 1 1 4 8 2 5 5 9 0 W a y s : 1 1 6 6 0 6 2 2 R e l a t i o n s : 3 2 4 5 1 1 2 . 3 3 r e a l 4 6 . 3 7 u s e r 4 . 3 5 s y s

Slide 34

Slide 34 text

pyosmium benchmark % / u s r / b i n / t i m e p y t h o n e x a m p l e s / o s m _ f i l e _ s t a t s . p y \ . . / . . / . . / d a t a / t a i w a n ‐ l a t e s t . o s m . p b f N o d e s : 5 3 4 2 2 6 0 W a y s : 5 6 3 7 8 6 R e l a t i o n s : 1 4 0 5 9 4 . 1 3 r e a l 5 . 4 2 u s e r 0 . 1 6 s y s % / u s r / b i n / t i m e p y t h o n e x a m p l e s / o s m _ f i l e _ s t a t s . p y \ . . / . . / . . / d a t a / j a p a n ‐ 1 6 0 4 1 7 . o s m . p b f N o d e s : 1 1 4 8 2 5 5 9 0 W a y s : 1 1 6 6 0 6 2 2 R e l a t i o n s : 3 2 4 5 1 8 9 . 9 3 r e a l 1 1 6 . 4 7 u s e r 2 . 5 6 s y s

Slide 35

Slide 35 text

node‑osmium benchmark % / u s r / b i n / t i m e n o d e i n d e x . j s \ . . / . . / d a t a / t a i w a n ‐ l a t e s t . o s m . p b f N o d e s : 5 3 4 2 2 6 0 W a y s : 5 6 3 7 8 6 R e l a t i o n s : 1 4 0 5 9 8 . 7 2 r e a l 9 . 6 1 u s e r 0 . 6 6 s y s % / u s r / b i n / t i m e n o d e i n d e x . j s \ . . / . . / d a t a / j a p a n ‐ 1 6 0 4 1 7 . o s m . p b f C o m m a n d t e r m i n a t e d a b n o r m a l l y .

Slide 36

Slide 36 text

libosmpbfreader benchmark % / u s r / b i n / t i m e . / e x a m p l e _ c o u n t e r \ . . / . . / . . / d a t a / t a i w a n ‐ l a t e s t . o s m . p b f [ I N F O ] R e a d i n g t h e f i l e . . / . . / . . / d a t a / t a i w a n ‐ l a t e s t . o s m . p b f [ I N F O ] W e f i n i s h e d r e a d i n g t h e f i l e W e r e a d 5 3 4 2 2 6 0 n o d e s , 5 6 3 7 8 6 w a y s a n d 1 4 0 5 9 r e l a t i o n s 3 . 7 4 r e a l 3 . 5 9 u s e r 0 . 1 2 s y s % / u s r / b i n / t i m e . / e x a m p l e _ c o u n t e r \ . . / . . / . . / d a t a / j a p a n ‐ 1 6 0 4 1 7 . o s m . p b f [ I N F O ] R e a d i n g t h e f i l e . . / . . / . . / d a t a / j a p a n ‐ 1 6 0 4 1 7 . o s m . p b f [ I N F O ] W e f i n i s h e d r e a d i n g t h e f i l e W e r e a d 1 1 4 8 2 5 5 9 0 n o d e s , 1 1 6 6 0 6 2 2 w a y s a n d 3 2 4 5 1 r e l a t i o n s 7 6 . 3 9 r e a l 7 3 . 4 8 u s e r 2 . 3 2 s y s

Slide 37

Slide 37 text

osmpbfreader‑rs benchmark % / u s r / b i n / t i m e c a r g o r u n ‐ ‐ r e l e a s e \ \ . . / . . / d a t a / t a i w a n ‐ l a t e s t . o s m . p b f R u n n i n g ` t a r g e t / r e l e a s e / o s m p b f r e a d e r ‐ r s ‐ t e s t . . / . . / d a t a / t a i w a n ‐ l a t e s t . o s m . p b f ` c o u n t i n g o b j e c t s . . . 5 3 4 2 2 6 0 n o d e s , 5 6 3 7 8 6 w a y s , 1 4 0 5 9 r e l a t i o n s 4 . 1 3 r e a l 4 . 0 1 u s e r 0 . 0 8 s y s % / u s r / b i n / t i m e c a r g o r u n ‐ ‐ r e l e a s e \ \ . . / . . / d a t a / j a p a n ‐ 1 6 0 4 1 7 . o s m . p b f R u n n i n g ` t a r g e t / r e l e a s e / o s m p b f r e a d e r ‐ r s ‐ t e s t . . / . . / d a t a / j a p a n ‐ 1 6 0 4 1 7 . o s m . p b f ` c o u n t i n g o b j e c t s . . . 1 1 4 8 2 5 5 9 0 n o d e s , 1 1 6 6 0 6 2 2 w a y s , 3 2 4 5 1 r e l a t i o n s 8 8 . 8 5 r e a l 8 6 . 9 1 u s e r 1 . 4 4 s y s

Slide 38

Slide 38 text

rust‑osm‑reader(0.1.2) benchmark % / u s r / b i n / t i m e c a r g o r u n ‐ ‐ r e l e a s e \ . . / . . / d a t a / t a i w a n ‐ l a t e s t . o s m . p b f . . . 5 3 4 2 2 6 0 n o d e s , 5 6 3 7 8 6 w a y s , 1 4 0 5 9 r e l a t i o n s D O N E ! ! ! ! 2 . 2 0 r e a l 7 . 4 4 u s e r 0 . 5 3 s y s % / u s r / b i n / t i m e c a r g o r u n ‐ ‐ r e l e a s e \ . . / . . / d a t a / j a p a n ‐ 1 6 0 4 1 7 . o s m . p b f . . . 1 1 4 8 2 5 5 9 0 n o d e s , 1 1 6 6 0 6 2 2 w a y s , 3 2 4 5 1 r e l a t i o n s D O N E ! ! ! ! 6 1 . 0 8 r e a l 1 6 8 . 3 6 u s e r 2 0 . 6 4 s y s

Slide 39

Slide 39 text

rust‑osm‑reader(master) benchmark % / u s r / b i n / t i m e c a r g o r u n ‐ ‐ r e l e a s e ‐ ‐ e x a m p l e b e n c h m a r k \ . . / . . / d a t a / t a i w a n ‐ l a t e s t . o s m . p b f R u n n i n g ` t a r g e t / r e l e a s e / e x a m p l e s / b e n c h m a r k . . / . . / d a t a / t a i w a n ‐ l a t e s t . o s m . p b f ` . . . 5 3 4 2 2 6 0 n o d e s , 5 6 3 7 8 6 w a y s , 1 4 0 5 9 r e l a t i o n s D O N E ! ! ! ! 1 . 0 0 r e a l 5 . 2 5 u s e r 0 . 4 0 s y s % / u s r / b i n / t i m e c a r g o r u n ‐ ‐ r e l e a s e ‐ ‐ e x a m p l e b e n c h m a r k . . / . . / d a t a / j a p a n ‐ 1 6 0 4 1 7 . o s m . p b f R u n n i n g ` t a r g e t / r e l e a s e / e x a m p l e s / b e n c h m a r k . . / . . / d a t a / j a p a n ‐ 1 6 0 4 1 7 . o s m . p b f ` . . . 1 1 4 8 2 5 5 9 0 n o d e s , 1 1 6 6 0 6 2 2 w a y s , 3 2 4 5 1 r e l a t i o n s D O N E ! ! ! ! 1 6 . 4 0 r e a l 1 1 0 . 2 6 u s e r 5 . 8 0 s y s

Slide 40

Slide 40 text

benchmark result Program Taiwan Japan osmium (C++) 0.58 12.33 rust‑osm‑reader master (Rust) 1.00 16.40 rust‑osm‑reader 0.1.2 (Rust) 2.20 61.08 libosmpbfreader (C++) 3.74 76.39 osmpbfreader‑rs (Rust) 4.13 88.85 pyosmium (Python) 4.13 89.93 node‑osmium (Node) 8.72 none

Slide 41

Slide 41 text

summary osmium has good interface and better speed. If you are C++11/Python programmer, osmium is best solution in now. If you are Javascript programmer, let's hack node‑osmium. Rust is hot programming language in OSM. Let's try Rust.