Files
sunrise/tests/building-data.test.py
T

44 lines
2.3 KiB
Python

import importlib.util
import sys
import unittest
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT / '.tools/terrain'))
spec = importlib.util.spec_from_file_location('building_data', ROOT / 'scripts/prepare-vworld-buildings.py')
module = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module)
def feature(identity, x=126.99, properties=None):
return {'type': 'Feature', 'id': identity, 'properties': properties or {}, 'geometry': {
'type': 'Polygon', 'coordinates': [[[x, 37.43], [x+.0001, 37.43],
[x+.0001, 37.4301], [x, 37.4301], [x, 37.43]]]}}
class VWorldBuildingsTest(unittest.TestCase):
def test_selection_uses_only_official_features_and_prefers_measured_height(self):
empty = feature('vworld/a', properties={'source:geometry': 'VWorld'})
measured = feature('vworld/b', properties={'height': '12', 'source:geometry': 'VWorld'})
separate = feature('vworld/c', 126.992, properties={'source:geometry': 'VWorld'})
separate['geometry']['coordinates'].append([[126.99202,37.43002], [126.99202,37.43004],
[126.99204,37.43004], [126.99204,37.43002], [126.99202,37.43002]])
result, report = module.select_buildings([empty, measured, separate])
self.assertEqual([f['id'] for f in result], ['vworld/b', 'vworld/c'])
self.assertEqual(result[0]['properties']['height'], '12')
self.assertEqual(len(result[1]['geometry']['coordinates']), 2)
self.assertEqual(report['officialOverlapsSkipped'], ['vworld/a'])
self.assertTrue(all(f['properties']['source:geometry'] == 'VWorld' for f in result))
def test_official_zero_and_overflow_are_missing_and_multipart_is_preserved(self):
raw = feature('archive:1', properties={'A1':'123', 'A16':'0', 'A26':'*********', 'A9':'공동주택'})
raw['geometry'] = {'type':'MultiPolygon', 'coordinates':[raw['geometry']['coordinates'], feature('other',126.992)['geometry']['coordinates']]}
result = module.official_features([raw])
self.assertEqual(len(result), 2)
self.assertNotEqual(result[0]['id'], result[1]['id'])
self.assertTrue(all('height' not in f['properties'] and 'building:levels' not in f['properties'] for f in result))
if __name__ == '__main__':
unittest.main()