Skip to content

Commit 879569a

Browse files
authored
Merge pull request #97 from tilezen/separate-bool-vals-idx
Use a separate values index for booleans
2 parents 5f54ef2 + 0f07437 commit 879569a

2 files changed

Lines changed: 34 additions & 5 deletions

File tree

mapbox_vector_tile/encoder.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ def addFeatures(self, features, layer_name='',
6666
self.val_idx = 0
6767
self.seen_keys_idx = {}
6868
self.seen_values_idx = {}
69+
self.seen_values_bool_idx = {}
6970

7071
for feature in features:
7172

@@ -206,10 +207,10 @@ def _load_geometry(self, geometry_spec):
206207

207208
try:
208209
return load_wkb(geometry_spec)
209-
except:
210+
except Exception:
210211
try:
211212
return load_wkt(geometry_spec)
212-
except:
213+
except Exception:
213214
return None
214215

215216
def addFeature(self, feature, shape, y_coord_down):
@@ -284,8 +285,13 @@ def _handle_attr(self, layer, feature, props):
284285

285286
feature.tags.append(self.seen_keys_idx[k])
286287

287-
if v not in self.seen_values_idx:
288-
self.seen_values_idx[v] = self.val_idx
288+
if isinstance(v, bool):
289+
values_idx = self.seen_values_bool_idx
290+
else:
291+
values_idx = self.seen_values_idx
292+
293+
if v not in values_idx:
294+
values_idx[v] = self.val_idx
289295
self.val_idx += 1
290296

291297
val = layer.values.add()
@@ -303,4 +309,4 @@ def _handle_attr(self, layer, feature, props):
303309
elif isinstance(v, float):
304310
val.double_value = v
305311

306-
feature.tags.append(self.seen_values_idx[v])
312+
feature.tags.append(values_idx[v])

tests/test_encoder.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -490,6 +490,29 @@ def test_too_small_linestring(self):
490490
features = result['foo']['features']
491491
self.assertEqual(0, len(features))
492492

493+
def test_encode_1_True_values(self):
494+
geometry = 'POINT(0 0)'
495+
properties = {
496+
'foo': True,
497+
'bar': 1,
498+
}
499+
source = [{
500+
'name': 'layer',
501+
'features': [{
502+
'geometry': geometry,
503+
'properties': properties
504+
}]
505+
}]
506+
encoded = encode(source)
507+
decoded = decode(encoded)
508+
layer = decoded['layer']
509+
features = layer['features']
510+
act_props = features[0]['properties']
511+
self.assertEquals(act_props['foo'], True)
512+
self.assertEquals(act_props['bar'], 1)
513+
self.assertTrue(isinstance(act_props['foo'], bool))
514+
self.assertFalse(isinstance(act_props['bar'], bool))
515+
493516

494517
class TestDictGeometries(BaseTestCase):
495518

0 commit comments

Comments
 (0)