44 lines
2.3 KiB
Python
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()
|