diff --git a/hub/city_model_structure/building.py b/hub/city_model_structure/building.py index e2a30906..d5129142 100644 --- a/hub/city_model_structure/building.py +++ b/hub/city_model_structure/building.py @@ -441,26 +441,3 @@ class Building(CityObject): for usage in internal_zone.usages: _usage = f'{_usage}{usage.name}_{usage.percentage} ' return _usage.rstrip() - - def identify_shared_walls(self): - """ - Identifies which building' walls adjoin the neighbouring building and saves that information in the - corresponding surfaces - """ - x = int((self.upper_corner[0] - self.lower_corner[0]) / 2) - y = int((self.upper_corner[1] - self.lower_corner[1]) / 2) - city_map = [['' for _ in range(y+1)] for _ in range(x+1)] - city_image = [[0 for _ in range(y+1)] for _ in range(x+1)] - for building_name in building_names: - building = city.city_object(building_name) - for ground in building.grounds: - length = len(ground.perimeter_polygon.coordinates) - 1 - for i, coordinate in enumerate(ground.perimeter_polygon.coordinates): - j = i+1 - if i == length: - j = 0 - next_coordinate = ground.perimeter_polygon.coordinates[j] - point_1 = GeometryHelper.coordinate_to_map_point(coordinate, city) - point_2 = GeometryHelper.coordinate_to_map_point(next_coordinate, city) - for x in range(point_1.x, point_2.x): - y = GeometryHelper.point_between_point(point_1, point_2, x).y diff --git a/hub/helpers/geometry_helper.py b/hub/helpers/geometry_helper.py index d650eefd..54428937 100644 --- a/hub/helpers/geometry_helper.py +++ b/hub/helpers/geometry_helper.py @@ -5,6 +5,7 @@ Copyright © 2022 Concordia CERC group Project Coder Guille Gutierrez guillermo.gutierrezmorote@concordia.ca Code contributors: Pilar Monsalvete Alvarez de Uribarri pilar.monsalvete@concordia.ca """ +import datetime import math import numpy as np import requests @@ -63,7 +64,7 @@ class GeometryHelper: return MapPoint(((city.upper_corner[0] - coordinate[0]) * 0.5), ((city.upper_corner[1] - coordinate[1]) * 0.5)) @staticmethod - def city_mapping(city, building_names=None, plot=False): + def city_mapping(city, building_names=None): """ Returns a shared_information dictionary like @@ -71,17 +72,15 @@ class GeometryHelper: "building_name" : [{line: 0 coordinate_1: [x,y,z], coordinate_2:[x, y, z], points: 0}] } """ - shared_information = {} + lines_information = {} if building_names is None: building_names = [b.name for b in city.buildings] x = int((city.upper_corner[0] - city.lower_corner[0]) * 0.5) + 1 y = int((city.upper_corner[1] - city.lower_corner[1]) * 0.5) + 1 - city_map = [[{} for _ in range(y + 1)] for _ in range(x + 1)] - img = Image.new('RGB', (x + 1, y + 1), "black") # create a new black image - city_image = img.load() # create the pixel map + city_map = [['' for _ in range(y + 1)] for _ in range(x + 1)] + map_info = [[{} for _ in range(y + 1)] for _ in range(x + 1)] for building_name in building_names: building = city.city_object(building_name) - shared_information[building_name]: [] line = 0 for ground in building.grounds: length = len(ground.perimeter_polygon.coordinates) - 1 @@ -90,22 +89,63 @@ class GeometryHelper: if i == length: j = 0 next_coordinate = ground.perimeter_polygon.coordinates[j] - line_dictionary = {"line": line, "coordinate_1": coordinate, "coordinate_2":next_coordinate, "points": 0} - print(line_dictionary) point = GeometryHelper.coordinate_to_map_point(coordinate, city) - distance = GeometryHelper.distance_between_points(coordinate, next_coordinate) + distance = int(GeometryHelper.distance_between_points(coordinate, next_coordinate)) if distance == 0: continue delta_x = (coordinate[0] - next_coordinate[0]) / (distance / 0.5) delta_y = (coordinate[1] - next_coordinate[1]) / (distance / 0.5) - for k in range(0, int(distance)): + for k in range(0, distance): x = MapPoint(point.x + (delta_x * k), point.y + (delta_y * k)).x y = MapPoint(point.x + (delta_x * k), point.y + (delta_y * k)).y if city_map[x][y] == '': city_map[x][y] = building.name - city_image[x, y] = (100, 0, 0) + map_info[x][y] = { + 'line_start': (coordinate[0], coordinate[1]), + 'line_end': (next_coordinate[0], next_coordinate[1]), + } elif city_map[x][y] != building.name: neighbour = city.city_object(city_map[x][y]) + neighbour_info = map_info[x][y] + + # prepare the keys + neighbour_start_coordinate = f'{neighbour_info["line_start"][0]}_{neighbour_info["line_start"][1]}' + building_start_coordinate = f'{coordinate[0]}_{coordinate[1]}' + neighbour_key = f'{neighbour.name}_{neighbour_start_coordinate}_{building_start_coordinate}' + building_key = f'{building.name}_{building_start_coordinate}_{neighbour_start_coordinate}' + + # Add my neighbour info to my shared lines + if building.name in lines_information.keys() and neighbour_key in lines_information[building.name]: + shared_points = int(lines_information[building.name][neighbour_key]['shared_points']) + lines_information[building.name][neighbour_key]['shared_points'] = shared_points + 1 + else: + if building.name not in lines_information.keys(): + lines_information[building.name] = {} + lines_information[building.name][neighbour_key] = { + 'neighbour_name': neighbour.name, + 'line_start': (coordinate[0], coordinate[1]), + 'line_end': (next_coordinate[0], next_coordinate[1]), + 'neighbour_line_start': neighbour_info['line_start'], + 'neighbour_line_end': neighbour_info['line_end'], + 'shared_points': 1 + } + + # Add my info to my neighbour shared lines + if neighbour.name in lines_information.keys() and building_key in lines_information[neighbour.name]: + shared_points = int(lines_information[neighbour.name][building_key]['shared_points']) + lines_information[neighbour.name][building_key]['shared_points'] = shared_points + 1 + else: + if neighbour.name not in lines_information.keys(): + lines_information[neighbour.name] = {} + lines_information[neighbour.name][building_key] = { + 'neighbour_name': building.name, + 'line_start': neighbour_info['line_start'], + 'line_end': neighbour_info['line_end'], + 'neighbour_line_start': (coordinate[0], coordinate[1]), + 'neighbour_line_end': (next_coordinate[0], next_coordinate[1]), + 'shared_points': 1 + } + if building.neighbours is None: building.neighbours = [neighbour] elif neighbour not in building.neighbours: @@ -115,8 +155,7 @@ class GeometryHelper: elif building not in neighbour.neighbours: neighbour.neighbours.append(building) line += 1 - if plot: - img.show() + return lines_information @staticmethod def segment_list_to_trimesh(lines) -> Trimesh: diff --git a/hub/imports/geometry/geojson.py b/hub/imports/geometry/geojson.py index d8ef97f4..d9eadf66 100644 --- a/hub/imports/geometry/geojson.py +++ b/hub/imports/geometry/geojson.py @@ -145,7 +145,7 @@ class Geojson: polygons = self._get_polygons(polygons, coordinates) for zone, polygon in enumerate(polygons): if extrusion_height == 0: - buildings = buildings + Geojson._create_buildings_lod0(f'{building_name}_part_{part}_zone{zone}', + buildings = buildings + Geojson._create_buildings_lod0(f'{building_name}_part_{part}', year_of_construction, function, [polygon]) diff --git a/hub/unittests/test_geometry_factory.py b/hub/unittests/test_geometry_factory.py index 56819263..8a2fad0c 100644 --- a/hub/unittests/test_geometry_factory.py +++ b/hub/unittests/test_geometry_factory.py @@ -152,10 +152,19 @@ class TestGeometryFactory(TestCase): """ Test neighbours map creation """ - file = 'concordia.geojson' + file = 'neighbours.geojson' city = self._get_city(file, 'geojson', height_field='citygml_me', year_of_construction_field='ANNEE_CONS', - function_field='CODE_UTILI') - GeometryHelper.city_mapping(city, plot=False) - self.assertTrue(False) + function_field='LIBELLE_UT') + GeometryHelper.city_mapping(city) + for building in city.buildings: + self.assertEqual(2, len(building.neighbours)) + + self.assertEqual('2_part_0_zone_0',city.city_object('1_part_0_zone_0').neighbours[0].name) + self.assertEqual('3_part_0_zone_0',city.city_object('1_part_0_zone_0').neighbours[1].name) + self.assertEqual('1_part_0_zone_0',city.city_object('2_part_0_zone_0').neighbours[0].name) + self.assertEqual('3_part_0_zone_0',city.city_object('2_part_0_zone_0').neighbours[1].name) + self.assertEqual('1_part_0_zone_0', city.city_object('3_part_0_zone_0').neighbours[0].name) + self.assertEqual('2_part_0_zone_0', city.city_object('3_part_0_zone_0').neighbours[1].name) + diff --git a/hub/unittests/tests_data/neighbours.geojson b/hub/unittests/tests_data/neighbours.geojson new file mode 100644 index 00000000..65149ee9 --- /dev/null +++ b/hub/unittests/tests_data/neighbours.geojson @@ -0,0 +1,594 @@ +{ + "type":"FeatureCollection", + "features":[ + { + "type":"Feature", + "id":1, + "geometry":{ + "type":"Polygon", + "coordinates":[ + [ + [ + -73.580414175680588, + 45.497641136608358 + ], + [ + -73.581414175680588, + 45.497641136608358 + ], + [ + -73.581414175680588, + 45.498641136608358 + ], + [ + -73.580414175680588, + 45.498641136608358 + ], + [ + -73.580414175680588, + 45.497641136608358 + ] + ] + ] + }, + "properties":{ + "OBJECTID_12":1, + "gml_id":"1340908", + "gml_parent":"fme-gen-5fa2a82b-c38e-4bf0-9e8f-10a47b9f64f7", + "citygml_ta":"http://www.opengis.net/citygml/building/2.0", + "citygml_fe":"cityObjectMember", + "citygml__1":" ", + "citygml__2":" ", + "gml_descri":" ", + "gml_name":" ", + "citygml_cr":" ", + "citygml_te":" ", + "externalRe":" ", + "external_1":" ", + "external_2":" ", + "citygml_ge":" ", + "citygml_re":" ", + "citygml__3":" ", + "citygml_ap":" ", + "citygml_cl":" ", + "citygml__4":" ", + "citygml_fu":" ", + "citygml__5":" ", + "citygml_us":" ", + "citygml__6":" ", + "citygml_ye":" ", + "citygml__7":" ", + "citygml_ro":" ", + "citygml__8":" ", + "citygml_me":21.824000000000002, + "citygml__9":"#m", + "citygml_st":" ", + "citygml_10":" ", + "citygml_11":" ", + "citygml_12":" ", + "citygml_13":" ", + "citygml_14":" ", + "citygml_ou":" ", + "citygml_in":" ", + "citygml_bo":" ", + "citygml_le":" ", + "citygml_15":" ", + "citygml_co":" ", + "citygml_ad":" ", + "Volume":"2783.169", + "parcelle":" ", + "OBJECTID":778, + "gml_id_1":"ebc7f916-d094-4de0-8c35-fc18eb8622f2", + "gml_pare_1":"1340908", + "citygml_16":"http://www.opengis.net/citygml/building/2.0", + "citygml_17":"boundedBy", + "citygml_18":" ", + "citygml_19":" ", + "gml_desc_1":" ", + "gml_name_1":" ", + "citygml_20":" ", + "citygml_21":" ", + "external_3":" ", + "external_4":" ", + "external_5":" ", + "citygml_22":" ", + "citygml_23":" ", + "citygml_24":" ", + "citygml_25":" ", + "citygml_26":" ", + "citygml_op":" ", + "Area":"229.287", + "FID_":0, + "Join_Count":2, + "TARGET_FID":779, + "gml_id_12":"1340908", + "gml_pare_2":"fme-gen-5fa2a82b-c38e-4bf0-9e8f-10a47b9f64f7", + "citygml_27":"http://www.opengis.net/citygml/building/2.0", + "citygml_28":"cityObjectMember", + "citygml_29":" ", + "citygml_30":" ", + "gml_desc_2":" ", + "gml_name_2":" ", + "citygml_31":" ", + "citygml_32":" ", + "external_6":" ", + "external_7":" ", + "external_8":" ", + "citygml_33":" ", + "citygml_34":" ", + "citygml_35":" ", + "citygml_36":" ", + "citygml_37":" ", + "citygml_38":" ", + "citygml_39":" ", + "citygml_40":" ", + "citygml_41":" ", + "citygml_42":" ", + "citygml_43":" ", + "citygml_44":" ", + "citygml_45":" ", + "citygml_46":" ", + "citygml_47":21.824000000000002, + "citygml_48":"#m", + "citygml_49":" ", + "citygml_50":" ", + "citygml_51":" ", + "citygml_52":" ", + "citygml_53":" ", + "citygml_54":" ", + "citygml_55":" ", + "citygml_56":" ", + "citygml_57":" ", + "citygml_58":" ", + "citygml_59":" ", + "citygml_60":" ", + "citygml_61":" ", + "Volume_1":"2783.169", + "Field":0, + "Field1":0, + "OBJECTID_1":778, + "gml_id_12_":"ebc7f916-d094-4de0-8c35-fc18eb8622f2", + "gml_pare_3":"1340908", + "citygml_62":"http://www.opengis.net/citygml/building/2.0", + "citygml_63":"boundedBy", + "citygml_64":" ", + "citygml_65":" ", + "gml_desc_3":" ", + "gml_name_3":" ", + "citygml_66":" ", + "citygml_67":" ", + "external_9":" ", + "externa_10":" ", + "externa_11":" ", + "citygml_68":" ", + "citygml_69":" ", + "citygml_70":" ", + "citygml_71":" ", + "citygml_72":" ", + "citygml_73":" ", + "Area_1":"229.287", + "cityGML_hi":0, + "Z_Min":49.0745, + "Z_Max":69.165000000000006, + "Shape_Leng":59.532834838799999, + "ID_UEV":"01002777", + "CIVIQUE_DE":" 1460", + "CIVIQUE_FI":" 1460", + "NOM_RUE":"rue Sherbrooke Ouest (MTL+MTO+WMT)", + "MUNICIPALI":"50", + "ETAGE_HORS":3, + "NOMBRE_LOG":1, + "ANNEE_CONS":1885, + "CODE_UTILI":"5010", + "LIBELLE_UT":"Immeuble commercial", + "CATEGORIE_":"Régulier", + "MATRICULE8":"9839-57-1941-6-000-0000", + "SUPERFICIE":193, + "SUPERFIC_1":609, + "NO_ARROND_":"REM19", + "Shape_Le_1":0.00076452447366199996, + "Shape_Ar_1":2.2162879886799998e-08, + "Z_Min_1":null, + "Z_Max_1":null, + "Shape_Length":59.532834838827348, + "Shape_Area":161.83671944596372 + } + }, + { + "type":"Feature", + "id":2, + "geometry":{ + "type":"Polygon", + "coordinates":[ + [ + [ + -73.581414175680588, + 45.497641136608358 + ], + [ + -73.582214175680588, + 45.497641136608358 + ], + [ + -73.582214175680588, + 45.498441136608358 + ], + [ + -73.581414175680588, + 45.498441136608358 + ], + [ + -73.581414175680588, + 45.497641136608358 + ] + ] + ] + + }, + "properties":{ + "OBJECTID_12":2, + "gml_id":"1340974", + "gml_parent":"fme-gen-5fa2a82b-c38e-4bf0-9e8f-10a47b9f64f7", + "citygml_ta":"http://www.opengis.net/citygml/building/2.0", + "citygml_fe":"cityObjectMember", + "citygml__1":" ", + "citygml__2":" ", + "gml_descri":" ", + "gml_name":" ", + "citygml_cr":" ", + "citygml_te":" ", + "externalRe":" ", + "external_1":" ", + "external_2":" ", + "citygml_ge":" ", + "citygml_re":" ", + "citygml__3":" ", + "citygml_ap":" ", + "citygml_cl":" ", + "citygml__4":" ", + "citygml_fu":" ", + "citygml__5":" ", + "citygml_us":" ", + "citygml__6":" ", + "citygml_ye":" ", + "citygml__7":" ", + "citygml_ro":" ", + "citygml__8":" ", + "citygml_me":21.643999999999998, + "citygml__9":"#m", + "citygml_st":" ", + "citygml_10":" ", + "citygml_11":" ", + "citygml_12":" ", + "citygml_13":" ", + "citygml_14":" ", + "citygml_ou":" ", + "citygml_in":" ", + "citygml_bo":" ", + "citygml_le":" ", + "citygml_15":" ", + "citygml_co":" ", + "citygml_ad":" ", + "Volume":"8410.522", + "parcelle":" ", + "OBJECTID":779, + "gml_id_1":"96e73b07-262d-43a8-84ce-608133b39f16", + "gml_pare_1":"1340974", + "citygml_16":"http://www.opengis.net/citygml/building/2.0", + "citygml_17":"boundedBy", + "citygml_18":" ", + "citygml_19":" ", + "gml_desc_1":" ", + "gml_name_1":" ", + "citygml_20":" ", + "citygml_21":" ", + "external_3":" ", + "external_4":" ", + "external_5":" ", + "citygml_22":" ", + "citygml_23":" ", + "citygml_24":" ", + "citygml_25":" ", + "citygml_26":" ", + "citygml_op":" ", + "Area":"553.859", + "FID_":0, + "Join_Count":3, + "TARGET_FID":780, + "gml_id_12":"1340974", + "gml_pare_2":"fme-gen-5fa2a82b-c38e-4bf0-9e8f-10a47b9f64f7", + "citygml_27":"http://www.opengis.net/citygml/building/2.0", + "citygml_28":"cityObjectMember", + "citygml_29":" ", + "citygml_30":" ", + "gml_desc_2":" ", + "gml_name_2":" ", + "citygml_31":" ", + "citygml_32":" ", + "external_6":" ", + "external_7":" ", + "external_8":" ", + "citygml_33":" ", + "citygml_34":" ", + "citygml_35":" ", + "citygml_36":" ", + "citygml_37":" ", + "citygml_38":" ", + "citygml_39":" ", + "citygml_40":" ", + "citygml_41":" ", + "citygml_42":" ", + "citygml_43":" ", + "citygml_44":" ", + "citygml_45":" ", + "citygml_46":" ", + "citygml_47":21.643999999999998, + "citygml_48":"#m", + "citygml_49":" ", + "citygml_50":" ", + "citygml_51":" ", + "citygml_52":" ", + "citygml_53":" ", + "citygml_54":" ", + "citygml_55":" ", + "citygml_56":" ", + "citygml_57":" ", + "citygml_58":" ", + "citygml_59":" ", + "citygml_60":" ", + "citygml_61":" ", + "Volume_1":"8410.522", + "Field":0, + "Field1":0, + "OBJECTID_1":779, + "gml_id_12_":"96e73b07-262d-43a8-84ce-608133b39f16", + "gml_pare_3":"1340974", + "citygml_62":"http://www.opengis.net/citygml/building/2.0", + "citygml_63":"boundedBy", + "citygml_64":" ", + "citygml_65":" ", + "gml_desc_3":" ", + "gml_name_3":" ", + "citygml_66":" ", + "citygml_67":" ", + "external_9":" ", + "externa_10":" ", + "externa_11":" ", + "citygml_68":" ", + "citygml_69":" ", + "citygml_70":" ", + "citygml_71":" ", + "citygml_72":" ", + "citygml_73":" ", + "Area_1":"553.859", + "cityGML_hi":0, + "Z_Min":47.817900000000002, + "Z_Max":69.462000000000003, + "Shape_Leng":124.143194192, + "ID_UEV":"01002773", + "CIVIQUE_DE":" 1438", + "CIVIQUE_FI":" 1438", + "NOM_RUE":"rue Sherbrooke Ouest (MTL+MTO+WMT)", + "MUNICIPALI":"50", + "ETAGE_HORS":3, + "NOMBRE_LOG":2, + "ANNEE_CONS":1885, + "CODE_UTILI":"1000", + "LIBELLE_UT":"Logement", + "CATEGORIE_":"Régulier", + "MATRICULE8":"9839-57-4570-0-000-0000", + "SUPERFICIE":249, + "SUPERFIC_1":506, + "NO_ARROND_":"REM19", + "Shape_Le_1":0.00099703639048799998, + "Shape_Ar_1":2.8543276304299999e-08, + "Z_Min_1":null, + "Z_Max_1":null, + "Shape_Length":124.143194192441, + "Shape_Area":464.30094602931189 + } + }, + { + "type":"Feature", + "id":3, + "geometry":{ + "type":"Polygon", + "coordinates":[ + [ + [ + -73.581914175680588, + 45.498441136608358 + ], + [ + -73.581914175680588, + 45.499641136608358 + ], + [ + -73.580914175680588, + 45.499641136608358 + ], + [ + -73.580914175680588, + 45.498641136608358 + ], + [ + -73.581414175680588, + 45.498641136608358 + ], + [ + -73.581414175680588, + 45.498441136608358 + ], + [ + -73.581914175680588, + 45.498441136608358 + ] + + ] + ] + }, + "properties":{ + "OBJECTID_12":3, + "gml_id":"1340910", + "gml_parent":"fme-gen-5fa2a82b-c38e-4bf0-9e8f-10a47b9f64f7", + "citygml_ta":"http://www.opengis.net/citygml/building/2.0", + "citygml_fe":"cityObjectMember", + "citygml__1":" ", + "citygml__2":" ", + "gml_descri":" ", + "gml_name":" ", + "citygml_cr":" ", + "citygml_te":" ", + "externalRe":" ", + "external_1":" ", + "external_2":" ", + "citygml_ge":" ", + "citygml_re":" ", + "citygml__3":" ", + "citygml_ap":" ", + "citygml_cl":" ", + "citygml__4":" ", + "citygml_fu":" ", + "citygml__5":" ", + "citygml_us":" ", + "citygml__6":" ", + "citygml_ye":" ", + "citygml__7":" ", + "citygml_ro":" ", + "citygml__8":" ", + "citygml_me":21.916, + "citygml__9":"#m", + "citygml_st":" ", + "citygml_10":" ", + "citygml_11":" ", + "citygml_12":" ", + "citygml_13":" ", + "citygml_14":" ", + "citygml_ou":" ", + "citygml_in":" ", + "citygml_bo":" ", + "citygml_le":" ", + "citygml_15":" ", + "citygml_co":" ", + "citygml_ad":" ", + "Volume":"2257.436", + "parcelle":" ", + "OBJECTID":780, + "gml_id_1":"8222a1c7-e161-421a-8478-22d2a116e0b4", + "gml_pare_1":"1340910", + "citygml_16":"http://www.opengis.net/citygml/building/2.0", + "citygml_17":"boundedBy", + "citygml_18":" ", + "citygml_19":" ", + "gml_desc_1":" ", + "gml_name_1":" ", + "citygml_20":" ", + "citygml_21":" ", + "external_3":" ", + "external_4":" ", + "external_5":" ", + "citygml_22":" ", + "citygml_23":" ", + "citygml_24":" ", + "citygml_25":" ", + "citygml_26":" ", + "citygml_op":" ", + "Area":"144.697", + "FID_":0, + "Join_Count":2, + "TARGET_FID":781, + "gml_id_12":"1340910", + "gml_pare_2":"fme-gen-5fa2a82b-c38e-4bf0-9e8f-10a47b9f64f7", + "citygml_27":"http://www.opengis.net/citygml/building/2.0", + "citygml_28":"cityObjectMember", + "citygml_29":" ", + "citygml_30":" ", + "gml_desc_2":" ", + "gml_name_2":" ", + "citygml_31":" ", + "citygml_32":" ", + "external_6":" ", + "external_7":" ", + "external_8":" ", + "citygml_33":" ", + "citygml_34":" ", + "citygml_35":" ", + "citygml_36":" ", + "citygml_37":" ", + "citygml_38":" ", + "citygml_39":" ", + "citygml_40":" ", + "citygml_41":" ", + "citygml_42":" ", + "citygml_43":" ", + "citygml_44":" ", + "citygml_45":" ", + "citygml_46":" ", + "citygml_47":21.916, + "citygml_48":"#m", + "citygml_49":" ", + "citygml_50":" ", + "citygml_51":" ", + "citygml_52":" ", + "citygml_53":" ", + "citygml_54":" ", + "citygml_55":" ", + "citygml_56":" ", + "citygml_57":" ", + "citygml_58":" ", + "citygml_59":" ", + "citygml_60":" ", + "citygml_61":" ", + "Volume_1":"2257.436", + "Field":0, + "Field1":0, + "OBJECTID_1":780, + "gml_id_12_":"8222a1c7-e161-421a-8478-22d2a116e0b4", + "gml_pare_3":"1340910", + "citygml_62":"http://www.opengis.net/citygml/building/2.0", + "citygml_63":"boundedBy", + "citygml_64":" ", + "citygml_65":" ", + "gml_desc_3":" ", + "gml_name_3":" ", + "citygml_66":" ", + "citygml_67":" ", + "external_9":" ", + "externa_10":" ", + "externa_11":" ", + "citygml_68":" ", + "citygml_69":" ", + "citygml_70":" ", + "citygml_71":" ", + "citygml_72":" ", + "citygml_73":" ", + "Area_1":"144.697", + "cityGML_hi":0, + "Z_Min":48.983400000000003, + "Z_Max":67.617000000000004, + "Shape_Leng":52.283656634099998, + "ID_UEV":"01002775", + "CIVIQUE_DE":" 1448", + "CIVIQUE_FI":" 1448", + "NOM_RUE":"rue Sherbrooke Ouest (MTL+MTO+WMT)", + "MUNICIPALI":"50", + "ETAGE_HORS":3, + "NOMBRE_LOG":1, + "ANNEE_CONS":1885, + "CODE_UTILI":"5010", + "LIBELLE_UT":"Immeuble commercial", + "CATEGORIE_":"Régulier", + "MATRICULE8":"9839-57-3057-9-000-0000", + "SUPERFICIE":167, + "SUPERFIC_1":354, + "NO_ARROND_":"REM19", + "Shape_Le_1":0.00074417728924999998, + "Shape_Ar_1":1.92186900974e-08, + "Z_Min_1":null, + "Z_Max_1":null, + "Shape_Length":52.283656634094768, + "Shape_Area":123.24449716965384 + } + } + ] +} \ No newline at end of file