arcgis api for javascript analyzing vector tile performance...performance :: looking at both ends of...

Post on 07-Jul-2020

37 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Hannes Fleischer

ArcGIS API for JavaScript Analyzing Vector Tile Performance

Agenda

• Basics :: tile types

• Performance :: looking at both ends of the spectrum

• Analysis :: measuring and visualizing data quality- Vector Tile Decoder- Visualization- Demo

• Data Quality :: reduce vertices and features- Tool suggestions- Demo

Basics :: tile types

• Raster Tiles- Tiled portions of map- Style permanently applied to data- Fixed tiling scheme - Tile size determined by

- File format- Compression- Data quality- Style quality

• Vector Tiles- Tiled portions of data- Style separated from data- Adaptive or fixed tiling scheme- Tile size determined by

- Data quality

Basics :: tile types

-

-

-

-

-

-

-

-

-

-

-

- Tile size determined by- Data quality

Performance :: fast and crisp

• Vector Tiles smaller than 100kB and/or 10000 vertices- load fast (<50ms)- render fast- higher detail LOD’s become available fast enough to replace low detail LOD’s

Performance :: on the heavy side

• Vector Tiles larger than 1000kB and/or 100000 vertices- may load slow, (> 250ms)- may have noticeable rendering time- higher detail LODs may take long to show, thus exposing low detail LOD content

Analysis :: measuring and visualizing data quality

• Vector Tile reader- Tile anatomy- Service structure- Tile decoder

• Data Visualization- Tile payload charting

• Map Visualization- Feature highlights- Vertex density

Analysis :: vector tile coordinates

• Vector Tile Grid- Fixed numbers zero to grid extent- Mapped to geo space by tiling scheme

• Tile size is 512px, default grid size is 4096

• Default grid resolutions- Lod 09 / 1:577790: 19.11m- Lod 06 / 1:361112: 1.19m- …

2 / 2

6 / -1

5 / 7

-12 / 4

0 / 0

15 / 15

Analysis :: vector tile index

• Tiles are split until vertex countis below maximum vertex count

• Tiles at certain LODs may containa high number of vertices

• The last tile in its stack has a largergrid size so overzooming doesnot expose artifacts

Analysis :: vector tile service structure

├─── esriinfo metadata└─── p12

├─── resources│ ├─── fonts more pbfs, "sdf" encoded glyphs│ ├─── info directory info│ ├─── sprites multi resolution sprites│ └─── styles rendering directives├─── tile tiles, bundled or exploded├─── tilemap index└─── root.json service info

Analysis :: vector tile decoder

3 lod_10"!Îø¨•€€ ÿÿÿÿ€€ _minzoom(€€x

1: 2: 33: 4: 5: l6: o7: d8: _9: 110: 011: 12: 13: 14: 15: "16: 17: !18: Î19: ø20: 21: ¨22: •23: 24: €25: €

Analysis :: vector tile decoder

1: 000110102: 001100113: 000010104: 000001105: 011011006: 011011117: 011001008: 010111119: 0011000110: 0011000011: 0001001012: 0001100113: 0001100014: 0000000115: 0010001016: 0001010117: 0010000118: 1100111019: 1111100020: 0000001021: 1010100022: 1001010123: 0001000124: 1000000025: 10000000

Analysis :: vector tile decoder

1: 00011010 ───> 3 2: 00110011 3: 00001010 4: 00000110 5: 01101100 6: 01101111 7: 01100100 8: 01011111 9: 00110001 10: 00110000 11: 00010010 12: 00011001 13: 00011000 14: 00000001 15: 00100010 16: 00010101 17: 00100001 18: 11001110 19: 11111000 20: 00000010 21: 10101000 22: 10010101 23: 00010001 24: 10000000 25: 10000000

Analysis :: vector tile decoder

1: 00011010 ───> 3/2 2: 00110011 3: 00001010 4: 00000110 5: 01101100 6: 01101111 7: 01100100 8: 01011111 9: 00110001 10: 00110000 11: 00010010 12: 00011001 13: 00011000 14: 00000001 15: 00100010 16: 00010101 17: 00100001 18: 11001110 19: 11111000 20: 00000010 21: 10101000 22: 10010101 23: 00010001 24: 10000000 25: 10000000

Analysis :: vector tile decoder

1: 00011010 ───> 3/2 ───> layer <─── repeated Layer layers = 3; 2: 00110011 3: 00001010 4: 00000110 5: 01101100 6: 01101111 7: 01100100 8: 01011111 9: 00110001 10: 00110000 11: 00010010 12: 00011001 13: 00011000 14: 00000001 15: 00100010 16: 00010101 17: 00100001 18: 11001110 19: 11111000 20: 00000010 21: 10101000 22: 10010101 23: 00010001 24: 10000000 25: 10000000

Analysis :: vector tile decoder

1: 00011010 ───> 3/2 ─┬─> layer <─── repeated Layer layers = 3;2: 00110011 ───> 51 └─> length ───────┐3: 00001010 │ 4: 00000110 │5: 01101100 │6: 01101111 │7: 01100100 │8: 01011111 │9: 00110001 │10: 00110000 │ 11: 00010010 │12: 00011001 │13: 00011000 │14: 00000001 │15: 00100010 │16: 00010101 │17: 00100001 │18: 11001110 │ 19: 11111000 │ 20: 00000010 │ 21: 10101000 │ 22: 10010101 │ 23: 00010001 │24: 10000000 │25: 10000000 │

Analysis :: vector tile decoder

1: 00011010 ───> 3/2 ─┬─> layer <─── repeated Layer layers = 3; 2: 00110011 ───> 51 └─> length ───────┐3: 00001010 ───> 1/2 ─┬─> name │ <─── required string name = 1; 4: 00000110 ───> 6 └─> length ───┐ │5: 01101100 │ │6: 01101111 │ │7: 01100100 │ │8: 01011111 │ │9: 00110001 │ │10: 00110000 <───────────────────────────┘ │ 11: 00010010 │12: 00011001 │13: 00011000 │14: 00000001 │15: 00100010 │16: 00010101 │17: 00100001 │18: 11001110 │ 19: 11111000 │ 20: 00000010 │ 21: 10101000 │ 22: 10010101 │ 23: 00010001 │24: 10000000 │25: 10000000 │

Analysis :: vector tile decoder

1: 00011010 ───> 3/2 ─┬─> layer <─── repeated Layer layers = 3; 2: 00110011 ───> 51 └─> length ───────┐3: 00001010 ───> 1/2 ─┬─> name │ <─── required string name = 1;4: 00000110 ───> 6 └─> length ───┐ │5: 01101100 ───> l │ │6: 01101111 ───> o │ │7: 01100100 ───> d │ │8: 01011111 ───> _ │ │9: 00110001 ───> 1 │ │10: 00110000 ───> 0 <──────────────┘ │ 11: 00010010 │12: 00011001 │13: 00011000 │14: 00000001 │15: 00100010 │16: 00010101 │17: 00100001 │18: 11001110 │ 19: 11111000 │ 20: 00000010 │ 21: 10101000 │ 22: 10010101 │ 23: 00010001 │24: 10000000 │25: 10000000 │

Analysis :: vector tile decoder

1: 00011010 ───> 3/2 ─┬─> layer <─── repeated Layer layers = 3; 2: 00110011 ───> 51 └─> length ───────┐3: 00001010 ───> 1/2 ─┬─> name │ <─── required string name = 1;4: 00000110 ───> 6 └─> length ───┐ │5: 01101100 ───> l │ │6: 01101111 ───> o │ │7: 01100100 ───> d │ │8: 01011111 ───> _ │ │9: 00110001 ───> 1 │ │10: 00110000 ───> 0 <──────────────┘ │ 11: 00010010 ───> 2/2 ─┬─> feature │ <─── repeated Feature features = 2;12: 00011001 ───> 25 └─> length ─────┐ │13: 00011000 │ │14: 00000001 │ │15: 00100010 │ │16: 00010101 │ │17: 00100001 │ │18: 11001110 │ │ 19: 11111000 │ │ 20: 00000010 │ │ 21: 10101000 │ │ 22: 10010101 │ │ 23: 00010001 │ │24: 10000000 │ │25: 10000000 │ │

│ │

Analysis :: vector tile decoder

1: 00011010 ───> 3/2 ─┬─> layer <─── repeated Layer layers = 3; 2: 00110011 ───> 51 └─> length ───────┐3: 00001010 ───> 1/2 ─┬─> name │ <─── required string name = 1; 4: 00000110 ───> 6 └─> length ───┐ │5: 01101100 ───> l │ │6: 01101111 ───> o │ │7: 01100100 ───> d │ │8: 01011111 ───> _ │ │9: 00110001 ───> 1 │ │10: 00110000 ───> 0 <──────────────┘ │ 11: 00010010 ───> 2/2 ─┬─> feature │ <─── repeated Feature features = 2;12: 00011001 ───> 25 └─> length ─────┐ │13: 00011000 │ │14: 00000001 │ │15: 00100010 │ │16: 00010101 │ │17: 00100001 │ │18: 11001110 │ │ 19: 11111000 │ │ 20: 00000010 │ │ 21: 10101000 │ │ 22: 10010101 │ │ 23: 00010001 │ │24: 10000000 │ │25: 10000000 │ │

│ │

Analysis :: vector tile decoder

10: 00110000 ───> 0 <──────────────┘ │ 11: 00010010 ───> 2/2 ─┬─> feature │ <─── repeated Feature features = 2;12: 00011001 ───> 25 └─> length ─────┐ │13: 00011000 │ │14: 00000001 │ │15: 00100010 │ │16: 00010101 │ │17: 00100001 │ │18: 11001110 │ │ 19: 11111000 │ │ 20: 00000010 │ │ 21: 10101000 │ │ 22: 10010101 │ │ 23: 00010001 │ │24: 10000000 │ │25: 10000000 │ │26: 00010000 │ │27: 00000000 │ │28: 11111111 │ │29: 11111111 │ │30: 00001111 │ │31: 11111111 │ │32: 11111111 │ │33: 00001111 │ │34: 10000000 │ │35: 10000000 │ │36: 00010000 │ │37: 00000000 <─────────────────────────────┘ │38: 00011010 │39: 00001000 │40: 01011111 │41: 01101101 │

Analysis :: vector tile decoder

4: 00000110 ───> 6 └─> length ───┐ │5: 01101100 ───> l │ │6: 01101111 ───> o │ │7: 01100100 ───> d │ │8: 01011111 ───> _ │ │9: 00110001 ───> 1 │ │10: 00110000 ───> 0 <──────────────┘ │ 11: 00010010 ───> 2/2 ─┬─> feature │ <─── repeated Feature features = 2;12: 00011001 ───> 25 └─> length ─────┐ │13: 00011000 ───> 3/0 ─┬─> geom type │ │ <─── optional GeomType type = 3 [default = UNKNOWN]14: 00000001 ───> 1 └─> point │ │15: 00100010 │ │16: 00010101 │ │17: 00100001 │ │18: 11001110 │ │ 19: 11111000 │ │ 20: 00000010 │ │ 21: 10101000 │ │ 22: 10010101 │ │ 23: 00010001 │ │24: 10000000 │ │25: 10000000 │ │26: 00010000 │ │27: 00000000 │ │28: 11111111 │ │29: 11111111 │ │30: 00001111 │ │31: 11111111 │ │32: 11111111 │ │33: 00001111 │ │34: 10000000 │ │35: 10000000 │ │

│ │

Analysis :: vector tile decoder

4: 00000110 ───> 6 └─> length ───┐ │5: 01101100 ───> l │ │6: 01101111 ───> o │ │7: 01100100 ───> d │ │8: 01011111 ───> _ │ │9: 00110001 ───> 1 │ │10: 00110000 ───> 0 <──────────────┘ │ 11: 00010010 ───> 2/2 ─┬─> feature │ <─── repeated Feature features = 2;12: 00011001 ───> 25 └─> length ─────┐ │13: 00011000 ───> 3/0 ─┬─> geom type │ │ <─── optional GeomType type = 3 [default = UNKNOWN];14: 00000001 ───> 1 └─> point │ │15: 00100010 ───> 4/2 ─┬─> geometry │ │ <─── repeated uint32 geometry = 4 [packed = true];16: 00010101 ───> 21 └─> length ───┐ │ │17: 00100001 │ │ │18: 11001110 │ │ │ 19: 11111000 │ │ │ 20: 00000010 │ │ │ 21: 10101000 │ │ │ 22: 10010101 │ │ │ 23: 00010001 │ │ │24: 10000000 │ │ │25: 10000000 │ │ │26: 00010000 │ │ │27: 00000000 │ │ │28: 11111111 │ │ │29: 11111111 │ │ │30: 00001111 │ │ │31: 11111111 │ │ │32: 11111111 │ │ │33: 00001111 │ │ │34: 10000000 │ │ │35: 10000000 │ │ │

│ │ │

Analysis :: vector tile decoder

4: 00000110 ───> 6 └─> length ───┐ │5: 01101100 ───> l │ │6: 01101111 ───> o │ │7: 01100100 ───> d │ │8: 01011111 ───> _ │ │9: 00110001 ───> 1 │ │10: 00110000 ───> 0 <──────────────┘ │ 11: 00010010 ───> 2/2 ─┬─> feature │ <─── repeated Feature features = 2;12: 00011001 ───> 25 └─> length ─────┐ │13: 00011000 ───> 3/0 ─┬─> geom type │ │ <─── optional GeomType type = 3 [default = UNKNOWN]14: 00000001 ───> 1 └─> point │ │15: 00100010 ───> 4/2 ─┬─> geometry │ │ <─── repeated uint32 geometry = 4 [packed = true];16: 00010101 ───> 21 └─> length ───┐ │ │17: 00100001 ───> 4/1 ───> 4x moveto │ │ │18: 11001110 │ │ │ 19: 11111000 │ │ │ 20: 00000010 │ │ │ 21: 10101000 │ │ │ 22: 10010101 │ │ │ 23: 00010001 │ │ │24: 10000000 │ │ │25: 10000000 │ │ │26: 00010000 │ │ │27: 00000000 │ │ │28: 11111111 │ │ │29: 11111111 │ │ │30: 00001111 │ │ │31: 11111111 │ │ │32: 11111111 │ │ │33: 00001111 │ │ │34: 10000000 │ │ │35: 10000000 │ │ │

│ │ │

Analysis :: vector tile decoder

10: 00110000 ───> 0 <──────────────┘ │ 11: 00010010 ───> 2/2 ─┬─> feature │ <─── repeated Feature features = 2;12: 00011001 ───> 25 └─> length ─────┐ │13: 00011000 ───> 3/0 ─┬─> geom type │ │ <─── optional GeomType type = 3 [default = UNKNOWN]14: 00000001 ───> 1 └─> point │ │15: 00100010 ───> 4/2 ─┬─> geometry │ │ <─── repeated uint32 geometry = 4 [packed = true];16: 00010101 ───> 21 └─> length ───┐ │ │17: 00100001 ───> 4/1 ───> 4x moveto │ │ │18: 11001110 │ │ │ 19: 11111000 │ │ │ 20: 00000010 │ │ │ 21: 10101000 │ │ │ 22: 10010101 │ │ │ 23: 00010001 │ │ │24: 10000000 │ │ │25: 10000000 │ │ │26: 00010000 │ │ │27: 00000000 │ │ │28: 11111111 │ │ │29: 11111111 │ │ │30: 00001111 │ │ │31: 11111111 │ │ │32: 11111111 │ │ │33: 00001111 │ │ │34: 10000000 │ │ │35: 10000000 │ │ │36: 00010000 │ │ │37: 00000000 <───────────────────────────┴─┘ │38: 00011010 │39: 00001000 │40: 01011111 │41: 01101101 │

Analysis :: vector tile decoder

10: 00110000 ───> 0 <──────────────┘ │ 11: 00010010 ───> 2/2 ─┬─> feature │ <─── repeated Feature features = 2;12: 00011001 ───> 25 └─> length ─────┐ │13: 00011000 ───> 3/0 ─┬─> geom type │ │ <─── optional GeomType type = 3 [default = UNKNOWN]14: 00000001 ───> 1 └─> point │ │15: 00100010 ───> 4/2 ─┬─> geometry │ │ <─── repeated uint32 geometry = 4 [packed = true];16: 00010101 ───> 21 └─> length ───┐ │ │17: 00100001 ───> 4/1 ───> 4x moveto │ │ │18: 11001110 ─┐ │ │ │ 19: 11111000 │ │ │ │ 20: 00000010 └─> 24103 ───> x │ │ │ 21: 10101000 │ │ │ 22: 10010101 │ │ │ 23: 00010001 │ │ │24: 10000000 │ │ │25: 10000000 │ │ │26: 00010000 │ │ │27: 00000000 │ │ │28: 11111111 │ │ │29: 11111111 │ │ │30: 00001111 │ │ │31: 11111111 │ │ │32: 11111111 │ │ │33: 00001111 │ │ │34: 10000000 │ │ │35: 10000000 │ │ │36: 00010000 │ │ │37: 00000000 <───────────────────────────┴─┘ │38: 00011010 │39: 00001000 │40: 01011111 │41: 01101101 │

Analysis :: vector tile decoder

10: 00110000 ───> 0 <──────────────┘ │ 11: 00010010 ───> 2/2 ─┬─> feature │ <─── repeated Feature features = 2;12: 00011001 ───> 25 └─> length ─────┐ │13: 00011000 ───> 3/0 ─┬─> geom type │ │ <─── optional GeomType type = 3 [default = UNKNOWN]14: 00000001 ───> 1 └─> point │ │15: 00100010 ───> 4/2 ─┬─> geometry │ │ <─── repeated uint32 geometry = 4 [packed = true];16: 00010101 ───> 21 └─> length ───┐ │ │17: 00100001 ───> 4/1 ───> 4x moveto │ │ │18: 11001110 ─┐ │ │ │ 19: 11111000 │ │ │ │ 20: 00000010 └─> 24103 ───> x │ │ │ 21: 10101000 ─┐ │ │ │ 22: 10010101 │ │ │ │ 23: 00010001 └─> 140628 ───> y │ │ │24: 10000000 ─┐ │ │ │25: 10000000 │ │ │ │26: 00010000 └─> 131072 ───> x │ │ │27: 00000000 ───> 0 ───> y │ │ │28: 11111111 ─┐ │ │ │29: 11111111 │ │ │ │30: 00001111 └─> -131072 ───> x │ │ │31: 11111111 ─┐ │ │ │32: 11111111 │ │ │ │33: 00001111 └─> -131072 ───> y │ │ │34: 10000000 ─┐ │ │ │35: 10000000 │ │ │ │36: 00010000 └─> 131072 ───> x │ │ │37: 00000000 ───> 0 ───> y <───────┴─┘ │38: 00011010 │39: 00001000 │40: 01011111 │41: 01101101 │

Analysis :: vector tile decoder

26: 00010000 └─> 131072 ───> x │ │ │27: 00000000 ───> 0 ───> y │ │ │28: 11111111 ─┐ │ │ │29: 11111111 │ │ │ │30: 00001111 └─> -131072 ───> x │ │ │31: 11111111 ─┐ │ │ │32: 11111111 │ │ │ │33: 00001111 └─> -131072 ───> y │ │ │34: 10000000 ─┐ │ │ │35: 10000000 │ │ │ │36: 00010000 └─> 131072 ───> x │ │ │37: 00000000 ───> 0 ───> y <───────┴─┘ │38: 00011010 ───> 3/2 ─┬─> keys │ <─── repeated string keys = 3;39: 00001000 ───> 8 └─> length ───┐ │40: 01011111 │ │41: 01101101 │ │42: 01101001 │ │43: 01101110 │ │44: 01111010 │ │45: 01101111 │ │46: 01101111 │ │47: 01101101 <───────────────────────────┘ │48: 00101000 │49: 10000000 │ 50: 10000000 │ 51: 00010000 │ 52: 01111000 │ 53: 00000010 <───────────────────────────────┘

Analysis :: vector tile decoder

26: 00010000 └─> 131072 ───> x │ │ │27: 00000000 ───> 0 ───> y │ │ │28: 11111111 ─┐ │ │ │29: 11111111 │ │ │ │30: 00001111 └─> -131072 ───> x │ │ │31: 11111111 ─┐ │ │ │32: 11111111 │ │ │ │33: 00001111 └─> -131072 ───> y │ │ │34: 10000000 ─┐ │ │ │35: 10000000 │ │ │ │36: 00010000 └─> 131072 ───> x │ │ │37: 00000000 ───> 0 ───> y <───────┴─┘ │38: 00011010 ───> 3/2 ─┬─> keys │ <─── repeated string keys = 3;39: 00001000 ───> 8 └─> length ───┐ │40: 01011111 ───> _ │ │41: 01101101 ───> m │ │42: 01101001 ───> i │ │43: 01101110 ───> n │ │44: 01111010 ───> z │ │45: 01101111 ───> o │ │46: 01101111 ───> o │ │47: 01101101 ───> m <──────────────┘ │48: 00101000 │49: 10000000 │ 50: 10000000 │ 51: 00010000 │ 52: 01111000 │ 53: 00000010 <───────────────────────────────┘

Analysis :: vector tile decoder

26: 00010000 └─> 131072 ───> x │ │ │27: 00000000 ───> 0 ───> y │ │ │28: 11111111 ─┐ │ │ │29: 11111111 │ │ │ │30: 00001111 └─> -131072 ───> x │ │ │31: 11111111 ─┐ │ │ │32: 11111111 │ │ │ │33: 00001111 └─> -131072 ───> y │ │ │34: 10000000 ─┐ │ │ │35: 10000000 │ │ │ │36: 00010000 └─> 131072 ───> x │ │ │37: 00000000 ───> 0 ───> y <───────┴─┘ │38: 00011010 ───> 3/2 ─┬─> keys │ <─── repeated string keys = 3;39: 00001000 ───> 8 └─> length ───┐ │40: 01011111 ───> _ │ │41: 01101101 ───> m │ │42: 01101001 ───> i │ │43: 01101110 ───> n │ │44: 01111010 ───> z │ │45: 01101111 ───> o │ │46: 01101111 ───> o │ │47: 01101101 ───> m <──────────────┘ │48: 00101000 ───> 5/1 ───> extent │ <─── optional uint32 extent = 5 [default = 4096];49: 10000000 ─┐ │ 50: 10000000 │ │ 51: 00010000 └─> 262144 │ 52: 01111000 │ 53: 00000010 <───────────────────────────────┘

Analysis :: vector tile decoder

26: 00010000 └─> 131072 ───> x │ │ │27: 00000000 ───> 0 ───> y │ │ │28: 11111111 ─┐ │ │ │29: 11111111 │ │ │ │30: 00001111 └─> -131072 ───> x │ │ │31: 11111111 ─┐ │ │ │32: 11111111 │ │ │ │33: 00001111 └─> -131072 ───> y │ │ │34: 10000000 ─┐ │ │ │35: 10000000 │ │ │ │36: 00010000 └─> 131072 ───> x │ │ │37: 00000000 ───> 0 ───> y <───────┴─┘ │38: 00011010 ───> 3/2 ─┬─> keys │ <─── repeated string keys = 3;39: 00001000 ───> 8 └─> length ───┐ │40: 01011111 ───> _ │ │41: 01101101 ───> m │ │42: 01101001 ───> i │ │43: 01101110 ───> n │ │44: 01111010 ───> z │ │45: 01101111 ───> o │ │46: 01101111 ───> o │ │47: 01101101 ───> m <──────────────┘ │48: 00101000 ───> 5/1 ───> extent │ <─── optional uint32 extent = 5 [default = 4096];49: 10000000 ─┐ │ 50: 10000000 │ │ 51: 00010000 └─> 262144 │ 52: 01111000 ───> 15/1 ───> version │ <─── required uint32 version = 15 [default = 1]53: 00000010 ───> 2 <──────────────────┘

Analysis :: vector tile decoder

Analysis :: vector tile decoder (thank god I learned to code)

let vtileMsg: IDefinedMsg <VTile, VTileBuilder> = Types.define('vectortile', () => new VTileBuilder());vtileMsg.define('key___layer', 0x3, ID____LAYER, (b: VTileBuilder, v: Layer) => b.addLayer(v));

let layerMsg: IDefinedMsg<Layer, LayerBuilder> = Types.define('layer', () => new LayerBuilder());layerMsg.define('key____name', 0x1, ID___STRING, (b: LayerBuilder, v: string) => b.setName(v));layerMsg.define('key_feature', 0x2, ID__FEATURE, (b: LayerBuilder, v: Feature) => b.addFeature(v));layerMsg.define('key_____key', 0x3, ID___STRING, (b: LayerBuilder, v: string) => b.addKey(v));layerMsg.define('key___value', 0x4, ID____VALUE, (b: LayerBuilder, v: IVectorTileValue) => b.addValue(v));layerMsg.define('key__extent', 0x5, ID_VARINT32, (b: LayerBuilder, v: number) => b.setExtent(v));layerMsg.define('key_version', 0xF, ID_VARINT32, (b: LayerBuilder, v: number) => b.setVersion(v));

let featrMsg: IDefinedMsg <Feature, FeatureBuilder> = Types.define('feature', () => new FeatureBuilder());featrMsg.define('key____tags', 0x2, ID_PAKINT32, (b: FeatureBuilder, v: number[]) => b.setTags(v));featrMsg.define('key____type', 0x3, ID_____TYPE, (b: FeatureBuilder, v: any) => b.setGeomType(v));featrMsg.define('key___count', 0x4, ID____COUNT, (b: FeatureBuilder, v: number) => b.setCoordCount(v));

Demo

Data Quality :: eliminate polygon part

• Eliminate Parts that are too small to show- Be aware of pixel size- Optionally remove holes only

arcpy.EliminatePolygonPart_management(in_features,out_feature_class,{condition},{part_area},{part_area_percent},{part_option}

)

Data Quality :: simplify polygon

• Reduce polygon vertices- Be aware of pixel size

arcpy.SimplifyPolygon_cartography(in_features,out_feature_class,algorithm,tolerance,{minimum_area},{error_option},{collapsed_point_option},{in_barriers}

)

Data Quality :: intersect

• Self – intersect features- Be aware of pixel size- Places vertices along edges- Improves Vector Tile generalization

arcpy.Intersect_analysis(in_features,out_feature_class,{join_attributes},{cluster_tolerance},{output_type}

)

Data Quality :: repair geometry

• Sanitizes input

arcpy.RepairGeometry_management(in_features,{delete_null},{validation_method}

)

Data Quality :: dissolve

• Dissolve by unique renderer field set- Can significantly reduce attributive payload- Apply after geometry operations

arcpy.Dissolve_management(in_features,out_feature_class,{dissolve_field},{statistics_fields},{multi_part}, {unsplit_lines}

)

Data Quality

Demo

Analyzing Vector Tile Performance :: resources

• https://github.com/hfleischer/vector-tile-analysis

• https://docs.mapbox.com/vector-tiles/specification/

• https://developers.arcgis.com/javascript/

• https://pro.arcgis.com/de/pro-app/help/mapping/map-authoring/author-a-map-for-vector-tile-creation.htm

• https://woportal.mysynergis.com/BasemapAT/synserver?project=BasemapAT&client=flex

Complete answersand select “Submit”

Scroll down to find the feedback section

Select the session you attended

Download the Esri Events app and find your event

Please Take Our Survey on the App

top related