diff --git a/DistrictHeatingNetworkCreator.py b/DistrictHeatingNetworkCreator.py index 765dece..dcf7e9a 100644 --- a/DistrictHeatingNetworkCreator.py +++ b/DistrictHeatingNetworkCreator.py @@ -4,6 +4,26 @@ from shapely.geometry import Polygon, Point, LineString import networkx as nx from typing import List, Tuple from rtree import index +import math + + +def haversine(lon1, lat1, lon2, lat2): + """ + Calculate the great-circle distance between two points + on the Earth specified by their longitude and latitude. + """ + R = 6371000 # Radius of the Earth in meters + phi1 = math.radians(lat1) + phi2 = math.radians(lat2) + delta_phi = math.radians(lat2 - lat1) + delta_lambda = math.radians(lon2 - lon1) + + a = math.sin(delta_phi / 2.0) ** 2 + \ + math.cos(phi1) * math.cos(phi2) * \ + math.sin(delta_lambda / 2.0) ** 2 + + c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a)) + return R * c # Output distance in meters class DistrictHeatingNetworkCreator: @@ -29,7 +49,8 @@ class DistrictHeatingNetworkCreator: self._create_graph() self._create_mst() self._iteratively_remove_edges() - self.add_centroids_to_mst() # Add centroids to the MST + self._add_centroids_to_mst() + self._convert_edge_weights_to_meters() return self.final_mst def _load_and_process_data(self): @@ -217,7 +238,7 @@ class DistrictHeatingNetworkCreator: single_connection_street_nodes = find_single_connection_street_nodes(self.final_mst) self.final_mst_steps.append(list(self.final_mst.edges(data=True))) - def add_centroids_to_mst(self): + def _add_centroids_to_mst(self): """ Add centroids to the final MST graph and connect them to their associated node on the graph. """ @@ -238,6 +259,16 @@ class DistrictHeatingNetworkCreator: if nearest_point: self.final_mst.add_edge(centroid_tuple, nearest_point, weight=min_distance) + def _convert_edge_weights_to_meters(self): + """ + Convert all edge weights in the final MST graph to meters using the Haversine formula. + """ + for u, v, data in self.final_mst.edges(data=True): + lon1, lat1 = u + lon2, lat2 = v + distance = haversine(lon1, lat1, lon2, lat2) + self.final_mst[u][v]['weight'] = distance + def plot_network_graph(self): """ Plot the network graph using matplotlib and networkx. diff --git a/Scripts/geojson_graph_creator.py b/Scripts/geojson_graph_creator.py new file mode 100644 index 0000000..7603f2a --- /dev/null +++ b/Scripts/geojson_graph_creator.py @@ -0,0 +1,54 @@ +import json +from shapely import LineString, Point +import networkx as nx +from pathlib import Path + + +def networkx_to_geojson(graph: nx.Graph) -> Path: + """ + Convert a NetworkX graph to GeoJSON format. + + :param graph: A NetworkX graph. + :return: GeoJSON formatted dictionary. + """ + features = [] + + for u, v, data in graph.edges(data=True): + line = LineString([u, v]) + feature = { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": list(line.coords) + }, + "properties": { + "weight": data.get("weight", 1.0) + } + } + features.append(feature) + + for node, data in graph.nodes(data=True): + point = Point(node) + feature = { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": list(point.coords)[0] + }, + "properties": { + "type": data.get("type", "unknown"), + "id": data.get("id", "N/A") + } + } + features.append(feature) + + geojson = { + "type": "FeatureCollection", + "features": features + } + + output_geojson_file = Path('./output_files/network_graph.geojson').resolve() + with open(output_geojson_file, 'w') as file: + json.dump(geojson, file, indent=4) + + return output_geojson_file diff --git a/main.py b/main.py index 32984b2..6d4cfca 100644 --- a/main.py +++ b/main.py @@ -2,6 +2,7 @@ from DistrictHeatingNetworkCreator import DistrictHeatingNetworkCreator from Scripts.road_processor import road_processor from pathlib import Path import time +from Scripts.geojson_graph_creator import networkx_to_geojson location = [45.51663850312751, -73.59854314961274] start_time = time.perf_counter() roads_file = road_processor(location[1], location[0], 0.001) @@ -16,7 +17,6 @@ elapsed_time = end_time - start_time print(f"The simulation took {elapsed_time:.4f} seconds to run.") -for node in network_graph.nodes(data=True): - print(f"Node: {node[0]}, Type: {node[1].get('type', 'unknown')}, ID: {node[1].get('id', 'N/A')}") +networkx_to_geojson(network_graph) dhn_creator.plot_network_graph() diff --git a/output_files/network_graph.geojson b/output_files/network_graph.geojson new file mode 100644 index 0000000..dc5930e --- /dev/null +++ b/output_files/network_graph.geojson @@ -0,0 +1,2923 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59815520134875, + 45.516097679709816 + ], + [ + -73.59831719472277, + 45.516092328198965 + ] + ] + }, + "properties": { + "weight": 12.635777302325481 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59815520134875, + 45.516097679709816 + ], + [ + -73.59816449713833, + 45.516379068715686 + ] + ] + }, + "properties": { + "weight": 31.297411627490547 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59831719472277, + 45.516092328198965 + ], + [ + -73.59864925024401, + 45.51635477748705 + ] + ] + }, + "properties": { + "weight": 39.000213909976964 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59864925024401, + 45.51635477748705 + ], + [ + -73.59874806617601, + 45.51606390850056 + ] + ] + }, + "properties": { + "weight": 33.24692822611577 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59864925024401, + 45.51635477748705 + ], + [ + -73.59906734200769, + 45.51655398007815 + ] + ] + }, + "properties": { + "weight": 39.392910888779014 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59864925024401, + 45.51635477748705 + ], + [ + -73.59817965160595, + 45.51691694373417 + ] + ] + }, + "properties": { + "weight": 72.43084089224851 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59874806617601, + 45.51606390850056 + ], + [ + -73.59922095066372, + 45.51602624428999 + ] + ] + }, + "properties": { + "weight": 37.08221574129518 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59906734200769, + 45.51655398007815 + ], + [ + -73.59907631070855, + 45.51655825327511 + ] + ] + }, + "properties": { + "weight": 0.8450364920376744 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59906734200769, + 45.51655398007815 + ], + [ + -73.59893654551034, + 45.516828499289744 + ] + ] + }, + "properties": { + "weight": 32.18135457921895 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59817965160595, + 45.51691694373417 + ], + [ + -73.59838860146371, + 45.517010080572845 + ] + ] + }, + "properties": { + "weight": 19.294989383313567 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59817965160595, + 45.51691694373417 + ], + [ + -73.59802708986689, + 45.51709423332988 + ] + ] + }, + "properties": { + "weight": 23.020071165520946 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59817965160595, + 45.51691694373417 + ], + [ + -73.59789885768312, + 45.516800046331 + ] + ] + }, + "properties": { + "weight": 25.44794990000135 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59907631070855, + 45.51655825327511 + ], + [ + -73.59924119020667, + 45.51663681120448 + ] + ] + }, + "properties": { + "weight": 15.53503953382617 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59907631070855, + 45.51655825327511 + ], + [ + -73.59915896502793, + 45.51638477616335 + ] + ] + }, + "properties": { + "weight": 20.33639321094358 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59924119020667, + 45.51663681120448 + ], + [ + -73.59935494900903, + 45.516691012339635 + ] + ] + }, + "properties": { + "weight": 10.7184100306144 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59924119020667, + 45.51663681120448 + ], + [ + -73.5993013482176, + 45.5165105499508 + ] + ] + }, + "properties": { + "weight": 14.801364909269447 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59935494900903, + 45.516691012339635 + ], + [ + -73.5994297346923, + 45.51672664447396 + ] + ] + }, + "properties": { + "weight": 7.046339830723476 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59935494900903, + 45.516691012339635 + ], + [ + -73.59942174135816, + 45.51655082675824 + ] + ] + }, + "properties": { + "weight": 16.433685791497705 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59838860146371, + 45.517010080572845 + ], + [ + -73.59842062998378, + 45.517024356893195 + ] + ] + }, + "properties": { + "weight": 2.9575972980355827 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59838860146371, + 45.517010080572845 + ], + [ + -73.5982983451232, + 45.51721256811463 + ] + ] + }, + "properties": { + "weight": 23.588213087535475 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59802708986689, + 45.51709423332988 + ], + [ + -73.59786282685126, + 45.517285120794945 + ] + ] + }, + "properties": { + "weight": 24.785657498536185 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59802708986689, + 45.51709423332988 + ], + [ + -73.59824652351101, + 45.5172830609834 + ] + ] + }, + "properties": { + "weight": 27.077009288076667 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59789885768312, + 45.516800046331 + ], + [ + -73.59784450360723, + 45.516777418169184 + ] + ] + }, + "properties": { + "weight": 4.926036338334481 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59789885768312, + 45.516800046331 + ], + [ + -73.59797023718056, + 45.51662858889435 + ] + ] + }, + "properties": { + "weight": 19.859806915838938 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59842062998378, + 45.517024356893195 + ], + [ + -73.59862741578043, + 45.51711652912815 + ] + ] + }, + "properties": { + "weight": 19.095128352672074 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59842062998378, + 45.517024356893195 + ], + [ + -73.59836045128623, + 45.51715936609549 + ] + ] + }, + "properties": { + "weight": 15.727515393668975 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59862741578043, + 45.51711652912815 + ], + [ + -73.59869425202614, + 45.51714632056568 + ] + ] + }, + "properties": { + "weight": 6.171824788705835 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59862741578043, + 45.51711652912815 + ], + [ + -73.5985380679669, + 45.51731697841537 + ] + ] + }, + "properties": { + "weight": 23.350768502674395 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59869425202614, + 45.51714632056568 + ], + [ + -73.59875590013706, + 45.51717379945571 + ] + ] + }, + "properties": { + "weight": 5.692737486623395 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59869425202614, + 45.51714632056568 + ], + [ + -73.59861064628122, + 45.51733388768472 + ] + ] + }, + "properties": { + "weight": 21.850096224700607 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59875590013706, + 45.51717379945571 + ], + [ + -73.59885252430014, + 45.51721686849239 + ] + ] + }, + "properties": { + "weight": 8.922507785655434 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59875590013706, + 45.51717379945571 + ], + [ + -73.59866626374227, + 45.517374896166835 + ] + ] + }, + "properties": { + "weight": 23.426186174053395 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59885252430014, + 45.51721686849239 + ], + [ + -73.59896562057276, + 45.51726727977005 + ] + ] + }, + "properties": { + "weight": 10.443575851921974 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59885252430014, + 45.51721686849239 + ], + [ + -73.59876237340394, + 45.51741911947282 + ] + ] + }, + "properties": { + "weight": 23.560647851340278 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59896562057276, + 45.51726727977005 + ], + [ + -73.59904220294973, + 45.517301415426175 + ] + ] + }, + "properties": { + "weight": 7.071793054646455 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59896562057276, + 45.51726727977005 + ], + [ + -73.59887723691257, + 45.51746556600657 + ] + ] + }, + "properties": { + "weight": 23.09878461460307 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59904220294973, + 45.517301415426175 + ], + [ + -73.59912603647994, + 45.517338783194994 + ] + ] + }, + "properties": { + "weight": 7.7413777415183835 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59904220294973, + 45.517301415426175 + ], + [ + -73.5989530951407, + 45.51750132627012 + ] + ] + }, + "properties": { + "weight": 23.288037297002976 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59912603647994, + 45.517338783194994 + ], + [ + -73.59919152628525, + 45.51736797447321 + ] + ] + }, + "properties": { + "weight": 6.047474159087615 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59912603647994, + 45.517338783194994 + ], + [ + -73.59903717050828, + 45.517538151483656 + ] + ] + }, + "properties": { + "weight": 23.224832522879204 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59919152628525, + 45.51736797447321 + ], + [ + -73.59919597397426, + 45.51736995697608 + ] + ] + }, + "properties": { + "weight": 0.41070940597616534 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59919152628525, + 45.51736797447321 + ], + [ + -73.59931975208991, + 45.51708030351482 + ] + ] + }, + "properties": { + "weight": 33.51140814293091 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59919597397426, + 45.51736995697608 + ], + [ + -73.5992753180901, + 45.51740532364346 + ] + ] + }, + "properties": { + "weight": 7.326808805882045 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59919597397426, + 45.51736995697608 + ], + [ + -73.5991078010971, + 45.517567770326856 + ] + ] + }, + "properties": { + "weight": 23.043693421771916 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59786282685126, + 45.517285120794945 + ], + [ + -73.59772009401253, + 45.51745098838028 + ] + ] + }, + "properties": { + "weight": 21.536949449114747 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59786282685126, + 45.517285120794945 + ], + [ + -73.59766065335835, + 45.51711114589504 + ] + ] + }, + "properties": { + "weight": 24.947191663924617 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59772009401253, + 45.51745098838028 + ], + [ + -73.59752322606943, + 45.51736362537345 + ] + ] + }, + "properties": { + "weight": 18.156062768520368 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59772009401253, + 45.51745098838028 + ], + [ + -73.59794837953001, + 45.5175524145405 + ] + ] + }, + "properties": { + "weight": 21.0607208219569 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59772009401253, + 45.51745098838028 + ], + [ + -73.59754807632886, + 45.517647630413265 + ] + ] + }, + "properties": { + "weight": 25.646251083707753 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59752322606943, + 45.51736362537345 + ], + [ + -73.59761151206403, + 45.51716467752594 + ] + ] + }, + "properties": { + "weight": 23.166760634540772 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59794837953001, + 45.5175524145405 + ], + [ + -73.59802578547993, + 45.517586805632696 + ] + ] + }, + "properties": { + "weight": 7.14116127908853 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59794837953001, + 45.5175524145405 + ], + [ + -73.59787192153227, + 45.51772450282169 + ] + ] + }, + "properties": { + "weight": 20.041162941648192 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59754807632886, + 45.517647630413265 + ], + [ + -73.59776845631421, + 45.51784041348223 + ] + ] + }, + "properties": { + "weight": 27.465402058349817 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59802578547993, + 45.517586805632696 + ], + [ + -73.59806338638248, + 45.5176035115333 + ] + ] + }, + "properties": { + "weight": 3.46890675210846 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59802578547993, + 45.517586805632696 + ], + [ + -73.5980780777284, + 45.51746910855163 + ] + ] + }, + "properties": { + "weight": 13.706841467552524 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59806338638248, + 45.5176035115333 + ], + [ + -73.59817460211949, + 45.517652924151704 + ] + ] + }, + "properties": { + "weight": 10.260308485175525 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59806338638248, + 45.5176035115333 + ], + [ + -73.59816543181674, + 45.51737383218118 + ] + ] + }, + "properties": { + "weight": 26.74814560895498 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59817460211949, + 45.517652924151704 + ], + [ + -73.59856737234622, + 45.51782743007912 + ] + ] + }, + "properties": { + "weight": 36.23532136176311 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59817460211949, + 45.517652924151704 + ], + [ + -73.59808525829291, + 45.51785401528678 + ] + ] + }, + "properties": { + "weight": 23.41879091658225 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59856737234622, + 45.51782743007912 + ], + [ + -73.59864319430339, + 45.517861117410945 + ] + ] + }, + "properties": { + "weight": 6.995004132979668 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59856737234622, + 45.51782743007912 + ], + [ + -73.5986419084801, + 45.51765966744415 + ] + ] + }, + "properties": { + "weight": 19.537400949178096 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59864319430339, + 45.517861117410945 + ], + [ + -73.59873197104609, + 45.51790056049182 + ] + ] + }, + "properties": { + "weight": 8.190152528696247 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59864319430339, + 45.517861117410945 + ], + [ + -73.59871697911328, + 45.51769504582281 + ] + ] + }, + "properties": { + "weight": 19.340462959582588 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59873197104609, + 45.51790056049182 + ], + [ + -73.59880393815588, + 45.51793253513343 + ] + ] + }, + "properties": { + "weight": 6.639366589878832 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59873197104609, + 45.51790056049182 + ], + [ + -73.59881418658478, + 45.517715513392005 + ] + ] + }, + "properties": { + "weight": 21.550323276679016 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59880393815588, + 45.51793253513343 + ], + [ + -73.59888603592199, + 45.51796901077705 + ] + ] + }, + "properties": { + "weight": 7.573972757215817 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59880393815588, + 45.51793253513343 + ], + [ + -73.59888679020533, + 45.51774605540332 + ] + ] + }, + "properties": { + "weight": 21.717164307089707 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59888603592199, + 45.51796901077705 + ], + [ + -73.59897770615316, + 45.518009739420975 + ] + ] + }, + "properties": { + "weight": 8.457081437462316 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59888603592199, + 45.51796901077705 + ], + [ + -73.59896793140553, + 45.51778468404323 + ] + ] + }, + "properties": { + "weight": 21.46642815413702 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.5994297346923, + 45.51672664447396 + ], + [ + -73.59950410728665, + 45.51657054926973 + ] + ] + }, + "properties": { + "weight": 18.298739341832256 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.5992753180901, + 45.51740532364346 + ], + [ + -73.59934610962186, + 45.51743687810128 + ] + ] + }, + "properties": { + "weight": 6.537041761529038 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.5992753180901, + 45.51740532364346 + ], + [ + -73.5991896807104, + 45.51759744867756 + ] + ] + }, + "properties": { + "weight": 22.381048295196372 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59934610962186, + 45.51743687810128 + ], + [ + -73.5994152694581, + 45.517467705250816 + ] + ] + }, + "properties": { + "weight": 6.386364979748697 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59934610962186, + 45.51743687810128 + ], + [ + -73.59925374754219, + 45.517644089809146 + ] + ] + }, + "properties": { + "weight": 24.138525082791126 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.5994152694581, + 45.517467705250816 + ], + [ + -73.59947768670517, + 45.517495526973846 + ] + ] + }, + "properties": { + "weight": 5.763737951682431 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.5994152694581, + 45.517467705250816 + ], + [ + -73.59932130420188, + 45.51767851363986 + ] + ] + }, + "properties": { + "weight": 24.557508727161256 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59947768670517, + 45.517495526973846 + ], + [ + -73.59948618235197, + 45.51749931380431 + ] + ] + }, + "properties": { + "weight": 0.7845054755976738 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59947768670517, + 45.517495526973846 + ], + [ + -73.59955732707505, + 45.5173168560613 + ] + ] + }, + "properties": { + "weight": 20.813752578122667 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59922095066372, + 45.51602624428999 + ], + [ + -73.59936511833028, + 45.516014761652066 + ] + ] + }, + "properties": { + "weight": 11.305210803326382 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59922095066372, + 45.51602624428999 + ], + [ + -73.59923988146645, + 45.51626392570726 + ] + ] + }, + "properties": { + "weight": 26.470095464148145 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59936511833028, + 45.516014761652066 + ], + [ + -73.59938275667636, + 45.51623621592191 + ] + ] + }, + "properties": { + "weight": 24.66291112430637 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59948618235197, + 45.51749931380431 + ], + [ + -73.59956514782301, + 45.51753451169541 + ] + ] + }, + "properties": { + "weight": 7.2918319941806296 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59948618235197, + 45.51749931380431 + ], + [ + -73.59939546208831, + 45.517702842144516 + ] + ] + }, + "properties": { + "weight": 23.709439613635535 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59956514782301, + 45.51753451169541 + ], + [ + -73.599643790035, + 45.51756956549773 + ] + ] + }, + "properties": { + "weight": 7.261978367922603 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59956514782301, + 45.51753451169541 + ], + [ + -73.59947754169633, + 45.517731053557576 + ] + ] + }, + "properties": { + "weight": 22.895569110866106 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.599643790035, + 45.51756956549773 + ], + [ + -73.59955161502906, + 45.51777635751101 + ] + ] + }, + "properties": { + "weight": 24.089628942171693 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59897770615316, + 45.518009739420975 + ], + [ + -73.59906072393971, + 45.51782288665713 + ] + ] + }, + "properties": { + "weight": 21.760604654317817 + } + }, + { + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.59784450360723, + 45.516777418169184 + ], + [ + -73.59776013287258, + 45.51698008126446 + ] + ] + }, + "properties": { + "weight": 23.47433332397445 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59815520134875, + 45.516097679709816 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59831719472277, + 45.516092328198965 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59864925024401, + 45.51635477748705 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59874806617601, + 45.51606390850056 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59906734200769, + 45.51655398007815 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59817965160595, + 45.51691694373417 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59907631070855, + 45.51655825327511 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59924119020667, + 45.51663681120448 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59935494900903, + 45.516691012339635 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59838860146371, + 45.517010080572845 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59802708986689, + 45.51709423332988 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59789885768312, + 45.516800046331 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59842062998378, + 45.517024356893195 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59862741578043, + 45.51711652912815 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59869425202614, + 45.51714632056568 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59875590013706, + 45.51717379945571 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59885252430014, + 45.51721686849239 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59896562057276, + 45.51726727977005 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59904220294973, + 45.517301415426175 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59912603647994, + 45.517338783194994 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59919152628525, + 45.51736797447321 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59919597397426, + 45.51736995697608 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59786282685126, + 45.517285120794945 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59772009401253, + 45.51745098838028 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59752322606943, + 45.51736362537345 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59794837953001, + 45.5175524145405 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59754807632886, + 45.517647630413265 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59802578547993, + 45.517586805632696 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59806338638248, + 45.5176035115333 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59817460211949, + 45.517652924151704 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59856737234622, + 45.51782743007912 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59864319430339, + 45.517861117410945 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59873197104609, + 45.51790056049182 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59880393815588, + 45.51793253513343 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59888603592199, + 45.51796901077705 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.5994297346923, + 45.51672664447396 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.5992753180901, + 45.51740532364346 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59934610962186, + 45.51743687810128 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.5994152694581, + 45.517467705250816 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59947768670517, + 45.517495526973846 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59922095066372, + 45.51602624428999 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59936511833028, + 45.516014761652066 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59948618235197, + 45.51749931380431 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59956514782301, + 45.51753451169541 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.599643790035, + 45.51756956549773 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59897770615316, + 45.518009739420975 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59784450360723, + 45.516777418169184 + ] + }, + "properties": { + "type": "unknown", + "id": "N/A" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59816449713833, + 45.516379068715686 + ] + }, + "properties": { + "type": "building", + "id": 139333 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.5993013482176, + 45.5165105499508 + ] + }, + "properties": { + "type": "building", + "id": 145913 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.5989530951407, + 45.51750132627012 + ] + }, + "properties": { + "type": "building", + "id": 146509 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59931975208991, + 45.51708030351482 + ] + }, + "properties": { + "type": "building", + "id": 148507 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59893654551034, + 45.516828499289744 + ] + }, + "properties": { + "type": "building", + "id": 148508 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.5980780777284, + 45.51746910855163 + ] + }, + "properties": { + "type": "building", + "id": 148570 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.5982983451232, + 45.51721256811463 + ] + }, + "properties": { + "type": "building", + "id": 149273 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59888679020533, + 45.51774605540332 + ] + }, + "properties": { + "type": "building", + "id": 149311 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59887723691257, + 45.51746556600657 + ] + }, + "properties": { + "type": "building", + "id": 149462 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59950410728665, + 45.51657054926973 + ] + }, + "properties": { + "type": "building", + "id": 149514 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59866626374227, + 45.517374896166835 + ] + }, + "properties": { + "type": "building", + "id": 150185 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59915896502793, + 45.51638477616335 + ] + }, + "properties": { + "type": "building", + "id": 150245 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.5985380679669, + 45.51731697841537 + ] + }, + "properties": { + "type": "building", + "id": 150267 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59871697911328, + 45.51769504582281 + ] + }, + "properties": { + "type": "building", + "id": 150793 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59787192153227, + 45.51772450282169 + ] + }, + "properties": { + "type": "building", + "id": 150823 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59932130420188, + 45.51767851363986 + ] + }, + "properties": { + "type": "building", + "id": 151232 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59923988146645, + 45.51626392570726 + ] + }, + "properties": { + "type": "building", + "id": 151969 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59938275667636, + 45.51623621592191 + ] + }, + "properties": { + "type": "building", + "id": 152087 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59876237340394, + 45.51741911947282 + ] + }, + "properties": { + "type": "building", + "id": 152332 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59939546208831, + 45.517702842144516 + ] + }, + "properties": { + "type": "building", + "id": 152787 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59955161502906, + 45.51777635751101 + ] + }, + "properties": { + "type": "building", + "id": 152853 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59881418658478, + 45.517715513392005 + ] + }, + "properties": { + "type": "building", + "id": 154748 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59925374754219, + 45.517644089809146 + ] + }, + "properties": { + "type": "building", + "id": 158149 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59836045128623, + 45.51715936609549 + ] + }, + "properties": { + "type": "building", + "id": 159418 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.5986419084801, + 45.51765966744415 + ] + }, + "properties": { + "type": "building", + "id": 161976 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59766065335835, + 45.51711114589504 + ] + }, + "properties": { + "type": "building", + "id": 162849 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59896793140553, + 45.51778468404323 + ] + }, + "properties": { + "type": "building", + "id": 163603 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59761151206403, + 45.51716467752594 + ] + }, + "properties": { + "type": "building", + "id": 163631 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59861064628122, + 45.51733388768472 + ] + }, + "properties": { + "type": "building", + "id": 164683 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59947754169633, + 45.517731053557576 + ] + }, + "properties": { + "type": "building", + "id": 165330 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59776845631421, + 45.51784041348223 + ] + }, + "properties": { + "type": "building", + "id": 166231 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59808525829291, + 45.51785401528678 + ] + }, + "properties": { + "type": "building", + "id": 168283 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59942174135816, + 45.51655082675824 + ] + }, + "properties": { + "type": "building", + "id": 168992 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.5991078010971, + 45.517567770326856 + ] + }, + "properties": { + "type": "building", + "id": 169158 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59906072393971, + 45.51782288665713 + ] + }, + "properties": { + "type": "building", + "id": 169288 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59824652351101, + 45.5172830609834 + ] + }, + "properties": { + "type": "building", + "id": 171750 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.5991896807104, + 45.51759744867756 + ] + }, + "properties": { + "type": "building", + "id": 172152 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59955732707505, + 45.5173168560613 + ] + }, + "properties": { + "type": "building", + "id": 172153 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59816543181674, + 45.51737383218118 + ] + }, + "properties": { + "type": "building", + "id": 172387 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59903717050828, + 45.517538151483656 + ] + }, + "properties": { + "type": "building", + "id": 172656 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59776013287258, + 45.51698008126446 + ] + }, + "properties": { + "type": "building", + "id": 177822 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -73.59797023718056, + 45.51662858889435 + ] + }, + "properties": { + "type": "building", + "id": 181644 + } + } + ] +} \ No newline at end of file