diff --git a/docs/config.md b/docs/config.md index 1c44e06c..372ecdb6 100644 --- a/docs/config.md +++ b/docs/config.md @@ -10,9 +10,6 @@ We added some annotations to describe the different sections: # how many threads should a CompassApp use to process queries? parallelism = 2 -# should we begin the search at either: "vertex" or "edge" -search_orientation = "vertex" - # the parameters for the underlying road network graph [graph] # a file containing all the graph edges and their adjacencies @@ -22,7 +19,20 @@ vertex_list_input_file = "vertices-compass.csv.gz" # if verbose is true, you'll see more information when loading the graph verbose = true -# which traversal model to use and its parameters +[mapping] +# vertex or edge-oriented mapping +type = "edge" +# geometries used to build linestrings +geometry_input_file = "edges-geometries-enumerated.txt.gz" +# mapping threshold +tolerance.distance = 15.0 +# mapping threshold distance unit +tolerance.unit = "meters" +# allow queries without destinations, for shortest path tree results +queries_without_destinations = true +# whether we match queries via "point", "vertex_id", or "edge_id" (or arrays of combinations) +matching_type = "point" + [traversal] type = "energy_model" # the units of the speed table @@ -136,8 +146,6 @@ u_turn = 9.5 # which plugins should be activated? [plugin] input_plugins = [ - # The vertex RTree plugin uses an RTree to match coordiantes to graph verticies. - { type = "vertex_rtree", distance_tolerance = 0.2, distance_unit = "kilometers", vertices_input_file = "vertices-compass.csv.gz" }, # The grid search allows you to specify a "grid_search" key in the query and it will generate multiple queries from those parameters. { type = "grid_search" }, # The load balancer estimates the runtime for each query and is used by CompassApp to best leverage parallelism. @@ -151,6 +159,64 @@ output_plugins = [ ] ``` +## Mapping Model + +The mapping model deals with geospatial mappings from the road network graph. This may be represented using the graph vertices and drawing lines between coordinates, or, by loading LineString geometries from a file. + +For example, if you specify your query origin and destination as lat/lon coordinates (i.e. `origin_x`, `origin_y`) we need a way to match this to the graph and then insert an `origin_vertex` or a `destination_vertex` into the query. Those two fields are what the application expects when conducting a search. + +For vertex-oriented mapping, all fields are optional. + +```toml +[mapping] +type = "vertex" + +# # when type = "vertex", this can be omitted, and the system will +# # instead use the graph vertex coordinates to build map geometries +# # which produces far simpler route sequences as a result. +# geometry_input_file = "edges-geometries-enumerated.txt.gz" + +# # optional query distance tolerance for map matching. +# tolerance.distance = 15.0 +# tolerance.unit = "meters" + +# # allow user to submit queries without destinations, such as when +# # shortest path trees are the desired result, not routes. true by default. +# queries_without_destinations = true + +# # the default map input type is a combined strategy that attempts to +# # match by Point, otherwise expects the user to pass either a vertex ({origin|destination}_vertex) +# # or an edge ({origin|destination}_edge). a more restrictive strategy can be +# # specified here with a subset of these values or a single value such as "point". +# matching_type = ["point", "edge_id", "vertex_id"] +``` + +Edge-oriented mapping uses some additional (non-optional) line geometry input and builds a spatial lookup over those lines. + +This model will map coordinates to `origin_edge` or a `destination_edge` into the query. + +As opposed to vertex-oriented mapping, the edge-oriented will additionally apply any frontier model rules to any mapped edges, preventing mapping assignments that are invalid frontiers. + +```toml +[mapping] +type = "edge" +geometry_input_file = "edges-geometries-enumerated.txt.gz" + +# # optional query distance tolerance for map matching. +# tolerance.distance = 15.0 +# tolerance.unit = "meters" + +# # allow user to submit queries without destinations, such as when +# # shortest path trees are the desired result, not routes. true by default. +# queries_without_destinations = true + +# # the default map input type is a combined strategy that attempts to +# # match by Point, otherwise expects the user to pass either a vertex ({origin|destination}_vertex) +# # or an edge ({origin|destination}_edge). a more restrictive strategy can be +# # specified here with a subset of these values or a single value such as "point". +# matching_type = ["point", "edge_id", "vertex_id"] +``` + ## Traversal Models Traversal models are what the application uses when computing a path through the graph. @@ -337,44 +403,6 @@ The grid search plugin would take this single query and generate two queries tha type = "grid_search" ``` -### Vertex RTree - -The vertex RTree plugin uses an RTree to match coordiantes to graph verticies. - -For example, if you specify your query origin and destination as lat/lon coordinates (i.e. `origin_x`, `origin_y`) we need a way to match this to the graph and then insert an `origin_vertex` or a `destination_vertex` into the query. Those two fields are what the application expects when conducting a search. - -```toml -[[plugin.input_plugins]] -type = "vertex_rtree" -# the vertices of the graph; enumerated to match the index of the graph vertex file -vertices_input_file = "vertices-compass.csv.gz" -``` - -### Edge RTree - -The edge RTree plugin uses an RTree to match coordiantes to graph edges. - -For example, if you specify your query origin and destination as lat/lon coordinates (i.e. `origin_x`, `origin_y`) we need a way to match this to the graph and then insert an `origin_edge` or a `destination_edge` into the query. - -The Edge RTree has some additional paramters as comparted to the Vertex RTree. -Specifically, the Edge RTree takes in geomteries for each edge as well as road classes for each edge. -It uses the geometries for computing the distance between the incoming points and the edge. - -In addition, it uses the road classes to optionally filter out road classes that need to be excluded at query time by supplying a "road_classes" argument to the query with a list of strings to match against. - -```toml -[[plugin.input_plugins]] -type = "edge_rtree" -# geometries for each edge; enumerated to match the index of the graph edge file -geometry_input_file = "edge-geometries.csv.gz" -# road classes for each edge; enumerated to match the index of the graph edge file -road_class_input_file = "road-classes.csv.gz" -# how far around the point to search (smaller could improve performance but too small might result in no matches) -distance_tolerance = 100 -# unit of the distance tolerance -distance_unit = "meters" -``` - ### Load Balancer The load balancer plugin estimates the runtime for each query. That information is used by `CompassApp` in order to best leverage parallelism. @@ -430,14 +458,13 @@ Here are the default output plugins that are provided: ### Traversal -A plugin that appends various items to the result. +A plugin that appends various items to the result. It leverages the mapping model for route and tree geometry generation. ```toml [[plugin.output_plugins]] type = "traversal" route = "geo_json" tree = "geo_json" -geometry_input_file = "edges-geometries-enumerated.txt.gz" ``` The `route` key will add route information to the result depending on the type. diff --git a/docs/notebooks/open_street_maps_example.ipynb b/docs/notebooks/open_street_maps_example.ipynb index e4019c44..aad043d7 100644 --- a/docs/notebooks/open_street_maps_example.ipynb +++ b/docs/notebooks/open_street_maps_example.ipynb @@ -130,21 +130,13 @@ "id": "edad6c15-c641-4010-b097-7d07aa86c1e7", "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "\n", - "\n", - "\n" - ] - }, { "name": "stderr", "output_type": "stream", "text": [ - "uuid file: 100%|██████████| 16994/16994 [00:00<00:00, 6767659.50it/s]/s]" + "edge list: 100%|██████████| 48389/48389 [00:00<00:00, 475876.09it/s]\n", + "vertex list: 100%|██████████| 16991/16991 [00:00<00:00, 571288.44it/s]\n", + "edge LineString geometry file: 100%|██████████| 48389/48389 [00:00<00:00, 219282.38it/s]\n" ] } ], @@ -246,18 +238,12 @@ "id": "c6e9361b-5ffd-4ec5-a09a-d51e46752ebf", "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] - }, { "name": "stderr", "output_type": "stream", "text": [ - "search: 100%|██████████| 3/3 [00:00<00:00, 69.66it/s]4.43it/s]" + "input plugins: 100%|██████████| 1/1 [00:00<00:00, 1278.37it/s]\n", + "search: 100%|██████████| 3/3 [00:00<00:00, 40.38it/s]764.53it/s]s]\n" ] } ], @@ -335,9 +321,9 @@ "output_type": "stream", "text": [ "{\n", - " \"distance\": 9.152878807061885,\n", - " \"energy_liquid\": 0.32013055234991905,\n", - " \"time\": 10.897048882084228\n", + " \"energy_liquid\": 0.3077343325263442,\n", + " \"distance\": 8.96767743974592,\n", + " \"time\": 10.197181162285162\n", "}\n" ] } @@ -367,15 +353,21 @@ "{\n", " \"distance\": {\n", " \"distance_unit\": \"miles\",\n", - " \"initial\": 0.0\n", + " \"initial\": 0.0,\n", + " \"index\": 0,\n", + " \"name\": \"distance\"\n", + " },\n", + " \"time\": {\n", + " \"time_unit\": \"minutes\",\n", + " \"initial\": 0.0,\n", + " \"index\": 1,\n", + " \"name\": \"time\"\n", " },\n", " \"energy_liquid\": {\n", " \"energy_unit\": \"gallons_gasoline\",\n", - " \"initial\": 0.0\n", - " },\n", - " \"time\": {\n", " \"initial\": 0.0,\n", - " \"time_unit\": \"minutes\"\n", + " \"index\": 2,\n", + " \"name\": \"energy_liquid\"\n", " }\n", "}\n" ] @@ -406,10 +398,10 @@ "output_type": "stream", "text": [ "{\n", - " \"distance\": 5.995135618625535,\n", - " \"energy_liquid\": 0.9603916570497572,\n", - " \"time\": 3.5960261310877955,\n", - " \"total_cost\": 10.551553406763087\n", + " \"total_cost\": 10.162101504166714,\n", + " \"energy_liquid\": 0.9232029975790326,\n", + " \"distance\": 5.8738287230335775,\n", + " \"time\": 3.3650697835541035\n", "}\n" ] } @@ -441,40 +433,40 @@ "output_type": "stream", "text": [ "{\n", - " \"cost_aggregation\": \"sum\",\n", " \"distance\": {\n", " \"feature\": \"distance\",\n", - " \"network_rate\": {\n", - " \"type\": \"zero\"\n", - " },\n", + " \"weight\": 0.0,\n", " \"vehicle_rate\": {\n", - " \"factor\": 0.655,\n", - " \"type\": \"factor\"\n", + " \"type\": \"factor\",\n", + " \"factor\": 0.655\n", " },\n", - " \"weight\": 0.0\n", - " },\n", - " \"energy_liquid\": {\n", - " \"feature\": \"energy_liquid\",\n", " \"network_rate\": {\n", " \"type\": \"zero\"\n", - " },\n", - " \"vehicle_rate\": {\n", - " \"factor\": 3.0,\n", - " \"type\": \"factor\"\n", - " },\n", - " \"weight\": 0.0\n", + " }\n", " },\n", " \"time\": {\n", " \"feature\": \"time\",\n", + " \"weight\": 1.0,\n", + " \"vehicle_rate\": {\n", + " \"type\": \"factor\",\n", + " \"factor\": 0.33\n", + " },\n", " \"network_rate\": {\n", " \"type\": \"zero\"\n", - " },\n", + " }\n", + " },\n", + " \"energy_liquid\": {\n", + " \"feature\": \"energy_liquid\",\n", + " \"weight\": 0.0,\n", " \"vehicle_rate\": {\n", - " \"factor\": 0.33,\n", - " \"type\": \"factor\"\n", + " \"type\": \"factor\",\n", + " \"factor\": 3.0\n", " },\n", - " \"weight\": 1.0\n", - " }\n", + " \"network_rate\": {\n", + " \"type\": \"zero\"\n", + " }\n", + " },\n", + " \"cost_aggregation\": \"sum\"\n", "}\n" ] } @@ -502,15 +494,15 @@ "output_type": "stream", "text": [ "{\n", - " \"distance\": 6.733433188572938,\n", - " \"energy_liquid\": 0.2665045784952342,\n", - " \"time\": 12.7747152207094\n", + " \"distance\": 6.548479179864818,\n", + " \"energy_liquid\": 0.2536668087584479,\n", + " \"time\": 12.330559639595114\n", "}\n", "{\n", - " \"distance\": 4.4103987385152745,\n", - " \"energy_liquid\": 0.7995137354857025,\n", - " \"time\": 4.215656022834102,\n", - " \"total_cost\": 9.42556849683508\n", + " \"energy_liquid\": 0.7610004262753436,\n", + " \"distance\": 4.289253862811456,\n", + " \"total_cost\": 9.119338970153187,\n", + " \"time\": 4.069084681066387\n", "}\n" ] } @@ -539,9 +531,9 @@ "output_type": "stream", "text": [ " - distance: 2.42 miles further with time-optimal\n", - " - time: 1.88 minutes longer with energy-optimal\n", + " - time: 2.13 minutes longer with energy-optimal\n", " - energy: 0.05 gallons_gasoline more with time-optimal\n", - " - cost: $1.13 more with time-optimal\n" + " - cost: $1.04 more with time-optimal\n" ] } ], @@ -570,7 +562,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "id": "791e814f-333c-43f4-ae84-36b9be517548", "metadata": {}, "outputs": [ @@ -578,17 +570,15 @@ "name": "stdout", "output_type": "stream", "text": [ - " - destination_vertex_uuid\n", " - iterations\n", - " - origin_vertex_uuid\n", " - output_plugin_executed_time\n", " - request\n", - " - destination_vertex\n", + " - destination_edge\n", " - destination_x\n", " - destination_y\n", " - model_name\n", " - name\n", - " - origin_vertex\n", + " - origin_edge\n", " - origin_x\n", " - origin_y\n", " - query_weight_estimate\n", @@ -644,12 +634,18 @@ " - state_model\n", " - distance\n", " - distance_unit\n", + " - index\n", " - initial\n", + " - name\n", " - energy_liquid\n", " - energy_unit\n", + " - index\n", " - initial\n", + " - name\n", " - time\n", + " - index\n", " - initial\n", + " - name\n", " - time_unit\n", " - traversal_summary\n", " - distance\n", @@ -684,7 +680,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "id": "30257102-07ee-4338-9c8c-41676e1995ed", "metadata": {}, "outputs": [], @@ -702,7 +698,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "id": "1ac13aae-32fc-4c10-b888-6373b175655a", "metadata": {}, "outputs": [ @@ -728,7 +724,7 @@ " <script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>\n", " <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/leaflet.css"/>\n", " <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css"/>\n", - " <link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"/>\n", + " <link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css"/>\n", " <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.2.0/css/all.min.css"/>\n", " <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>\n", " <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>\n", @@ -736,7 +732,7 @@ " <meta name="viewport" content="width=device-width,\n", " initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />\n", " <style>\n", - " #map_888d2b7c796324cd21bd624232634cae {\n", + " #map_39f1ea5243caaf099c00126499f18faa {\n", " position: relative;\n", " width: 100.0%;\n", " height: 100.0%;\n", @@ -750,16 +746,16 @@ "<body>\n", " \n", " \n", - " <div class="folium-map" id="map_888d2b7c796324cd21bd624232634cae" ></div>\n", + " <div class="folium-map" id="map_39f1ea5243caaf099c00126499f18faa" ></div>\n", " \n", "</body>\n", "<script>\n", " \n", " \n", - " var map_888d2b7c796324cd21bd624232634cae = L.map(\n", - " "map_888d2b7c796324cd21bd624232634cae",\n", + " var map_39f1ea5243caaf099c00126499f18faa = L.map(\n", + " "map_39f1ea5243caaf099c00126499f18faa",\n", " {\n", - " center: [39.736886978149414, -104.99258422851562],\n", + " center: [39.73574447631836, -104.99258422851562],\n", " crs: L.CRS.EPSG3857,\n", " zoom: 12,\n", " zoomControl: true,\n", @@ -771,28 +767,28 @@ "\n", " \n", " \n", - " var tile_layer_810ed02a581b157f1cc26acde58df2bc = L.tileLayer(\n", + " var tile_layer_b09cba0bca95e842ae5b3013753c3cb4 = L.tileLayer(\n", " "https://tile.openstreetmap.org/{z}/{x}/{y}.png",\n", " {"attribution": "\\u0026copy; \\u003ca href=\\"https://www.openstreetmap.org/copyright\\"\\u003eOpenStreetMap\\u003c/a\\u003e contributors", "detectRetina": false, "maxNativeZoom": 19, "maxZoom": 19, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", " );\n", " \n", " \n", - " tile_layer_810ed02a581b157f1cc26acde58df2bc.addTo(map_888d2b7c796324cd21bd624232634cae);\n", + " tile_layer_b09cba0bca95e842ae5b3013753c3cb4.addTo(map_39f1ea5243caaf099c00126499f18faa);\n", " \n", " \n", - " map_888d2b7c796324cd21bd624232634cae.fitBounds(\n", - " [[39.6929817199707, -105.01837158203125], [39.780792236328125, -104.966796875]],\n", + " map_39f1ea5243caaf099c00126499f18faa.fitBounds(\n", + " [[39.690696716308594, -105.01837158203125], [39.780792236328125, -104.966796875]],\n", " {"maxZoom": 12}\n", " );\n", " \n", " \n", - " var poly_line_4baffe5079294c89d4edc7edd9e25efc = L.polyline(\n", - " [[39.77902603149414, -104.96916961669922], [39.77896499633789, -104.96910095214844], [39.77878189086914, -104.96887969970703], [39.778751373291016, -104.96884155273438], [39.778587341308594, -104.9686508178711], [39.778480529785156, -104.96852111816406], [39.77839660644531, -104.96841430664062], [39.77846908569336, -104.96832275390625], [39.77865982055664, -104.96807098388672], [39.778709411621094, -104.96791076660156], [39.77894592285156, -104.96761322021484], [39.77906799316406, -104.96745300292969], [39.77915954589844, -104.96732330322266], [39.7791862487793, -104.96728515625], [39.779232025146484, -104.96722412109375], [39.77926254272461, -104.96719360351562], [39.779293060302734, -104.9671630859375], [39.77932357788086, -104.96714782714844], [39.77938461303711, -104.96710968017578], [39.779441833496094, -104.96707916259766], [39.77951431274414, -104.96704864501953], [39.7796745300293, -104.96698760986328], [39.77983093261719, -104.9669418334961], [39.78031921386719, -104.96683502197266], [39.780364990234375, -104.9668197631836], [39.78050231933594, -104.966796875], [39.78049850463867, -104.96688079833984], [39.78049850463867, -104.96698760986328], [39.78049850463867, -104.96705627441406], [39.78049087524414, -104.96717834472656], [39.78046798706055, -104.96759033203125], [39.78045654296875, -104.96772003173828], [39.78042984008789, -104.96797180175781], [39.78041458129883, -104.96810913085938], [39.780372619628906, -104.96839904785156], [39.78034210205078, -104.96859741210938], [39.780296325683594, -104.96888732910156], [39.7802734375, -104.96903228759766], [39.78025436401367, -104.96917724609375], [39.780250549316406, -104.96920776367188], [39.780235290527344, -104.96934509277344], [39.78020095825195, -104.96965789794922], [39.78001403808594, -104.9715347290039], [39.77994155883789, -104.97315216064453], [39.77980422973633, -104.97496032714844], [39.7797737121582, -104.97691345214844], [39.7797737121582, -104.9772720336914], [39.7797737121582, -104.97753143310547], [39.7797737121582, -104.97764587402344], [39.779781341552734, -104.97801971435547], [39.77980041503906, -104.97874450683594], [39.77981948852539, -104.97929382324219], [39.77983093261719, -104.97946166992188], [39.77986526489258, -104.98001861572266], [39.77991485595703, -104.98080444335938], [39.779991149902344, -104.98214721679688], [39.78001403808594, -104.98335266113281], [39.7800178527832, -104.98450469970703], [39.78002166748047, -104.98558044433594], [39.780033111572266, -104.98602294921875], [39.7800407409668, -104.98613739013672], [39.780059814453125, -104.98633575439453], [39.780086517333984, -104.9865493774414], [39.780128479003906, -104.98677825927734], [39.780174255371094, -104.98695373535156], [39.78023910522461, -104.98715209960938], [39.780540466308594, -104.98787689208984], [39.78069305419922, -104.98828887939453], [39.78076934814453, -104.98860168457031], [39.780784606933594, -104.98871612548828], [39.780792236328125, -104.98896026611328], [39.78078079223633, -104.98912048339844], [39.780765533447266, -104.98928833007812], [39.78071975708008, -104.98950958251953], [39.78061294555664, -104.98975372314453], [39.78052520751953, -104.98993682861328], [39.78038787841797, -104.99011993408203], [39.78028869628906, -104.99024963378906], [39.780174255371094, -104.99034881591797], [39.77997589111328, -104.990478515625], [39.77995300292969, -104.99049377441406], [39.77978515625, -104.99056243896484], [39.77960205078125, -104.99060821533203], [39.7794189453125, -104.99060821533203], [39.77922439575195, -104.9905776977539], [39.778968811035156, -104.99048614501953], [39.77858352661133, -104.9903335571289], [39.778541564941406, -104.99031066894531], [39.77811050415039, -104.99011993408203], [39.777706146240234, -104.98995208740234], [39.7775764465332, -104.98990631103516], [39.77741241455078, -104.98985290527344], [39.77730941772461, -104.98983001708984], [39.7772102355957, -104.98980712890625], [39.777130126953125, -104.98979949951172], [39.77692794799805, -104.98979187011719], [39.77660369873047, -104.98979187011719], [39.77629089355469, -104.98980712890625], [39.77605056762695, -104.98982238769531], [39.77583694458008, -104.98986053466797], [39.77559280395508, -104.98991394042969], [39.7751579284668, -104.99003601074219], [39.774871826171875, -104.99012756347656], [39.77482986450195, -104.9901351928711], [39.774696350097656, -104.99018096923828], [39.774539947509766, -104.99022674560547], [39.774383544921875, -104.99026489257812], [39.77424621582031, -104.99028778076172], [39.77410888671875, -104.99029541015625], [39.773887634277344, -104.99030303955078], [39.77339553833008, -104.99031829833984], [39.773284912109375, -104.99031829833984], [39.77314376831055, -104.99032592773438], [39.773006439208984, -104.99034118652344], [39.77288055419922, -104.99036407470703], [39.77272033691406, -104.99040222167969], [39.77251434326172, -104.99046325683594], [39.77234649658203, -104.99051666259766], [39.77214431762695, -104.99059295654297], [39.77194595336914, -104.99068450927734], [39.77174377441406, -104.99079895019531], [39.77142333984375, -104.99098205566406], [39.77122116088867, -104.9911117553711], [39.77073287963867, -104.9914321899414], [39.7704963684082, -104.99164581298828], [39.770259857177734, -104.99187469482422], [39.77001190185547, -104.99214172363281], [39.769779205322266, -104.99241638183594], [39.76954650878906, -104.99272918701172], [39.76931381225586, -104.99305725097656], [39.76912307739258, -104.99334716796875], [39.76897048950195, -104.99359893798828], [39.768775939941406, -104.99393463134766], [39.768592834472656, -104.99432373046875], [39.76849365234375, -104.99454498291016], [39.76826477050781, -104.9951171875], [39.768192291259766, -104.99535369873047], [39.76802062988281, -104.99580383300781], [39.767581939697266, -104.99694061279297], [39.767154693603516, -104.99806213378906], [39.766963958740234, -104.9985580444336], [39.76682662963867, -104.9989013671875], [39.7667121887207, -104.99915313720703], [39.76656723022461, -104.99944305419922], [39.76641845703125, -104.99970245361328], [39.766273498535156, -104.99990844726562], [39.766109466552734, -105.00015258789062], [39.7659912109375, -105.00031280517578], [39.7658805847168, -105.0004653930664], [39.765750885009766, -105.00062561035156], [39.765567779541016, -105.00081634521484], [39.76536560058594, -105.00100708007812], [39.76518249511719, -105.00117492675781], [39.76498794555664, -105.00135803222656], [39.763919830322266, -105.002197265625], [39.76262283325195, -105.00331115722656], [39.76240539550781, -105.00350189208984], [39.762203216552734, -105.0036849975586], [39.76198959350586, -105.00389099121094], [39.76179885864258, -105.00407409667969], [39.7616081237793, -105.0042724609375], [39.761444091796875, -105.00445556640625], [39.761260986328125, -105.00466918945312], [39.76103973388672, -105.00492858886719], [39.76044845581055, -105.00575256347656], [39.759456634521484, -105.0072021484375], [39.75861740112305, -105.0083999633789], [39.758094787597656, -105.00910949707031], [39.75727844238281, -105.0101547241211], [39.75709915161133, -105.01038360595703], [39.756736755371094, -105.0108871459961], [39.75618362426758, -105.0116195678711], [39.75572967529297, -105.01225280761719], [39.75527572631836, -105.01285552978516], [39.75492858886719, -105.01334381103516], [39.7547492980957, -105.01359558105469], [39.75423812866211, -105.01427459716797], [39.75400924682617, -105.01457214355469], [39.753841400146484, -105.0147705078125], [39.75370788574219, -105.01492309570312], [39.75352096557617, -105.01513671875], [39.75336837768555, -105.01529693603516], [39.753173828125, -105.01548767089844], [39.75297164916992, -105.01567840576172], [39.752811431884766, -105.01581573486328], [39.75261688232422, -105.01597595214844], [39.75239944458008, -105.0161361694336], [39.75222396850586, -105.01627349853516], [39.752037048339844, -105.01639556884766], [39.751853942871094, -105.0165023803711], [39.75165939331055, -105.01661682128906], [39.75148391723633, -105.01670837402344], [39.75117874145508, -105.0168685913086], [39.75090026855469, -105.01699829101562], [39.75063705444336, -105.01710510253906], [39.74983215332031, -105.01744079589844], [39.74938201904297, -105.01763916015625], [39.74889373779297, -105.01783752441406], [39.748531341552734, -105.01799011230469], [39.74820327758789, -105.01811218261719], [39.74799728393555, -105.01818084716797], [39.74775695800781, -105.01825714111328], [39.74755096435547, -105.01830291748047], [39.74735641479492, -105.01834106445312], [39.747108459472656, -105.01836395263672], [39.74689865112305, -105.01837158203125], [39.74666976928711, -105.01836395263672], [39.74650955200195, -105.01835632324219], [39.74633026123047, -105.01832580566406], [39.746131896972656, -105.0182876586914], [39.74597930908203, -105.01824951171875], [39.74581527709961, -105.01819610595703], [39.745609283447266, -105.01811218261719], [39.74538040161133, -105.01800537109375], [39.74514389038086, -105.01786804199219], [39.744937896728516, -105.01773834228516], [39.744747161865234, -105.01759338378906], [39.74456787109375, -105.0174560546875], [39.74444580078125, -105.01734161376953], [39.743892669677734, -105.01679992675781], [39.74342727661133, -105.0163345336914], [39.743038177490234, -105.015869140625], [39.742897033691406, -105.01570892333984], [39.74272537231445, -105.0155258178711], [39.7425422668457, -105.01532745361328], [39.74235916137695, -105.01516723632812], [39.7421875, -105.01500701904297], [39.74201965332031, -105.0148696899414], [39.74187469482422, -105.01476287841797], [39.74171447753906, -105.0146484375], [39.74155807495117, -105.01456451416016], [39.741329193115234, -105.01445007324219], [39.74116134643555, -105.01438903808594], [39.74099349975586, -105.01432037353516], [39.74075698852539, -105.01425170898438], [39.7405891418457, -105.01421356201172], [39.740386962890625, -105.01416778564453], [39.740230560302734, -105.01415252685547], [39.74014663696289, -105.0141372680664], [39.73987579345703, -105.01412963867188], [39.73881530761719, -105.01406860351562], [39.73861312866211, -105.0140609741211], [39.73841094970703, -105.0140609741211], [39.73823928833008, -105.01406860351562], [39.73807907104492, -105.01408386230469], [39.7379035949707, -105.01409912109375], [39.73770523071289, -105.01412963867188], [39.737457275390625, -105.01416778564453], [39.737152099609375, -105.01428985595703], [39.73687744140625, -105.01436614990234], [39.7366828918457, -105.01441955566406], [39.73640823364258, -105.01451873779297], [39.73619079589844, -105.01460266113281], [39.73607635498047, -105.01464080810547], [39.735904693603516, -105.01471710205078], [39.73575973510742, -105.01478576660156], [39.73533630371094, -105.0149917602539], [39.73477554321289, -105.01528930664062], [39.734619140625, -105.01536560058594], [39.73448181152344, -105.01542663574219], [39.73434066772461, -105.01548767089844], [39.73418426513672, -105.01554870605469], [39.73397445678711, -105.015625], [39.733829498291016, -105.01566314697266], [39.73370361328125, -105.01570129394531], [39.73356246948242, -105.01573944091797], [39.733436584472656, -105.0157699584961], [39.73330307006836, -105.01579284667969], [39.73316955566406, -105.01582336425781], [39.73301315307617, -105.01583862304688], [39.73285675048828, -105.01585388183594], [39.73271942138672, -105.01586151123047], [39.732574462890625, -105.015869140625], [39.73243713378906, -105.01587677001953], [39.732303619384766, -105.01588439941406], [39.73218536376953, -105.01588439941406], [39.73207092285156, -105.01587677001953], [39.73195266723633, -105.015869140625], [39.73179244995117, -105.01585388183594], [39.73155212402344, -105.01580047607422], [39.73124313354492, -105.01573181152344], [39.731075286865234, -105.01568603515625], [39.7308464050293, -105.01561737060547], [39.730567932128906, -105.01553344726562], [39.730201721191406, -105.0154037475586], [39.729949951171875, -105.01531219482422], [39.72952651977539, -105.01518249511719], [39.729122161865234, -105.0150375366211], [39.728843688964844, -105.01493835449219], [39.72844314575195, -105.01477813720703], [39.72832107543945, -105.01473236083984], [39.728145599365234, -105.01466369628906], [39.727943420410156, -105.01458740234375], [39.727439880371094, -105.01441192626953], [39.72711181640625, -105.01427459716797], [39.72694778442383, -105.01421356201172], [39.726749420166016, -105.01412200927734], [39.726558685302734, -105.0140380859375], [39.726375579833984, -105.01394653320312], [39.72616195678711, -105.01382446289062], [39.72585678100586, -105.01362609863281], [39.725624084472656, -105.01348114013672], [39.72536087036133, -105.01329803466797], [39.72511672973633, -105.01311492919922], [39.72493362426758, -105.01297760009766], [39.7247200012207, -105.01280212402344], [39.72451400756836, -105.01262664794922], [39.72426986694336, -105.01239776611328], [39.72408676147461, -105.01221466064453], [39.723899841308594, -105.01201629638672], [39.72377395629883, -105.01188659667969], [39.72359848022461, -105.01168060302734], [39.72343826293945, -105.0114974975586], [39.72330093383789, -105.01133728027344], [39.723079681396484, -105.01106262207031], [39.7227897644043, -105.01066589355469], [39.72258377075195, -105.01038360595703], [39.722251892089844, -105.0099105834961], [39.7220573425293, -105.0096435546875], [39.721920013427734, -105.00946807861328], [39.721744537353516, -105.00924682617188], [39.721649169921875, -105.00914001464844], [39.7214241027832, -105.00888061523438], [39.72117233276367, -105.00861358642578], [39.720741271972656, -105.0081787109375], [39.720523834228516, -105.00794219970703], [39.7200813293457, -105.0074691772461], [39.71998977661133, -105.00737762451172], [39.71975326538086, -105.00711822509766], [39.71941375732422, -105.00675201416016], [39.719242095947266, -105.0065689086914], [39.719085693359375, -105.00640106201172], [39.718936920166016, -105.00623321533203], [39.718807220458984, -105.00608825683594], [39.718658447265625, -105.00591278076172], [39.71849060058594, -105.00570678710938], [39.7183723449707, -105.00556182861328], [39.71826171875, -105.00541687011719], [39.71812057495117, -105.00521850585938], [39.71792221069336, -105.00492858886719], [39.71759796142578, -105.00445556640625], [39.717166900634766, -105.0038070678711], [39.716880798339844, -105.00337982177734], [39.71671676635742, -105.00314331054688], [39.716552734375, -105.00292205810547], [39.7164306640625, -105.00276184082031], [39.71633529663086, -105.00264739990234], [39.71624755859375, -105.00254821777344], [39.71617889404297, -105.00247192382812], [39.71608352661133, -105.00237274169922], [39.715999603271484, -105.00228118896484], [39.71593475341797, -105.0022201538086], [39.715885162353516, -105.0021743774414], [39.715755462646484, -105.00206756591797], [39.715660095214844, -105.00198364257812], [39.715538024902344, -105.00189208984375], [39.71543884277344, -105.00181579589844], [39.71533203125, -105.00173950195312], [39.7152214050293, -105.00166320800781], [39.71499252319336, -105.00151824951172], [39.714324951171875, -105.0010757446289], [39.71399688720703, -105.00086212158203], [39.71346664428711, -105.00052642822266], [39.71318435668945, -105.00035095214844], [39.71266174316406, -105.00003051757812], [39.71223449707031, -104.9997787475586], [39.71159362792969, -104.99940490722656], [39.71141052246094, -104.99930572509766], [39.710933685302734, -104.99901580810547], [39.71067810058594, -104.99886322021484], [39.710357666015625, -104.99867248535156], [39.71013641357422, -104.99855041503906], [39.70988464355469, -104.99840545654297], [39.70966720581055, -104.99829864501953], [39.7094841003418, -104.99820709228516], [39.70940017700195, -104.99816131591797], [39.709136962890625, -104.99803924560547], [39.708702087402344, -104.99784088134766], [39.70827865600586, -104.99764251708984], [39.7078857421875, -104.99746704101562], [39.707275390625, -104.9971923828125], [39.70710372924805, -104.99711608886719], [39.7068977355957, -104.99701690673828], [39.706809997558594, -104.99697875976562], [39.706729888916016, -104.99693298339844], [39.70663070678711, -104.99688720703125], [39.706539154052734, -104.99683380126953], [39.70646667480469, -104.99678802490234], [39.70637130737305, -104.9967269897461], [39.70630645751953, -104.99668884277344], [39.70623779296875, -104.99664306640625], [39.70616912841797, -104.99658966064453], [39.706085205078125, -104.99652862548828], [39.70596694946289, -104.9964370727539], [39.705814361572266, -104.9963150024414], [39.7056999206543, -104.9962158203125], [39.70561218261719, -104.99613189697266], [39.70552062988281, -104.99604034423828], [39.705467224121094, -104.99598693847656], [39.70537567138672, -104.99588775634766], [39.705299377441406, -104.99580383300781], [39.705169677734375, -104.99565124511719], [39.70507049560547, -104.99552917480469], [39.704959869384766, -104.9953842163086], [39.704837799072266, -104.99520874023438], [39.70473098754883, -104.99505615234375], [39.704627990722656, -104.99488067626953], [39.704551696777344, -104.99474334716797], [39.704471588134766, -104.99459838867188], [39.70440673828125, -104.99447631835938], [39.7043342590332, -104.99433135986328], [39.704261779785156, -104.99417877197266], [39.70420455932617, -104.99404907226562], [39.70415115356445, -104.99392700195312], [39.704097747802734, -104.99378204345703], [39.70404815673828, -104.99363708496094], [39.70399475097656, -104.99347686767578], [39.70393753051758, -104.9933090209961], [39.70388412475586, -104.99313354492188], [39.703792572021484, -104.99284362792969], [39.70363235473633, -104.9923324584961], [39.703487396240234, -104.99188232421875], [39.703304290771484, -104.99127197265625], [39.703189849853516, -104.99092102050781], [39.70305633544922, -104.990478515625], [39.702980041503906, -104.99024200439453], [39.70287322998047, -104.989990234375], [39.70277404785156, -104.98977661132812], [39.70265197753906, -104.98954010009766], [39.70252990722656, -104.98933410644531], [39.70241928100586, -104.98914337158203], [39.70228576660156, -104.98894500732422], [39.702110290527344, -104.98870849609375], [39.70179748535156, -104.9883041381836], [39.70148849487305, -104.98790740966797], [39.700843811035156, -104.987060546875], [39.700706481933594, -104.98689270019531], [39.70027542114258, -104.98641967773438], [39.700077056884766, -104.9861831665039], [39.69994354248047, -104.98603057861328], [39.699771881103516, -104.98583984375], [39.69960021972656, -104.98567962646484], [39.699462890625, -104.98554229736328], [39.699344635009766, -104.98542022705078], [39.69913101196289, -104.98521423339844], [39.698974609375, -104.98504638671875], [39.69866180419922, -104.9847412109375], [39.6981086730957, -104.98410034179688], [39.69713592529297, -104.98299407958984], [39.696075439453125, -104.98184967041016], [39.69560623168945, -104.9813003540039], [39.69524383544922, -104.98087310791016], [39.69488525390625, -104.98043823242188], [39.694786071777344, -104.98033905029297], [39.6947021484375, -104.98025512695312], [39.69462585449219, -104.98019409179688], [39.6945915222168, -104.98016357421875], [39.69448471069336, -104.98009490966797], [39.69437789916992, -104.98002624511719], [39.6942024230957, -104.97992706298828], [39.69398498535156, -104.97977447509766], [39.69377899169922, -104.97953033447266], [39.69367599487305, -104.97943115234375], [39.69364929199219, -104.97940063476562], [39.69361114501953, -104.97936248779297], [39.69355010986328, -104.97931671142578], [39.6934814453125, -104.9792709350586], [39.69330978393555, -104.97918701171875], [39.69325637817383, -104.97914123535156], [39.693199157714844, -104.97909545898438], [39.693145751953125, -104.97903442382812], [39.693092346191406, -104.97897338867188], [39.69303512573242, -104.97886657714844], [39.69300079345703, -104.97877502441406], [39.69298553466797, -104.97871398925781], [39.69298553466797, -104.97850036621094], [39.69298553466797, -104.97827911376953], [39.69298553466797, -104.97792053222656], [39.6929931640625, -104.9774398803711], [39.6929931640625, -104.9773941040039], [39.6929931640625, -104.9772720336914], [39.692989349365234, -104.97704315185547], [39.692989349365234, -104.97694396972656], [39.692989349365234, -104.97685241699219], [39.69298553466797, -104.97636413574219], [39.6929817199707, -104.97577667236328]],\n", + " var poly_line_d18f5e58b505fe2da525d04fb8a5553f = L.polyline(\n", + " [[39.77902603149414, -104.96916961669922], [39.7789306640625, -104.96929931640625], [39.778900146484375, -104.9693374633789], [39.77882766723633, -104.96943664550781], [39.778751373291016, -104.96954345703125], [39.7786979675293, -104.96961975097656], [39.77864456176758, -104.96971130371094], [39.77876281738281, -104.96937561035156], [39.77878952026367, -104.96929931640625], [39.778804779052734, -104.9692153930664], [39.77880096435547, -104.96912384033203], [39.778785705566406, -104.96903991699219], [39.77874755859375, -104.96894836425781], [39.778587341308594, -104.9686508178711], [39.778480529785156, -104.96852111816406], [39.77839660644531, -104.96841430664062], [39.77846908569336, -104.96832275390625], [39.77865982055664, -104.96807098388672], [39.778709411621094, -104.96791076660156], [39.77894592285156, -104.96761322021484], [39.77906799316406, -104.96745300292969], [39.77915954589844, -104.96732330322266], [39.7791862487793, -104.96728515625], [39.779232025146484, -104.96722412109375], [39.77926254272461, -104.96719360351562], [39.779293060302734, -104.9671630859375], [39.77932357788086, -104.96714782714844], [39.77938461303711, -104.96710968017578], [39.779441833496094, -104.96707916259766], [39.77951431274414, -104.96704864501953], [39.7796745300293, -104.96698760986328], [39.77983093261719, -104.9669418334961], [39.78031921386719, -104.96683502197266], [39.780364990234375, -104.9668197631836], [39.78050231933594, -104.966796875], [39.78049850463867, -104.96688079833984], [39.78049850463867, -104.96698760986328], [39.78049850463867, -104.96705627441406], [39.78049087524414, -104.96717834472656], [39.78046798706055, -104.96759033203125], [39.78045654296875, -104.96772003173828], [39.78042984008789, -104.96797180175781], [39.78041458129883, -104.96810913085938], [39.780372619628906, -104.96839904785156], [39.78034210205078, -104.96859741210938], [39.780296325683594, -104.96888732910156], [39.7802734375, -104.96903228759766], [39.78025436401367, -104.96917724609375], [39.780250549316406, -104.96920776367188], [39.780235290527344, -104.96934509277344], [39.78020095825195, -104.96965789794922], [39.78001403808594, -104.9715347290039], [39.77994155883789, -104.97315216064453], [39.77980422973633, -104.97496032714844], [39.7797737121582, -104.97691345214844], [39.7797737121582, -104.9772720336914], [39.7797737121582, -104.97753143310547], [39.7797737121582, -104.97764587402344], [39.779781341552734, -104.97801971435547], [39.77980041503906, -104.97874450683594], [39.77981948852539, -104.97929382324219], [39.77983093261719, -104.97946166992188], [39.77986526489258, -104.98001861572266], [39.77991485595703, -104.98080444335938], [39.779991149902344, -104.98214721679688], [39.78001403808594, -104.98335266113281], [39.7800178527832, -104.98450469970703], [39.78002166748047, -104.98558044433594], [39.780033111572266, -104.98602294921875], [39.7800407409668, -104.98613739013672], [39.780059814453125, -104.98633575439453], [39.780086517333984, -104.9865493774414], [39.780128479003906, -104.98677825927734], [39.780174255371094, -104.98695373535156], [39.78023910522461, -104.98715209960938], [39.780540466308594, -104.98787689208984], [39.78069305419922, -104.98828887939453], [39.78076934814453, -104.98860168457031], [39.780784606933594, -104.98871612548828], [39.780792236328125, -104.98896026611328], [39.78078079223633, -104.98912048339844], [39.780765533447266, -104.98928833007812], [39.78071975708008, -104.98950958251953], [39.78061294555664, -104.98975372314453], [39.78052520751953, -104.98993682861328], [39.78038787841797, -104.99011993408203], [39.78028869628906, -104.99024963378906], [39.780174255371094, -104.99034881591797], [39.77997589111328, -104.990478515625], [39.77995300292969, -104.99049377441406], [39.77978515625, -104.99056243896484], [39.77960205078125, -104.99060821533203], [39.7794189453125, -104.99060821533203], [39.77922439575195, -104.9905776977539], [39.778968811035156, -104.99048614501953], [39.77858352661133, -104.9903335571289], [39.778541564941406, -104.99031066894531], [39.77811050415039, -104.99011993408203], [39.777706146240234, -104.98995208740234], [39.7775764465332, -104.98990631103516], [39.77741241455078, -104.98985290527344], [39.77730941772461, -104.98983001708984], [39.7772102355957, -104.98980712890625], [39.777130126953125, -104.98979949951172], [39.77692794799805, -104.98979187011719], [39.77660369873047, -104.98979187011719], [39.77629089355469, -104.98980712890625], [39.77605056762695, -104.98982238769531], [39.77583694458008, -104.98986053466797], [39.77559280395508, -104.98991394042969], [39.7751579284668, -104.99003601074219], [39.774871826171875, -104.99012756347656], [39.77482986450195, -104.9901351928711], [39.774696350097656, -104.99018096923828], [39.774539947509766, -104.99022674560547], [39.774383544921875, -104.99026489257812], [39.77424621582031, -104.99028778076172], [39.77410888671875, -104.99029541015625], [39.773887634277344, -104.99030303955078], [39.77339553833008, -104.99031829833984], [39.773284912109375, -104.99031829833984], [39.77314376831055, -104.99032592773438], [39.773006439208984, -104.99034118652344], [39.77288055419922, -104.99036407470703], [39.77272033691406, -104.99040222167969], [39.77251434326172, -104.99046325683594], [39.77234649658203, -104.99051666259766], [39.77214431762695, -104.99059295654297], [39.77194595336914, -104.99068450927734], [39.77174377441406, -104.99079895019531], [39.77142333984375, -104.99098205566406], [39.77122116088867, -104.9911117553711], [39.77073287963867, -104.9914321899414], [39.7704963684082, -104.99164581298828], [39.770259857177734, -104.99187469482422], [39.77001190185547, -104.99214172363281], [39.769779205322266, -104.99241638183594], [39.76954650878906, -104.99272918701172], [39.76931381225586, -104.99305725097656], [39.76912307739258, -104.99334716796875], [39.76897048950195, -104.99359893798828], [39.768775939941406, -104.99393463134766], [39.768592834472656, -104.99432373046875], [39.76849365234375, -104.99454498291016], [39.76826477050781, -104.9951171875], [39.768192291259766, -104.99535369873047], [39.76802062988281, -104.99580383300781], [39.767581939697266, -104.99694061279297], [39.767154693603516, -104.99806213378906], [39.766963958740234, -104.9985580444336], [39.76682662963867, -104.9989013671875], [39.7667121887207, -104.99915313720703], [39.76656723022461, -104.99944305419922], [39.76641845703125, -104.99970245361328], [39.766273498535156, -104.99990844726562], [39.766109466552734, -105.00015258789062], [39.7659912109375, -105.00031280517578], [39.7658805847168, -105.0004653930664], [39.765750885009766, -105.00062561035156], [39.765567779541016, -105.00081634521484], [39.76536560058594, -105.00100708007812], [39.76518249511719, -105.00117492675781], [39.76498794555664, -105.00135803222656], [39.763919830322266, -105.002197265625], [39.76262283325195, -105.00331115722656], [39.76240539550781, -105.00350189208984], [39.762203216552734, -105.0036849975586], [39.76198959350586, -105.00389099121094], [39.76179885864258, -105.00407409667969], [39.7616081237793, -105.0042724609375], [39.761444091796875, -105.00445556640625], [39.761260986328125, -105.00466918945312], [39.76103973388672, -105.00492858886719], [39.76044845581055, -105.00575256347656], [39.759456634521484, -105.0072021484375], [39.75861740112305, -105.0083999633789], [39.758094787597656, -105.00910949707031], [39.75727844238281, -105.0101547241211], [39.75709915161133, -105.01038360595703], [39.756736755371094, -105.0108871459961], [39.75618362426758, -105.0116195678711], [39.75572967529297, -105.01225280761719], [39.75527572631836, -105.01285552978516], [39.75492858886719, -105.01334381103516], [39.7547492980957, -105.01359558105469], [39.75423812866211, -105.01427459716797], [39.75400924682617, -105.01457214355469], [39.753841400146484, -105.0147705078125], [39.75370788574219, -105.01492309570312], [39.75352096557617, -105.01513671875], [39.75336837768555, -105.01529693603516], [39.753173828125, -105.01548767089844], [39.75297164916992, -105.01567840576172], [39.752811431884766, -105.01581573486328], [39.75261688232422, -105.01597595214844], [39.75239944458008, -105.0161361694336], [39.75222396850586, -105.01627349853516], [39.752037048339844, -105.01639556884766], [39.751853942871094, -105.0165023803711], [39.75165939331055, -105.01661682128906], [39.75148391723633, -105.01670837402344], [39.75117874145508, -105.0168685913086], [39.75090026855469, -105.01699829101562], [39.75063705444336, -105.01710510253906], [39.74983215332031, -105.01744079589844], [39.74938201904297, -105.01763916015625], [39.74889373779297, -105.01783752441406], [39.748531341552734, -105.01799011230469], [39.74820327758789, -105.01811218261719], [39.74799728393555, -105.01818084716797], [39.74775695800781, -105.01825714111328], [39.74755096435547, -105.01830291748047], [39.74735641479492, -105.01834106445312], [39.747108459472656, -105.01836395263672], [39.74689865112305, -105.01837158203125], [39.74666976928711, -105.01836395263672], [39.74650955200195, -105.01835632324219], [39.74633026123047, -105.01832580566406], [39.746131896972656, -105.0182876586914], [39.74597930908203, -105.01824951171875], [39.74581527709961, -105.01819610595703], [39.745609283447266, -105.01811218261719], [39.74538040161133, -105.01800537109375], [39.74514389038086, -105.01786804199219], [39.744937896728516, -105.01773834228516], [39.744747161865234, -105.01759338378906], [39.74456787109375, -105.0174560546875], [39.74444580078125, -105.01734161376953], [39.743892669677734, -105.01679992675781], [39.74342727661133, -105.0163345336914], [39.743038177490234, -105.015869140625], [39.742897033691406, -105.01570892333984], [39.74272537231445, -105.0155258178711], [39.7425422668457, -105.01532745361328], [39.74235916137695, -105.01516723632812], [39.7421875, -105.01500701904297], [39.74201965332031, -105.0148696899414], [39.74187469482422, -105.01476287841797], [39.74171447753906, -105.0146484375], [39.74155807495117, -105.01456451416016], [39.741329193115234, -105.01445007324219], [39.74116134643555, -105.01438903808594], [39.74099349975586, -105.01432037353516], [39.74075698852539, -105.01425170898438], [39.7405891418457, -105.01421356201172], [39.740386962890625, -105.01416778564453], [39.740230560302734, -105.01415252685547], [39.74014663696289, -105.0141372680664], [39.73987579345703, -105.01412963867188], [39.73881530761719, -105.01406860351562], [39.73861312866211, -105.0140609741211], [39.73841094970703, -105.0140609741211], [39.73823928833008, -105.01406860351562], [39.73807907104492, -105.01408386230469], [39.7379035949707, -105.01409912109375], [39.73770523071289, -105.01412963867188], [39.737457275390625, -105.01416778564453], [39.737152099609375, -105.01428985595703], [39.73687744140625, -105.01436614990234], [39.7366828918457, -105.01441955566406], [39.73640823364258, -105.01451873779297], [39.73619079589844, -105.01460266113281], [39.73607635498047, -105.01464080810547], [39.735904693603516, -105.01471710205078], [39.73575973510742, -105.01478576660156], [39.73533630371094, -105.0149917602539], [39.73477554321289, -105.01528930664062], [39.734619140625, -105.01536560058594], [39.73448181152344, -105.01542663574219], [39.73434066772461, -105.01548767089844], [39.73418426513672, -105.01554870605469], [39.73397445678711, -105.015625], [39.733829498291016, -105.01566314697266], [39.73370361328125, -105.01570129394531], [39.73356246948242, -105.01573944091797], [39.733436584472656, -105.0157699584961], [39.73330307006836, -105.01579284667969], [39.73316955566406, -105.01582336425781], [39.73301315307617, -105.01583862304688], [39.73285675048828, -105.01585388183594], [39.73271942138672, -105.01586151123047], [39.732574462890625, -105.015869140625], [39.73243713378906, -105.01587677001953], [39.732303619384766, -105.01588439941406], [39.73218536376953, -105.01588439941406], [39.73207092285156, -105.01587677001953], [39.73195266723633, -105.015869140625], [39.73179244995117, -105.01585388183594], [39.73155212402344, -105.01580047607422], [39.73124313354492, -105.01573181152344], [39.731075286865234, -105.01568603515625], [39.7308464050293, -105.01561737060547], [39.730567932128906, -105.01553344726562], [39.730201721191406, -105.0154037475586], [39.729949951171875, -105.01531219482422], [39.72952651977539, -105.01518249511719], [39.729122161865234, -105.0150375366211], [39.728843688964844, -105.01493835449219], [39.72844314575195, -105.01477813720703], [39.72832107543945, -105.01473236083984], [39.728145599365234, -105.01466369628906], [39.727943420410156, -105.01458740234375], [39.727439880371094, -105.01441192626953], [39.72711181640625, -105.01427459716797], [39.72694778442383, -105.01421356201172], [39.726749420166016, -105.01412200927734], [39.726558685302734, -105.0140380859375], [39.726375579833984, -105.01394653320312], [39.72616195678711, -105.01382446289062], [39.72585678100586, -105.01362609863281], [39.725624084472656, -105.01348114013672], [39.72536087036133, -105.01329803466797], [39.72511672973633, -105.01311492919922], [39.72493362426758, -105.01297760009766], [39.7247200012207, -105.01280212402344], [39.72451400756836, -105.01262664794922], [39.72426986694336, -105.01239776611328], [39.72408676147461, -105.01221466064453], [39.723899841308594, -105.01201629638672], [39.72377395629883, -105.01188659667969], [39.72359848022461, -105.01168060302734], [39.72343826293945, -105.0114974975586], [39.72330093383789, -105.01133728027344], [39.723079681396484, -105.01106262207031], [39.7227897644043, -105.01066589355469], [39.72258377075195, -105.01038360595703], [39.722251892089844, -105.0099105834961], [39.7220573425293, -105.0096435546875], [39.721920013427734, -105.00946807861328], [39.721744537353516, -105.00924682617188], [39.721649169921875, -105.00914001464844], [39.7214241027832, -105.00888061523438], [39.72117233276367, -105.00861358642578], [39.720741271972656, -105.0081787109375], [39.720523834228516, -105.00794219970703], [39.7200813293457, -105.0074691772461], [39.71998977661133, -105.00737762451172], [39.71975326538086, -105.00711822509766], [39.71941375732422, -105.00675201416016], [39.719242095947266, -105.0065689086914], [39.719085693359375, -105.00640106201172], [39.718936920166016, -105.00623321533203], [39.718807220458984, -105.00608825683594], [39.718658447265625, -105.00591278076172], [39.71849060058594, -105.00570678710938], [39.7183723449707, -105.00556182861328], [39.71826171875, -105.00541687011719], [39.71812057495117, -105.00521850585938], [39.71792221069336, -105.00492858886719], [39.71759796142578, -105.00445556640625], [39.717166900634766, -105.0038070678711], [39.716880798339844, -105.00337982177734], [39.71671676635742, -105.00314331054688], [39.716552734375, -105.00292205810547], [39.7164306640625, -105.00276184082031], [39.71633529663086, -105.00264739990234], [39.71624755859375, -105.00254821777344], [39.71617889404297, -105.00247192382812], [39.71608352661133, -105.00237274169922], [39.715999603271484, -105.00228118896484], [39.71593475341797, -105.0022201538086], [39.715885162353516, -105.0021743774414], [39.715755462646484, -105.00206756591797], [39.715660095214844, -105.00198364257812], [39.715538024902344, -105.00189208984375], [39.71543884277344, -105.00181579589844], [39.71533203125, -105.00173950195312], [39.7152214050293, -105.00166320800781], [39.71499252319336, -105.00151824951172], [39.714324951171875, -105.0010757446289], [39.71399688720703, -105.00086212158203], [39.71346664428711, -105.00052642822266], [39.71318435668945, -105.00035095214844], [39.71266174316406, -105.00003051757812], [39.71223449707031, -104.9997787475586], [39.71159362792969, -104.99940490722656], [39.71141052246094, -104.99930572509766], [39.710933685302734, -104.99901580810547], [39.71067810058594, -104.99886322021484], [39.710357666015625, -104.99867248535156], [39.71013641357422, -104.99855041503906], [39.70988464355469, -104.99840545654297], [39.70966720581055, -104.99829864501953], [39.7094841003418, -104.99820709228516], [39.70940017700195, -104.99816131591797], [39.709136962890625, -104.99803924560547], [39.708702087402344, -104.99784088134766], [39.70827865600586, -104.99764251708984], [39.7078857421875, -104.99746704101562], [39.707275390625, -104.9971923828125], [39.70710372924805, -104.99711608886719], [39.7068977355957, -104.99701690673828], [39.706809997558594, -104.99697875976562], [39.706729888916016, -104.99693298339844], [39.70663070678711, -104.99688720703125], [39.706539154052734, -104.99683380126953], [39.70646667480469, -104.99678802490234], [39.70637130737305, -104.9967269897461], [39.70630645751953, -104.99668884277344], [39.70623779296875, -104.99664306640625], [39.70616912841797, -104.99658966064453], [39.706085205078125, -104.99652862548828], [39.70596694946289, -104.9964370727539], [39.705814361572266, -104.9963150024414], [39.7056999206543, -104.9962158203125], [39.70561218261719, -104.99613189697266], [39.70552062988281, -104.99604034423828], [39.705467224121094, -104.99598693847656], [39.70537567138672, -104.99588775634766], [39.705299377441406, -104.99580383300781], [39.705169677734375, -104.99565124511719], [39.70507049560547, -104.99552917480469], [39.704959869384766, -104.9953842163086], [39.704837799072266, -104.99520874023438], [39.70473098754883, -104.99505615234375], [39.704627990722656, -104.99488067626953], [39.704551696777344, -104.99474334716797], [39.704471588134766, -104.99459838867188], [39.70440673828125, -104.99447631835938], [39.7043342590332, -104.99433135986328], [39.704261779785156, -104.99417877197266], [39.70420455932617, -104.99404907226562], [39.70415115356445, -104.99392700195312], [39.704097747802734, -104.99378204345703], [39.70404815673828, -104.99363708496094], [39.70399475097656, -104.99347686767578], [39.70393753051758, -104.9933090209961], [39.70388412475586, -104.99313354492188], [39.703792572021484, -104.99284362792969], [39.70363235473633, -104.9923324584961], [39.703487396240234, -104.99188232421875], [39.703304290771484, -104.99127197265625], [39.703189849853516, -104.99092102050781], [39.70305633544922, -104.990478515625], [39.702980041503906, -104.99024200439453], [39.70287322998047, -104.989990234375], [39.70277404785156, -104.98977661132812], [39.70265197753906, -104.98954010009766], [39.70252990722656, -104.98933410644531], [39.70241928100586, -104.98914337158203], [39.70228576660156, -104.98894500732422], [39.702110290527344, -104.98870849609375], [39.70179748535156, -104.9883041381836], [39.70148849487305, -104.98790740966797], [39.700843811035156, -104.987060546875], [39.700706481933594, -104.98689270019531], [39.700130462646484, -104.98612213134766], [39.69986343383789, -104.98579406738281], [39.699214935302734, -104.98503875732422], [39.696720123291016, -104.98221588134766], [39.6949462890625, -104.9802017211914], [39.69448471069336, -104.97967529296875], [39.69377136230469, -104.97888946533203], [39.693267822265625, -104.97833251953125], [39.6928596496582, -104.9778823852539], [39.692665100097656, -104.97766876220703], [39.69175720214844, -104.97666931152344], [39.691261291503906, -104.97602081298828], [39.690696716308594, -104.97518920898438]],\n", " {"bubblingMouseEvents": true, "color": "red", "dashArray": null, "dashOffset": null, "fill": false, "fillColor": "red", "fillOpacity": 0.2, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "noClip": false, "opacity": 0.8, "smoothFactor": 1.0, "stroke": true, "weight": 10}\n", - " ).addTo(map_888d2b7c796324cd21bd624232634cae);\n", + " ).addTo(map_39f1ea5243caaf099c00126499f18faa);\n", " \n", " \n", - " poly_line_4baffe5079294c89d4edc7edd9e25efc.bindTooltip(\n", + " poly_line_d18f5e58b505fe2da525d04fb8a5553f.bindTooltip(\n", " `<div>\n", " Shortest Time\n", " </div>`,\n", @@ -800,19 +796,19 @@ " );\n", " \n", " \n", - " var marker_8063e60c002778e39a88678797eab3de = L.marker(\n", + " var marker_4dced4b4ad15326ef7a648b3480ccde5 = L.marker(\n", " [39.77902603149414, -104.96916961669922],\n", " {}\n", - " ).addTo(map_888d2b7c796324cd21bd624232634cae);\n", + " ).addTo(map_39f1ea5243caaf099c00126499f18faa);\n", " \n", " \n", - " var icon_6ba329bc8a0783a889efbfa411eefa34 = L.AwesomeMarkers.icon(\n", + " var icon_d752417326ce3dcb0c56ee8ae11a1959 = L.AwesomeMarkers.icon(\n", " {"extraClasses": "fa-rotate-0", "icon": "circle", "iconColor": "white", "markerColor": "green", "prefix": "fa"}\n", " );\n", - " marker_8063e60c002778e39a88678797eab3de.setIcon(icon_6ba329bc8a0783a889efbfa411eefa34);\n", + " marker_4dced4b4ad15326ef7a648b3480ccde5.setIcon(icon_d752417326ce3dcb0c56ee8ae11a1959);\n", " \n", " \n", - " marker_8063e60c002778e39a88678797eab3de.bindTooltip(\n", + " marker_4dced4b4ad15326ef7a648b3480ccde5.bindTooltip(\n", " `<div>\n", " Origin\n", " </div>`,\n", @@ -820,19 +816,19 @@ " );\n", " \n", " \n", - " var marker_31d37cb08b6208630b154aea3fee575f = L.marker(\n", - " [39.6929817199707, -104.97577667236328],\n", + " var marker_08dbce7e23dfb9dfa84e47f74133577a = L.marker(\n", + " [39.690696716308594, -104.97518920898438],\n", " {}\n", - " ).addTo(map_888d2b7c796324cd21bd624232634cae);\n", + " ).addTo(map_39f1ea5243caaf099c00126499f18faa);\n", " \n", " \n", - " var icon_cbbb142a833fcde98f215e08c94fcefb = L.AwesomeMarkers.icon(\n", + " var icon_ab98bdbd8d3b3f54b34f50d8a805050b = L.AwesomeMarkers.icon(\n", " {"extraClasses": "fa-rotate-0", "icon": "circle", "iconColor": "white", "markerColor": "red", "prefix": "fa"}\n", " );\n", - " marker_31d37cb08b6208630b154aea3fee575f.setIcon(icon_cbbb142a833fcde98f215e08c94fcefb);\n", + " marker_08dbce7e23dfb9dfa84e47f74133577a.setIcon(icon_ab98bdbd8d3b3f54b34f50d8a805050b);\n", " \n", " \n", - " marker_31d37cb08b6208630b154aea3fee575f.bindTooltip(\n", + " marker_08dbce7e23dfb9dfa84e47f74133577a.bindTooltip(\n", " `<div>\n", " Destination\n", " </div>`,\n", @@ -840,13 +836,13 @@ " );\n", " \n", " \n", - " var poly_line_af3045b9748ae1aa1d396d19f636ae79 = L.polyline(\n", - " [[39.77902603149414, -104.96916961669922], [39.77896499633789, -104.96910095214844], [39.77878189086914, -104.96887969970703], [39.778751373291016, -104.96884155273438], [39.778587341308594, -104.9686508178711], [39.778480529785156, -104.96852111816406], [39.77839660644531, -104.96841430664062], [39.778324127197266, -104.96851348876953], [39.778228759765625, -104.96863555908203], [39.778076171875, -104.96883392333984], [39.777626037597656, -104.96941375732422], [39.7774772644043, -104.96961212158203], [39.77703857421875, -104.97017669677734], [39.776737213134766, -104.97056579589844], [39.77666473388672, -104.97066497802734], [39.7766227722168, -104.97071838378906], [39.776371002197266, -104.97103881835938], [39.77608108520508, -104.9714126586914], [39.775978088378906, -104.97154998779297], [39.774810791015625, -104.97306060791016], [39.77475357055664, -104.97313690185547], [39.77467346191406, -104.97323608398438], [39.77459716796875, -104.97333526611328], [39.773738861083984, -104.97444915771484], [39.77363586425781, -104.97457885742188], [39.773353576660156, -104.97494506835938], [39.77303695678711, -104.97535705566406], [39.77297592163086, -104.9754409790039], [39.77290344238281, -104.97553253173828], [39.772544860839844, -104.97599029541016], [39.772335052490234, -104.97626495361328], [39.77207946777344, -104.97659301757812], [39.771976470947266, -104.97673034667969], [39.771705627441406, -104.97708129882812], [39.77125549316406, -104.97766876220703], [39.77039337158203, -104.9787826538086], [39.77033233642578, -104.9788589477539], [39.770263671875, -104.97895050048828], [39.769996643066406, -104.97929382324219], [39.76996994018555, -104.9793930053711], [39.76955032348633, -104.97993469238281], [39.769287109375, -104.98027801513672], [39.7691764831543, -104.98041534423828], [39.769039154052734, -104.98059844970703], [39.76881408691406, -104.98088836669922], [39.768733978271484, -104.98099517822266], [39.76864242553711, -104.98110961914062], [39.76858901977539, -104.9811782836914], [39.76840591430664, -104.98141479492188], [39.7678337097168, -104.98216247558594], [39.76764678955078, -104.9823989868164], [39.76701736450195, -104.98321533203125], [39.766876220703125, -104.9833984375], [39.766693115234375, -104.98363494873047], [39.766624450683594, -104.98372650146484], [39.76657485961914, -104.9837875366211], [39.76653289794922, -104.98384857177734], [39.766178131103516, -104.98429870605469], [39.766021728515625, -104.98450469970703], [39.76557159423828, -104.98507690429688], [39.76506423950195, -104.98573303222656], [39.76464080810547, -104.98627471923828], [39.764495849609375, -104.98646545410156], [39.76442337036133, -104.98655700683594], [39.764347076416016, -104.98664855957031], [39.763763427734375, -104.98738861083984], [39.76366424560547, -104.98750305175781], [39.763572692871094, -104.98760223388672], [39.76346969604492, -104.98770141601562], [39.76337814331055, -104.98778533935547], [39.76326370239258, -104.98786926269531], [39.76316452026367, -104.9879379272461], [39.76304626464844, -104.98800659179688], [39.762916564941406, -104.98807525634766], [39.762813568115234, -104.98812103271484], [39.76266860961914, -104.98816680908203], [39.76252746582031, -104.98819732666016], [39.762413024902344, -104.98820495605469], [39.762290954589844, -104.98821258544922], [39.76216125488281, -104.98821258544922], [39.762062072753906, -104.98820495605469], [39.76179885864258, -104.9881591796875], [39.76161575317383, -104.98812103271484], [39.76142501831055, -104.98808288574219], [39.76121520996094, -104.98804473876953], [39.75983428955078, -104.98776245117188], [39.75953674316406, -104.98770141601562], [39.75946807861328, -104.98763275146484], [39.75936508178711, -104.98761749267578], [39.7588996887207, -104.987548828125], [39.758426666259766, -104.98747253417969], [39.758270263671875, -104.9874496459961], [39.75812911987305, -104.98744201660156], [39.75796127319336, -104.98744201660156], [39.75767517089844, -104.9874267578125], [39.75761032104492, -104.9874267578125], [39.75736618041992, -104.98741912841797], [39.757179260253906, -104.98741149902344], [39.757102966308594, -104.98741149902344], [39.756961822509766, -104.98741149902344], [39.756805419921875, -104.9874038696289], [39.756404876708984, -104.9874038696289], [39.75601577758789, -104.9874038696289], [39.75578308105469, -104.98739624023438], [39.75563049316406, -104.98739624023438], [39.755496978759766, -104.98739624023438], [39.75507736206055, -104.98738861083984], [39.75468063354492, -104.98738861083984], [39.75453186035156, -104.98738098144531], [39.754398345947266, -104.98738098144531], [39.754364013671875, -104.98738098144531], [39.75428009033203, -104.98738861083984], [39.75388717651367, -104.98738861083984], [39.753604888916016, -104.98738861083984], [39.75343704223633, -104.98738861083984], [39.7532844543457, -104.98738861083984], [39.75323486328125, -104.98738861083984], [39.75295639038086, -104.98738861083984], [39.752933502197266, -104.98738861083984], [39.752662658691406, -104.98738861083984], [39.752262115478516, -104.98738861083984], [39.75224304199219, -104.98738098144531], [39.751827239990234, -104.98738098144531], [39.75173568725586, -104.98738098144531], [39.751583099365234, -104.98738098144531], [39.75148391723633, -104.98738098144531], [39.751014709472656, -104.98738098144531], [39.750850677490234, -104.98738098144531], [39.75082015991211, -104.98738098144531], [39.750736236572266, -104.98738098144531], [39.750389099121094, -104.98737335205078], [39.75023651123047, -104.98737335205078], [39.7501106262207, -104.98737335205078], [39.7497673034668, -104.98737335205078], [39.74958419799805, -104.98737335205078], [39.74951171875, -104.98737335205078], [39.749412536621094, -104.98737335205078], [39.74927520751953, -104.98738098144531], [39.749168395996094, -104.98738098144531], [39.74892044067383, -104.98738098144531], [39.74868392944336, -104.98738098144531], [39.74851989746094, -104.98738098144531], [39.74822235107422, -104.98738098144531], [39.74802017211914, -104.98738098144531], [39.7476692199707, -104.98738098144531], [39.74758529663086, -104.98738098144531], [39.74751281738281, -104.98738098144531], [39.7474365234375, -104.98738098144531], [39.747379302978516, -104.98738098144531], [39.74735641479492, -104.98738098144531], [39.74730682373047, -104.98738098144531], [39.74697494506836, -104.98738098144531], [39.746944427490234, -104.98738098144531], [39.74678039550781, -104.98738861083984], [39.74667739868164, -104.98738861083984], [39.74653244018555, -104.98738861083984], [39.746482849121094, -104.98738861083984], [39.74626541137695, -104.98738861083984], [39.74618148803711, -104.98738861083984], [39.74605178833008, -104.98738861083984], [39.745948791503906, -104.98738861083984], [39.74554443359375, -104.98738861083984], [39.745418548583984, -104.98738861083984], [39.74506378173828, -104.98739624023438], [39.74480438232422, -104.98739624023438], [39.74473571777344, -104.9874038696289], [39.74430847167969, -104.98739624023438], [39.743526458740234, -104.98739624023438], [39.74336242675781, -104.98739624023438], [39.74320602416992, -104.98739624023438], [39.74302291870117, -104.98739624023438], [39.74254608154297, -104.98739624023438], [39.74245834350586, -104.98739624023438], [39.74220275878906, -104.98739624023438], [39.74214172363281, -104.98738861083984], [39.74182891845703, -104.98738861083984], [39.74177932739258, -104.98738861083984], [39.7416877746582, -104.98738861083984], [39.74163818359375, -104.98738098144531], [39.74156188964844, -104.98738861083984], [39.74149703979492, -104.98738861083984], [39.741416931152344, -104.98738861083984], [39.74137496948242, -104.98738861083984], [39.74129867553711, -104.98738861083984], [39.7410888671875, -104.98738861083984], [39.74089050292969, -104.98739624023438], [39.740875244140625, -104.98739624023438], [39.74071502685547, -104.98739624023438], [39.740631103515625, -104.98739624023438], [39.740478515625, -104.98739624023438], [39.74021530151367, -104.9874038696289], [39.74014663696289, -104.9874038696289], [39.74000930786133, -104.9874038696289], [39.73992919921875, -104.9874038696289], [39.73912048339844, -104.98739624023438], [39.73855209350586, -104.98739624023438], [39.73845672607422, -104.98739624023438], [39.73835372924805, -104.98739624023438], [39.73801040649414, -104.98739624023438], [39.73710250854492, -104.98738861083984], [39.73695373535156, -104.98738861083984], [39.736900329589844, -104.98738861083984], [39.736846923828125, -104.98738861083984], [39.73676300048828, -104.98738861083984], [39.73644256591797, -104.98739624023438], [39.73640441894531, -104.98739624023438], [39.736244201660156, -104.98739624023438], [39.73619079589844, -104.98739624023438], [39.73557662963867, -104.98739624023438], [39.73536682128906, -104.98739624023438], [39.73527526855469, -104.98739624023438], [39.73518753051758, -104.98739624023438], [39.73509216308594, -104.98739624023438], [39.73466110229492, -104.98739624023438], [39.734039306640625, -104.9874038696289], [39.73394775390625, -104.98739624023438], [39.733848571777344, -104.9874038696289], [39.73375701904297, -104.9874038696289], [39.73365020751953, -104.9874038696289], [39.73337173461914, -104.9874038696289], [39.733306884765625, -104.9874038696289], [39.732810974121094, -104.9874038696289], [39.732444763183594, -104.98741149902344], [39.732147216796875, -104.98741149902344], [39.7320556640625, -104.98741149902344], [39.731964111328125, -104.98741149902344], [39.73185348510742, -104.98741149902344], [39.73183059692383, -104.98741149902344], [39.73168182373047, -104.98741149902344], [39.73122024536133, -104.98741912841797], [39.731178283691406, -104.98741912841797], [39.73095703125, -104.98741912841797], [39.73054885864258, -104.98741912841797], [39.73045349121094, -104.98741912841797], [39.73037338256836, -104.98741912841797], [39.730010986328125, -104.98741912841797], [39.729522705078125, -104.98741912841797], [39.72943115234375, -104.98741912841797], [39.72917175292969, -104.98741912841797], [39.72908020019531, -104.98741912841797], [39.7289924621582, -104.98741912841797], [39.728668212890625, -104.98741912841797], [39.72862243652344, -104.98741912841797], [39.72829055786133, -104.98741912841797], [39.727420806884766, -104.98741912841797], [39.727298736572266, -104.98741912841797], [39.72718048095703, -104.98741912841797], [39.72665786743164, -104.9874267578125], [39.72663497924805, -104.9874267578125], [39.726600646972656, -104.9874267578125], [39.726375579833984, -104.98743438720703], [39.726226806640625, -104.98744201660156], [39.726112365722656, -104.98744201660156], [39.72574996948242, -104.98745727539062], [39.72563934326172, -104.98746490478516], [39.72555923461914, -104.98746490478516], [39.725223541259766, -104.98747253417969], [39.7251091003418, -104.98747253417969], [39.724884033203125, -104.98748016357422], [39.72444152832031, -104.98748779296875], [39.72422409057617, -104.98748779296875], [39.72414779663086, -104.98748779296875], [39.72405242919922, -104.98748779296875], [39.72385025024414, -104.98748779296875], [39.72378921508789, -104.98748779296875], [39.72360610961914, -104.98748779296875], [39.72319793701172, -104.98750305175781], [39.723026275634766, -104.98751068115234], [39.722869873046875, -104.98751068115234], [39.72262191772461, -104.98751068115234], [39.72255325317383, -104.98751068115234], [39.72245788574219, -104.98751068115234], [39.72215270996094, -104.98750305175781], [39.72206497192383, -104.98750305175781], [39.72195816040039, -104.98749542236328], [39.7216911315918, -104.98748779296875], [39.72103500366211, -104.98748779296875], [39.720943450927734, -104.98748779296875], [39.720863342285156, -104.98748779296875], [39.71990966796875, -104.98748779296875], [39.71987533569336, -104.98748779296875], [39.719451904296875, -104.98748779296875], [39.7193603515625, -104.98748779296875], [39.71928787231445, -104.98748779296875], [39.71902847290039, -104.98748779296875], [39.71844482421875, -104.98748779296875], [39.71834945678711, -104.98748779296875], [39.7182731628418, -104.98748779296875], [39.71819305419922, -104.98748779296875], [39.71754455566406, -104.98748779296875], [39.717464447021484, -104.98748779296875], [39.7174186706543, -104.98748779296875], [39.716644287109375, -104.98748779296875], [39.71656799316406, -104.98748779296875], [39.71649932861328, -104.98748779296875], [39.716224670410156, -104.98749542236328], [39.71613311767578, -104.98749542236328], [39.71575927734375, -104.98750305175781], [39.71568298339844, -104.98750305175781], [39.715606689453125, -104.98750305175781], [39.71514892578125, -104.98751831054688], [39.714847564697266, -104.98753356933594], [39.71476364135742, -104.98753356933594], [39.71470260620117, -104.98753356933594], [39.713897705078125, -104.987548828125], [39.713294982910156, -104.987548828125], [39.71319580078125, -104.987548828125], [39.71306610107422, -104.98755645751953], [39.71297836303711, -104.98755645751953], [39.71291732788086, -104.98755645751953], [39.712486267089844, -104.98756408691406], [39.71209716796875, -104.9875717163086], [39.71201705932617, -104.98757934570312], [39.71174240112305, -104.98757934570312], [39.711578369140625, -104.98758697509766], [39.711280822753906, -104.98759460449219], [39.71114730834961, -104.98759460449219], [39.71101379394531, -104.98759460449219], [39.71085739135742, -104.98759460449219], [39.71025085449219, -104.98760986328125], [39.71002960205078, -104.98760986328125], [39.70989227294922, -104.98761749267578], [39.70948028564453, -104.98761749267578], [39.70942306518555, -104.98760986328125], [39.70934295654297, -104.98761749267578], [39.709259033203125, -104.98761749267578], [39.70914840698242, -104.98762512207031], [39.7091064453125, -104.98762512207031], [39.70846939086914, -104.9876480102539], [39.70835876464844, -104.9876480102539], [39.70762634277344, -104.9876480102539], [39.707542419433594, -104.9876480102539], [39.707462310791016, -104.98764038085938], [39.7066535949707, -104.98760223388672], [39.70616912841797, -104.98758697509766], [39.705841064453125, -104.9875717163086], [39.70573806762695, -104.98756408691406], [39.705665588378906, -104.98755645751953], [39.705406188964844, -104.98754119873047], [39.705223083496094, -104.98753356933594], [39.705101013183594, -104.9875259399414], [39.704872131347656, -104.9875259399414], [39.7047119140625, -104.9875259399414], [39.704627990722656, -104.98751831054688], [39.70394515991211, -104.98751068115234], [39.703880310058594, -104.98751068115234], [39.70368194580078, -104.98750305175781], [39.70335006713867, -104.98750305175781], [39.70302963256836, -104.98750305175781], [39.7028694152832, -104.98750305175781], [39.70270538330078, -104.98751831054688], [39.70259475708008, -104.9875259399414], [39.702491760253906, -104.98753356933594], [39.70227813720703, -104.987548828125], [39.7021369934082, -104.98755645751953], [39.70204162597656, -104.98756408691406], [39.700843811035156, -104.98760986328125], [39.700782775878906, -104.98749542236328], [39.70073318481445, -104.9874038696289], [39.700687408447266, -104.98731994628906], [39.700660705566406, -104.98727416992188], [39.70061111450195, -104.9871826171875], [39.70054626464844, -104.98707580566406], [39.70036315917969, -104.98675537109375], [39.70024490356445, -104.986572265625], [39.70008850097656, -104.98636627197266], [39.700042724609375, -104.98631286621094], [39.69866180419922, -104.9847412109375], [39.6981086730957, -104.98410034179688], [39.69713592529297, -104.98299407958984], [39.696075439453125, -104.98184967041016], [39.69560623168945, -104.9813003540039], [39.69524383544922, -104.98087310791016], [39.69488525390625, -104.98043823242188], [39.694786071777344, -104.98033905029297], [39.6947021484375, -104.98025512695312], [39.69462585449219, -104.98019409179688], [39.6945915222168, -104.98016357421875], [39.69448471069336, -104.98009490966797], [39.69437789916992, -104.98002624511719], [39.6942024230957, -104.97992706298828], [39.69398498535156, -104.97977447509766], [39.69377899169922, -104.97953033447266], [39.69367599487305, -104.97943115234375], [39.69364929199219, -104.97940063476562], [39.69361114501953, -104.97936248779297], [39.69355010986328, -104.97931671142578], [39.6934814453125, -104.9792709350586], [39.69330978393555, -104.97918701171875], [39.69325637817383, -104.97914123535156], [39.693199157714844, -104.97909545898438], [39.693145751953125, -104.97903442382812], [39.693092346191406, -104.97897338867188], [39.69303512573242, -104.97886657714844], [39.69300079345703, -104.97877502441406], [39.69298553466797, -104.97871398925781], [39.69298553466797, -104.97850036621094], [39.69298553466797, -104.97827911376953], [39.69298553466797, -104.97792053222656], [39.6929931640625, -104.9774398803711], [39.6929931640625, -104.9773941040039], [39.6929931640625, -104.9772720336914], [39.692989349365234, -104.97704315185547], [39.692989349365234, -104.97694396972656], [39.692989349365234, -104.97685241699219], [39.69298553466797, -104.97636413574219], [39.6929817199707, -104.97577667236328]],\n", + " var poly_line_56cf8eeef8ab28d03c12d3b82b2ae93d = L.polyline(\n", + " [[39.77902603149414, -104.96916961669922], [39.7789306640625, -104.96929931640625], [39.778900146484375, -104.9693374633789], [39.77882766723633, -104.96943664550781], [39.778751373291016, -104.96954345703125], [39.7786979675293, -104.96961975097656], [39.77864456176758, -104.96971130371094], [39.77876281738281, -104.96937561035156], [39.77878952026367, -104.96929931640625], [39.778804779052734, -104.9692153930664], [39.77880096435547, -104.96912384033203], [39.778785705566406, -104.96903991699219], [39.77874755859375, -104.96894836425781], [39.778587341308594, -104.9686508178711], [39.778480529785156, -104.96852111816406], [39.77839660644531, -104.96841430664062], [39.778324127197266, -104.96851348876953], [39.778228759765625, -104.96863555908203], [39.778076171875, -104.96883392333984], [39.777626037597656, -104.96941375732422], [39.7774772644043, -104.96961212158203], [39.77703857421875, -104.97017669677734], [39.776737213134766, -104.97056579589844], [39.77666473388672, -104.97066497802734], [39.7766227722168, -104.97071838378906], [39.776371002197266, -104.97103881835938], [39.77608108520508, -104.9714126586914], [39.775978088378906, -104.97154998779297], [39.774810791015625, -104.97306060791016], [39.77475357055664, -104.97313690185547], [39.77467346191406, -104.97323608398438], [39.77459716796875, -104.97333526611328], [39.773738861083984, -104.97444915771484], [39.77363586425781, -104.97457885742188], [39.773353576660156, -104.97494506835938], [39.77303695678711, -104.97535705566406], [39.77297592163086, -104.9754409790039], [39.77290344238281, -104.97553253173828], [39.772544860839844, -104.97599029541016], [39.772335052490234, -104.97626495361328], [39.77207946777344, -104.97659301757812], [39.771976470947266, -104.97673034667969], [39.771705627441406, -104.97708129882812], [39.77125549316406, -104.97766876220703], [39.77039337158203, -104.9787826538086], [39.77033233642578, -104.9788589477539], [39.770263671875, -104.97895050048828], [39.769996643066406, -104.97929382324219], [39.76996994018555, -104.9793930053711], [39.76955032348633, -104.97993469238281], [39.769287109375, -104.98027801513672], [39.7691764831543, -104.98041534423828], [39.769039154052734, -104.98059844970703], [39.76881408691406, -104.98088836669922], [39.768733978271484, -104.98099517822266], [39.76864242553711, -104.98110961914062], [39.76858901977539, -104.9811782836914], [39.76840591430664, -104.98141479492188], [39.7678337097168, -104.98216247558594], [39.76764678955078, -104.9823989868164], [39.76701736450195, -104.98321533203125], [39.766876220703125, -104.9833984375], [39.766693115234375, -104.98363494873047], [39.766624450683594, -104.98372650146484], [39.76657485961914, -104.9837875366211], [39.76653289794922, -104.98384857177734], [39.766178131103516, -104.98429870605469], [39.766021728515625, -104.98450469970703], [39.76557159423828, -104.98507690429688], [39.76506423950195, -104.98573303222656], [39.76464080810547, -104.98627471923828], [39.764495849609375, -104.98646545410156], [39.76442337036133, -104.98655700683594], [39.764347076416016, -104.98664855957031], [39.763763427734375, -104.98738861083984], [39.76366424560547, -104.98750305175781], [39.763572692871094, -104.98760223388672], [39.76346969604492, -104.98770141601562], [39.76337814331055, -104.98778533935547], [39.76326370239258, -104.98786926269531], [39.76316452026367, -104.9879379272461], [39.76304626464844, -104.98800659179688], [39.762916564941406, -104.98807525634766], [39.762813568115234, -104.98812103271484], [39.76266860961914, -104.98816680908203], [39.76252746582031, -104.98819732666016], [39.762413024902344, -104.98820495605469], [39.762290954589844, -104.98821258544922], [39.76216125488281, -104.98821258544922], [39.762062072753906, -104.98820495605469], [39.76179885864258, -104.9881591796875], [39.76161575317383, -104.98812103271484], [39.76142501831055, -104.98808288574219], [39.76121520996094, -104.98804473876953], [39.75983428955078, -104.98776245117188], [39.75953674316406, -104.98770141601562], [39.75946807861328, -104.98763275146484], [39.75936508178711, -104.98761749267578], [39.7588996887207, -104.987548828125], [39.758426666259766, -104.98747253417969], [39.758270263671875, -104.9874496459961], [39.75812911987305, -104.98744201660156], [39.75796127319336, -104.98744201660156], [39.75767517089844, -104.9874267578125], [39.75761032104492, -104.9874267578125], [39.75736618041992, -104.98741912841797], [39.757179260253906, -104.98741149902344], [39.757102966308594, -104.98741149902344], [39.756961822509766, -104.98741149902344], [39.756805419921875, -104.9874038696289], [39.756404876708984, -104.9874038696289], [39.75601577758789, -104.9874038696289], [39.75578308105469, -104.98739624023438], [39.75563049316406, -104.98739624023438], [39.755496978759766, -104.98739624023438], [39.75507736206055, -104.98738861083984], [39.75468063354492, -104.98738861083984], [39.75453186035156, -104.98738098144531], [39.754398345947266, -104.98738098144531], [39.754364013671875, -104.98738098144531], [39.75428009033203, -104.98738861083984], [39.75388717651367, -104.98738861083984], [39.753604888916016, -104.98738861083984], [39.75343704223633, -104.98738861083984], [39.7532844543457, -104.98738861083984], [39.75323486328125, -104.98738861083984], [39.75295639038086, -104.98738861083984], [39.752933502197266, -104.98738861083984], [39.752662658691406, -104.98738861083984], [39.752262115478516, -104.98738861083984], [39.75224304199219, -104.98738098144531], [39.751827239990234, -104.98738098144531], [39.75173568725586, -104.98738098144531], [39.751583099365234, -104.98738098144531], [39.75148391723633, -104.98738098144531], [39.751014709472656, -104.98738098144531], [39.750850677490234, -104.98738098144531], [39.75082015991211, -104.98738098144531], [39.750736236572266, -104.98738098144531], [39.750389099121094, -104.98737335205078], [39.75023651123047, -104.98737335205078], [39.7501106262207, -104.98737335205078], [39.7497673034668, -104.98737335205078], [39.74958419799805, -104.98737335205078], [39.74951171875, -104.98737335205078], [39.749412536621094, -104.98737335205078], [39.74927520751953, -104.98738098144531], [39.749168395996094, -104.98738098144531], [39.74892044067383, -104.98738098144531], [39.74868392944336, -104.98738098144531], [39.74851989746094, -104.98738098144531], [39.74822235107422, -104.98738098144531], [39.74802017211914, -104.98738098144531], [39.7476692199707, -104.98738098144531], [39.74758529663086, -104.98738098144531], [39.74751281738281, -104.98738098144531], [39.7474365234375, -104.98738098144531], [39.747379302978516, -104.98738098144531], [39.74735641479492, -104.98738098144531], [39.74730682373047, -104.98738098144531], [39.74697494506836, -104.98738098144531], [39.746944427490234, -104.98738098144531], [39.74678039550781, -104.98738861083984], [39.74667739868164, -104.98738861083984], [39.74653244018555, -104.98738861083984], [39.746482849121094, -104.98738861083984], [39.74626541137695, -104.98738861083984], [39.74618148803711, -104.98738861083984], [39.74605178833008, -104.98738861083984], [39.745948791503906, -104.98738861083984], [39.74554443359375, -104.98738861083984], [39.745418548583984, -104.98738861083984], [39.74506378173828, -104.98739624023438], [39.74480438232422, -104.98739624023438], [39.74473571777344, -104.9874038696289], [39.74430847167969, -104.98739624023438], [39.743526458740234, -104.98739624023438], [39.74336242675781, -104.98739624023438], [39.74320602416992, -104.98739624023438], [39.74302291870117, -104.98739624023438], [39.74254608154297, -104.98739624023438], [39.74245834350586, -104.98739624023438], [39.74220275878906, -104.98739624023438], [39.74214172363281, -104.98738861083984], [39.74182891845703, -104.98738861083984], [39.74177932739258, -104.98738861083984], [39.7416877746582, -104.98738861083984], [39.74163818359375, -104.98738098144531], [39.74156188964844, -104.98738861083984], [39.74149703979492, -104.98738861083984], [39.741416931152344, -104.98738861083984], [39.74137496948242, -104.98738861083984], [39.74129867553711, -104.98738861083984], [39.7410888671875, -104.98738861083984], [39.74089050292969, -104.98739624023438], [39.740875244140625, -104.98739624023438], [39.74071502685547, -104.98739624023438], [39.740631103515625, -104.98739624023438], [39.740478515625, -104.98739624023438], [39.74021530151367, -104.9874038696289], [39.74014663696289, -104.9874038696289], [39.74000930786133, -104.9874038696289], [39.73992919921875, -104.9874038696289], [39.73912048339844, -104.98739624023438], [39.73855209350586, -104.98739624023438], [39.73845672607422, -104.98739624023438], [39.73835372924805, -104.98739624023438], [39.73801040649414, -104.98739624023438], [39.73710250854492, -104.98738861083984], [39.73695373535156, -104.98738861083984], [39.736900329589844, -104.98738861083984], [39.736846923828125, -104.98738861083984], [39.73676300048828, -104.98738861083984], [39.73644256591797, -104.98739624023438], [39.73640441894531, -104.98739624023438], [39.736244201660156, -104.98739624023438], [39.73619079589844, -104.98739624023438], [39.73557662963867, -104.98739624023438], [39.73536682128906, -104.98739624023438], [39.73527526855469, -104.98739624023438], [39.73518753051758, -104.98739624023438], [39.73509216308594, -104.98739624023438], [39.73466110229492, -104.98739624023438], [39.734039306640625, -104.9874038696289], [39.73394775390625, -104.98739624023438], [39.733848571777344, -104.9874038696289], [39.73375701904297, -104.9874038696289], [39.73365020751953, -104.9874038696289], [39.73337173461914, -104.9874038696289], [39.733306884765625, -104.9874038696289], [39.732810974121094, -104.9874038696289], [39.732444763183594, -104.98741149902344], [39.732147216796875, -104.98741149902344], [39.7320556640625, -104.98741149902344], [39.731964111328125, -104.98741149902344], [39.73185348510742, -104.98741149902344], [39.73183059692383, -104.98741149902344], [39.73168182373047, -104.98741149902344], [39.73122024536133, -104.98741912841797], [39.731178283691406, -104.98741912841797], [39.73095703125, -104.98741912841797], [39.73054885864258, -104.98741912841797], [39.73045349121094, -104.98741912841797], [39.73037338256836, -104.98741912841797], [39.730010986328125, -104.98741912841797], [39.729522705078125, -104.98741912841797], [39.72943115234375, -104.98741912841797], [39.72917175292969, -104.98741912841797], [39.72908020019531, -104.98741912841797], [39.7289924621582, -104.98741912841797], [39.728668212890625, -104.98741912841797], [39.72862243652344, -104.98741912841797], [39.72829055786133, -104.98741912841797], [39.727420806884766, -104.98741912841797], [39.727298736572266, -104.98741912841797], [39.72718048095703, -104.98741912841797], [39.72665786743164, -104.9874267578125], [39.72663497924805, -104.9874267578125], [39.726600646972656, -104.9874267578125], [39.726375579833984, -104.98743438720703], [39.726226806640625, -104.98744201660156], [39.726112365722656, -104.98744201660156], [39.72574996948242, -104.98745727539062], [39.72563934326172, -104.98746490478516], [39.72555923461914, -104.98746490478516], [39.725223541259766, -104.98747253417969], [39.7251091003418, -104.98747253417969], [39.724884033203125, -104.98748016357422], [39.72444152832031, -104.98748779296875], [39.72422409057617, -104.98748779296875], [39.72414779663086, -104.98748779296875], [39.72405242919922, -104.98748779296875], [39.72385025024414, -104.98748779296875], [39.72378921508789, -104.98748779296875], [39.72360610961914, -104.98748779296875], [39.72319793701172, -104.98750305175781], [39.723026275634766, -104.98751068115234], [39.722869873046875, -104.98751068115234], [39.72262191772461, -104.98751068115234], [39.72255325317383, -104.98751068115234], [39.72245788574219, -104.98751068115234], [39.72215270996094, -104.98750305175781], [39.72206497192383, -104.98750305175781], [39.72195816040039, -104.98749542236328], [39.7216911315918, -104.98748779296875], [39.72103500366211, -104.98748779296875], [39.720943450927734, -104.98748779296875], [39.720863342285156, -104.98748779296875], [39.71990966796875, -104.98748779296875], [39.71987533569336, -104.98748779296875], [39.719451904296875, -104.98748779296875], [39.7193603515625, -104.98748779296875], [39.71928787231445, -104.98748779296875], [39.71902847290039, -104.98748779296875], [39.71844482421875, -104.98748779296875], [39.71834945678711, -104.98748779296875], [39.7182731628418, -104.98748779296875], [39.71819305419922, -104.98748779296875], [39.71754455566406, -104.98748779296875], [39.717464447021484, -104.98748779296875], [39.7174186706543, -104.98748779296875], [39.716644287109375, -104.98748779296875], [39.71656799316406, -104.98748779296875], [39.71649932861328, -104.98748779296875], [39.716224670410156, -104.98749542236328], [39.71613311767578, -104.98749542236328], [39.71575927734375, -104.98750305175781], [39.71568298339844, -104.98750305175781], [39.715606689453125, -104.98750305175781], [39.71514892578125, -104.98751831054688], [39.714847564697266, -104.98753356933594], [39.71476364135742, -104.98753356933594], [39.71470260620117, -104.98753356933594], [39.713897705078125, -104.987548828125], [39.713294982910156, -104.987548828125], [39.71319580078125, -104.987548828125], [39.71306610107422, -104.98755645751953], [39.71297836303711, -104.98755645751953], [39.71291732788086, -104.98755645751953], [39.712486267089844, -104.98756408691406], [39.71209716796875, -104.9875717163086], [39.71201705932617, -104.98757934570312], [39.71174240112305, -104.98757934570312], [39.711578369140625, -104.98758697509766], [39.711280822753906, -104.98759460449219], [39.71114730834961, -104.98759460449219], [39.71101379394531, -104.98759460449219], [39.71085739135742, -104.98759460449219], [39.71025085449219, -104.98760986328125], [39.71002960205078, -104.98760986328125], [39.70989227294922, -104.98761749267578], [39.70948028564453, -104.98761749267578], [39.70942306518555, -104.98760986328125], [39.70934295654297, -104.98761749267578], [39.709259033203125, -104.98761749267578], [39.70914840698242, -104.98762512207031], [39.7091064453125, -104.98762512207031], [39.70846939086914, -104.9876480102539], [39.70835876464844, -104.9876480102539], [39.70762634277344, -104.9876480102539], [39.707542419433594, -104.9876480102539], [39.707462310791016, -104.98764038085938], [39.7066535949707, -104.98760223388672], [39.70616912841797, -104.98758697509766], [39.705841064453125, -104.9875717163086], [39.70573806762695, -104.98756408691406], [39.705665588378906, -104.98755645751953], [39.705406188964844, -104.98754119873047], [39.705223083496094, -104.98753356933594], [39.705101013183594, -104.9875259399414], [39.704872131347656, -104.9875259399414], [39.7047119140625, -104.9875259399414], [39.704627990722656, -104.98751831054688], [39.70394515991211, -104.98751068115234], [39.703880310058594, -104.98751068115234], [39.70368194580078, -104.98750305175781], [39.70335006713867, -104.98750305175781], [39.70302963256836, -104.98750305175781], [39.7028694152832, -104.98750305175781], [39.70270538330078, -104.98751831054688], [39.70259475708008, -104.9875259399414], [39.702491760253906, -104.98753356933594], [39.70227813720703, -104.987548828125], [39.7021369934082, -104.98755645751953], [39.70204162597656, -104.98756408691406], [39.700843811035156, -104.98760986328125], [39.700782775878906, -104.98749542236328], [39.70073318481445, -104.9874038696289], [39.700687408447266, -104.98731994628906], [39.700660705566406, -104.98727416992188], [39.70061111450195, -104.9871826171875], [39.70054626464844, -104.98707580566406], [39.70036315917969, -104.98675537109375], [39.70024490356445, -104.986572265625], [39.70008850097656, -104.98636627197266], [39.700042724609375, -104.98631286621094], [39.69866180419922, -104.9847412109375], [39.6981086730957, -104.98410034179688], [39.69713592529297, -104.98299407958984], [39.69563674926758, -104.98123168945312], [39.6947135925293, -104.9800796508789], [39.69377136230469, -104.97888946533203], [39.693267822265625, -104.97833251953125], [39.6928596496582, -104.9778823852539], [39.692665100097656, -104.97766876220703], [39.69175720214844, -104.97666931152344], [39.691261291503906, -104.97602081298828], [39.690696716308594, -104.97518920898438]],\n", " {"bubblingMouseEvents": true, "color": "green", "dashArray": null, "dashOffset": null, "fill": false, "fillColor": "green", "fillOpacity": 0.2, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "noClip": false, "opacity": 0.8, "smoothFactor": 1.0, "stroke": true, "weight": 10}\n", - " ).addTo(map_888d2b7c796324cd21bd624232634cae);\n", + " ).addTo(map_39f1ea5243caaf099c00126499f18faa);\n", " \n", " \n", - " poly_line_af3045b9748ae1aa1d396d19f636ae79.bindTooltip(\n", + " poly_line_56cf8eeef8ab28d03c12d3b82b2ae93d.bindTooltip(\n", " `<div>\n", " Least Energy\n", " </div>`,\n", @@ -854,19 +850,19 @@ " );\n", " \n", " \n", - " var marker_2d7e638d42b3fc451e7958bb01d0fba1 = L.marker(\n", + " var marker_441f1c1b2dc46b965aa8e6798ba49eea = L.marker(\n", " [39.77902603149414, -104.96916961669922],\n", " {}\n", - " ).addTo(map_888d2b7c796324cd21bd624232634cae);\n", + " ).addTo(map_39f1ea5243caaf099c00126499f18faa);\n", " \n", " \n", - " var icon_25e0ddedaf7faa626f0847983003fba9 = L.AwesomeMarkers.icon(\n", + " var icon_cd8f03282402e724218731f85d4e8f3a = L.AwesomeMarkers.icon(\n", " {"extraClasses": "fa-rotate-0", "icon": "circle", "iconColor": "white", "markerColor": "green", "prefix": "fa"}\n", " );\n", - " marker_2d7e638d42b3fc451e7958bb01d0fba1.setIcon(icon_25e0ddedaf7faa626f0847983003fba9);\n", + " marker_441f1c1b2dc46b965aa8e6798ba49eea.setIcon(icon_cd8f03282402e724218731f85d4e8f3a);\n", " \n", " \n", - " marker_2d7e638d42b3fc451e7958bb01d0fba1.bindTooltip(\n", + " marker_441f1c1b2dc46b965aa8e6798ba49eea.bindTooltip(\n", " `<div>\n", " Origin\n", " </div>`,\n", @@ -874,19 +870,19 @@ " );\n", " \n", " \n", - " var marker_63365bdaf6254712f29b3e6af493a96e = L.marker(\n", - " [39.6929817199707, -104.97577667236328],\n", + " var marker_8f6bd8c9fd4e584c0c1cb1e1c11fa95c = L.marker(\n", + " [39.690696716308594, -104.97518920898438],\n", " {}\n", - " ).addTo(map_888d2b7c796324cd21bd624232634cae);\n", + " ).addTo(map_39f1ea5243caaf099c00126499f18faa);\n", " \n", " \n", - " var icon_78ddc759c46bd87118c394283d8b33f7 = L.AwesomeMarkers.icon(\n", + " var icon_98f9141b06f2fc46ca503928e9bf70cf = L.AwesomeMarkers.icon(\n", " {"extraClasses": "fa-rotate-0", "icon": "circle", "iconColor": "white", "markerColor": "red", "prefix": "fa"}\n", " );\n", - " marker_63365bdaf6254712f29b3e6af493a96e.setIcon(icon_78ddc759c46bd87118c394283d8b33f7);\n", + " marker_8f6bd8c9fd4e584c0c1cb1e1c11fa95c.setIcon(icon_98f9141b06f2fc46ca503928e9bf70cf);\n", " \n", " \n", - " marker_63365bdaf6254712f29b3e6af493a96e.bindTooltip(\n", + " marker_8f6bd8c9fd4e584c0c1cb1e1c11fa95c.bindTooltip(\n", " `<div>\n", " Destination\n", " </div>`,\n", @@ -894,13 +890,13 @@ " );\n", " \n", " \n", - " var poly_line_aafd170c03044eb83db83ad10070d390 = L.polyline(\n", - " [[39.77902603149414, -104.96916961669922], [39.77896499633789, -104.96910095214844], [39.77878189086914, -104.96887969970703], [39.778751373291016, -104.96884155273438], [39.778587341308594, -104.9686508178711], [39.778480529785156, -104.96852111816406], [39.77839660644531, -104.96841430664062], [39.778324127197266, -104.96851348876953], [39.778228759765625, -104.96863555908203], [39.778076171875, -104.96883392333984], [39.777626037597656, -104.96941375732422], [39.7774772644043, -104.96961212158203], [39.77703857421875, -104.97017669677734], [39.776737213134766, -104.97056579589844], [39.77666473388672, -104.97066497802734], [39.7766227722168, -104.97071838378906], [39.776371002197266, -104.97103881835938], [39.77608108520508, -104.9714126586914], [39.775978088378906, -104.97154998779297], [39.774810791015625, -104.97306060791016], [39.77475357055664, -104.97313690185547], [39.77467346191406, -104.97323608398438], [39.77459716796875, -104.97333526611328], [39.773738861083984, -104.97444915771484], [39.77363586425781, -104.97457885742188], [39.773353576660156, -104.97494506835938], [39.77303695678711, -104.97535705566406], [39.77297592163086, -104.9754409790039], [39.77287673950195, -104.97531127929688], [39.77263259887695, -104.9749984741211], [39.77257537841797, -104.97492218017578], [39.77229690551758, -104.97456359863281], [39.77223587036133, -104.9744873046875], [39.77199935913086, -104.97418212890625], [39.77191162109375, -104.97406768798828], [39.77157974243164, -104.9736328125], [39.77155303955078, -104.9736328125], [39.77154541015625, -104.97361755371094], [39.7712516784668, -104.97325897216797], [39.77125549316406, -104.97321319580078], [39.77090072631836, -104.97274017333984], [39.7706184387207, -104.97236633300781], [39.77056884765625, -104.97230529785156], [39.77048110961914, -104.97219848632812], [39.77042770385742, -104.9721450805664], [39.7703742980957, -104.97209167480469], [39.77033233642578, -104.97205352783203], [39.770233154296875, -104.97198486328125], [39.770118713378906, -104.9721450805664], [39.76996994018555, -104.97232818603516], [39.76978302001953, -104.97257232666016], [39.76957321166992, -104.97283172607422], [39.76926803588867, -104.97325134277344], [39.76918411254883, -104.97335815429688], [39.76904296875, -104.97335815429688], [39.76840591430664, -104.97335052490234], [39.76824188232422, -104.97335052490234], [39.7681770324707, -104.97335052490234], [39.7680549621582, -104.97335052490234], [39.7677001953125, -104.97335052490234], [39.767547607421875, -104.97335052490234], [39.7670783996582, -104.97335052490234], [39.76704788208008, -104.97335052490234], [39.766971588134766, -104.97335052490234], [39.76690673828125, -104.97335052490234], [39.76670455932617, -104.97335052490234], [39.76658248901367, -104.97335052490234], [39.766502380371094, -104.97335052490234], [39.76637649536133, -104.97335052490234], [39.766136169433594, -104.97335052490234], [39.76605987548828, -104.97335052490234], [39.765865325927734, -104.97335052490234], [39.76577377319336, -104.97335052490234], [39.76567459106445, -104.97335052490234], [39.76523208618164, -104.97335052490234], [39.76495361328125, -104.97335052490234], [39.764835357666016, -104.97335052490234], [39.7646598815918, -104.97335052490234], [39.764591217041016, -104.97335052490234], [39.7645149230957, -104.97335052490234], [39.764427185058594, -104.97335052490234], [39.76421356201172, -104.97335052490234], [39.764034271240234, -104.97335052490234], [39.76380920410156, -104.97335052490234], [39.763580322265625, -104.97335052490234], [39.76325988769531, -104.97335052490234], [39.76316833496094, -104.97339630126953], [39.763118743896484, -104.97339630126953], [39.76306915283203, -104.97335052490234], [39.762874603271484, -104.97335815429688], [39.762454986572266, -104.97335815429688], [39.76237869262695, -104.97335815429688], [39.76214599609375, -104.97335052490234], [39.762054443359375, -104.97335052490234], [39.76194381713867, -104.97335052490234], [39.76179122924805, -104.97335052490234], [39.76169967651367, -104.97335052490234], [39.76160430908203, -104.97335052490234], [39.76118087768555, -104.97335052490234], [39.76103973388672, -104.97335052490234], [39.76084518432617, -104.97335052490234], [39.76076126098633, -104.97335052490234], [39.76066589355469, -104.97335052490234], [39.760440826416016, -104.97335052490234], [39.76033401489258, -104.97335052490234], [39.759613037109375, -104.97335052490234], [39.7595100402832, -104.97335052490234], [39.75939178466797, -104.97339630126953], [39.759151458740234, -104.97339630126953], [39.75912094116211, -104.97335052490234], [39.759010314941406, -104.97335052490234], [39.758827209472656, -104.97335052490234], [39.75831604003906, -104.97335052490234], [39.75823211669922, -104.97335052490234], [39.758174896240234, -104.97335052490234], [39.75764083862305, -104.97335815429688], [39.7572021484375, -104.97335815429688], [39.75708770751953, -104.97335815429688], [39.75699234008789, -104.97335815429688], [39.75688171386719, -104.97335815429688], [39.75673294067383, -104.97335815429688], [39.75627899169922, -104.97335815429688], [39.75574493408203, -104.97335815429688], [39.75540542602539, -104.97335815429688], [39.75531005859375, -104.97335815429688], [39.75495147705078, -104.97335815429688], [39.75469970703125, -104.97335815429688], [39.754547119140625, -104.97335815429688], [39.75442886352539, -104.97335815429688], [39.753578186035156, -104.97335815429688], [39.75333786010742, -104.97335815429688], [39.75325012207031, -104.97335815429688], [39.75314712524414, -104.97335815429688], [39.75208282470703, -104.97335815429688], [39.751991271972656, -104.97335815429688], [39.751895904541016, -104.97335815429688], [39.75139236450195, -104.9733657836914], [39.75082778930664, -104.9733657836914], [39.750732421875, -104.9733657836914], [39.75063705444336, -104.9733657836914], [39.750423431396484, -104.9733657836914], [39.750282287597656, -104.9733657836914], [39.75018310546875, -104.9733657836914], [39.749576568603516, -104.9733657836914], [39.74947738647461, -104.9733657836914], [39.74938201904297, -104.9733657836914], [39.74884033203125, -104.9733657836914], [39.74821853637695, -104.97337341308594], [39.74812698364258, -104.97337341308594], [39.748016357421875, -104.97337341308594], [39.747798919677734, -104.97337341308594], [39.74757766723633, -104.97337341308594], [39.74747085571289, -104.97337341308594], [39.74736785888672, -104.97337341308594], [39.74721908569336, -104.97337341308594], [39.747066497802734, -104.97337341308594], [39.746952056884766, -104.97337341308594], [39.746864318847656, -104.97337341308594], [39.74663162231445, -104.97337341308594], [39.746551513671875, -104.97338104248047], [39.746482849121094, -104.97338104248047], [39.7460823059082, -104.97338104248047], [39.74594497680664, -104.97338104248047], [39.74583435058594, -104.97338104248047], [39.74509048461914, -104.97340393066406], [39.745052337646484, -104.97340393066406], [39.745018005371094, -104.97344207763672], [39.744972229003906, -104.97344970703125], [39.744937896728516, -104.97344970703125], [39.744834899902344, -104.97339630126953], [39.744834899902344, -104.97355651855469], [39.744834899902344, -104.97415924072266], [39.74483871459961, -104.97454833984375], [39.74483871459961, -104.97476196289062], [39.74464416503906, -104.97476196289062], [39.744606018066406, -104.97476196289062], [39.74433517456055, -104.97476959228516], [39.74381637573242, -104.97476959228516], [39.74373245239258, -104.97476959228516], [39.743377685546875, -104.97477722167969], [39.74324417114258, -104.97477722167969], [39.743133544921875, -104.97477722167969], [39.7426872253418, -104.97477722167969], [39.74175262451172, -104.97477722167969], [39.74166488647461, -104.97477722167969], [39.74156951904297, -104.97477722167969], [39.7412109375, -104.97478485107422], [39.740718841552734, -104.97479248046875], [39.74055862426758, -104.97479248046875], [39.74032211303711, -104.97479248046875], [39.74012756347656, -104.97480010986328], [39.740020751953125, -104.97480010986328], [39.740020751953125, -104.9746322631836], [39.740020751953125, -104.97451782226562], [39.74002456665039, -104.97415924072266], [39.73991775512695, -104.97415924072266], [39.73970031738281, -104.97415924072266], [39.73955535888672, -104.97415161132812], [39.739315032958984, -104.97415161132812], [39.73896789550781, -104.97415161132812], [39.738609313964844, -104.97415161132812], [39.73850631713867, -104.9741439819336], [39.73841857910156, -104.9741439819336], [39.73833465576172, -104.9741439819336], [39.736942291259766, -104.9741439819336], [39.736881256103516, -104.9741439819336], [39.73681640625, -104.9741439819336], [39.73567581176758, -104.97412109375], [39.735252380371094, -104.97411346435547], [39.735164642333984, -104.97411346435547], [39.735069274902344, -104.97411346435547], [39.73379898071289, -104.97410583496094], [39.73370361328125, -104.97410583496094], [39.733612060546875, -104.97410583496094], [39.73240280151367, -104.97410583496094], [39.732357025146484, -104.97410583496094], [39.73214340209961, -104.97410583496094], [39.7320556640625, -104.97410583496094], [39.73196029663086, -104.97410583496094], [39.731422424316406, -104.97410583496094], [39.73128890991211, -104.97410583496094], [39.730960845947266, -104.97410583496094], [39.73088455200195, -104.97410583496094], [39.73067855834961, -104.97410583496094], [39.73054504394531, -104.97410583496094], [39.7304573059082, -104.97410583496094], [39.730369567871094, -104.97410583496094], [39.73027420043945, -104.97410583496094], [39.73003387451172, -104.97410583496094], [39.729976654052734, -104.97410583496094], [39.729896545410156, -104.97410583496094], [39.72964859008789, -104.97410583496094], [39.7294807434082, -104.97410583496094], [39.729434967041016, -104.97410583496094], [39.72917175292969, -104.97410583496094], [39.72907257080078, -104.97410583496094], [39.72898864746094, -104.97410583496094], [39.727378845214844, -104.9740982055664], [39.72727966308594, -104.9740982055664], [39.727195739746094, -104.9740982055664], [39.7259635925293, -104.9740982055664], [39.72566604614258, -104.97409057617188], [39.7255859375, -104.97409057617188], [39.72549819946289, -104.97409057617188], [39.725337982177734, -104.97409057617188], [39.7252082824707, -104.97409057617188], [39.724693298339844, -104.97409057617188], [39.72453689575195, -104.97409057617188], [39.72406768798828, -104.97408294677734], [39.72374725341797, -104.97408294677734], [39.72247314453125, -104.97408294677734], [39.72218322753906, -104.97408294677734], [39.72205352783203, -104.97408294677734], [39.721946716308594, -104.97408294677734], [39.72013473510742, -104.97406768798828], [39.719642639160156, -104.97406005859375], [39.71931457519531, -104.97406005859375], [39.71918869018555, -104.97406005859375], [39.718971252441406, -104.97405242919922], [39.71888732910156, -104.97404479980469], [39.71880340576172, -104.97403717041016], [39.71875, -104.97402954101562], [39.71870422363281, -104.9740219116211], [39.718650817871094, -104.97401428222656], [39.71857452392578, -104.97399139404297], [39.718505859375, -104.97396850585938], [39.71845245361328, -104.97393798828125], [39.71842956542969, -104.97392272949219], [39.71839141845703, -104.97390747070312], [39.71834945678711, -104.97386932373047], [39.718318939208984, -104.97382354736328], [39.71824264526367, -104.97368621826172], [39.71818923950195, -104.97358703613281], [39.71816635131836, -104.97354888916016], [39.71815490722656, -104.9735336303711], [39.71811294555664, -104.97348022460938], [39.71806335449219, -104.97343444824219], [39.71802520751953, -104.97341918945312], [39.717979431152344, -104.97340393066406], [39.717952728271484, -104.97339630126953], [39.71792221069336, -104.973388671875], [39.717899322509766, -104.973388671875], [39.71767807006836, -104.973388671875], [39.716922760009766, -104.973388671875], [39.71653366088867, -104.97339630126953], [39.71645736694336, -104.97339630126953], [39.71589660644531, -104.97339630126953], [39.71546936035156, -104.97341918945312], [39.71541976928711, -104.97341918945312], [39.71538543701172, -104.97342681884766], [39.71536636352539, -104.97342681884766], [39.71527862548828, -104.97342681884766], [39.7148551940918, -104.97344970703125], [39.71479415893555, -104.97344970703125], [39.71472930908203, -104.97345733642578], [39.714656829833984, -104.97344970703125], [39.71451950073242, -104.97344207763672], [39.71427917480469, -104.9734115600586], [39.712989807128906, -104.97340393066406], [39.71291732788086, -104.97340393066406], [39.71285629272461, -104.97340393066406], [39.71247482299805, -104.97340393066406], [39.711551666259766, -104.97340393066406], [39.71137237548828, -104.97340393066406], [39.711204528808594, -104.97340393066406], [39.71110534667969, -104.97340393066406], [39.711021423339844, -104.97340393066406], [39.7109489440918, -104.97340393066406], [39.710845947265625, -104.97340393066406], [39.709381103515625, -104.973388671875], [39.70929718017578, -104.973388671875], [39.707820892333984, -104.973388671875], [39.707557678222656, -104.973388671875], [39.70749282836914, -104.973388671875], [39.707420349121094, -104.973388671875], [39.70706558227539, -104.97338104248047], [39.70566940307617, -104.97337341308594], [39.70392990112305, -104.973388671875], [39.70386505126953, -104.973388671875], [39.70379638671875, -104.973388671875], [39.70212173461914, -104.97339630126953], [39.70206069946289, -104.97339630126953], [39.70030212402344, -104.97339630126953], [39.70021057128906, -104.97340393066406], [39.700138092041016, -104.97339630126953], [39.698429107666016, -104.97340393066406], [39.69660949707031, -104.9734115600586], [39.69625473022461, -104.97341918945312], [39.694740295410156, -104.97341918945312], [39.694149017333984, -104.97343444824219], [39.69339370727539, -104.97343444824219], [39.69325256347656, -104.97343444824219], [39.69306564331055, -104.97342681884766], [39.6929817199707, -104.97342681884766], [39.6929817199707, -104.97357177734375], [39.6929817199707, -104.97403717041016], [39.6929817199707, -104.974609375], [39.69298553466797, -104.97517395019531], [39.6929817199707, -104.97577667236328]],\n", + " var poly_line_947bbf6845e2c3500bd9720889a18a53 = L.polyline(\n", + " [[39.77902603149414, -104.96916961669922], [39.7789306640625, -104.96929931640625], [39.778900146484375, -104.9693374633789], [39.77882766723633, -104.96943664550781], [39.778751373291016, -104.96954345703125], [39.7786979675293, -104.96961975097656], [39.77864456176758, -104.96971130371094], [39.77876281738281, -104.96937561035156], [39.77878952026367, -104.96929931640625], [39.778804779052734, -104.9692153930664], [39.77880096435547, -104.96912384033203], [39.778785705566406, -104.96903991699219], [39.77874755859375, -104.96894836425781], [39.778587341308594, -104.9686508178711], [39.778480529785156, -104.96852111816406], [39.77839660644531, -104.96841430664062], [39.778324127197266, -104.96851348876953], [39.778228759765625, -104.96863555908203], [39.778076171875, -104.96883392333984], [39.777626037597656, -104.96941375732422], [39.7774772644043, -104.96961212158203], [39.77703857421875, -104.97017669677734], [39.776737213134766, -104.97056579589844], [39.77666473388672, -104.97066497802734], [39.7766227722168, -104.97071838378906], [39.776371002197266, -104.97103881835938], [39.77608108520508, -104.9714126586914], [39.775978088378906, -104.97154998779297], [39.774810791015625, -104.97306060791016], [39.77475357055664, -104.97313690185547], [39.77467346191406, -104.97323608398438], [39.77459716796875, -104.97333526611328], [39.773738861083984, -104.97444915771484], [39.77363586425781, -104.97457885742188], [39.773353576660156, -104.97494506835938], [39.77303695678711, -104.97535705566406], [39.77297592163086, -104.9754409790039], [39.77290344238281, -104.97553253173828], [39.772544860839844, -104.97599029541016], [39.772335052490234, -104.97626495361328], [39.77207946777344, -104.97659301757812], [39.771976470947266, -104.97673034667969], [39.771705627441406, -104.97708129882812], [39.77125549316406, -104.97766876220703], [39.77039337158203, -104.9787826538086], [39.77033233642578, -104.9788589477539], [39.770263671875, -104.97895050048828], [39.769996643066406, -104.97929382324219], [39.76996994018555, -104.9793930053711], [39.76955032348633, -104.97993469238281], [39.769287109375, -104.98027801513672], [39.7691764831543, -104.98041534423828], [39.769039154052734, -104.98059844970703], [39.76881408691406, -104.98088836669922], [39.768733978271484, -104.98099517822266], [39.76864242553711, -104.98110961914062], [39.76858901977539, -104.9811782836914], [39.76840591430664, -104.98141479492188], [39.7678337097168, -104.98216247558594], [39.76764678955078, -104.9823989868164], [39.76701736450195, -104.98321533203125], [39.766876220703125, -104.9833984375], [39.766693115234375, -104.98363494873047], [39.766624450683594, -104.98372650146484], [39.76657485961914, -104.9837875366211], [39.76653289794922, -104.98384857177734], [39.766178131103516, -104.98429870605469], [39.766021728515625, -104.98450469970703], [39.76557159423828, -104.98507690429688], [39.76506423950195, -104.98573303222656], [39.76464080810547, -104.98627471923828], [39.764495849609375, -104.98646545410156], [39.76442337036133, -104.98655700683594], [39.764347076416016, -104.98664855957031], [39.763763427734375, -104.98738861083984], [39.76366424560547, -104.98750305175781], [39.763572692871094, -104.98760223388672], [39.76346969604492, -104.98770141601562], [39.76337814331055, -104.98778533935547], [39.76326370239258, -104.98786926269531], [39.76316452026367, -104.9879379272461], [39.76304626464844, -104.98800659179688], [39.762916564941406, -104.98807525634766], [39.762813568115234, -104.98812103271484], [39.76266860961914, -104.98816680908203], [39.76252746582031, -104.98819732666016], [39.762413024902344, -104.98820495605469], [39.762290954589844, -104.98821258544922], [39.76216125488281, -104.98821258544922], [39.762062072753906, -104.98820495605469], [39.76179885864258, -104.9881591796875], [39.76161575317383, -104.98812103271484], [39.76142501831055, -104.98808288574219], [39.76121520996094, -104.98804473876953], [39.75983428955078, -104.98776245117188], [39.75953674316406, -104.98770141601562], [39.75946807861328, -104.98763275146484], [39.75936508178711, -104.98761749267578], [39.7588996887207, -104.987548828125], [39.758426666259766, -104.98747253417969], [39.758270263671875, -104.9874496459961], [39.75812911987305, -104.98744201660156], [39.75796127319336, -104.98744201660156], [39.75767517089844, -104.9874267578125], [39.75761032104492, -104.9874267578125], [39.75736618041992, -104.98741912841797], [39.757179260253906, -104.98741149902344], [39.757102966308594, -104.98741149902344], [39.756961822509766, -104.98741149902344], [39.756805419921875, -104.9874038696289], [39.756404876708984, -104.9874038696289], [39.75601577758789, -104.9874038696289], [39.75578308105469, -104.98739624023438], [39.75563049316406, -104.98739624023438], [39.755496978759766, -104.98739624023438], [39.75507736206055, -104.98738861083984], [39.75468063354492, -104.98738861083984], [39.75453186035156, -104.98738098144531], [39.754398345947266, -104.98738098144531], [39.754364013671875, -104.98738098144531], [39.75428009033203, -104.98738861083984], [39.75388717651367, -104.98738861083984], [39.753604888916016, -104.98738861083984], [39.75343704223633, -104.98738861083984], [39.7532844543457, -104.98738861083984], [39.75323486328125, -104.98738861083984], [39.75295639038086, -104.98738861083984], [39.752933502197266, -104.98738861083984], [39.752662658691406, -104.98738861083984], [39.752262115478516, -104.98738861083984], [39.75224304199219, -104.98738098144531], [39.751827239990234, -104.98738098144531], [39.75173568725586, -104.98738098144531], [39.751583099365234, -104.98738098144531], [39.75148391723633, -104.98738098144531], [39.751014709472656, -104.98738098144531], [39.750850677490234, -104.98738098144531], [39.75082015991211, -104.98738098144531], [39.750736236572266, -104.98738098144531], [39.750389099121094, -104.98737335205078], [39.75023651123047, -104.98737335205078], [39.7501106262207, -104.98737335205078], [39.7497673034668, -104.98737335205078], [39.74958419799805, -104.98737335205078], [39.74951171875, -104.98737335205078], [39.749412536621094, -104.98737335205078], [39.74927520751953, -104.98738098144531], [39.749168395996094, -104.98738098144531], [39.74892044067383, -104.98738098144531], [39.74868392944336, -104.98738098144531], [39.74851989746094, -104.98738098144531], [39.74822235107422, -104.98738098144531], [39.74802017211914, -104.98738098144531], [39.7476692199707, -104.98738098144531], [39.74758529663086, -104.98738098144531], [39.74751281738281, -104.98738098144531], [39.7474365234375, -104.98738098144531], [39.747379302978516, -104.98738098144531], [39.74735641479492, -104.98738098144531], [39.74730682373047, -104.98738098144531], [39.74697494506836, -104.98738098144531], [39.746944427490234, -104.98738098144531], [39.74678039550781, -104.98738861083984], [39.74667739868164, -104.98738861083984], [39.74653244018555, -104.98738861083984], [39.746482849121094, -104.98738861083984], [39.74626541137695, -104.98738861083984], [39.74618148803711, -104.98738861083984], [39.74605178833008, -104.98738861083984], [39.745948791503906, -104.98738861083984], [39.74554443359375, -104.98738861083984], [39.745418548583984, -104.98738861083984], [39.74506378173828, -104.98739624023438], [39.74480438232422, -104.98739624023438], [39.74473571777344, -104.9874038696289], [39.74430847167969, -104.98739624023438], [39.743526458740234, -104.98739624023438], [39.74336242675781, -104.98739624023438], [39.74320602416992, -104.98739624023438], [39.74302291870117, -104.98739624023438], [39.74254608154297, -104.98739624023438], [39.74245834350586, -104.98739624023438], [39.74220275878906, -104.98739624023438], [39.74214172363281, -104.98738861083984], [39.74182891845703, -104.98738861083984], [39.74177932739258, -104.98738861083984], [39.7416877746582, -104.98738861083984], [39.74163818359375, -104.98738098144531], [39.74156188964844, -104.98738861083984], [39.74149703979492, -104.98738861083984], [39.741416931152344, -104.98738861083984], [39.74137496948242, -104.98738861083984], [39.74129867553711, -104.98738861083984], [39.7410888671875, -104.98738861083984], [39.74089050292969, -104.98739624023438], [39.740875244140625, -104.98739624023438], [39.74071502685547, -104.98739624023438], [39.740631103515625, -104.98739624023438], [39.740478515625, -104.98739624023438], [39.74021530151367, -104.9874038696289], [39.74014663696289, -104.9874038696289], [39.74000930786133, -104.9874038696289], [39.73992919921875, -104.9874038696289], [39.73912048339844, -104.98739624023438], [39.73855209350586, -104.98739624023438], [39.73845672607422, -104.98739624023438], [39.73835372924805, -104.98739624023438], [39.73801040649414, -104.98739624023438], [39.73710250854492, -104.98738861083984], [39.73695373535156, -104.98738861083984], [39.736900329589844, -104.98738861083984], [39.736846923828125, -104.98738861083984], [39.73676300048828, -104.98738861083984], [39.73644256591797, -104.98739624023438], [39.73640441894531, -104.98739624023438], [39.736244201660156, -104.98739624023438], [39.73619079589844, -104.98739624023438], [39.73557662963867, -104.98739624023438], [39.73536682128906, -104.98739624023438], [39.73527526855469, -104.98739624023438], [39.73518753051758, -104.98739624023438], [39.73509216308594, -104.98739624023438], [39.73466110229492, -104.98739624023438], [39.734039306640625, -104.9874038696289], [39.73394775390625, -104.98739624023438], [39.733848571777344, -104.9874038696289], [39.73375701904297, -104.9874038696289], [39.73365020751953, -104.9874038696289], [39.73337173461914, -104.9874038696289], [39.733306884765625, -104.9874038696289], [39.732810974121094, -104.9874038696289], [39.732444763183594, -104.98741149902344], [39.732147216796875, -104.98741149902344], [39.7320556640625, -104.98741149902344], [39.731964111328125, -104.98741149902344], [39.73185348510742, -104.98741149902344], [39.73183059692383, -104.98741149902344], [39.73168182373047, -104.98741149902344], [39.73122024536133, -104.98741912841797], [39.731178283691406, -104.98741912841797], [39.73095703125, -104.98741912841797], [39.73054885864258, -104.98741912841797], [39.73045349121094, -104.98741912841797], [39.73037338256836, -104.98741912841797], [39.730010986328125, -104.98741912841797], [39.729522705078125, -104.98741912841797], [39.72943115234375, -104.98741912841797], [39.72917175292969, -104.98741912841797], [39.72908020019531, -104.98741912841797], [39.7289924621582, -104.98741912841797], [39.728668212890625, -104.98741912841797], [39.72862243652344, -104.98741912841797], [39.72829055786133, -104.98741912841797], [39.727420806884766, -104.98741912841797], [39.727298736572266, -104.98741912841797], [39.72718048095703, -104.98741912841797], [39.72665786743164, -104.9874267578125], [39.72663497924805, -104.9874267578125], [39.726600646972656, -104.9874267578125], [39.726375579833984, -104.98743438720703], [39.726226806640625, -104.98744201660156], [39.726112365722656, -104.98744201660156], [39.72574996948242, -104.98745727539062], [39.72563934326172, -104.98746490478516], [39.72555923461914, -104.98746490478516], [39.725223541259766, -104.98747253417969], [39.7251091003418, -104.98747253417969], [39.724884033203125, -104.98748016357422], [39.72444152832031, -104.98748779296875], [39.72422409057617, -104.98748779296875], [39.72414779663086, -104.98748779296875], [39.72405242919922, -104.98748779296875], [39.72385025024414, -104.98748779296875], [39.72378921508789, -104.98748779296875], [39.72360610961914, -104.98748779296875], [39.72319793701172, -104.98750305175781], [39.723026275634766, -104.98751068115234], [39.722869873046875, -104.98751068115234], [39.72262191772461, -104.98751068115234], [39.72255325317383, -104.98751068115234], [39.72245788574219, -104.98751068115234], [39.72215270996094, -104.98750305175781], [39.72206497192383, -104.98750305175781], [39.72195816040039, -104.98749542236328], [39.7216911315918, -104.98748779296875], [39.72103500366211, -104.98748779296875], [39.720943450927734, -104.98748779296875], [39.720863342285156, -104.98748779296875], [39.71990966796875, -104.98748779296875], [39.71987533569336, -104.98748779296875], [39.719451904296875, -104.98748779296875], [39.7193603515625, -104.98748779296875], [39.71928787231445, -104.98748779296875], [39.71902847290039, -104.98748779296875], [39.71844482421875, -104.98748779296875], [39.71834945678711, -104.98748779296875], [39.7182731628418, -104.98748779296875], [39.71819305419922, -104.98748779296875], [39.71754455566406, -104.98748779296875], [39.717464447021484, -104.98748779296875], [39.7174186706543, -104.98748779296875], [39.716644287109375, -104.98748779296875], [39.71656799316406, -104.98748779296875], [39.71649932861328, -104.98748779296875], [39.716224670410156, -104.98749542236328], [39.71613311767578, -104.98749542236328], [39.71575927734375, -104.98750305175781], [39.71568298339844, -104.98750305175781], [39.715606689453125, -104.98750305175781], [39.71514892578125, -104.98751831054688], [39.714847564697266, -104.98753356933594], [39.71476364135742, -104.98753356933594], [39.71470260620117, -104.98753356933594], [39.713897705078125, -104.987548828125], [39.713294982910156, -104.987548828125], [39.71319580078125, -104.987548828125], [39.71306610107422, -104.98755645751953], [39.71297836303711, -104.98755645751953], [39.71291732788086, -104.98755645751953], [39.712486267089844, -104.98756408691406], [39.71209716796875, -104.9875717163086], [39.71201705932617, -104.98757934570312], [39.71174240112305, -104.98757934570312], [39.711578369140625, -104.98758697509766], [39.711280822753906, -104.98759460449219], [39.71114730834961, -104.98759460449219], [39.71101379394531, -104.98759460449219], [39.71085739135742, -104.98759460449219], [39.71025085449219, -104.98760986328125], [39.71002960205078, -104.98760986328125], [39.70989227294922, -104.98761749267578], [39.70948028564453, -104.98761749267578], [39.70942306518555, -104.98760986328125], [39.70934295654297, -104.98761749267578], [39.709259033203125, -104.98761749267578], [39.70914840698242, -104.98762512207031], [39.7091064453125, -104.98762512207031], [39.70846939086914, -104.9876480102539], [39.70835876464844, -104.9876480102539], [39.70762634277344, -104.9876480102539], [39.707542419433594, -104.9876480102539], [39.707462310791016, -104.98764038085938], [39.7066535949707, -104.98760223388672], [39.70616912841797, -104.98758697509766], [39.705841064453125, -104.9875717163086], [39.70573806762695, -104.98756408691406], [39.705665588378906, -104.98755645751953], [39.705406188964844, -104.98754119873047], [39.705223083496094, -104.98753356933594], [39.705101013183594, -104.9875259399414], [39.704872131347656, -104.9875259399414], [39.7047119140625, -104.9875259399414], [39.704627990722656, -104.98751831054688], [39.70394515991211, -104.98751068115234], [39.703880310058594, -104.98751068115234], [39.70368194580078, -104.98750305175781], [39.70335006713867, -104.98750305175781], [39.70302963256836, -104.98750305175781], [39.7028694152832, -104.98750305175781], [39.70270538330078, -104.98751831054688], [39.70259475708008, -104.9875259399414], [39.702491760253906, -104.98753356933594], [39.70227813720703, -104.987548828125], [39.7021369934082, -104.98755645751953], [39.70204162597656, -104.98756408691406], [39.700843811035156, -104.98760986328125], [39.700782775878906, -104.98749542236328], [39.70073318481445, -104.9874038696289], [39.700687408447266, -104.98731994628906], [39.700660705566406, -104.98727416992188], [39.70061111450195, -104.9871826171875], [39.70054626464844, -104.98707580566406], [39.70036315917969, -104.98675537109375], [39.70024490356445, -104.986572265625], [39.70008850097656, -104.98636627197266], [39.700042724609375, -104.98631286621094], [39.69866180419922, -104.9847412109375], [39.6981086730957, -104.98410034179688], [39.69713592529297, -104.98299407958984], [39.69563674926758, -104.98123168945312], [39.6947135925293, -104.9800796508789], [39.69377136230469, -104.97888946533203], [39.693267822265625, -104.97833251953125], [39.6928596496582, -104.9778823852539], [39.692665100097656, -104.97766876220703], [39.69175720214844, -104.97666931152344], [39.691261291503906, -104.97602081298828], [39.690696716308594, -104.97518920898438]],\n", " {"bubblingMouseEvents": true, "color": "blue", "dashArray": null, "dashOffset": null, "fill": false, "fillColor": "blue", "fillOpacity": 0.2, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "noClip": false, "opacity": 0.8, "smoothFactor": 1.0, "stroke": true, "weight": 10}\n", - " ).addTo(map_888d2b7c796324cd21bd624232634cae);\n", + " ).addTo(map_39f1ea5243caaf099c00126499f18faa);\n", " \n", " \n", - " poly_line_aafd170c03044eb83db83ad10070d390.bindTooltip(\n", + " poly_line_947bbf6845e2c3500bd9720889a18a53.bindTooltip(\n", " `<div>\n", " Least Cost\n", " </div>`,\n", @@ -908,19 +904,19 @@ " );\n", " \n", " \n", - " var marker_093f150b77eca9d2b0379945ab5409d4 = L.marker(\n", + " var marker_112097c6e7f1e540b461fec3e162a535 = L.marker(\n", " [39.77902603149414, -104.96916961669922],\n", " {}\n", - " ).addTo(map_888d2b7c796324cd21bd624232634cae);\n", + " ).addTo(map_39f1ea5243caaf099c00126499f18faa);\n", " \n", " \n", - " var icon_026af4387a3f287e391b8ff63b751d16 = L.AwesomeMarkers.icon(\n", + " var icon_30ae870074c39c09aa26d55a54d0e976 = L.AwesomeMarkers.icon(\n", " {"extraClasses": "fa-rotate-0", "icon": "circle", "iconColor": "white", "markerColor": "green", "prefix": "fa"}\n", " );\n", - " marker_093f150b77eca9d2b0379945ab5409d4.setIcon(icon_026af4387a3f287e391b8ff63b751d16);\n", + " marker_112097c6e7f1e540b461fec3e162a535.setIcon(icon_30ae870074c39c09aa26d55a54d0e976);\n", " \n", " \n", - " marker_093f150b77eca9d2b0379945ab5409d4.bindTooltip(\n", + " marker_112097c6e7f1e540b461fec3e162a535.bindTooltip(\n", " `<div>\n", " Origin\n", " </div>`,\n", @@ -928,19 +924,19 @@ " );\n", " \n", " \n", - " var marker_3b5534b989414d626e625d46b28df32b = L.marker(\n", - " [39.6929817199707, -104.97577667236328],\n", + " var marker_36c463901adb7b3ceb5420f28f4405d8 = L.marker(\n", + " [39.690696716308594, -104.97518920898438],\n", " {}\n", - " ).addTo(map_888d2b7c796324cd21bd624232634cae);\n", + " ).addTo(map_39f1ea5243caaf099c00126499f18faa);\n", " \n", " \n", - " var icon_0fae26d10d10ad30315220f8ba6c6b34 = L.AwesomeMarkers.icon(\n", + " var icon_5963772741febd25442cbe3cc953d28c = L.AwesomeMarkers.icon(\n", " {"extraClasses": "fa-rotate-0", "icon": "circle", "iconColor": "white", "markerColor": "red", "prefix": "fa"}\n", " );\n", - " marker_3b5534b989414d626e625d46b28df32b.setIcon(icon_0fae26d10d10ad30315220f8ba6c6b34);\n", + " marker_36c463901adb7b3ceb5420f28f4405d8.setIcon(icon_5963772741febd25442cbe3cc953d28c);\n", " \n", " \n", - " marker_3b5534b989414d626e625d46b28df32b.bindTooltip(\n", + " marker_36c463901adb7b3ceb5420f28f4405d8.bindTooltip(\n", " `<div>\n", " Destination\n", " </div>`,\n", @@ -951,10 +947,10 @@ "</html>\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen>" ], "text/plain": [ - "" + "" ] }, - "execution_count": 17, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -976,7 +972,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "id": "aa1e6b11", "metadata": {}, "outputs": [ @@ -1002,7 +998,7 @@ " <script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>\n", " <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/leaflet.css"/>\n", " <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css"/>\n", - " <link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"/>\n", + " <link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css"/>\n", " <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.2.0/css/all.min.css"/>\n", " <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>\n", " <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>\n", @@ -1010,7 +1006,7 @@ " <meta name="viewport" content="width=device-width,\n", " initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />\n", " <style>\n", - " #map_629bb259d75ff180ceb711ebfa96c189 {\n", + " #map_f99e0025f25ec785f8c8aa60379b5e2f {\n", " position: relative;\n", " width: 100.0%;\n", " height: 100.0%;\n", @@ -1024,16 +1020,16 @@ "<body>\n", " \n", " \n", - " <div class="folium-map" id="map_629bb259d75ff180ceb711ebfa96c189" ></div>\n", + " <div class="folium-map" id="map_f99e0025f25ec785f8c8aa60379b5e2f" ></div>\n", " \n", "</body>\n", "<script>\n", " \n", " \n", - " var map_629bb259d75ff180ceb711ebfa96c189 = L.map(\n", - " "map_629bb259d75ff180ceb711ebfa96c189",\n", + " var map_f99e0025f25ec785f8c8aa60379b5e2f = L.map(\n", + " "map_f99e0025f25ec785f8c8aa60379b5e2f",\n", " {\n", - " center: [39.736886978149414, -104.99258422851562],\n", + " center: [39.73574447631836, -104.99258422851562],\n", " crs: L.CRS.EPSG3857,\n", " zoom: 12,\n", " zoomControl: true,\n", @@ -1045,48 +1041,48 @@ "\n", " \n", " \n", - " var tile_layer_a41c112b6f13f51514d72f177f5b5733 = L.tileLayer(\n", + " var tile_layer_7050bdfec7ea04700311b7c5e271facf = L.tileLayer(\n", " "https://tile.openstreetmap.org/{z}/{x}/{y}.png",\n", " {"attribution": "\\u0026copy; \\u003ca href=\\"https://www.openstreetmap.org/copyright\\"\\u003eOpenStreetMap\\u003c/a\\u003e contributors", "detectRetina": false, "maxNativeZoom": 19, "maxZoom": 19, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", " );\n", " \n", " \n", - " tile_layer_a41c112b6f13f51514d72f177f5b5733.addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " tile_layer_7050bdfec7ea04700311b7c5e271facf.addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " map_629bb259d75ff180ceb711ebfa96c189.fitBounds(\n", - " [[39.6929817199707, -105.01837158203125], [39.780792236328125, -104.966796875]],\n", + " map_f99e0025f25ec785f8c8aa60379b5e2f.fitBounds(\n", + " [[39.690696716308594, -105.01837158203125], [39.780792236328125, -104.966796875]],\n", " {"maxZoom": 12}\n", " );\n", " \n", " \n", - " var poly_line_b5d0064dc06afe599b6fe424054dc1d9 = L.polyline(\n", - " [[39.77902603149414, -104.96916961669922], [39.77896499633789, -104.96910095214844], [39.77878189086914, -104.96887969970703], [39.778751373291016, -104.96884155273438], [39.778587341308594, -104.9686508178711], [39.778480529785156, -104.96852111816406], [39.77839660644531, -104.96841430664062], [39.77846908569336, -104.96832275390625], [39.77865982055664, -104.96807098388672], [39.778709411621094, -104.96791076660156], [39.77894592285156, -104.96761322021484], [39.77906799316406, -104.96745300292969], [39.77915954589844, -104.96732330322266], [39.7791862487793, -104.96728515625], [39.779232025146484, -104.96722412109375], [39.77926254272461, -104.96719360351562], [39.779293060302734, -104.9671630859375], [39.77932357788086, -104.96714782714844], [39.77938461303711, -104.96710968017578], [39.779441833496094, -104.96707916259766], [39.77951431274414, -104.96704864501953], [39.7796745300293, -104.96698760986328], [39.77983093261719, -104.9669418334961], [39.78031921386719, -104.96683502197266], [39.780364990234375, -104.9668197631836], [39.78050231933594, -104.966796875], [39.78049850463867, -104.96688079833984], [39.78049850463867, -104.96698760986328], [39.78049850463867, -104.96705627441406], [39.78049087524414, -104.96717834472656], [39.78046798706055, -104.96759033203125], [39.78045654296875, -104.96772003173828], [39.78042984008789, -104.96797180175781], [39.78041458129883, -104.96810913085938], [39.780372619628906, -104.96839904785156], [39.78034210205078, -104.96859741210938], [39.780296325683594, -104.96888732910156], [39.7802734375, -104.96903228759766], [39.78025436401367, -104.96917724609375], [39.780250549316406, -104.96920776367188], [39.780235290527344, -104.96934509277344], [39.78020095825195, -104.96965789794922], [39.78001403808594, -104.9715347290039], [39.77994155883789, -104.97315216064453], [39.77980422973633, -104.97496032714844], [39.7797737121582, -104.97691345214844], [39.7797737121582, -104.9772720336914], [39.7797737121582, -104.97753143310547], [39.7797737121582, -104.97764587402344], [39.779781341552734, -104.97801971435547], [39.77980041503906, -104.97874450683594], [39.77981948852539, -104.97929382324219], [39.77983093261719, -104.97946166992188], [39.77986526489258, -104.98001861572266], [39.77991485595703, -104.98080444335938], [39.779991149902344, -104.98214721679688], [39.78001403808594, -104.98335266113281], [39.7800178527832, -104.98450469970703], [39.78002166748047, -104.98558044433594], [39.780033111572266, -104.98602294921875], [39.7800407409668, -104.98613739013672], [39.780059814453125, -104.98633575439453], [39.780086517333984, -104.9865493774414], [39.780128479003906, -104.98677825927734], [39.780174255371094, -104.98695373535156], [39.78023910522461, -104.98715209960938], [39.780540466308594, -104.98787689208984], [39.78069305419922, -104.98828887939453], [39.78076934814453, -104.98860168457031], [39.780784606933594, -104.98871612548828], [39.780792236328125, -104.98896026611328], [39.78078079223633, -104.98912048339844], [39.780765533447266, -104.98928833007812], [39.78071975708008, -104.98950958251953], [39.78061294555664, -104.98975372314453], [39.78052520751953, -104.98993682861328], [39.78038787841797, -104.99011993408203], [39.78028869628906, -104.99024963378906], [39.780174255371094, -104.99034881591797], [39.77997589111328, -104.990478515625], [39.77995300292969, -104.99049377441406], [39.77978515625, -104.99056243896484], [39.77960205078125, -104.99060821533203], [39.7794189453125, -104.99060821533203], [39.77922439575195, -104.9905776977539], [39.778968811035156, -104.99048614501953], [39.77858352661133, -104.9903335571289], [39.778541564941406, -104.99031066894531], [39.77811050415039, -104.99011993408203], [39.777706146240234, -104.98995208740234], [39.7775764465332, -104.98990631103516], [39.77741241455078, -104.98985290527344], [39.77730941772461, -104.98983001708984], [39.7772102355957, -104.98980712890625], [39.777130126953125, -104.98979949951172], [39.77692794799805, -104.98979187011719], [39.77660369873047, -104.98979187011719], [39.77629089355469, -104.98980712890625], [39.77605056762695, -104.98982238769531], [39.77583694458008, -104.98986053466797], [39.77559280395508, -104.98991394042969], [39.7751579284668, -104.99003601074219], [39.774871826171875, -104.99012756347656], [39.77482986450195, -104.9901351928711], [39.774696350097656, -104.99018096923828], [39.774539947509766, -104.99022674560547], [39.774383544921875, -104.99026489257812], [39.77424621582031, -104.99028778076172], [39.77410888671875, -104.99029541015625], [39.773887634277344, -104.99030303955078], [39.77339553833008, -104.99031829833984], [39.773284912109375, -104.99031829833984], [39.77314376831055, -104.99032592773438], [39.773006439208984, -104.99034118652344], [39.77288055419922, -104.99036407470703], [39.77272033691406, -104.99040222167969], [39.77251434326172, -104.99046325683594], [39.77234649658203, -104.99051666259766], [39.77214431762695, -104.99059295654297], [39.77194595336914, -104.99068450927734], [39.77174377441406, -104.99079895019531], [39.77142333984375, -104.99098205566406], [39.77122116088867, -104.9911117553711], [39.77073287963867, -104.9914321899414], [39.7704963684082, -104.99164581298828], [39.770259857177734, -104.99187469482422], [39.77001190185547, -104.99214172363281], [39.769779205322266, -104.99241638183594], [39.76954650878906, -104.99272918701172], [39.76931381225586, -104.99305725097656], [39.76912307739258, -104.99334716796875], [39.76897048950195, -104.99359893798828], [39.768775939941406, -104.99393463134766], [39.768592834472656, -104.99432373046875], [39.76849365234375, -104.99454498291016], [39.76826477050781, -104.9951171875], [39.768192291259766, -104.99535369873047], [39.76802062988281, -104.99580383300781], [39.767581939697266, -104.99694061279297], [39.767154693603516, -104.99806213378906], [39.766963958740234, -104.9985580444336], [39.76682662963867, -104.9989013671875], [39.7667121887207, -104.99915313720703], [39.76656723022461, -104.99944305419922], [39.76641845703125, -104.99970245361328], [39.766273498535156, -104.99990844726562], [39.766109466552734, -105.00015258789062], [39.7659912109375, -105.00031280517578], [39.7658805847168, -105.0004653930664], [39.765750885009766, -105.00062561035156], [39.765567779541016, -105.00081634521484], [39.76536560058594, -105.00100708007812], [39.76518249511719, -105.00117492675781], [39.76498794555664, -105.00135803222656], [39.763919830322266, -105.002197265625], [39.76262283325195, -105.00331115722656], [39.76240539550781, -105.00350189208984], [39.762203216552734, -105.0036849975586], [39.76198959350586, -105.00389099121094], [39.76179885864258, -105.00407409667969], [39.7616081237793, -105.0042724609375], [39.761444091796875, -105.00445556640625], [39.761260986328125, -105.00466918945312], [39.76103973388672, -105.00492858886719], [39.76044845581055, -105.00575256347656], [39.759456634521484, -105.0072021484375], [39.75861740112305, -105.0083999633789], [39.758094787597656, -105.00910949707031], [39.75727844238281, -105.0101547241211], [39.75709915161133, -105.01038360595703], [39.756736755371094, -105.0108871459961], [39.75618362426758, -105.0116195678711], [39.75572967529297, -105.01225280761719], [39.75527572631836, -105.01285552978516], [39.75492858886719, -105.01334381103516], [39.7547492980957, -105.01359558105469], [39.75423812866211, -105.01427459716797], [39.75400924682617, -105.01457214355469], [39.753841400146484, -105.0147705078125], [39.75370788574219, -105.01492309570312], [39.75352096557617, -105.01513671875], [39.75336837768555, -105.01529693603516], [39.753173828125, -105.01548767089844], [39.75297164916992, -105.01567840576172], [39.752811431884766, -105.01581573486328], [39.75261688232422, -105.01597595214844], [39.75239944458008, -105.0161361694336], [39.75222396850586, -105.01627349853516], [39.752037048339844, -105.01639556884766], [39.751853942871094, -105.0165023803711], [39.75165939331055, -105.01661682128906], [39.75148391723633, -105.01670837402344], [39.75117874145508, -105.0168685913086], [39.75090026855469, -105.01699829101562], [39.75063705444336, -105.01710510253906], [39.74983215332031, -105.01744079589844], [39.74938201904297, -105.01763916015625], [39.74889373779297, -105.01783752441406], [39.748531341552734, -105.01799011230469], [39.74820327758789, -105.01811218261719], [39.74799728393555, -105.01818084716797], [39.74775695800781, -105.01825714111328], [39.74755096435547, -105.01830291748047], [39.74735641479492, -105.01834106445312], [39.747108459472656, -105.01836395263672], [39.74689865112305, -105.01837158203125], [39.74666976928711, -105.01836395263672], [39.74650955200195, -105.01835632324219], [39.74633026123047, -105.01832580566406], [39.746131896972656, -105.0182876586914], [39.74597930908203, -105.01824951171875], [39.74581527709961, -105.01819610595703], [39.745609283447266, -105.01811218261719], [39.74538040161133, -105.01800537109375], [39.74514389038086, -105.01786804199219], [39.744937896728516, -105.01773834228516], [39.744747161865234, -105.01759338378906], [39.74456787109375, -105.0174560546875], [39.74444580078125, -105.01734161376953], [39.743892669677734, -105.01679992675781], [39.74342727661133, -105.0163345336914], [39.743038177490234, -105.015869140625], [39.742897033691406, -105.01570892333984], [39.74272537231445, -105.0155258178711], [39.7425422668457, -105.01532745361328], [39.74235916137695, -105.01516723632812], [39.7421875, -105.01500701904297], [39.74201965332031, -105.0148696899414], [39.74187469482422, -105.01476287841797], [39.74171447753906, -105.0146484375], [39.74155807495117, -105.01456451416016], [39.741329193115234, -105.01445007324219], [39.74116134643555, -105.01438903808594], [39.74099349975586, -105.01432037353516], [39.74075698852539, -105.01425170898438], [39.7405891418457, -105.01421356201172], [39.740386962890625, -105.01416778564453], [39.740230560302734, -105.01415252685547], [39.74014663696289, -105.0141372680664], [39.73987579345703, -105.01412963867188], [39.73881530761719, -105.01406860351562], [39.73861312866211, -105.0140609741211], [39.73841094970703, -105.0140609741211], [39.73823928833008, -105.01406860351562], [39.73807907104492, -105.01408386230469], [39.7379035949707, -105.01409912109375], [39.73770523071289, -105.01412963867188], [39.737457275390625, -105.01416778564453], [39.737152099609375, -105.01428985595703], [39.73687744140625, -105.01436614990234], [39.7366828918457, -105.01441955566406], [39.73640823364258, -105.01451873779297], [39.73619079589844, -105.01460266113281], [39.73607635498047, -105.01464080810547], [39.735904693603516, -105.01471710205078], [39.73575973510742, -105.01478576660156], [39.73533630371094, -105.0149917602539], [39.73477554321289, -105.01528930664062], [39.734619140625, -105.01536560058594], [39.73448181152344, -105.01542663574219], [39.73434066772461, -105.01548767089844], [39.73418426513672, -105.01554870605469], [39.73397445678711, -105.015625], [39.733829498291016, -105.01566314697266], [39.73370361328125, -105.01570129394531], [39.73356246948242, -105.01573944091797], [39.733436584472656, -105.0157699584961], [39.73330307006836, -105.01579284667969], [39.73316955566406, -105.01582336425781], [39.73301315307617, -105.01583862304688], [39.73285675048828, -105.01585388183594], [39.73271942138672, -105.01586151123047], [39.732574462890625, -105.015869140625], [39.73243713378906, -105.01587677001953], [39.732303619384766, -105.01588439941406], [39.73218536376953, -105.01588439941406], [39.73207092285156, -105.01587677001953], [39.73195266723633, -105.015869140625], [39.73179244995117, -105.01585388183594], [39.73155212402344, -105.01580047607422], [39.73124313354492, -105.01573181152344], [39.731075286865234, -105.01568603515625], [39.7308464050293, -105.01561737060547], [39.730567932128906, -105.01553344726562], [39.730201721191406, -105.0154037475586], [39.729949951171875, -105.01531219482422], [39.72952651977539, -105.01518249511719], [39.729122161865234, -105.0150375366211], [39.728843688964844, -105.01493835449219], [39.72844314575195, -105.01477813720703], [39.72832107543945, -105.01473236083984], [39.728145599365234, -105.01466369628906], [39.727943420410156, -105.01458740234375], [39.727439880371094, -105.01441192626953], [39.72711181640625, -105.01427459716797], [39.72694778442383, -105.01421356201172], [39.726749420166016, -105.01412200927734], [39.726558685302734, -105.0140380859375], [39.726375579833984, -105.01394653320312], [39.72616195678711, -105.01382446289062], [39.72585678100586, -105.01362609863281], [39.725624084472656, -105.01348114013672], [39.72536087036133, -105.01329803466797], [39.72511672973633, -105.01311492919922], [39.72493362426758, -105.01297760009766], [39.7247200012207, -105.01280212402344], [39.72451400756836, -105.01262664794922], [39.72426986694336, -105.01239776611328], [39.72408676147461, -105.01221466064453], [39.723899841308594, -105.01201629638672], [39.72377395629883, -105.01188659667969], [39.72359848022461, -105.01168060302734], [39.72343826293945, -105.0114974975586], [39.72330093383789, -105.01133728027344], [39.723079681396484, -105.01106262207031], [39.7227897644043, -105.01066589355469], [39.72258377075195, -105.01038360595703], [39.722251892089844, -105.0099105834961], [39.7220573425293, -105.0096435546875], [39.721920013427734, -105.00946807861328], [39.721744537353516, -105.00924682617188], [39.721649169921875, -105.00914001464844], [39.7214241027832, -105.00888061523438], [39.72117233276367, -105.00861358642578], [39.720741271972656, -105.0081787109375], [39.720523834228516, -105.00794219970703], [39.7200813293457, -105.0074691772461], [39.71998977661133, -105.00737762451172], [39.71975326538086, -105.00711822509766], [39.71941375732422, -105.00675201416016], [39.719242095947266, -105.0065689086914], [39.719085693359375, -105.00640106201172], [39.718936920166016, -105.00623321533203], [39.718807220458984, -105.00608825683594], [39.718658447265625, -105.00591278076172], [39.71849060058594, -105.00570678710938], [39.7183723449707, -105.00556182861328], [39.71826171875, -105.00541687011719], [39.71812057495117, -105.00521850585938], [39.71792221069336, -105.00492858886719], [39.71759796142578, -105.00445556640625], [39.717166900634766, -105.0038070678711], [39.716880798339844, -105.00337982177734], [39.71671676635742, -105.00314331054688], [39.716552734375, -105.00292205810547], [39.7164306640625, -105.00276184082031], [39.71633529663086, -105.00264739990234], [39.71624755859375, -105.00254821777344], [39.71617889404297, -105.00247192382812], [39.71608352661133, -105.00237274169922], [39.715999603271484, -105.00228118896484], [39.71593475341797, -105.0022201538086], [39.715885162353516, -105.0021743774414], [39.715755462646484, -105.00206756591797], [39.715660095214844, -105.00198364257812], [39.715538024902344, -105.00189208984375], [39.71543884277344, -105.00181579589844], [39.71533203125, -105.00173950195312], [39.7152214050293, -105.00166320800781], [39.71499252319336, -105.00151824951172], [39.714324951171875, -105.0010757446289], [39.71399688720703, -105.00086212158203], [39.71346664428711, -105.00052642822266], [39.71318435668945, -105.00035095214844], [39.71266174316406, -105.00003051757812], [39.71223449707031, -104.9997787475586], [39.71159362792969, -104.99940490722656], [39.71141052246094, -104.99930572509766], [39.710933685302734, -104.99901580810547], [39.71067810058594, -104.99886322021484], [39.710357666015625, -104.99867248535156], [39.71013641357422, -104.99855041503906], [39.70988464355469, -104.99840545654297], [39.70966720581055, -104.99829864501953], [39.7094841003418, -104.99820709228516], [39.70940017700195, -104.99816131591797], [39.709136962890625, -104.99803924560547], [39.708702087402344, -104.99784088134766], [39.70827865600586, -104.99764251708984], [39.7078857421875, -104.99746704101562], [39.707275390625, -104.9971923828125], [39.70710372924805, -104.99711608886719], [39.7068977355957, -104.99701690673828], [39.706809997558594, -104.99697875976562], [39.706729888916016, -104.99693298339844], [39.70663070678711, -104.99688720703125], [39.706539154052734, -104.99683380126953], [39.70646667480469, -104.99678802490234], [39.70637130737305, -104.9967269897461], [39.70630645751953, -104.99668884277344], [39.70623779296875, -104.99664306640625], [39.70616912841797, -104.99658966064453], [39.706085205078125, -104.99652862548828], [39.70596694946289, -104.9964370727539], [39.705814361572266, -104.9963150024414], [39.7056999206543, -104.9962158203125], [39.70561218261719, -104.99613189697266], [39.70552062988281, -104.99604034423828], [39.705467224121094, -104.99598693847656], [39.70537567138672, -104.99588775634766], [39.705299377441406, -104.99580383300781], [39.705169677734375, -104.99565124511719], [39.70507049560547, -104.99552917480469], [39.704959869384766, -104.9953842163086], [39.704837799072266, -104.99520874023438], [39.70473098754883, -104.99505615234375], [39.704627990722656, -104.99488067626953], [39.704551696777344, -104.99474334716797], [39.704471588134766, -104.99459838867188], [39.70440673828125, -104.99447631835938], [39.7043342590332, -104.99433135986328], [39.704261779785156, -104.99417877197266], [39.70420455932617, -104.99404907226562], [39.70415115356445, -104.99392700195312], [39.704097747802734, -104.99378204345703], [39.70404815673828, -104.99363708496094], [39.70399475097656, -104.99347686767578], [39.70393753051758, -104.9933090209961], [39.70388412475586, -104.99313354492188], [39.703792572021484, -104.99284362792969], [39.70363235473633, -104.9923324584961], [39.703487396240234, -104.99188232421875], [39.703304290771484, -104.99127197265625], [39.703189849853516, -104.99092102050781], [39.70305633544922, -104.990478515625], [39.702980041503906, -104.99024200439453], [39.70287322998047, -104.989990234375], [39.70277404785156, -104.98977661132812], [39.70265197753906, -104.98954010009766], [39.70252990722656, -104.98933410644531], [39.70241928100586, -104.98914337158203], [39.70228576660156, -104.98894500732422], [39.702110290527344, -104.98870849609375], [39.70179748535156, -104.9883041381836], [39.70148849487305, -104.98790740966797], [39.700843811035156, -104.987060546875], [39.700706481933594, -104.98689270019531], [39.70027542114258, -104.98641967773438], [39.700077056884766, -104.9861831665039], [39.69994354248047, -104.98603057861328], [39.699771881103516, -104.98583984375], [39.69960021972656, -104.98567962646484], [39.699462890625, -104.98554229736328], [39.699344635009766, -104.98542022705078], [39.69913101196289, -104.98521423339844], [39.698974609375, -104.98504638671875], [39.69866180419922, -104.9847412109375], [39.6981086730957, -104.98410034179688], [39.69713592529297, -104.98299407958984], [39.696075439453125, -104.98184967041016], [39.69560623168945, -104.9813003540039], [39.69524383544922, -104.98087310791016], [39.69488525390625, -104.98043823242188], [39.694786071777344, -104.98033905029297], [39.6947021484375, -104.98025512695312], [39.69462585449219, -104.98019409179688], [39.6945915222168, -104.98016357421875], [39.69448471069336, -104.98009490966797], [39.69437789916992, -104.98002624511719], [39.6942024230957, -104.97992706298828], [39.69398498535156, -104.97977447509766], [39.69377899169922, -104.97953033447266], [39.69367599487305, -104.97943115234375], [39.69364929199219, -104.97940063476562], [39.69361114501953, -104.97936248779297], [39.69355010986328, -104.97931671142578], [39.6934814453125, -104.9792709350586], [39.69330978393555, -104.97918701171875], [39.69325637817383, -104.97914123535156], [39.693199157714844, -104.97909545898438], [39.693145751953125, -104.97903442382812], [39.693092346191406, -104.97897338867188], [39.69303512573242, -104.97886657714844], [39.69300079345703, -104.97877502441406], [39.69298553466797, -104.97871398925781], [39.69298553466797, -104.97850036621094], [39.69298553466797, -104.97827911376953], [39.69298553466797, -104.97792053222656], [39.6929931640625, -104.9774398803711], [39.6929931640625, -104.9773941040039], [39.6929931640625, -104.9772720336914], [39.692989349365234, -104.97704315185547], [39.692989349365234, -104.97694396972656], [39.692989349365234, -104.97685241699219], [39.69298553466797, -104.97636413574219], [39.6929817199707, -104.97577667236328]],\n", + " var poly_line_2c8a5968d70c47cbf064b52ae14331a2 = L.polyline(\n", + " [[39.77902603149414, -104.96916961669922], [39.7789306640625, -104.96929931640625], [39.778900146484375, -104.9693374633789], [39.77882766723633, -104.96943664550781], [39.778751373291016, -104.96954345703125], [39.7786979675293, -104.96961975097656], [39.77864456176758, -104.96971130371094], [39.77876281738281, -104.96937561035156], [39.77878952026367, -104.96929931640625], [39.778804779052734, -104.9692153930664], [39.77880096435547, -104.96912384033203], [39.778785705566406, -104.96903991699219], [39.77874755859375, -104.96894836425781], [39.778587341308594, -104.9686508178711], [39.778480529785156, -104.96852111816406], [39.77839660644531, -104.96841430664062], [39.77846908569336, -104.96832275390625], [39.77865982055664, -104.96807098388672], [39.778709411621094, -104.96791076660156], [39.77894592285156, -104.96761322021484], [39.77906799316406, -104.96745300292969], [39.77915954589844, -104.96732330322266], [39.7791862487793, -104.96728515625], [39.779232025146484, -104.96722412109375], [39.77926254272461, -104.96719360351562], [39.779293060302734, -104.9671630859375], [39.77932357788086, -104.96714782714844], [39.77938461303711, -104.96710968017578], [39.779441833496094, -104.96707916259766], [39.77951431274414, -104.96704864501953], [39.7796745300293, -104.96698760986328], [39.77983093261719, -104.9669418334961], [39.78031921386719, -104.96683502197266], [39.780364990234375, -104.9668197631836], [39.78050231933594, -104.966796875], [39.78049850463867, -104.96688079833984], [39.78049850463867, -104.96698760986328], [39.78049850463867, -104.96705627441406], [39.78049087524414, -104.96717834472656], [39.78046798706055, -104.96759033203125], [39.78045654296875, -104.96772003173828], [39.78042984008789, -104.96797180175781], [39.78041458129883, -104.96810913085938], [39.780372619628906, -104.96839904785156], [39.78034210205078, -104.96859741210938], [39.780296325683594, -104.96888732910156], [39.7802734375, -104.96903228759766], [39.78025436401367, -104.96917724609375], [39.780250549316406, -104.96920776367188], [39.780235290527344, -104.96934509277344], [39.78020095825195, -104.96965789794922], [39.78001403808594, -104.9715347290039], [39.77994155883789, -104.97315216064453], [39.77980422973633, -104.97496032714844], [39.7797737121582, -104.97691345214844], [39.7797737121582, -104.9772720336914], [39.7797737121582, -104.97753143310547], [39.7797737121582, -104.97764587402344], [39.779781341552734, -104.97801971435547], [39.77980041503906, -104.97874450683594], [39.77981948852539, -104.97929382324219], [39.77983093261719, -104.97946166992188], [39.77986526489258, -104.98001861572266], [39.77991485595703, -104.98080444335938], [39.779991149902344, -104.98214721679688], [39.78001403808594, -104.98335266113281], [39.7800178527832, -104.98450469970703], [39.78002166748047, -104.98558044433594], [39.780033111572266, -104.98602294921875], [39.7800407409668, -104.98613739013672], [39.780059814453125, -104.98633575439453], [39.780086517333984, -104.9865493774414], [39.780128479003906, -104.98677825927734], [39.780174255371094, -104.98695373535156], [39.78023910522461, -104.98715209960938], [39.780540466308594, -104.98787689208984], [39.78069305419922, -104.98828887939453], [39.78076934814453, -104.98860168457031], [39.780784606933594, -104.98871612548828], [39.780792236328125, -104.98896026611328], [39.78078079223633, -104.98912048339844], [39.780765533447266, -104.98928833007812], [39.78071975708008, -104.98950958251953], [39.78061294555664, -104.98975372314453], [39.78052520751953, -104.98993682861328], [39.78038787841797, -104.99011993408203], [39.78028869628906, -104.99024963378906], [39.780174255371094, -104.99034881591797], [39.77997589111328, -104.990478515625], [39.77995300292969, -104.99049377441406], [39.77978515625, -104.99056243896484], [39.77960205078125, -104.99060821533203], [39.7794189453125, -104.99060821533203], [39.77922439575195, -104.9905776977539], [39.778968811035156, -104.99048614501953], [39.77858352661133, -104.9903335571289], [39.778541564941406, -104.99031066894531], [39.77811050415039, -104.99011993408203], [39.777706146240234, -104.98995208740234], [39.7775764465332, -104.98990631103516], [39.77741241455078, -104.98985290527344], [39.77730941772461, -104.98983001708984], [39.7772102355957, -104.98980712890625], [39.777130126953125, -104.98979949951172], [39.77692794799805, -104.98979187011719], [39.77660369873047, -104.98979187011719], [39.77629089355469, -104.98980712890625], [39.77605056762695, -104.98982238769531], [39.77583694458008, -104.98986053466797], [39.77559280395508, -104.98991394042969], [39.7751579284668, -104.99003601074219], [39.774871826171875, -104.99012756347656], [39.77482986450195, -104.9901351928711], [39.774696350097656, -104.99018096923828], [39.774539947509766, -104.99022674560547], [39.774383544921875, -104.99026489257812], [39.77424621582031, -104.99028778076172], [39.77410888671875, -104.99029541015625], [39.773887634277344, -104.99030303955078], [39.77339553833008, -104.99031829833984], [39.773284912109375, -104.99031829833984], [39.77314376831055, -104.99032592773438], [39.773006439208984, -104.99034118652344], [39.77288055419922, -104.99036407470703], [39.77272033691406, -104.99040222167969], [39.77251434326172, -104.99046325683594], [39.77234649658203, -104.99051666259766], [39.77214431762695, -104.99059295654297], [39.77194595336914, -104.99068450927734], [39.77174377441406, -104.99079895019531], [39.77142333984375, -104.99098205566406], [39.77122116088867, -104.9911117553711], [39.77073287963867, -104.9914321899414], [39.7704963684082, -104.99164581298828], [39.770259857177734, -104.99187469482422], [39.77001190185547, -104.99214172363281], [39.769779205322266, -104.99241638183594], [39.76954650878906, -104.99272918701172], [39.76931381225586, -104.99305725097656], [39.76912307739258, -104.99334716796875], [39.76897048950195, -104.99359893798828], [39.768775939941406, -104.99393463134766], [39.768592834472656, -104.99432373046875], [39.76849365234375, -104.99454498291016], [39.76826477050781, -104.9951171875], [39.768192291259766, -104.99535369873047], [39.76802062988281, -104.99580383300781], [39.767581939697266, -104.99694061279297], [39.767154693603516, -104.99806213378906], [39.766963958740234, -104.9985580444336], [39.76682662963867, -104.9989013671875], [39.7667121887207, -104.99915313720703], [39.76656723022461, -104.99944305419922], [39.76641845703125, -104.99970245361328], [39.766273498535156, -104.99990844726562], [39.766109466552734, -105.00015258789062], [39.7659912109375, -105.00031280517578], [39.7658805847168, -105.0004653930664], [39.765750885009766, -105.00062561035156], [39.765567779541016, -105.00081634521484], [39.76536560058594, -105.00100708007812], [39.76518249511719, -105.00117492675781], [39.76498794555664, -105.00135803222656], [39.763919830322266, -105.002197265625], [39.76262283325195, -105.00331115722656], [39.76240539550781, -105.00350189208984], [39.762203216552734, -105.0036849975586], [39.76198959350586, -105.00389099121094], [39.76179885864258, -105.00407409667969], [39.7616081237793, -105.0042724609375], [39.761444091796875, -105.00445556640625], [39.761260986328125, -105.00466918945312], [39.76103973388672, -105.00492858886719], [39.76044845581055, -105.00575256347656], [39.759456634521484, -105.0072021484375], [39.75861740112305, -105.0083999633789], [39.758094787597656, -105.00910949707031], [39.75727844238281, -105.0101547241211], [39.75709915161133, -105.01038360595703], [39.756736755371094, -105.0108871459961], [39.75618362426758, -105.0116195678711], [39.75572967529297, -105.01225280761719], [39.75527572631836, -105.01285552978516], [39.75492858886719, -105.01334381103516], [39.7547492980957, -105.01359558105469], [39.75423812866211, -105.01427459716797], [39.75400924682617, -105.01457214355469], [39.753841400146484, -105.0147705078125], [39.75370788574219, -105.01492309570312], [39.75352096557617, -105.01513671875], [39.75336837768555, -105.01529693603516], [39.753173828125, -105.01548767089844], [39.75297164916992, -105.01567840576172], [39.752811431884766, -105.01581573486328], [39.75261688232422, -105.01597595214844], [39.75239944458008, -105.0161361694336], [39.75222396850586, -105.01627349853516], [39.752037048339844, -105.01639556884766], [39.751853942871094, -105.0165023803711], [39.75165939331055, -105.01661682128906], [39.75148391723633, -105.01670837402344], [39.75117874145508, -105.0168685913086], [39.75090026855469, -105.01699829101562], [39.75063705444336, -105.01710510253906], [39.74983215332031, -105.01744079589844], [39.74938201904297, -105.01763916015625], [39.74889373779297, -105.01783752441406], [39.748531341552734, -105.01799011230469], [39.74820327758789, -105.01811218261719], [39.74799728393555, -105.01818084716797], [39.74775695800781, -105.01825714111328], [39.74755096435547, -105.01830291748047], [39.74735641479492, -105.01834106445312], [39.747108459472656, -105.01836395263672], [39.74689865112305, -105.01837158203125], [39.74666976928711, -105.01836395263672], [39.74650955200195, -105.01835632324219], [39.74633026123047, -105.01832580566406], [39.746131896972656, -105.0182876586914], [39.74597930908203, -105.01824951171875], [39.74581527709961, -105.01819610595703], [39.745609283447266, -105.01811218261719], [39.74538040161133, -105.01800537109375], [39.74514389038086, -105.01786804199219], [39.744937896728516, -105.01773834228516], [39.744747161865234, -105.01759338378906], [39.74456787109375, -105.0174560546875], [39.74444580078125, -105.01734161376953], [39.743892669677734, -105.01679992675781], [39.74342727661133, -105.0163345336914], [39.743038177490234, -105.015869140625], [39.742897033691406, -105.01570892333984], [39.74272537231445, -105.0155258178711], [39.7425422668457, -105.01532745361328], [39.74235916137695, -105.01516723632812], [39.7421875, -105.01500701904297], [39.74201965332031, -105.0148696899414], [39.74187469482422, -105.01476287841797], [39.74171447753906, -105.0146484375], [39.74155807495117, -105.01456451416016], [39.741329193115234, -105.01445007324219], [39.74116134643555, -105.01438903808594], [39.74099349975586, -105.01432037353516], [39.74075698852539, -105.01425170898438], [39.7405891418457, -105.01421356201172], [39.740386962890625, -105.01416778564453], [39.740230560302734, -105.01415252685547], [39.74014663696289, -105.0141372680664], [39.73987579345703, -105.01412963867188], [39.73881530761719, -105.01406860351562], [39.73861312866211, -105.0140609741211], [39.73841094970703, -105.0140609741211], [39.73823928833008, -105.01406860351562], [39.73807907104492, -105.01408386230469], [39.7379035949707, -105.01409912109375], [39.73770523071289, -105.01412963867188], [39.737457275390625, -105.01416778564453], [39.737152099609375, -105.01428985595703], [39.73687744140625, -105.01436614990234], [39.7366828918457, -105.01441955566406], [39.73640823364258, -105.01451873779297], [39.73619079589844, -105.01460266113281], [39.73607635498047, -105.01464080810547], [39.735904693603516, -105.01471710205078], [39.73575973510742, -105.01478576660156], [39.73533630371094, -105.0149917602539], [39.73477554321289, -105.01528930664062], [39.734619140625, -105.01536560058594], [39.73448181152344, -105.01542663574219], [39.73434066772461, -105.01548767089844], [39.73418426513672, -105.01554870605469], [39.73397445678711, -105.015625], [39.733829498291016, -105.01566314697266], [39.73370361328125, -105.01570129394531], [39.73356246948242, -105.01573944091797], [39.733436584472656, -105.0157699584961], [39.73330307006836, -105.01579284667969], [39.73316955566406, -105.01582336425781], [39.73301315307617, -105.01583862304688], [39.73285675048828, -105.01585388183594], [39.73271942138672, -105.01586151123047], [39.732574462890625, -105.015869140625], [39.73243713378906, -105.01587677001953], [39.732303619384766, -105.01588439941406], [39.73218536376953, -105.01588439941406], [39.73207092285156, -105.01587677001953], [39.73195266723633, -105.015869140625], [39.73179244995117, -105.01585388183594], [39.73155212402344, -105.01580047607422], [39.73124313354492, -105.01573181152344], [39.731075286865234, -105.01568603515625], [39.7308464050293, -105.01561737060547], [39.730567932128906, -105.01553344726562], [39.730201721191406, -105.0154037475586], [39.729949951171875, -105.01531219482422], [39.72952651977539, -105.01518249511719], [39.729122161865234, -105.0150375366211], [39.728843688964844, -105.01493835449219], [39.72844314575195, -105.01477813720703], [39.72832107543945, -105.01473236083984], [39.728145599365234, -105.01466369628906], [39.727943420410156, -105.01458740234375], [39.727439880371094, -105.01441192626953], [39.72711181640625, -105.01427459716797], [39.72694778442383, -105.01421356201172], [39.726749420166016, -105.01412200927734], [39.726558685302734, -105.0140380859375], [39.726375579833984, -105.01394653320312], [39.72616195678711, -105.01382446289062], [39.72585678100586, -105.01362609863281], [39.725624084472656, -105.01348114013672], [39.72536087036133, -105.01329803466797], [39.72511672973633, -105.01311492919922], [39.72493362426758, -105.01297760009766], [39.7247200012207, -105.01280212402344], [39.72451400756836, -105.01262664794922], [39.72426986694336, -105.01239776611328], [39.72408676147461, -105.01221466064453], [39.723899841308594, -105.01201629638672], [39.72377395629883, -105.01188659667969], [39.72359848022461, -105.01168060302734], [39.72343826293945, -105.0114974975586], [39.72330093383789, -105.01133728027344], [39.723079681396484, -105.01106262207031], [39.7227897644043, -105.01066589355469], [39.72258377075195, -105.01038360595703], [39.722251892089844, -105.0099105834961], [39.7220573425293, -105.0096435546875], [39.721920013427734, -105.00946807861328], [39.721744537353516, -105.00924682617188], [39.721649169921875, -105.00914001464844], [39.7214241027832, -105.00888061523438], [39.72117233276367, -105.00861358642578], [39.720741271972656, -105.0081787109375], [39.720523834228516, -105.00794219970703], [39.7200813293457, -105.0074691772461], [39.71998977661133, -105.00737762451172], [39.71975326538086, -105.00711822509766], [39.71941375732422, -105.00675201416016], [39.719242095947266, -105.0065689086914], [39.719085693359375, -105.00640106201172], [39.718936920166016, -105.00623321533203], [39.718807220458984, -105.00608825683594], [39.718658447265625, -105.00591278076172], [39.71849060058594, -105.00570678710938], [39.7183723449707, -105.00556182861328], [39.71826171875, -105.00541687011719], [39.71812057495117, -105.00521850585938], [39.71792221069336, -105.00492858886719], [39.71759796142578, -105.00445556640625], [39.717166900634766, -105.0038070678711], [39.716880798339844, -105.00337982177734], [39.71671676635742, -105.00314331054688], [39.716552734375, -105.00292205810547], [39.7164306640625, -105.00276184082031], [39.71633529663086, -105.00264739990234], [39.71624755859375, -105.00254821777344], [39.71617889404297, -105.00247192382812], [39.71608352661133, -105.00237274169922], [39.715999603271484, -105.00228118896484], [39.71593475341797, -105.0022201538086], [39.715885162353516, -105.0021743774414], [39.715755462646484, -105.00206756591797], [39.715660095214844, -105.00198364257812], [39.715538024902344, -105.00189208984375], [39.71543884277344, -105.00181579589844], [39.71533203125, -105.00173950195312], [39.7152214050293, -105.00166320800781], [39.71499252319336, -105.00151824951172], [39.714324951171875, -105.0010757446289], [39.71399688720703, -105.00086212158203], [39.71346664428711, -105.00052642822266], [39.71318435668945, -105.00035095214844], [39.71266174316406, -105.00003051757812], [39.71223449707031, -104.9997787475586], [39.71159362792969, -104.99940490722656], [39.71141052246094, -104.99930572509766], [39.710933685302734, -104.99901580810547], [39.71067810058594, -104.99886322021484], [39.710357666015625, -104.99867248535156], [39.71013641357422, -104.99855041503906], [39.70988464355469, -104.99840545654297], [39.70966720581055, -104.99829864501953], [39.7094841003418, -104.99820709228516], [39.70940017700195, -104.99816131591797], [39.709136962890625, -104.99803924560547], [39.708702087402344, -104.99784088134766], [39.70827865600586, -104.99764251708984], [39.7078857421875, -104.99746704101562], [39.707275390625, -104.9971923828125], [39.70710372924805, -104.99711608886719], [39.7068977355957, -104.99701690673828], [39.706809997558594, -104.99697875976562], [39.706729888916016, -104.99693298339844], [39.70663070678711, -104.99688720703125], [39.706539154052734, -104.99683380126953], [39.70646667480469, -104.99678802490234], [39.70637130737305, -104.9967269897461], [39.70630645751953, -104.99668884277344], [39.70623779296875, -104.99664306640625], [39.70616912841797, -104.99658966064453], [39.706085205078125, -104.99652862548828], [39.70596694946289, -104.9964370727539], [39.705814361572266, -104.9963150024414], [39.7056999206543, -104.9962158203125], [39.70561218261719, -104.99613189697266], [39.70552062988281, -104.99604034423828], [39.705467224121094, -104.99598693847656], [39.70537567138672, -104.99588775634766], [39.705299377441406, -104.99580383300781], [39.705169677734375, -104.99565124511719], [39.70507049560547, -104.99552917480469], [39.704959869384766, -104.9953842163086], [39.704837799072266, -104.99520874023438], [39.70473098754883, -104.99505615234375], [39.704627990722656, -104.99488067626953], [39.704551696777344, -104.99474334716797], [39.704471588134766, -104.99459838867188], [39.70440673828125, -104.99447631835938], [39.7043342590332, -104.99433135986328], [39.704261779785156, -104.99417877197266], [39.70420455932617, -104.99404907226562], [39.70415115356445, -104.99392700195312], [39.704097747802734, -104.99378204345703], [39.70404815673828, -104.99363708496094], [39.70399475097656, -104.99347686767578], [39.70393753051758, -104.9933090209961], [39.70388412475586, -104.99313354492188], [39.703792572021484, -104.99284362792969], [39.70363235473633, -104.9923324584961], [39.703487396240234, -104.99188232421875], [39.703304290771484, -104.99127197265625], [39.703189849853516, -104.99092102050781], [39.70305633544922, -104.990478515625], [39.702980041503906, -104.99024200439453], [39.70287322998047, -104.989990234375], [39.70277404785156, -104.98977661132812], [39.70265197753906, -104.98954010009766], [39.70252990722656, -104.98933410644531], [39.70241928100586, -104.98914337158203], [39.70228576660156, -104.98894500732422], [39.702110290527344, -104.98870849609375], [39.70179748535156, -104.9883041381836], [39.70148849487305, -104.98790740966797], [39.700843811035156, -104.987060546875], [39.700706481933594, -104.98689270019531], [39.700130462646484, -104.98612213134766], [39.69986343383789, -104.98579406738281], [39.699214935302734, -104.98503875732422], [39.696720123291016, -104.98221588134766], [39.6949462890625, -104.9802017211914], [39.69448471069336, -104.97967529296875], [39.69377136230469, -104.97888946533203], [39.693267822265625, -104.97833251953125], [39.6928596496582, -104.9778823852539], [39.692665100097656, -104.97766876220703], [39.69175720214844, -104.97666931152344], [39.691261291503906, -104.97602081298828], [39.690696716308594, -104.97518920898438]],\n", " {"bubblingMouseEvents": true, "color": "#eff821", "dashArray": null, "dashOffset": null, "fill": false, "fillColor": "#eff821", "fillOpacity": 0.2, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "noClip": false, "opacity": 0.8, "smoothFactor": 1.0, "stroke": true, "weight": 10}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " poly_line_b5d0064dc06afe599b6fe424054dc1d9.bindTooltip(\n", + " poly_line_2c8a5968d70c47cbf064b52ae14331a2.bindTooltip(\n", " `<div>\n", - " 0.32013055234991905\n", + " 0.3077343325263442\n", " </div>`,\n", " {"sticky": true}\n", " );\n", " \n", " \n", - " var marker_82a657f820f40b4c8f214ba2d6cd85d1 = L.marker(\n", + " var marker_3b9ce4145da3d8b43980c7ae62d5287c = L.marker(\n", " [39.77902603149414, -104.96916961669922],\n", " {}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " var icon_24690c2e345cc1762e6b8cdc0855535a = L.AwesomeMarkers.icon(\n", + " var icon_72d50d6873c31096f6c5c2328f518093 = L.AwesomeMarkers.icon(\n", " {"extraClasses": "fa-rotate-0", "icon": "circle", "iconColor": "white", "markerColor": "green", "prefix": "fa"}\n", " );\n", - " marker_82a657f820f40b4c8f214ba2d6cd85d1.setIcon(icon_24690c2e345cc1762e6b8cdc0855535a);\n", + " marker_3b9ce4145da3d8b43980c7ae62d5287c.setIcon(icon_72d50d6873c31096f6c5c2328f518093);\n", " \n", " \n", - " marker_82a657f820f40b4c8f214ba2d6cd85d1.bindTooltip(\n", + " marker_3b9ce4145da3d8b43980c7ae62d5287c.bindTooltip(\n", " `<div>\n", " Origin\n", " </div>`,\n", @@ -1094,19 +1090,19 @@ " );\n", " \n", " \n", - " var marker_4f82c89ca2669b5f6e6e0bb237b2dcc5 = L.marker(\n", - " [39.6929817199707, -104.97577667236328],\n", + " var marker_4bb36aaa63ebe8afd77d4c7e19524537 = L.marker(\n", + " [39.690696716308594, -104.97518920898438],\n", " {}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " var icon_5ce24d64ef02c98b121c1244ea88ccd3 = L.AwesomeMarkers.icon(\n", + " var icon_bfab77049a42cfba5c42d9ec7593a199 = L.AwesomeMarkers.icon(\n", " {"extraClasses": "fa-rotate-0", "icon": "circle", "iconColor": "white", "markerColor": "red", "prefix": "fa"}\n", " );\n", - " marker_4f82c89ca2669b5f6e6e0bb237b2dcc5.setIcon(icon_5ce24d64ef02c98b121c1244ea88ccd3);\n", + " marker_4bb36aaa63ebe8afd77d4c7e19524537.setIcon(icon_bfab77049a42cfba5c42d9ec7593a199);\n", " \n", " \n", - " marker_4f82c89ca2669b5f6e6e0bb237b2dcc5.bindTooltip(\n", + " marker_4bb36aaa63ebe8afd77d4c7e19524537.bindTooltip(\n", " `<div>\n", " Destination\n", " </div>`,\n", @@ -1114,33 +1110,33 @@ " );\n", " \n", " \n", - " var poly_line_0ff458fccdc2eac72411e88597e5a7bb = L.polyline(\n", - " [[39.77902603149414, -104.96916961669922], [39.77896499633789, -104.96910095214844], [39.77878189086914, -104.96887969970703], [39.778751373291016, -104.96884155273438], [39.778587341308594, -104.9686508178711], [39.778480529785156, -104.96852111816406], [39.77839660644531, -104.96841430664062], [39.778324127197266, -104.96851348876953], [39.778228759765625, -104.96863555908203], [39.778076171875, -104.96883392333984], [39.777626037597656, -104.96941375732422], [39.7774772644043, -104.96961212158203], [39.77703857421875, -104.97017669677734], [39.776737213134766, -104.97056579589844], [39.77666473388672, -104.97066497802734], [39.7766227722168, -104.97071838378906], [39.776371002197266, -104.97103881835938], [39.77608108520508, -104.9714126586914], [39.775978088378906, -104.97154998779297], [39.774810791015625, -104.97306060791016], [39.77475357055664, -104.97313690185547], [39.77467346191406, -104.97323608398438], [39.77459716796875, -104.97333526611328], [39.773738861083984, -104.97444915771484], [39.77363586425781, -104.97457885742188], [39.773353576660156, -104.97494506835938], [39.77303695678711, -104.97535705566406], [39.77297592163086, -104.9754409790039], [39.77287673950195, -104.97531127929688], [39.77263259887695, -104.9749984741211], [39.77257537841797, -104.97492218017578], [39.77229690551758, -104.97456359863281], [39.77223587036133, -104.9744873046875], [39.77199935913086, -104.97418212890625], [39.77191162109375, -104.97406768798828], [39.77157974243164, -104.9736328125], [39.77155303955078, -104.9736328125], [39.77154541015625, -104.97361755371094], [39.7712516784668, -104.97325897216797], [39.77125549316406, -104.97321319580078], [39.77090072631836, -104.97274017333984], [39.7706184387207, -104.97236633300781], [39.77056884765625, -104.97230529785156], [39.77048110961914, -104.97219848632812], [39.77042770385742, -104.9721450805664], [39.7703742980957, -104.97209167480469], [39.77033233642578, -104.97205352783203], [39.770233154296875, -104.97198486328125], [39.770118713378906, -104.9721450805664], [39.76996994018555, -104.97232818603516], [39.76978302001953, -104.97257232666016], [39.76957321166992, -104.97283172607422], [39.76926803588867, -104.97325134277344], [39.76918411254883, -104.97335815429688], [39.76904296875, -104.97335815429688], [39.76840591430664, -104.97335052490234], [39.76824188232422, -104.97335052490234], [39.7681770324707, -104.97335052490234], [39.7680549621582, -104.97335052490234], [39.7677001953125, -104.97335052490234], [39.767547607421875, -104.97335052490234], [39.7670783996582, -104.97335052490234], [39.76704788208008, -104.97335052490234], [39.766971588134766, -104.97335052490234], [39.76690673828125, -104.97335052490234], [39.76670455932617, -104.97335052490234], [39.76658248901367, -104.97335052490234], [39.766502380371094, -104.97335052490234], [39.76637649536133, -104.97335052490234], [39.766136169433594, -104.97335052490234], [39.76605987548828, -104.97335052490234], [39.765865325927734, -104.97335052490234], [39.76577377319336, -104.97335052490234], [39.76567459106445, -104.97335052490234], [39.76523208618164, -104.97335052490234], [39.76495361328125, -104.97335052490234], [39.764835357666016, -104.97335052490234], [39.7646598815918, -104.97335052490234], [39.764591217041016, -104.97335052490234], [39.7645149230957, -104.97335052490234], [39.764427185058594, -104.97335052490234], [39.76421356201172, -104.97335052490234], [39.764034271240234, -104.97335052490234], [39.76380920410156, -104.97335052490234], [39.763580322265625, -104.97335052490234], [39.76325988769531, -104.97335052490234], [39.76316833496094, -104.97339630126953], [39.763118743896484, -104.97339630126953], [39.76306915283203, -104.97335052490234], [39.762874603271484, -104.97335815429688], [39.762454986572266, -104.97335815429688], [39.76237869262695, -104.97335815429688], [39.76214599609375, -104.97335052490234], [39.762054443359375, -104.97335052490234], [39.76194381713867, -104.97335052490234], [39.76179122924805, -104.97335052490234], [39.76169967651367, -104.97335052490234], [39.76160430908203, -104.97335052490234], [39.76118087768555, -104.97335052490234], [39.76103973388672, -104.97335052490234], [39.76084518432617, -104.97335052490234], [39.76076126098633, -104.97335052490234], [39.76066589355469, -104.97335052490234], [39.760440826416016, -104.97335052490234], [39.76033401489258, -104.97335052490234], [39.759613037109375, -104.97335052490234], [39.7595100402832, -104.97335052490234], [39.75939178466797, -104.97339630126953], [39.759151458740234, -104.97339630126953], [39.75912094116211, -104.97335052490234], [39.759010314941406, -104.97335052490234], [39.758827209472656, -104.97335052490234], [39.75831604003906, -104.97335052490234], [39.75823211669922, -104.97335052490234], [39.758174896240234, -104.97335052490234], [39.75764083862305, -104.97335815429688], [39.7572021484375, -104.97335815429688], [39.75708770751953, -104.97335815429688], [39.75699234008789, -104.97335815429688], [39.75688171386719, -104.97335815429688], [39.75673294067383, -104.97335815429688], [39.75627899169922, -104.97335815429688], [39.75574493408203, -104.97335815429688], [39.75540542602539, -104.97335815429688], [39.75531005859375, -104.97335815429688], [39.75495147705078, -104.97335815429688], [39.75469970703125, -104.97335815429688], [39.754547119140625, -104.97335815429688], [39.75442886352539, -104.97335815429688], [39.753578186035156, -104.97335815429688], [39.75333786010742, -104.97335815429688], [39.75325012207031, -104.97335815429688], [39.75314712524414, -104.97335815429688], [39.75208282470703, -104.97335815429688], [39.751991271972656, -104.97335815429688], [39.751895904541016, -104.97335815429688], [39.75139236450195, -104.9733657836914], [39.75082778930664, -104.9733657836914], [39.750732421875, -104.9733657836914], [39.75063705444336, -104.9733657836914], [39.750423431396484, -104.9733657836914], [39.750282287597656, -104.9733657836914], [39.75018310546875, -104.9733657836914], [39.749576568603516, -104.9733657836914], [39.74947738647461, -104.9733657836914], [39.74938201904297, -104.9733657836914], [39.74884033203125, -104.9733657836914], [39.74821853637695, -104.97337341308594], [39.74812698364258, -104.97337341308594], [39.748016357421875, -104.97337341308594], [39.747798919677734, -104.97337341308594], [39.74757766723633, -104.97337341308594], [39.74747085571289, -104.97337341308594], [39.74736785888672, -104.97337341308594], [39.74721908569336, -104.97337341308594], [39.747066497802734, -104.97337341308594], [39.746952056884766, -104.97337341308594], [39.746864318847656, -104.97337341308594], [39.74663162231445, -104.97337341308594], [39.746551513671875, -104.97338104248047], [39.746482849121094, -104.97338104248047], [39.7460823059082, -104.97338104248047], [39.74594497680664, -104.97338104248047], [39.74583435058594, -104.97338104248047], [39.74509048461914, -104.97340393066406], [39.745052337646484, -104.97340393066406], [39.745018005371094, -104.97344207763672], [39.744972229003906, -104.97344970703125], [39.744937896728516, -104.97344970703125], [39.744834899902344, -104.97339630126953], [39.744834899902344, -104.97355651855469], [39.744834899902344, -104.97415924072266], [39.74483871459961, -104.97454833984375], [39.74483871459961, -104.97476196289062], [39.74464416503906, -104.97476196289062], [39.744606018066406, -104.97476196289062], [39.74433517456055, -104.97476959228516], [39.74381637573242, -104.97476959228516], [39.74373245239258, -104.97476959228516], [39.743377685546875, -104.97477722167969], [39.74324417114258, -104.97477722167969], [39.743133544921875, -104.97477722167969], [39.7426872253418, -104.97477722167969], [39.74175262451172, -104.97477722167969], [39.74166488647461, -104.97477722167969], [39.74156951904297, -104.97477722167969], [39.7412109375, -104.97478485107422], [39.740718841552734, -104.97479248046875], [39.74055862426758, -104.97479248046875], [39.74032211303711, -104.97479248046875], [39.74012756347656, -104.97480010986328], [39.740020751953125, -104.97480010986328], [39.740020751953125, -104.9746322631836], [39.740020751953125, -104.97451782226562], [39.74002456665039, -104.97415924072266], [39.73991775512695, -104.97415924072266], [39.73970031738281, -104.97415924072266], [39.73955535888672, -104.97415161132812], [39.739315032958984, -104.97415161132812], [39.73896789550781, -104.97415161132812], [39.738609313964844, -104.97415161132812], [39.73850631713867, -104.9741439819336], [39.73841857910156, -104.9741439819336], [39.73833465576172, -104.9741439819336], [39.736942291259766, -104.9741439819336], [39.736881256103516, -104.9741439819336], [39.73681640625, -104.9741439819336], [39.73567581176758, -104.97412109375], [39.735252380371094, -104.97411346435547], [39.735164642333984, -104.97411346435547], [39.735069274902344, -104.97411346435547], [39.73379898071289, -104.97410583496094], [39.73370361328125, -104.97410583496094], [39.733612060546875, -104.97410583496094], [39.73240280151367, -104.97410583496094], [39.732357025146484, -104.97410583496094], [39.73214340209961, -104.97410583496094], [39.7320556640625, -104.97410583496094], [39.73196029663086, -104.97410583496094], [39.731422424316406, -104.97410583496094], [39.73128890991211, -104.97410583496094], [39.730960845947266, -104.97410583496094], [39.73088455200195, -104.97410583496094], [39.73067855834961, -104.97410583496094], [39.73054504394531, -104.97410583496094], [39.7304573059082, -104.97410583496094], [39.730369567871094, -104.97410583496094], [39.73027420043945, -104.97410583496094], [39.73003387451172, -104.97410583496094], [39.729976654052734, -104.97410583496094], [39.729896545410156, -104.97410583496094], [39.72964859008789, -104.97410583496094], [39.7294807434082, -104.97410583496094], [39.729434967041016, -104.97410583496094], [39.72917175292969, -104.97410583496094], [39.72907257080078, -104.97410583496094], [39.72898864746094, -104.97410583496094], [39.727378845214844, -104.9740982055664], [39.72727966308594, -104.9740982055664], [39.727195739746094, -104.9740982055664], [39.7259635925293, -104.9740982055664], [39.72566604614258, -104.97409057617188], [39.7255859375, -104.97409057617188], [39.72549819946289, -104.97409057617188], [39.725337982177734, -104.97409057617188], [39.7252082824707, -104.97409057617188], [39.724693298339844, -104.97409057617188], [39.72453689575195, -104.97409057617188], [39.72406768798828, -104.97408294677734], [39.72374725341797, -104.97408294677734], [39.72247314453125, -104.97408294677734], [39.72218322753906, -104.97408294677734], [39.72205352783203, -104.97408294677734], [39.721946716308594, -104.97408294677734], [39.72013473510742, -104.97406768798828], [39.719642639160156, -104.97406005859375], [39.71931457519531, -104.97406005859375], [39.71918869018555, -104.97406005859375], [39.718971252441406, -104.97405242919922], [39.71888732910156, -104.97404479980469], [39.71880340576172, -104.97403717041016], [39.71875, -104.97402954101562], [39.71870422363281, -104.9740219116211], [39.718650817871094, -104.97401428222656], [39.71857452392578, -104.97399139404297], [39.718505859375, -104.97396850585938], [39.71845245361328, -104.97393798828125], [39.71842956542969, -104.97392272949219], [39.71839141845703, -104.97390747070312], [39.71834945678711, -104.97386932373047], [39.718318939208984, -104.97382354736328], [39.71824264526367, -104.97368621826172], [39.71818923950195, -104.97358703613281], [39.71816635131836, -104.97354888916016], [39.71815490722656, -104.9735336303711], [39.71811294555664, -104.97348022460938], [39.71806335449219, -104.97343444824219], [39.71802520751953, -104.97341918945312], [39.717979431152344, -104.97340393066406], [39.717952728271484, -104.97339630126953], [39.71792221069336, -104.973388671875], [39.717899322509766, -104.973388671875], [39.71767807006836, -104.973388671875], [39.716922760009766, -104.973388671875], [39.71653366088867, -104.97339630126953], [39.71645736694336, -104.97339630126953], [39.71589660644531, -104.97339630126953], [39.71546936035156, -104.97341918945312], [39.71541976928711, -104.97341918945312], [39.71538543701172, -104.97342681884766], [39.71536636352539, -104.97342681884766], [39.71527862548828, -104.97342681884766], [39.7148551940918, -104.97344970703125], [39.71479415893555, -104.97344970703125], [39.71472930908203, -104.97345733642578], [39.714656829833984, -104.97344970703125], [39.71451950073242, -104.97344207763672], [39.71427917480469, -104.9734115600586], [39.712989807128906, -104.97340393066406], [39.71291732788086, -104.97340393066406], [39.71285629272461, -104.97340393066406], [39.71247482299805, -104.97340393066406], [39.711551666259766, -104.97340393066406], [39.71137237548828, -104.97340393066406], [39.711204528808594, -104.97340393066406], [39.71110534667969, -104.97340393066406], [39.711021423339844, -104.97340393066406], [39.7109489440918, -104.97340393066406], [39.710845947265625, -104.97340393066406], [39.709381103515625, -104.973388671875], [39.70929718017578, -104.973388671875], [39.707820892333984, -104.973388671875], [39.707557678222656, -104.973388671875], [39.70749282836914, -104.973388671875], [39.707420349121094, -104.973388671875], [39.70706558227539, -104.97338104248047], [39.70566940307617, -104.97337341308594], [39.70392990112305, -104.973388671875], [39.70386505126953, -104.973388671875], [39.70379638671875, -104.973388671875], [39.70212173461914, -104.97339630126953], [39.70206069946289, -104.97339630126953], [39.70030212402344, -104.97339630126953], [39.70021057128906, -104.97340393066406], [39.700138092041016, -104.97339630126953], [39.698429107666016, -104.97340393066406], [39.69660949707031, -104.9734115600586], [39.69625473022461, -104.97341918945312], [39.694740295410156, -104.97341918945312], [39.694149017333984, -104.97343444824219], [39.69339370727539, -104.97343444824219], [39.69325256347656, -104.97343444824219], [39.69306564331055, -104.97342681884766], [39.6929817199707, -104.97342681884766], [39.6929817199707, -104.97357177734375], [39.6929817199707, -104.97403717041016], [39.6929817199707, -104.974609375], [39.69298553466797, -104.97517395019531], [39.6929817199707, -104.97577667236328]],\n", - " {"bubblingMouseEvents": true, "color": "#8104a7", "dashArray": null, "dashOffset": null, "fill": false, "fillColor": "#8104a7", "fillOpacity": 0.2, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "noClip": false, "opacity": 0.8, "smoothFactor": 1.0, "stroke": true, "weight": 10}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " var poly_line_402257b76627588e21735bcf67d8a108 = L.polyline(\n", + " [[39.77902603149414, -104.96916961669922], [39.7789306640625, -104.96929931640625], [39.778900146484375, -104.9693374633789], [39.77882766723633, -104.96943664550781], [39.778751373291016, -104.96954345703125], [39.7786979675293, -104.96961975097656], [39.77864456176758, -104.96971130371094], [39.77876281738281, -104.96937561035156], [39.77878952026367, -104.96929931640625], [39.778804779052734, -104.9692153930664], [39.77880096435547, -104.96912384033203], [39.778785705566406, -104.96903991699219], [39.77874755859375, -104.96894836425781], [39.778587341308594, -104.9686508178711], [39.778480529785156, -104.96852111816406], [39.77839660644531, -104.96841430664062], [39.778324127197266, -104.96851348876953], [39.778228759765625, -104.96863555908203], [39.778076171875, -104.96883392333984], [39.777626037597656, -104.96941375732422], [39.7774772644043, -104.96961212158203], [39.77703857421875, -104.97017669677734], [39.776737213134766, -104.97056579589844], [39.77666473388672, -104.97066497802734], [39.7766227722168, -104.97071838378906], [39.776371002197266, -104.97103881835938], [39.77608108520508, -104.9714126586914], [39.775978088378906, -104.97154998779297], [39.774810791015625, -104.97306060791016], [39.77475357055664, -104.97313690185547], [39.77467346191406, -104.97323608398438], [39.77459716796875, -104.97333526611328], [39.773738861083984, -104.97444915771484], [39.77363586425781, -104.97457885742188], [39.773353576660156, -104.97494506835938], [39.77303695678711, -104.97535705566406], [39.77297592163086, -104.9754409790039], [39.77290344238281, -104.97553253173828], [39.772544860839844, -104.97599029541016], [39.772335052490234, -104.97626495361328], [39.77207946777344, -104.97659301757812], [39.771976470947266, -104.97673034667969], [39.771705627441406, -104.97708129882812], [39.77125549316406, -104.97766876220703], [39.77039337158203, -104.9787826538086], [39.77033233642578, -104.9788589477539], [39.770263671875, -104.97895050048828], [39.769996643066406, -104.97929382324219], [39.76996994018555, -104.9793930053711], [39.76955032348633, -104.97993469238281], [39.769287109375, -104.98027801513672], [39.7691764831543, -104.98041534423828], [39.769039154052734, -104.98059844970703], [39.76881408691406, -104.98088836669922], [39.768733978271484, -104.98099517822266], [39.76864242553711, -104.98110961914062], [39.76858901977539, -104.9811782836914], [39.76840591430664, -104.98141479492188], [39.7678337097168, -104.98216247558594], [39.76764678955078, -104.9823989868164], [39.76701736450195, -104.98321533203125], [39.766876220703125, -104.9833984375], [39.766693115234375, -104.98363494873047], [39.766624450683594, -104.98372650146484], [39.76657485961914, -104.9837875366211], [39.76653289794922, -104.98384857177734], [39.766178131103516, -104.98429870605469], [39.766021728515625, -104.98450469970703], [39.76557159423828, -104.98507690429688], [39.76506423950195, -104.98573303222656], [39.76464080810547, -104.98627471923828], [39.764495849609375, -104.98646545410156], [39.76442337036133, -104.98655700683594], [39.764347076416016, -104.98664855957031], [39.763763427734375, -104.98738861083984], [39.76366424560547, -104.98750305175781], [39.763572692871094, -104.98760223388672], [39.76346969604492, -104.98770141601562], [39.76337814331055, -104.98778533935547], [39.76326370239258, -104.98786926269531], [39.76316452026367, -104.9879379272461], [39.76304626464844, -104.98800659179688], [39.762916564941406, -104.98807525634766], [39.762813568115234, -104.98812103271484], [39.76266860961914, -104.98816680908203], [39.76252746582031, -104.98819732666016], [39.762413024902344, -104.98820495605469], [39.762290954589844, -104.98821258544922], [39.76216125488281, -104.98821258544922], [39.762062072753906, -104.98820495605469], [39.76179885864258, -104.9881591796875], [39.76161575317383, -104.98812103271484], [39.76142501831055, -104.98808288574219], [39.76121520996094, -104.98804473876953], [39.75983428955078, -104.98776245117188], [39.75953674316406, -104.98770141601562], [39.75946807861328, -104.98763275146484], [39.75936508178711, -104.98761749267578], [39.7588996887207, -104.987548828125], [39.758426666259766, -104.98747253417969], [39.758270263671875, -104.9874496459961], [39.75812911987305, -104.98744201660156], [39.75796127319336, -104.98744201660156], [39.75767517089844, -104.9874267578125], [39.75761032104492, -104.9874267578125], [39.75736618041992, -104.98741912841797], [39.757179260253906, -104.98741149902344], [39.757102966308594, -104.98741149902344], [39.756961822509766, -104.98741149902344], [39.756805419921875, -104.9874038696289], [39.756404876708984, -104.9874038696289], [39.75601577758789, -104.9874038696289], [39.75578308105469, -104.98739624023438], [39.75563049316406, -104.98739624023438], [39.755496978759766, -104.98739624023438], [39.75507736206055, -104.98738861083984], [39.75468063354492, -104.98738861083984], [39.75453186035156, -104.98738098144531], [39.754398345947266, -104.98738098144531], [39.754364013671875, -104.98738098144531], [39.75428009033203, -104.98738861083984], [39.75388717651367, -104.98738861083984], [39.753604888916016, -104.98738861083984], [39.75343704223633, -104.98738861083984], [39.7532844543457, -104.98738861083984], [39.75323486328125, -104.98738861083984], [39.75295639038086, -104.98738861083984], [39.752933502197266, -104.98738861083984], [39.752662658691406, -104.98738861083984], [39.752262115478516, -104.98738861083984], [39.75224304199219, -104.98738098144531], [39.751827239990234, -104.98738098144531], [39.75173568725586, -104.98738098144531], [39.751583099365234, -104.98738098144531], [39.75148391723633, -104.98738098144531], [39.751014709472656, -104.98738098144531], [39.750850677490234, -104.98738098144531], [39.75082015991211, -104.98738098144531], [39.750736236572266, -104.98738098144531], [39.750389099121094, -104.98737335205078], [39.75023651123047, -104.98737335205078], [39.7501106262207, -104.98737335205078], [39.7497673034668, -104.98737335205078], [39.74958419799805, -104.98737335205078], [39.74951171875, -104.98737335205078], [39.749412536621094, -104.98737335205078], [39.74927520751953, -104.98738098144531], [39.749168395996094, -104.98738098144531], [39.74892044067383, -104.98738098144531], [39.74868392944336, -104.98738098144531], [39.74851989746094, -104.98738098144531], [39.74822235107422, -104.98738098144531], [39.74802017211914, -104.98738098144531], [39.7476692199707, -104.98738098144531], [39.74758529663086, -104.98738098144531], [39.74751281738281, -104.98738098144531], [39.7474365234375, -104.98738098144531], [39.747379302978516, -104.98738098144531], [39.74735641479492, -104.98738098144531], [39.74730682373047, -104.98738098144531], [39.74697494506836, -104.98738098144531], [39.746944427490234, -104.98738098144531], [39.74678039550781, -104.98738861083984], [39.74667739868164, -104.98738861083984], [39.74653244018555, -104.98738861083984], [39.746482849121094, -104.98738861083984], [39.74626541137695, -104.98738861083984], [39.74618148803711, -104.98738861083984], [39.74605178833008, -104.98738861083984], [39.745948791503906, -104.98738861083984], [39.74554443359375, -104.98738861083984], [39.745418548583984, -104.98738861083984], [39.74506378173828, -104.98739624023438], [39.74480438232422, -104.98739624023438], [39.74473571777344, -104.9874038696289], [39.74430847167969, -104.98739624023438], [39.743526458740234, -104.98739624023438], [39.74336242675781, -104.98739624023438], [39.74320602416992, -104.98739624023438], [39.74302291870117, -104.98739624023438], [39.74254608154297, -104.98739624023438], [39.74245834350586, -104.98739624023438], [39.74220275878906, -104.98739624023438], [39.74214172363281, -104.98738861083984], [39.74182891845703, -104.98738861083984], [39.74177932739258, -104.98738861083984], [39.7416877746582, -104.98738861083984], [39.74163818359375, -104.98738098144531], [39.74156188964844, -104.98738861083984], [39.74149703979492, -104.98738861083984], [39.741416931152344, -104.98738861083984], [39.74137496948242, -104.98738861083984], [39.74129867553711, -104.98738861083984], [39.7410888671875, -104.98738861083984], [39.74089050292969, -104.98739624023438], [39.740875244140625, -104.98739624023438], [39.74071502685547, -104.98739624023438], [39.740631103515625, -104.98739624023438], [39.740478515625, -104.98739624023438], [39.74021530151367, -104.9874038696289], [39.74014663696289, -104.9874038696289], [39.74000930786133, -104.9874038696289], [39.73992919921875, -104.9874038696289], [39.73912048339844, -104.98739624023438], [39.73855209350586, -104.98739624023438], [39.73845672607422, -104.98739624023438], [39.73835372924805, -104.98739624023438], [39.73801040649414, -104.98739624023438], [39.73710250854492, -104.98738861083984], [39.73695373535156, -104.98738861083984], [39.736900329589844, -104.98738861083984], [39.736846923828125, -104.98738861083984], [39.73676300048828, -104.98738861083984], [39.73644256591797, -104.98739624023438], [39.73640441894531, -104.98739624023438], [39.736244201660156, -104.98739624023438], [39.73619079589844, -104.98739624023438], [39.73557662963867, -104.98739624023438], [39.73536682128906, -104.98739624023438], [39.73527526855469, -104.98739624023438], [39.73518753051758, -104.98739624023438], [39.73509216308594, -104.98739624023438], [39.73466110229492, -104.98739624023438], [39.734039306640625, -104.9874038696289], [39.73394775390625, -104.98739624023438], [39.733848571777344, -104.9874038696289], [39.73375701904297, -104.9874038696289], [39.73365020751953, -104.9874038696289], [39.73337173461914, -104.9874038696289], [39.733306884765625, -104.9874038696289], [39.732810974121094, -104.9874038696289], [39.732444763183594, -104.98741149902344], [39.732147216796875, -104.98741149902344], [39.7320556640625, -104.98741149902344], [39.731964111328125, -104.98741149902344], [39.73185348510742, -104.98741149902344], [39.73183059692383, -104.98741149902344], [39.73168182373047, -104.98741149902344], [39.73122024536133, -104.98741912841797], [39.731178283691406, -104.98741912841797], [39.73095703125, -104.98741912841797], [39.73054885864258, -104.98741912841797], [39.73045349121094, -104.98741912841797], [39.73037338256836, -104.98741912841797], [39.730010986328125, -104.98741912841797], [39.729522705078125, -104.98741912841797], [39.72943115234375, -104.98741912841797], [39.72917175292969, -104.98741912841797], [39.72908020019531, -104.98741912841797], [39.7289924621582, -104.98741912841797], [39.728668212890625, -104.98741912841797], [39.72862243652344, -104.98741912841797], [39.72829055786133, -104.98741912841797], [39.727420806884766, -104.98741912841797], [39.727298736572266, -104.98741912841797], [39.72718048095703, -104.98741912841797], [39.72665786743164, -104.9874267578125], [39.72663497924805, -104.9874267578125], [39.726600646972656, -104.9874267578125], [39.726375579833984, -104.98743438720703], [39.726226806640625, -104.98744201660156], [39.726112365722656, -104.98744201660156], [39.72574996948242, -104.98745727539062], [39.72563934326172, -104.98746490478516], [39.72555923461914, -104.98746490478516], [39.725223541259766, -104.98747253417969], [39.7251091003418, -104.98747253417969], [39.724884033203125, -104.98748016357422], [39.72444152832031, -104.98748779296875], [39.72422409057617, -104.98748779296875], [39.72414779663086, -104.98748779296875], [39.72405242919922, -104.98748779296875], [39.72385025024414, -104.98748779296875], [39.72378921508789, -104.98748779296875], [39.72360610961914, -104.98748779296875], [39.72319793701172, -104.98750305175781], [39.723026275634766, -104.98751068115234], [39.722869873046875, -104.98751068115234], [39.72262191772461, -104.98751068115234], [39.72255325317383, -104.98751068115234], [39.72245788574219, -104.98751068115234], [39.72215270996094, -104.98750305175781], [39.72206497192383, -104.98750305175781], [39.72195816040039, -104.98749542236328], [39.7216911315918, -104.98748779296875], [39.72103500366211, -104.98748779296875], [39.720943450927734, -104.98748779296875], [39.720863342285156, -104.98748779296875], [39.71990966796875, -104.98748779296875], [39.71987533569336, -104.98748779296875], [39.719451904296875, -104.98748779296875], [39.7193603515625, -104.98748779296875], [39.71928787231445, -104.98748779296875], [39.71902847290039, -104.98748779296875], [39.71844482421875, -104.98748779296875], [39.71834945678711, -104.98748779296875], [39.7182731628418, -104.98748779296875], [39.71819305419922, -104.98748779296875], [39.71754455566406, -104.98748779296875], [39.717464447021484, -104.98748779296875], [39.7174186706543, -104.98748779296875], [39.716644287109375, -104.98748779296875], [39.71656799316406, -104.98748779296875], [39.71649932861328, -104.98748779296875], [39.716224670410156, -104.98749542236328], [39.71613311767578, -104.98749542236328], [39.71575927734375, -104.98750305175781], [39.71568298339844, -104.98750305175781], [39.715606689453125, -104.98750305175781], [39.71514892578125, -104.98751831054688], [39.714847564697266, -104.98753356933594], [39.71476364135742, -104.98753356933594], [39.71470260620117, -104.98753356933594], [39.713897705078125, -104.987548828125], [39.713294982910156, -104.987548828125], [39.71319580078125, -104.987548828125], [39.71306610107422, -104.98755645751953], [39.71297836303711, -104.98755645751953], [39.71291732788086, -104.98755645751953], [39.712486267089844, -104.98756408691406], [39.71209716796875, -104.9875717163086], [39.71201705932617, -104.98757934570312], [39.71174240112305, -104.98757934570312], [39.711578369140625, -104.98758697509766], [39.711280822753906, -104.98759460449219], [39.71114730834961, -104.98759460449219], [39.71101379394531, -104.98759460449219], [39.71085739135742, -104.98759460449219], [39.71025085449219, -104.98760986328125], [39.71002960205078, -104.98760986328125], [39.70989227294922, -104.98761749267578], [39.70948028564453, -104.98761749267578], [39.70942306518555, -104.98760986328125], [39.70934295654297, -104.98761749267578], [39.709259033203125, -104.98761749267578], [39.70914840698242, -104.98762512207031], [39.7091064453125, -104.98762512207031], [39.70846939086914, -104.9876480102539], [39.70835876464844, -104.9876480102539], [39.70762634277344, -104.9876480102539], [39.707542419433594, -104.9876480102539], [39.707462310791016, -104.98764038085938], [39.7066535949707, -104.98760223388672], [39.70616912841797, -104.98758697509766], [39.705841064453125, -104.9875717163086], [39.70573806762695, -104.98756408691406], [39.705665588378906, -104.98755645751953], [39.705406188964844, -104.98754119873047], [39.705223083496094, -104.98753356933594], [39.705101013183594, -104.9875259399414], [39.704872131347656, -104.9875259399414], [39.7047119140625, -104.9875259399414], [39.704627990722656, -104.98751831054688], [39.70394515991211, -104.98751068115234], [39.703880310058594, -104.98751068115234], [39.70368194580078, -104.98750305175781], [39.70335006713867, -104.98750305175781], [39.70302963256836, -104.98750305175781], [39.7028694152832, -104.98750305175781], [39.70270538330078, -104.98751831054688], [39.70259475708008, -104.9875259399414], [39.702491760253906, -104.98753356933594], [39.70227813720703, -104.987548828125], [39.7021369934082, -104.98755645751953], [39.70204162597656, -104.98756408691406], [39.700843811035156, -104.98760986328125], [39.700782775878906, -104.98749542236328], [39.70073318481445, -104.9874038696289], [39.700687408447266, -104.98731994628906], [39.700660705566406, -104.98727416992188], [39.70061111450195, -104.9871826171875], [39.70054626464844, -104.98707580566406], [39.70036315917969, -104.98675537109375], [39.70024490356445, -104.986572265625], [39.70008850097656, -104.98636627197266], [39.700042724609375, -104.98631286621094], [39.69866180419922, -104.9847412109375], [39.6981086730957, -104.98410034179688], [39.69713592529297, -104.98299407958984], [39.69563674926758, -104.98123168945312], [39.6947135925293, -104.9800796508789], [39.69377136230469, -104.97888946533203], [39.693267822265625, -104.97833251953125], [39.6928596496582, -104.9778823852539], [39.692665100097656, -104.97766876220703], [39.69175720214844, -104.97666931152344], [39.691261291503906, -104.97602081298828], [39.690696716308594, -104.97518920898438]],\n", + " {"bubblingMouseEvents": true, "color": "#0c0786", "dashArray": null, "dashOffset": null, "fill": false, "fillColor": "#0c0786", "fillOpacity": 0.2, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "noClip": false, "opacity": 0.8, "smoothFactor": 1.0, "stroke": true, "weight": 10}\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " poly_line_0ff458fccdc2eac72411e88597e5a7bb.bindTooltip(\n", + " poly_line_402257b76627588e21735bcf67d8a108.bindTooltip(\n", " `<div>\n", - " 0.28043218270205944\n", + " 0.2536668087584479\n", " </div>`,\n", " {"sticky": true}\n", " );\n", " \n", " \n", - " var marker_5b024e09f44e0c69d20201e7c466e857 = L.marker(\n", + " var marker_1b0a52e585f073664678f109937b3108 = L.marker(\n", " [39.77902603149414, -104.96916961669922],\n", " {}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " var icon_a4828c5314597a59594503d042d5de44 = L.AwesomeMarkers.icon(\n", + " var icon_b6a90517884c06ab1b7313f7925f898e = L.AwesomeMarkers.icon(\n", " {"extraClasses": "fa-rotate-0", "icon": "circle", "iconColor": "white", "markerColor": "green", "prefix": "fa"}\n", " );\n", - " marker_5b024e09f44e0c69d20201e7c466e857.setIcon(icon_a4828c5314597a59594503d042d5de44);\n", + " marker_1b0a52e585f073664678f109937b3108.setIcon(icon_b6a90517884c06ab1b7313f7925f898e);\n", " \n", " \n", - " marker_5b024e09f44e0c69d20201e7c466e857.bindTooltip(\n", + " marker_1b0a52e585f073664678f109937b3108.bindTooltip(\n", " `<div>\n", " Origin\n", " </div>`,\n", @@ -1148,19 +1144,19 @@ " );\n", " \n", " \n", - " var marker_e2f0f10ac30ff5067fbe03ae61cffc2f = L.marker(\n", - " [39.6929817199707, -104.97577667236328],\n", + " var marker_574d40658a657333ab28dfa70f2843cd = L.marker(\n", + " [39.690696716308594, -104.97518920898438],\n", " {}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " var icon_151e766457e8097b36b4cbf7f43ea64a = L.AwesomeMarkers.icon(\n", + " var icon_c88d519946073f3e85809d1f45d7a82d = L.AwesomeMarkers.icon(\n", " {"extraClasses": "fa-rotate-0", "icon": "circle", "iconColor": "white", "markerColor": "red", "prefix": "fa"}\n", " );\n", - " marker_e2f0f10ac30ff5067fbe03ae61cffc2f.setIcon(icon_151e766457e8097b36b4cbf7f43ea64a);\n", + " marker_574d40658a657333ab28dfa70f2843cd.setIcon(icon_c88d519946073f3e85809d1f45d7a82d);\n", " \n", " \n", - " marker_e2f0f10ac30ff5067fbe03ae61cffc2f.bindTooltip(\n", + " marker_574d40658a657333ab28dfa70f2843cd.bindTooltip(\n", " `<div>\n", " Destination\n", " </div>`,\n", @@ -1168,33 +1164,33 @@ " );\n", " \n", " \n", - " var poly_line_bef927904d15311d3f54d83fb4286a1a = L.polyline(\n", - " [[39.77902603149414, -104.96916961669922], [39.77896499633789, -104.96910095214844], [39.77878189086914, -104.96887969970703], [39.778751373291016, -104.96884155273438], [39.778587341308594, -104.9686508178711], [39.778480529785156, -104.96852111816406], [39.77839660644531, -104.96841430664062], [39.778324127197266, -104.96851348876953], [39.778228759765625, -104.96863555908203], [39.778076171875, -104.96883392333984], [39.777626037597656, -104.96941375732422], [39.7774772644043, -104.96961212158203], [39.77703857421875, -104.97017669677734], [39.776737213134766, -104.97056579589844], [39.77666473388672, -104.97066497802734], [39.7766227722168, -104.97071838378906], [39.776371002197266, -104.97103881835938], [39.77608108520508, -104.9714126586914], [39.775978088378906, -104.97154998779297], [39.774810791015625, -104.97306060791016], [39.77475357055664, -104.97313690185547], [39.77467346191406, -104.97323608398438], [39.77459716796875, -104.97333526611328], [39.773738861083984, -104.97444915771484], [39.77363586425781, -104.97457885742188], [39.773353576660156, -104.97494506835938], [39.77303695678711, -104.97535705566406], [39.77297592163086, -104.9754409790039], [39.77290344238281, -104.97553253173828], [39.772544860839844, -104.97599029541016], [39.772335052490234, -104.97626495361328], [39.77207946777344, -104.97659301757812], [39.771976470947266, -104.97673034667969], [39.771705627441406, -104.97708129882812], [39.77125549316406, -104.97766876220703], [39.77039337158203, -104.9787826538086], [39.77033233642578, -104.9788589477539], [39.770263671875, -104.97895050048828], [39.769996643066406, -104.97929382324219], [39.76996994018555, -104.9793930053711], [39.76955032348633, -104.97993469238281], [39.769287109375, -104.98027801513672], [39.7691764831543, -104.98041534423828], [39.769039154052734, -104.98059844970703], [39.76881408691406, -104.98088836669922], [39.768733978271484, -104.98099517822266], [39.76864242553711, -104.98110961914062], [39.76858901977539, -104.9811782836914], [39.76840591430664, -104.98141479492188], [39.7678337097168, -104.98216247558594], [39.76764678955078, -104.9823989868164], [39.76701736450195, -104.98321533203125], [39.766876220703125, -104.9833984375], [39.766693115234375, -104.98363494873047], [39.766624450683594, -104.98372650146484], [39.76657485961914, -104.9837875366211], [39.76653289794922, -104.98384857177734], [39.766178131103516, -104.98429870605469], [39.766021728515625, -104.98450469970703], [39.76557159423828, -104.98507690429688], [39.76506423950195, -104.98573303222656], [39.76464080810547, -104.98627471923828], [39.764495849609375, -104.98646545410156], [39.76442337036133, -104.98655700683594], [39.764347076416016, -104.98664855957031], [39.763763427734375, -104.98738861083984], [39.76366424560547, -104.98750305175781], [39.763572692871094, -104.98760223388672], [39.76346969604492, -104.98770141601562], [39.76337814331055, -104.98778533935547], [39.76326370239258, -104.98786926269531], [39.76316452026367, -104.9879379272461], [39.76304626464844, -104.98800659179688], [39.762916564941406, -104.98807525634766], [39.762813568115234, -104.98812103271484], [39.76266860961914, -104.98816680908203], [39.76252746582031, -104.98819732666016], [39.762413024902344, -104.98820495605469], [39.762290954589844, -104.98821258544922], [39.76216125488281, -104.98821258544922], [39.762062072753906, -104.98820495605469], [39.76179885864258, -104.9881591796875], [39.76161575317383, -104.98812103271484], [39.76142501831055, -104.98808288574219], [39.76121520996094, -104.98804473876953], [39.75983428955078, -104.98776245117188], [39.75953674316406, -104.98770141601562], [39.75946807861328, -104.98763275146484], [39.75936508178711, -104.98761749267578], [39.7588996887207, -104.987548828125], [39.758426666259766, -104.98747253417969], [39.758270263671875, -104.9874496459961], [39.75812911987305, -104.98744201660156], [39.75796127319336, -104.98744201660156], [39.75767517089844, -104.9874267578125], [39.75761032104492, -104.9874267578125], [39.75736618041992, -104.98741912841797], [39.757179260253906, -104.98741149902344], [39.757102966308594, -104.98741149902344], [39.756961822509766, -104.98741149902344], [39.756805419921875, -104.9874038696289], [39.756404876708984, -104.9874038696289], [39.75601577758789, -104.9874038696289], [39.75578308105469, -104.98739624023438], [39.75563049316406, -104.98739624023438], [39.755496978759766, -104.98739624023438], [39.75507736206055, -104.98738861083984], [39.75468063354492, -104.98738861083984], [39.75453186035156, -104.98738098144531], [39.754398345947266, -104.98738098144531], [39.754364013671875, -104.98738098144531], [39.75428009033203, -104.98738861083984], [39.75388717651367, -104.98738861083984], [39.753604888916016, -104.98738861083984], [39.75343704223633, -104.98738861083984], [39.7532844543457, -104.98738861083984], [39.75323486328125, -104.98738861083984], [39.75295639038086, -104.98738861083984], [39.752933502197266, -104.98738861083984], [39.752662658691406, -104.98738861083984], [39.752262115478516, -104.98738861083984], [39.75224304199219, -104.98738098144531], [39.751827239990234, -104.98738098144531], [39.75173568725586, -104.98738098144531], [39.751583099365234, -104.98738098144531], [39.75148391723633, -104.98738098144531], [39.751014709472656, -104.98738098144531], [39.750850677490234, -104.98738098144531], [39.75082015991211, -104.98738098144531], [39.750736236572266, -104.98738098144531], [39.750389099121094, -104.98737335205078], [39.75023651123047, -104.98737335205078], [39.7501106262207, -104.98737335205078], [39.7497673034668, -104.98737335205078], [39.74958419799805, -104.98737335205078], [39.74951171875, -104.98737335205078], [39.749412536621094, -104.98737335205078], [39.74927520751953, -104.98738098144531], [39.749168395996094, -104.98738098144531], [39.74892044067383, -104.98738098144531], [39.74868392944336, -104.98738098144531], [39.74851989746094, -104.98738098144531], [39.74822235107422, -104.98738098144531], [39.74802017211914, -104.98738098144531], [39.7476692199707, -104.98738098144531], [39.74758529663086, -104.98738098144531], [39.74751281738281, -104.98738098144531], [39.7474365234375, -104.98738098144531], [39.747379302978516, -104.98738098144531], [39.74735641479492, -104.98738098144531], [39.74730682373047, -104.98738098144531], [39.74697494506836, -104.98738098144531], [39.746944427490234, -104.98738098144531], [39.74678039550781, -104.98738861083984], [39.74667739868164, -104.98738861083984], [39.74653244018555, -104.98738861083984], [39.746482849121094, -104.98738861083984], [39.74626541137695, -104.98738861083984], [39.74618148803711, -104.98738861083984], [39.74605178833008, -104.98738861083984], [39.745948791503906, -104.98738861083984], [39.74554443359375, -104.98738861083984], [39.745418548583984, -104.98738861083984], [39.74506378173828, -104.98739624023438], [39.74480438232422, -104.98739624023438], [39.74473571777344, -104.9874038696289], [39.74430847167969, -104.98739624023438], [39.743526458740234, -104.98739624023438], [39.74336242675781, -104.98739624023438], [39.74320602416992, -104.98739624023438], [39.74302291870117, -104.98739624023438], [39.74254608154297, -104.98739624023438], [39.74245834350586, -104.98739624023438], [39.74220275878906, -104.98739624023438], [39.74214172363281, -104.98738861083984], [39.74182891845703, -104.98738861083984], [39.74177932739258, -104.98738861083984], [39.7416877746582, -104.98738861083984], [39.74163818359375, -104.98738098144531], [39.74156188964844, -104.98738861083984], [39.74149703979492, -104.98738861083984], [39.741416931152344, -104.98738861083984], [39.74137496948242, -104.98738861083984], [39.74129867553711, -104.98738861083984], [39.7410888671875, -104.98738861083984], [39.74089050292969, -104.98739624023438], [39.740875244140625, -104.98739624023438], [39.74071502685547, -104.98739624023438], [39.740631103515625, -104.98739624023438], [39.740478515625, -104.98739624023438], [39.74021530151367, -104.9874038696289], [39.74014663696289, -104.9874038696289], [39.74000930786133, -104.9874038696289], [39.73992919921875, -104.9874038696289], [39.73912048339844, -104.98739624023438], [39.73855209350586, -104.98739624023438], [39.73845672607422, -104.98739624023438], [39.73835372924805, -104.98739624023438], [39.73801040649414, -104.98739624023438], [39.73710250854492, -104.98738861083984], [39.73695373535156, -104.98738861083984], [39.736900329589844, -104.98738861083984], [39.736846923828125, -104.98738861083984], [39.73676300048828, -104.98738861083984], [39.73644256591797, -104.98739624023438], [39.73640441894531, -104.98739624023438], [39.736244201660156, -104.98739624023438], [39.73619079589844, -104.98739624023438], [39.73557662963867, -104.98739624023438], [39.73536682128906, -104.98739624023438], [39.73527526855469, -104.98739624023438], [39.73518753051758, -104.98739624023438], [39.73509216308594, -104.98739624023438], [39.73466110229492, -104.98739624023438], [39.734039306640625, -104.9874038696289], [39.73394775390625, -104.98739624023438], [39.733848571777344, -104.9874038696289], [39.73375701904297, -104.9874038696289], [39.73365020751953, -104.9874038696289], [39.73337173461914, -104.9874038696289], [39.733306884765625, -104.9874038696289], [39.732810974121094, -104.9874038696289], [39.732444763183594, -104.98741149902344], [39.732147216796875, -104.98741149902344], [39.7320556640625, -104.98741149902344], [39.731964111328125, -104.98741149902344], [39.73185348510742, -104.98741149902344], [39.73183059692383, -104.98741149902344], [39.73168182373047, -104.98741149902344], [39.73122024536133, -104.98741912841797], [39.731178283691406, -104.98741912841797], [39.73095703125, -104.98741912841797], [39.73054885864258, -104.98741912841797], [39.73045349121094, -104.98741912841797], [39.73037338256836, -104.98741912841797], [39.730010986328125, -104.98741912841797], [39.729522705078125, -104.98741912841797], [39.72943115234375, -104.98741912841797], [39.72917175292969, -104.98741912841797], [39.72908020019531, -104.98741912841797], [39.7289924621582, -104.98741912841797], [39.728668212890625, -104.98741912841797], [39.72862243652344, -104.98741912841797], [39.72829055786133, -104.98741912841797], [39.727420806884766, -104.98741912841797], [39.727298736572266, -104.98741912841797], [39.72718048095703, -104.98741912841797], [39.72665786743164, -104.9874267578125], [39.72663497924805, -104.9874267578125], [39.726600646972656, -104.9874267578125], [39.726375579833984, -104.98743438720703], [39.726226806640625, -104.98744201660156], [39.726112365722656, -104.98744201660156], [39.72574996948242, -104.98745727539062], [39.72563934326172, -104.98746490478516], [39.72555923461914, -104.98746490478516], [39.725223541259766, -104.98747253417969], [39.7251091003418, -104.98747253417969], [39.724884033203125, -104.98748016357422], [39.72444152832031, -104.98748779296875], [39.72422409057617, -104.98748779296875], [39.72414779663086, -104.98748779296875], [39.72405242919922, -104.98748779296875], [39.72385025024414, -104.98748779296875], [39.72378921508789, -104.98748779296875], [39.72360610961914, -104.98748779296875], [39.72319793701172, -104.98750305175781], [39.723026275634766, -104.98751068115234], [39.722869873046875, -104.98751068115234], [39.72262191772461, -104.98751068115234], [39.72255325317383, -104.98751068115234], [39.72245788574219, -104.98751068115234], [39.72215270996094, -104.98750305175781], [39.72206497192383, -104.98750305175781], [39.72195816040039, -104.98749542236328], [39.7216911315918, -104.98748779296875], [39.72103500366211, -104.98748779296875], [39.720943450927734, -104.98748779296875], [39.720863342285156, -104.98748779296875], [39.71990966796875, -104.98748779296875], [39.71987533569336, -104.98748779296875], [39.719451904296875, -104.98748779296875], [39.7193603515625, -104.98748779296875], [39.71928787231445, -104.98748779296875], [39.71902847290039, -104.98748779296875], [39.71844482421875, -104.98748779296875], [39.71834945678711, -104.98748779296875], [39.7182731628418, -104.98748779296875], [39.71819305419922, -104.98748779296875], [39.71754455566406, -104.98748779296875], [39.717464447021484, -104.98748779296875], [39.7174186706543, -104.98748779296875], [39.716644287109375, -104.98748779296875], [39.71656799316406, -104.98748779296875], [39.71649932861328, -104.98748779296875], [39.716224670410156, -104.98749542236328], [39.71613311767578, -104.98749542236328], [39.71575927734375, -104.98750305175781], [39.71568298339844, -104.98750305175781], [39.715606689453125, -104.98750305175781], [39.71514892578125, -104.98751831054688], [39.714847564697266, -104.98753356933594], [39.71476364135742, -104.98753356933594], [39.71470260620117, -104.98753356933594], [39.713897705078125, -104.987548828125], [39.713294982910156, -104.987548828125], [39.71319580078125, -104.987548828125], [39.71306610107422, -104.98755645751953], [39.71297836303711, -104.98755645751953], [39.71291732788086, -104.98755645751953], [39.712486267089844, -104.98756408691406], [39.71209716796875, -104.9875717163086], [39.71201705932617, -104.98757934570312], [39.71174240112305, -104.98757934570312], [39.711578369140625, -104.98758697509766], [39.711280822753906, -104.98759460449219], [39.71114730834961, -104.98759460449219], [39.71101379394531, -104.98759460449219], [39.71085739135742, -104.98759460449219], [39.71025085449219, -104.98760986328125], [39.71002960205078, -104.98760986328125], [39.70989227294922, -104.98761749267578], [39.70948028564453, -104.98761749267578], [39.70942306518555, -104.98760986328125], [39.70934295654297, -104.98761749267578], [39.709259033203125, -104.98761749267578], [39.70914840698242, -104.98762512207031], [39.7091064453125, -104.98762512207031], [39.70846939086914, -104.9876480102539], [39.70835876464844, -104.9876480102539], [39.70762634277344, -104.9876480102539], [39.707542419433594, -104.9876480102539], [39.707462310791016, -104.98764038085938], [39.7066535949707, -104.98760223388672], [39.70616912841797, -104.98758697509766], [39.705841064453125, -104.9875717163086], [39.70573806762695, -104.98756408691406], [39.705665588378906, -104.98755645751953], [39.705406188964844, -104.98754119873047], [39.705223083496094, -104.98753356933594], [39.705101013183594, -104.9875259399414], [39.704872131347656, -104.9875259399414], [39.7047119140625, -104.9875259399414], [39.704627990722656, -104.98751831054688], [39.70394515991211, -104.98751068115234], [39.703880310058594, -104.98751068115234], [39.70368194580078, -104.98750305175781], [39.70335006713867, -104.98750305175781], [39.70302963256836, -104.98750305175781], [39.7028694152832, -104.98750305175781], [39.70270538330078, -104.98751831054688], [39.70259475708008, -104.9875259399414], [39.702491760253906, -104.98753356933594], [39.70227813720703, -104.987548828125], [39.7021369934082, -104.98755645751953], [39.70204162597656, -104.98756408691406], [39.700843811035156, -104.98760986328125], [39.700782775878906, -104.98749542236328], [39.70073318481445, -104.9874038696289], [39.700687408447266, -104.98731994628906], [39.700660705566406, -104.98727416992188], [39.70061111450195, -104.9871826171875], [39.70054626464844, -104.98707580566406], [39.70036315917969, -104.98675537109375], [39.70024490356445, -104.986572265625], [39.70008850097656, -104.98636627197266], [39.700042724609375, -104.98631286621094], [39.69866180419922, -104.9847412109375], [39.6981086730957, -104.98410034179688], [39.69713592529297, -104.98299407958984], [39.696075439453125, -104.98184967041016], [39.69560623168945, -104.9813003540039], [39.69524383544922, -104.98087310791016], [39.69488525390625, -104.98043823242188], [39.694786071777344, -104.98033905029297], [39.6947021484375, -104.98025512695312], [39.69462585449219, -104.98019409179688], [39.6945915222168, -104.98016357421875], [39.69448471069336, -104.98009490966797], [39.69437789916992, -104.98002624511719], [39.6942024230957, -104.97992706298828], [39.69398498535156, -104.97977447509766], [39.69377899169922, -104.97953033447266], [39.69367599487305, -104.97943115234375], [39.69364929199219, -104.97940063476562], [39.69361114501953, -104.97936248779297], [39.69355010986328, -104.97931671142578], [39.6934814453125, -104.9792709350586], [39.69330978393555, -104.97918701171875], [39.69325637817383, -104.97914123535156], [39.693199157714844, -104.97909545898438], [39.693145751953125, -104.97903442382812], [39.693092346191406, -104.97897338867188], [39.69303512573242, -104.97886657714844], [39.69300079345703, -104.97877502441406], [39.69298553466797, -104.97871398925781], [39.69298553466797, -104.97850036621094], [39.69298553466797, -104.97827911376953], [39.69298553466797, -104.97792053222656], [39.6929931640625, -104.9774398803711], [39.6929931640625, -104.9773941040039], [39.6929931640625, -104.9772720336914], [39.692989349365234, -104.97704315185547], [39.692989349365234, -104.97694396972656], [39.692989349365234, -104.97685241699219], [39.69298553466797, -104.97636413574219], [39.6929817199707, -104.97577667236328]],\n", + " var poly_line_0f7283eac54d7692d977c3a04e427018 = L.polyline(\n", + " [[39.77902603149414, -104.96916961669922], [39.7789306640625, -104.96929931640625], [39.778900146484375, -104.9693374633789], [39.77882766723633, -104.96943664550781], [39.778751373291016, -104.96954345703125], [39.7786979675293, -104.96961975097656], [39.77864456176758, -104.96971130371094], [39.77876281738281, -104.96937561035156], [39.77878952026367, -104.96929931640625], [39.778804779052734, -104.9692153930664], [39.77880096435547, -104.96912384033203], [39.778785705566406, -104.96903991699219], [39.77874755859375, -104.96894836425781], [39.778587341308594, -104.9686508178711], [39.778480529785156, -104.96852111816406], [39.77839660644531, -104.96841430664062], [39.778324127197266, -104.96851348876953], [39.778228759765625, -104.96863555908203], [39.778076171875, -104.96883392333984], [39.777626037597656, -104.96941375732422], [39.7774772644043, -104.96961212158203], [39.77703857421875, -104.97017669677734], [39.776737213134766, -104.97056579589844], [39.77666473388672, -104.97066497802734], [39.7766227722168, -104.97071838378906], [39.776371002197266, -104.97103881835938], [39.77608108520508, -104.9714126586914], [39.775978088378906, -104.97154998779297], [39.774810791015625, -104.97306060791016], [39.77475357055664, -104.97313690185547], [39.77467346191406, -104.97323608398438], [39.77459716796875, -104.97333526611328], [39.773738861083984, -104.97444915771484], [39.77363586425781, -104.97457885742188], [39.773353576660156, -104.97494506835938], [39.77303695678711, -104.97535705566406], [39.77297592163086, -104.9754409790039], [39.77290344238281, -104.97553253173828], [39.772544860839844, -104.97599029541016], [39.772335052490234, -104.97626495361328], [39.77207946777344, -104.97659301757812], [39.771976470947266, -104.97673034667969], [39.771705627441406, -104.97708129882812], [39.77125549316406, -104.97766876220703], [39.77039337158203, -104.9787826538086], [39.77033233642578, -104.9788589477539], [39.770263671875, -104.97895050048828], [39.769996643066406, -104.97929382324219], [39.76996994018555, -104.9793930053711], [39.76955032348633, -104.97993469238281], [39.769287109375, -104.98027801513672], [39.7691764831543, -104.98041534423828], [39.769039154052734, -104.98059844970703], [39.76881408691406, -104.98088836669922], [39.768733978271484, -104.98099517822266], [39.76864242553711, -104.98110961914062], [39.76858901977539, -104.9811782836914], [39.76840591430664, -104.98141479492188], [39.7678337097168, -104.98216247558594], [39.76764678955078, -104.9823989868164], [39.76701736450195, -104.98321533203125], [39.766876220703125, -104.9833984375], [39.766693115234375, -104.98363494873047], [39.766624450683594, -104.98372650146484], [39.76657485961914, -104.9837875366211], [39.76653289794922, -104.98384857177734], [39.766178131103516, -104.98429870605469], [39.766021728515625, -104.98450469970703], [39.76557159423828, -104.98507690429688], [39.76506423950195, -104.98573303222656], [39.76464080810547, -104.98627471923828], [39.764495849609375, -104.98646545410156], [39.76442337036133, -104.98655700683594], [39.764347076416016, -104.98664855957031], [39.763763427734375, -104.98738861083984], [39.76366424560547, -104.98750305175781], [39.763572692871094, -104.98760223388672], [39.76346969604492, -104.98770141601562], [39.76337814331055, -104.98778533935547], [39.76326370239258, -104.98786926269531], [39.76316452026367, -104.9879379272461], [39.76304626464844, -104.98800659179688], [39.762916564941406, -104.98807525634766], [39.762813568115234, -104.98812103271484], [39.76266860961914, -104.98816680908203], [39.76252746582031, -104.98819732666016], [39.762413024902344, -104.98820495605469], [39.762290954589844, -104.98821258544922], [39.76216125488281, -104.98821258544922], [39.762062072753906, -104.98820495605469], [39.76179885864258, -104.9881591796875], [39.76161575317383, -104.98812103271484], [39.76142501831055, -104.98808288574219], [39.76121520996094, -104.98804473876953], [39.75983428955078, -104.98776245117188], [39.75953674316406, -104.98770141601562], [39.75946807861328, -104.98763275146484], [39.75936508178711, -104.98761749267578], [39.7588996887207, -104.987548828125], [39.758426666259766, -104.98747253417969], [39.758270263671875, -104.9874496459961], [39.75812911987305, -104.98744201660156], [39.75796127319336, -104.98744201660156], [39.75767517089844, -104.9874267578125], [39.75761032104492, -104.9874267578125], [39.75736618041992, -104.98741912841797], [39.757179260253906, -104.98741149902344], [39.757102966308594, -104.98741149902344], [39.756961822509766, -104.98741149902344], [39.756805419921875, -104.9874038696289], [39.756404876708984, -104.9874038696289], [39.75601577758789, -104.9874038696289], [39.75578308105469, -104.98739624023438], [39.75563049316406, -104.98739624023438], [39.755496978759766, -104.98739624023438], [39.75507736206055, -104.98738861083984], [39.75468063354492, -104.98738861083984], [39.75453186035156, -104.98738098144531], [39.754398345947266, -104.98738098144531], [39.754364013671875, -104.98738098144531], [39.75428009033203, -104.98738861083984], [39.75388717651367, -104.98738861083984], [39.753604888916016, -104.98738861083984], [39.75343704223633, -104.98738861083984], [39.7532844543457, -104.98738861083984], [39.75323486328125, -104.98738861083984], [39.75295639038086, -104.98738861083984], [39.752933502197266, -104.98738861083984], [39.752662658691406, -104.98738861083984], [39.752262115478516, -104.98738861083984], [39.75224304199219, -104.98738098144531], [39.751827239990234, -104.98738098144531], [39.75173568725586, -104.98738098144531], [39.751583099365234, -104.98738098144531], [39.75148391723633, -104.98738098144531], [39.751014709472656, -104.98738098144531], [39.750850677490234, -104.98738098144531], [39.75082015991211, -104.98738098144531], [39.750736236572266, -104.98738098144531], [39.750389099121094, -104.98737335205078], [39.75023651123047, -104.98737335205078], [39.7501106262207, -104.98737335205078], [39.7497673034668, -104.98737335205078], [39.74958419799805, -104.98737335205078], [39.74951171875, -104.98737335205078], [39.749412536621094, -104.98737335205078], [39.74927520751953, -104.98738098144531], [39.749168395996094, -104.98738098144531], [39.74892044067383, -104.98738098144531], [39.74868392944336, -104.98738098144531], [39.74851989746094, -104.98738098144531], [39.74822235107422, -104.98738098144531], [39.74802017211914, -104.98738098144531], [39.7476692199707, -104.98738098144531], [39.74758529663086, -104.98738098144531], [39.74751281738281, -104.98738098144531], [39.7474365234375, -104.98738098144531], [39.747379302978516, -104.98738098144531], [39.74735641479492, -104.98738098144531], [39.74730682373047, -104.98738098144531], [39.74697494506836, -104.98738098144531], [39.746944427490234, -104.98738098144531], [39.74678039550781, -104.98738861083984], [39.74667739868164, -104.98738861083984], [39.74653244018555, -104.98738861083984], [39.746482849121094, -104.98738861083984], [39.74626541137695, -104.98738861083984], [39.74618148803711, -104.98738861083984], [39.74605178833008, -104.98738861083984], [39.745948791503906, -104.98738861083984], [39.74554443359375, -104.98738861083984], [39.745418548583984, -104.98738861083984], [39.74506378173828, -104.98739624023438], [39.74480438232422, -104.98739624023438], [39.74473571777344, -104.9874038696289], [39.74430847167969, -104.98739624023438], [39.743526458740234, -104.98739624023438], [39.74336242675781, -104.98739624023438], [39.74320602416992, -104.98739624023438], [39.74302291870117, -104.98739624023438], [39.74254608154297, -104.98739624023438], [39.74245834350586, -104.98739624023438], [39.74220275878906, -104.98739624023438], [39.74214172363281, -104.98738861083984], [39.74182891845703, -104.98738861083984], [39.74177932739258, -104.98738861083984], [39.7416877746582, -104.98738861083984], [39.74163818359375, -104.98738098144531], [39.74156188964844, -104.98738861083984], [39.74149703979492, -104.98738861083984], [39.741416931152344, -104.98738861083984], [39.74137496948242, -104.98738861083984], [39.74129867553711, -104.98738861083984], [39.7410888671875, -104.98738861083984], [39.74089050292969, -104.98739624023438], [39.740875244140625, -104.98739624023438], [39.74071502685547, -104.98739624023438], [39.740631103515625, -104.98739624023438], [39.740478515625, -104.98739624023438], [39.74021530151367, -104.9874038696289], [39.74014663696289, -104.9874038696289], [39.74000930786133, -104.9874038696289], [39.73992919921875, -104.9874038696289], [39.73912048339844, -104.98739624023438], [39.73855209350586, -104.98739624023438], [39.73845672607422, -104.98739624023438], [39.73835372924805, -104.98739624023438], [39.73801040649414, -104.98739624023438], [39.73710250854492, -104.98738861083984], [39.73695373535156, -104.98738861083984], [39.736900329589844, -104.98738861083984], [39.736846923828125, -104.98738861083984], [39.73676300048828, -104.98738861083984], [39.73644256591797, -104.98739624023438], [39.73640441894531, -104.98739624023438], [39.736244201660156, -104.98739624023438], [39.73619079589844, -104.98739624023438], [39.73557662963867, -104.98739624023438], [39.73536682128906, -104.98739624023438], [39.73527526855469, -104.98739624023438], [39.73518753051758, -104.98739624023438], [39.73509216308594, -104.98739624023438], [39.73466110229492, -104.98739624023438], [39.734039306640625, -104.9874038696289], [39.73394775390625, -104.98739624023438], [39.733848571777344, -104.9874038696289], [39.73375701904297, -104.9874038696289], [39.73365020751953, -104.9874038696289], [39.73337173461914, -104.9874038696289], [39.733306884765625, -104.9874038696289], [39.732810974121094, -104.9874038696289], [39.732444763183594, -104.98741149902344], [39.732147216796875, -104.98741149902344], [39.7320556640625, -104.98741149902344], [39.731964111328125, -104.98741149902344], [39.73185348510742, -104.98741149902344], [39.73183059692383, -104.98741149902344], [39.73168182373047, -104.98741149902344], [39.73122024536133, -104.98741912841797], [39.731178283691406, -104.98741912841797], [39.73095703125, -104.98741912841797], [39.73054885864258, -104.98741912841797], [39.73045349121094, -104.98741912841797], [39.73037338256836, -104.98741912841797], [39.730010986328125, -104.98741912841797], [39.729522705078125, -104.98741912841797], [39.72943115234375, -104.98741912841797], [39.72917175292969, -104.98741912841797], [39.72908020019531, -104.98741912841797], [39.7289924621582, -104.98741912841797], [39.728668212890625, -104.98741912841797], [39.72862243652344, -104.98741912841797], [39.72829055786133, -104.98741912841797], [39.727420806884766, -104.98741912841797], [39.727298736572266, -104.98741912841797], [39.72718048095703, -104.98741912841797], [39.72665786743164, -104.9874267578125], [39.72663497924805, -104.9874267578125], [39.726600646972656, -104.9874267578125], [39.726375579833984, -104.98743438720703], [39.726226806640625, -104.98744201660156], [39.726112365722656, -104.98744201660156], [39.72574996948242, -104.98745727539062], [39.72563934326172, -104.98746490478516], [39.72555923461914, -104.98746490478516], [39.725223541259766, -104.98747253417969], [39.7251091003418, -104.98747253417969], [39.724884033203125, -104.98748016357422], [39.72444152832031, -104.98748779296875], [39.72422409057617, -104.98748779296875], [39.72414779663086, -104.98748779296875], [39.72405242919922, -104.98748779296875], [39.72385025024414, -104.98748779296875], [39.72378921508789, -104.98748779296875], [39.72360610961914, -104.98748779296875], [39.72319793701172, -104.98750305175781], [39.723026275634766, -104.98751068115234], [39.722869873046875, -104.98751068115234], [39.72262191772461, -104.98751068115234], [39.72255325317383, -104.98751068115234], [39.72245788574219, -104.98751068115234], [39.72215270996094, -104.98750305175781], [39.72206497192383, -104.98750305175781], [39.72195816040039, -104.98749542236328], [39.7216911315918, -104.98748779296875], [39.72103500366211, -104.98748779296875], [39.720943450927734, -104.98748779296875], [39.720863342285156, -104.98748779296875], [39.71990966796875, -104.98748779296875], [39.71987533569336, -104.98748779296875], [39.719451904296875, -104.98748779296875], [39.7193603515625, -104.98748779296875], [39.71928787231445, -104.98748779296875], [39.71902847290039, -104.98748779296875], [39.71844482421875, -104.98748779296875], [39.71834945678711, -104.98748779296875], [39.7182731628418, -104.98748779296875], [39.71819305419922, -104.98748779296875], [39.71754455566406, -104.98748779296875], [39.717464447021484, -104.98748779296875], [39.7174186706543, -104.98748779296875], [39.716644287109375, -104.98748779296875], [39.71656799316406, -104.98748779296875], [39.71649932861328, -104.98748779296875], [39.716224670410156, -104.98749542236328], [39.71613311767578, -104.98749542236328], [39.71575927734375, -104.98750305175781], [39.71568298339844, -104.98750305175781], [39.715606689453125, -104.98750305175781], [39.71514892578125, -104.98751831054688], [39.714847564697266, -104.98753356933594], [39.71476364135742, -104.98753356933594], [39.71470260620117, -104.98753356933594], [39.713897705078125, -104.987548828125], [39.713294982910156, -104.987548828125], [39.71319580078125, -104.987548828125], [39.71306610107422, -104.98755645751953], [39.71297836303711, -104.98755645751953], [39.71291732788086, -104.98755645751953], [39.712486267089844, -104.98756408691406], [39.71209716796875, -104.9875717163086], [39.71201705932617, -104.98757934570312], [39.71174240112305, -104.98757934570312], [39.711578369140625, -104.98758697509766], [39.711280822753906, -104.98759460449219], [39.71114730834961, -104.98759460449219], [39.71101379394531, -104.98759460449219], [39.71085739135742, -104.98759460449219], [39.71025085449219, -104.98760986328125], [39.71002960205078, -104.98760986328125], [39.70989227294922, -104.98761749267578], [39.70948028564453, -104.98761749267578], [39.70942306518555, -104.98760986328125], [39.70934295654297, -104.98761749267578], [39.709259033203125, -104.98761749267578], [39.70914840698242, -104.98762512207031], [39.7091064453125, -104.98762512207031], [39.70846939086914, -104.9876480102539], [39.70835876464844, -104.9876480102539], [39.70762634277344, -104.9876480102539], [39.707542419433594, -104.9876480102539], [39.707462310791016, -104.98764038085938], [39.7066535949707, -104.98760223388672], [39.70616912841797, -104.98758697509766], [39.705841064453125, -104.9875717163086], [39.70573806762695, -104.98756408691406], [39.705665588378906, -104.98755645751953], [39.705406188964844, -104.98754119873047], [39.705223083496094, -104.98753356933594], [39.705101013183594, -104.9875259399414], [39.704872131347656, -104.9875259399414], [39.7047119140625, -104.9875259399414], [39.704627990722656, -104.98751831054688], [39.70394515991211, -104.98751068115234], [39.703880310058594, -104.98751068115234], [39.70368194580078, -104.98750305175781], [39.70335006713867, -104.98750305175781], [39.70302963256836, -104.98750305175781], [39.7028694152832, -104.98750305175781], [39.70270538330078, -104.98751831054688], [39.70259475708008, -104.9875259399414], [39.702491760253906, -104.98753356933594], [39.70227813720703, -104.987548828125], [39.7021369934082, -104.98755645751953], [39.70204162597656, -104.98756408691406], [39.700843811035156, -104.98760986328125], [39.700782775878906, -104.98749542236328], [39.70073318481445, -104.9874038696289], [39.700687408447266, -104.98731994628906], [39.700660705566406, -104.98727416992188], [39.70061111450195, -104.9871826171875], [39.70054626464844, -104.98707580566406], [39.70036315917969, -104.98675537109375], [39.70024490356445, -104.986572265625], [39.70008850097656, -104.98636627197266], [39.700042724609375, -104.98631286621094], [39.69866180419922, -104.9847412109375], [39.6981086730957, -104.98410034179688], [39.69713592529297, -104.98299407958984], [39.69563674926758, -104.98123168945312], [39.6947135925293, -104.9800796508789], [39.69377136230469, -104.97888946533203], [39.693267822265625, -104.97833251953125], [39.6928596496582, -104.9778823852539], [39.692665100097656, -104.97766876220703], [39.69175720214844, -104.97666931152344], [39.691261291503906, -104.97602081298828], [39.690696716308594, -104.97518920898438]],\n", " {"bubblingMouseEvents": true, "color": "#0c0786", "dashArray": null, "dashOffset": null, "fill": false, "fillColor": "#0c0786", "fillOpacity": 0.2, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "noClip": false, "opacity": 0.8, "smoothFactor": 1.0, "stroke": true, "weight": 10}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " poly_line_bef927904d15311d3f54d83fb4286a1a.bindTooltip(\n", + " poly_line_0f7283eac54d7692d977c3a04e427018.bindTooltip(\n", " `<div>\n", - " 0.2665045784952342\n", + " 0.2536668087584479\n", " </div>`,\n", " {"sticky": true}\n", " );\n", " \n", " \n", - " var marker_3c3ccf484f13a3b164a726f9738510a7 = L.marker(\n", + " var marker_ba44a41425b30224b042c605e6e37ad0 = L.marker(\n", " [39.77902603149414, -104.96916961669922],\n", " {}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " var icon_e651a9b5e246c9a5b3f6b21a816c0898 = L.AwesomeMarkers.icon(\n", + " var icon_3f648c64ef6ffa0a38bbb1483d2cfb95 = L.AwesomeMarkers.icon(\n", " {"extraClasses": "fa-rotate-0", "icon": "circle", "iconColor": "white", "markerColor": "green", "prefix": "fa"}\n", " );\n", - " marker_3c3ccf484f13a3b164a726f9738510a7.setIcon(icon_e651a9b5e246c9a5b3f6b21a816c0898);\n", + " marker_ba44a41425b30224b042c605e6e37ad0.setIcon(icon_3f648c64ef6ffa0a38bbb1483d2cfb95);\n", " \n", " \n", - " marker_3c3ccf484f13a3b164a726f9738510a7.bindTooltip(\n", + " marker_ba44a41425b30224b042c605e6e37ad0.bindTooltip(\n", " `<div>\n", " Origin\n", " </div>`,\n", @@ -1202,19 +1198,19 @@ " );\n", " \n", " \n", - " var marker_55450ebdf8b16fefed55b362025f8aa4 = L.marker(\n", - " [39.6929817199707, -104.97577667236328],\n", + " var marker_60a7a39f6a69755ac819d7509795ee5d = L.marker(\n", + " [39.690696716308594, -104.97518920898438],\n", " {}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " var icon_3c83adf446da165e805032e359cb48f3 = L.AwesomeMarkers.icon(\n", + " var icon_10c14d93c287b88d705af05fef17ad27 = L.AwesomeMarkers.icon(\n", " {"extraClasses": "fa-rotate-0", "icon": "circle", "iconColor": "white", "markerColor": "red", "prefix": "fa"}\n", " );\n", - " marker_55450ebdf8b16fefed55b362025f8aa4.setIcon(icon_3c83adf446da165e805032e359cb48f3);\n", + " marker_60a7a39f6a69755ac819d7509795ee5d.setIcon(icon_10c14d93c287b88d705af05fef17ad27);\n", " \n", " \n", - " marker_55450ebdf8b16fefed55b362025f8aa4.bindTooltip(\n", + " marker_60a7a39f6a69755ac819d7509795ee5d.bindTooltip(\n", " `<div>\n", " Destination\n", " </div>`,\n", @@ -1225,10 +1221,10 @@ "</html>\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen>" ], "text/plain": [ - "" + "" ] }, - "execution_count": 18, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -1248,22 +1244,16 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 20, "id": "235d782a", "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] - }, { "name": "stderr", "output_type": "stream", "text": [ - "search: 100%|██████████| 3/3 [00:00<00:00, 64.03it/s]1.22it/s]" + "input plugins: 100%|██████████| 1/1 [00:00<00:00, 2164.76it/s]\n", + "search: 100%|██████████| 3/3 [00:00<00:00, 21.98it/s]231.11it/s]]\n" ] } ], @@ -1280,7 +1270,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 21, "id": "2cffadd4", "metadata": {}, "outputs": [ @@ -1306,7 +1296,7 @@ " <script src="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.js"></script>\n", " <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/leaflet@1.9.3/dist/leaflet.css"/>\n", " <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css"/>\n", - " <link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"/>\n", + " <link rel="stylesheet" href="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-glyphicons.css"/>\n", " <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.2.0/css/all.min.css"/>\n", " <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Leaflet.awesome-markers/2.0.2/leaflet.awesome-markers.css"/>\n", " <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/python-visualization/folium/folium/templates/leaflet.awesome.rotate.min.css"/>\n", @@ -1314,7 +1304,7 @@ " <meta name="viewport" content="width=device-width,\n", " initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />\n", " <style>\n", - " #map_629bb259d75ff180ceb711ebfa96c189 {\n", + " #map_f99e0025f25ec785f8c8aa60379b5e2f {\n", " position: relative;\n", " width: 100.0%;\n", " height: 100.0%;\n", @@ -1328,16 +1318,16 @@ "<body>\n", " \n", " \n", - " <div class="folium-map" id="map_629bb259d75ff180ceb711ebfa96c189" ></div>\n", + " <div class="folium-map" id="map_f99e0025f25ec785f8c8aa60379b5e2f" ></div>\n", " \n", "</body>\n", "<script>\n", " \n", " \n", - " var map_629bb259d75ff180ceb711ebfa96c189 = L.map(\n", - " "map_629bb259d75ff180ceb711ebfa96c189",\n", + " var map_f99e0025f25ec785f8c8aa60379b5e2f = L.map(\n", + " "map_f99e0025f25ec785f8c8aa60379b5e2f",\n", " {\n", - " center: [39.736886978149414, -104.99258422851562],\n", + " center: [39.73574447631836, -104.99258422851562],\n", " crs: L.CRS.EPSG3857,\n", " zoom: 12,\n", " zoomControl: true,\n", @@ -1349,48 +1339,48 @@ "\n", " \n", " \n", - " var tile_layer_a41c112b6f13f51514d72f177f5b5733 = L.tileLayer(\n", + " var tile_layer_7050bdfec7ea04700311b7c5e271facf = L.tileLayer(\n", " "https://tile.openstreetmap.org/{z}/{x}/{y}.png",\n", " {"attribution": "\\u0026copy; \\u003ca href=\\"https://www.openstreetmap.org/copyright\\"\\u003eOpenStreetMap\\u003c/a\\u003e contributors", "detectRetina": false, "maxNativeZoom": 19, "maxZoom": 19, "minZoom": 0, "noWrap": false, "opacity": 1, "subdomains": "abc", "tms": false}\n", " );\n", " \n", " \n", - " tile_layer_a41c112b6f13f51514d72f177f5b5733.addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " tile_layer_7050bdfec7ea04700311b7c5e271facf.addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " map_629bb259d75ff180ceb711ebfa96c189.fitBounds(\n", - " [[39.6929817199707, -105.01837158203125], [39.780792236328125, -104.966796875]],\n", + " map_f99e0025f25ec785f8c8aa60379b5e2f.fitBounds(\n", + " [[39.690696716308594, -105.01837158203125], [39.780792236328125, -104.966796875]],\n", " {"maxZoom": 12}\n", " );\n", " \n", " \n", - " var poly_line_b5d0064dc06afe599b6fe424054dc1d9 = L.polyline(\n", - " [[39.77902603149414, -104.96916961669922], [39.77896499633789, -104.96910095214844], [39.77878189086914, -104.96887969970703], [39.778751373291016, -104.96884155273438], [39.778587341308594, -104.9686508178711], [39.778480529785156, -104.96852111816406], [39.77839660644531, -104.96841430664062], [39.77846908569336, -104.96832275390625], [39.77865982055664, -104.96807098388672], [39.778709411621094, -104.96791076660156], [39.77894592285156, -104.96761322021484], [39.77906799316406, -104.96745300292969], [39.77915954589844, -104.96732330322266], [39.7791862487793, -104.96728515625], [39.779232025146484, -104.96722412109375], [39.77926254272461, -104.96719360351562], [39.779293060302734, -104.9671630859375], [39.77932357788086, -104.96714782714844], [39.77938461303711, -104.96710968017578], [39.779441833496094, -104.96707916259766], [39.77951431274414, -104.96704864501953], [39.7796745300293, -104.96698760986328], [39.77983093261719, -104.9669418334961], [39.78031921386719, -104.96683502197266], [39.780364990234375, -104.9668197631836], [39.78050231933594, -104.966796875], [39.78049850463867, -104.96688079833984], [39.78049850463867, -104.96698760986328], [39.78049850463867, -104.96705627441406], [39.78049087524414, -104.96717834472656], [39.78046798706055, -104.96759033203125], [39.78045654296875, -104.96772003173828], [39.78042984008789, -104.96797180175781], [39.78041458129883, -104.96810913085938], [39.780372619628906, -104.96839904785156], [39.78034210205078, -104.96859741210938], [39.780296325683594, -104.96888732910156], [39.7802734375, -104.96903228759766], [39.78025436401367, -104.96917724609375], [39.780250549316406, -104.96920776367188], [39.780235290527344, -104.96934509277344], [39.78020095825195, -104.96965789794922], [39.78001403808594, -104.9715347290039], [39.77994155883789, -104.97315216064453], [39.77980422973633, -104.97496032714844], [39.7797737121582, -104.97691345214844], [39.7797737121582, -104.9772720336914], [39.7797737121582, -104.97753143310547], [39.7797737121582, -104.97764587402344], [39.779781341552734, -104.97801971435547], [39.77980041503906, -104.97874450683594], [39.77981948852539, -104.97929382324219], [39.77983093261719, -104.97946166992188], [39.77986526489258, -104.98001861572266], [39.77991485595703, -104.98080444335938], [39.779991149902344, -104.98214721679688], [39.78001403808594, -104.98335266113281], [39.7800178527832, -104.98450469970703], [39.78002166748047, -104.98558044433594], [39.780033111572266, -104.98602294921875], [39.7800407409668, -104.98613739013672], [39.780059814453125, -104.98633575439453], [39.780086517333984, -104.9865493774414], [39.780128479003906, -104.98677825927734], [39.780174255371094, -104.98695373535156], [39.78023910522461, -104.98715209960938], [39.780540466308594, -104.98787689208984], [39.78069305419922, -104.98828887939453], [39.78076934814453, -104.98860168457031], [39.780784606933594, -104.98871612548828], [39.780792236328125, -104.98896026611328], [39.78078079223633, -104.98912048339844], [39.780765533447266, -104.98928833007812], [39.78071975708008, -104.98950958251953], [39.78061294555664, -104.98975372314453], [39.78052520751953, -104.98993682861328], [39.78038787841797, -104.99011993408203], [39.78028869628906, -104.99024963378906], [39.780174255371094, -104.99034881591797], [39.77997589111328, -104.990478515625], [39.77995300292969, -104.99049377441406], [39.77978515625, -104.99056243896484], [39.77960205078125, -104.99060821533203], [39.7794189453125, -104.99060821533203], [39.77922439575195, -104.9905776977539], [39.778968811035156, -104.99048614501953], [39.77858352661133, -104.9903335571289], [39.778541564941406, -104.99031066894531], [39.77811050415039, -104.99011993408203], [39.777706146240234, -104.98995208740234], [39.7775764465332, -104.98990631103516], [39.77741241455078, -104.98985290527344], [39.77730941772461, -104.98983001708984], [39.7772102355957, -104.98980712890625], [39.777130126953125, -104.98979949951172], [39.77692794799805, -104.98979187011719], [39.77660369873047, -104.98979187011719], [39.77629089355469, -104.98980712890625], [39.77605056762695, -104.98982238769531], [39.77583694458008, -104.98986053466797], [39.77559280395508, -104.98991394042969], [39.7751579284668, -104.99003601074219], [39.774871826171875, -104.99012756347656], [39.77482986450195, -104.9901351928711], [39.774696350097656, -104.99018096923828], [39.774539947509766, -104.99022674560547], [39.774383544921875, -104.99026489257812], [39.77424621582031, -104.99028778076172], [39.77410888671875, -104.99029541015625], [39.773887634277344, -104.99030303955078], [39.77339553833008, -104.99031829833984], [39.773284912109375, -104.99031829833984], [39.77314376831055, -104.99032592773438], [39.773006439208984, -104.99034118652344], [39.77288055419922, -104.99036407470703], [39.77272033691406, -104.99040222167969], [39.77251434326172, -104.99046325683594], [39.77234649658203, -104.99051666259766], [39.77214431762695, -104.99059295654297], [39.77194595336914, -104.99068450927734], [39.77174377441406, -104.99079895019531], [39.77142333984375, -104.99098205566406], [39.77122116088867, -104.9911117553711], [39.77073287963867, -104.9914321899414], [39.7704963684082, -104.99164581298828], [39.770259857177734, -104.99187469482422], [39.77001190185547, -104.99214172363281], [39.769779205322266, -104.99241638183594], [39.76954650878906, -104.99272918701172], [39.76931381225586, -104.99305725097656], [39.76912307739258, -104.99334716796875], [39.76897048950195, -104.99359893798828], [39.768775939941406, -104.99393463134766], [39.768592834472656, -104.99432373046875], [39.76849365234375, -104.99454498291016], [39.76826477050781, -104.9951171875], [39.768192291259766, -104.99535369873047], [39.76802062988281, -104.99580383300781], [39.767581939697266, -104.99694061279297], [39.767154693603516, -104.99806213378906], [39.766963958740234, -104.9985580444336], [39.76682662963867, -104.9989013671875], [39.7667121887207, -104.99915313720703], [39.76656723022461, -104.99944305419922], [39.76641845703125, -104.99970245361328], [39.766273498535156, -104.99990844726562], [39.766109466552734, -105.00015258789062], [39.7659912109375, -105.00031280517578], [39.7658805847168, -105.0004653930664], [39.765750885009766, -105.00062561035156], [39.765567779541016, -105.00081634521484], [39.76536560058594, -105.00100708007812], [39.76518249511719, -105.00117492675781], [39.76498794555664, -105.00135803222656], [39.763919830322266, -105.002197265625], [39.76262283325195, -105.00331115722656], [39.76240539550781, -105.00350189208984], [39.762203216552734, -105.0036849975586], [39.76198959350586, -105.00389099121094], [39.76179885864258, -105.00407409667969], [39.7616081237793, -105.0042724609375], [39.761444091796875, -105.00445556640625], [39.761260986328125, -105.00466918945312], [39.76103973388672, -105.00492858886719], [39.76044845581055, -105.00575256347656], [39.759456634521484, -105.0072021484375], [39.75861740112305, -105.0083999633789], [39.758094787597656, -105.00910949707031], [39.75727844238281, -105.0101547241211], [39.75709915161133, -105.01038360595703], [39.756736755371094, -105.0108871459961], [39.75618362426758, -105.0116195678711], [39.75572967529297, -105.01225280761719], [39.75527572631836, -105.01285552978516], [39.75492858886719, -105.01334381103516], [39.7547492980957, -105.01359558105469], [39.75423812866211, -105.01427459716797], [39.75400924682617, -105.01457214355469], [39.753841400146484, -105.0147705078125], [39.75370788574219, -105.01492309570312], [39.75352096557617, -105.01513671875], [39.75336837768555, -105.01529693603516], [39.753173828125, -105.01548767089844], [39.75297164916992, -105.01567840576172], [39.752811431884766, -105.01581573486328], [39.75261688232422, -105.01597595214844], [39.75239944458008, -105.0161361694336], [39.75222396850586, -105.01627349853516], [39.752037048339844, -105.01639556884766], [39.751853942871094, -105.0165023803711], [39.75165939331055, -105.01661682128906], [39.75148391723633, -105.01670837402344], [39.75117874145508, -105.0168685913086], [39.75090026855469, -105.01699829101562], [39.75063705444336, -105.01710510253906], [39.74983215332031, -105.01744079589844], [39.74938201904297, -105.01763916015625], [39.74889373779297, -105.01783752441406], [39.748531341552734, -105.01799011230469], [39.74820327758789, -105.01811218261719], [39.74799728393555, -105.01818084716797], [39.74775695800781, -105.01825714111328], [39.74755096435547, -105.01830291748047], [39.74735641479492, -105.01834106445312], [39.747108459472656, -105.01836395263672], [39.74689865112305, -105.01837158203125], [39.74666976928711, -105.01836395263672], [39.74650955200195, -105.01835632324219], [39.74633026123047, -105.01832580566406], [39.746131896972656, -105.0182876586914], [39.74597930908203, -105.01824951171875], [39.74581527709961, -105.01819610595703], [39.745609283447266, -105.01811218261719], [39.74538040161133, -105.01800537109375], [39.74514389038086, -105.01786804199219], [39.744937896728516, -105.01773834228516], [39.744747161865234, -105.01759338378906], [39.74456787109375, -105.0174560546875], [39.74444580078125, -105.01734161376953], [39.743892669677734, -105.01679992675781], [39.74342727661133, -105.0163345336914], [39.743038177490234, -105.015869140625], [39.742897033691406, -105.01570892333984], [39.74272537231445, -105.0155258178711], [39.7425422668457, -105.01532745361328], [39.74235916137695, -105.01516723632812], [39.7421875, -105.01500701904297], [39.74201965332031, -105.0148696899414], [39.74187469482422, -105.01476287841797], [39.74171447753906, -105.0146484375], [39.74155807495117, -105.01456451416016], [39.741329193115234, -105.01445007324219], [39.74116134643555, -105.01438903808594], [39.74099349975586, -105.01432037353516], [39.74075698852539, -105.01425170898438], [39.7405891418457, -105.01421356201172], [39.740386962890625, -105.01416778564453], [39.740230560302734, -105.01415252685547], [39.74014663696289, -105.0141372680664], [39.73987579345703, -105.01412963867188], [39.73881530761719, -105.01406860351562], [39.73861312866211, -105.0140609741211], [39.73841094970703, -105.0140609741211], [39.73823928833008, -105.01406860351562], [39.73807907104492, -105.01408386230469], [39.7379035949707, -105.01409912109375], [39.73770523071289, -105.01412963867188], [39.737457275390625, -105.01416778564453], [39.737152099609375, -105.01428985595703], [39.73687744140625, -105.01436614990234], [39.7366828918457, -105.01441955566406], [39.73640823364258, -105.01451873779297], [39.73619079589844, -105.01460266113281], [39.73607635498047, -105.01464080810547], [39.735904693603516, -105.01471710205078], [39.73575973510742, -105.01478576660156], [39.73533630371094, -105.0149917602539], [39.73477554321289, -105.01528930664062], [39.734619140625, -105.01536560058594], [39.73448181152344, -105.01542663574219], [39.73434066772461, -105.01548767089844], [39.73418426513672, -105.01554870605469], [39.73397445678711, -105.015625], [39.733829498291016, -105.01566314697266], [39.73370361328125, -105.01570129394531], [39.73356246948242, -105.01573944091797], [39.733436584472656, -105.0157699584961], [39.73330307006836, -105.01579284667969], [39.73316955566406, -105.01582336425781], [39.73301315307617, -105.01583862304688], [39.73285675048828, -105.01585388183594], [39.73271942138672, -105.01586151123047], [39.732574462890625, -105.015869140625], [39.73243713378906, -105.01587677001953], [39.732303619384766, -105.01588439941406], [39.73218536376953, -105.01588439941406], [39.73207092285156, -105.01587677001953], [39.73195266723633, -105.015869140625], [39.73179244995117, -105.01585388183594], [39.73155212402344, -105.01580047607422], [39.73124313354492, -105.01573181152344], [39.731075286865234, -105.01568603515625], [39.7308464050293, -105.01561737060547], [39.730567932128906, -105.01553344726562], [39.730201721191406, -105.0154037475586], [39.729949951171875, -105.01531219482422], [39.72952651977539, -105.01518249511719], [39.729122161865234, -105.0150375366211], [39.728843688964844, -105.01493835449219], [39.72844314575195, -105.01477813720703], [39.72832107543945, -105.01473236083984], [39.728145599365234, -105.01466369628906], [39.727943420410156, -105.01458740234375], [39.727439880371094, -105.01441192626953], [39.72711181640625, -105.01427459716797], [39.72694778442383, -105.01421356201172], [39.726749420166016, -105.01412200927734], [39.726558685302734, -105.0140380859375], [39.726375579833984, -105.01394653320312], [39.72616195678711, -105.01382446289062], [39.72585678100586, -105.01362609863281], [39.725624084472656, -105.01348114013672], [39.72536087036133, -105.01329803466797], [39.72511672973633, -105.01311492919922], [39.72493362426758, -105.01297760009766], [39.7247200012207, -105.01280212402344], [39.72451400756836, -105.01262664794922], [39.72426986694336, -105.01239776611328], [39.72408676147461, -105.01221466064453], [39.723899841308594, -105.01201629638672], [39.72377395629883, -105.01188659667969], [39.72359848022461, -105.01168060302734], [39.72343826293945, -105.0114974975586], [39.72330093383789, -105.01133728027344], [39.723079681396484, -105.01106262207031], [39.7227897644043, -105.01066589355469], [39.72258377075195, -105.01038360595703], [39.722251892089844, -105.0099105834961], [39.7220573425293, -105.0096435546875], [39.721920013427734, -105.00946807861328], [39.721744537353516, -105.00924682617188], [39.721649169921875, -105.00914001464844], [39.7214241027832, -105.00888061523438], [39.72117233276367, -105.00861358642578], [39.720741271972656, -105.0081787109375], [39.720523834228516, -105.00794219970703], [39.7200813293457, -105.0074691772461], [39.71998977661133, -105.00737762451172], [39.71975326538086, -105.00711822509766], [39.71941375732422, -105.00675201416016], [39.719242095947266, -105.0065689086914], [39.719085693359375, -105.00640106201172], [39.718936920166016, -105.00623321533203], [39.718807220458984, -105.00608825683594], [39.718658447265625, -105.00591278076172], [39.71849060058594, -105.00570678710938], [39.7183723449707, -105.00556182861328], [39.71826171875, -105.00541687011719], [39.71812057495117, -105.00521850585938], [39.71792221069336, -105.00492858886719], [39.71759796142578, -105.00445556640625], [39.717166900634766, -105.0038070678711], [39.716880798339844, -105.00337982177734], [39.71671676635742, -105.00314331054688], [39.716552734375, -105.00292205810547], [39.7164306640625, -105.00276184082031], [39.71633529663086, -105.00264739990234], [39.71624755859375, -105.00254821777344], [39.71617889404297, -105.00247192382812], [39.71608352661133, -105.00237274169922], [39.715999603271484, -105.00228118896484], [39.71593475341797, -105.0022201538086], [39.715885162353516, -105.0021743774414], [39.715755462646484, -105.00206756591797], [39.715660095214844, -105.00198364257812], [39.715538024902344, -105.00189208984375], [39.71543884277344, -105.00181579589844], [39.71533203125, -105.00173950195312], [39.7152214050293, -105.00166320800781], [39.71499252319336, -105.00151824951172], [39.714324951171875, -105.0010757446289], [39.71399688720703, -105.00086212158203], [39.71346664428711, -105.00052642822266], [39.71318435668945, -105.00035095214844], [39.71266174316406, -105.00003051757812], [39.71223449707031, -104.9997787475586], [39.71159362792969, -104.99940490722656], [39.71141052246094, -104.99930572509766], [39.710933685302734, -104.99901580810547], [39.71067810058594, -104.99886322021484], [39.710357666015625, -104.99867248535156], [39.71013641357422, -104.99855041503906], [39.70988464355469, -104.99840545654297], [39.70966720581055, -104.99829864501953], [39.7094841003418, -104.99820709228516], [39.70940017700195, -104.99816131591797], [39.709136962890625, -104.99803924560547], [39.708702087402344, -104.99784088134766], [39.70827865600586, -104.99764251708984], [39.7078857421875, -104.99746704101562], [39.707275390625, -104.9971923828125], [39.70710372924805, -104.99711608886719], [39.7068977355957, -104.99701690673828], [39.706809997558594, -104.99697875976562], [39.706729888916016, -104.99693298339844], [39.70663070678711, -104.99688720703125], [39.706539154052734, -104.99683380126953], [39.70646667480469, -104.99678802490234], [39.70637130737305, -104.9967269897461], [39.70630645751953, -104.99668884277344], [39.70623779296875, -104.99664306640625], [39.70616912841797, -104.99658966064453], [39.706085205078125, -104.99652862548828], [39.70596694946289, -104.9964370727539], [39.705814361572266, -104.9963150024414], [39.7056999206543, -104.9962158203125], [39.70561218261719, -104.99613189697266], [39.70552062988281, -104.99604034423828], [39.705467224121094, -104.99598693847656], [39.70537567138672, -104.99588775634766], [39.705299377441406, -104.99580383300781], [39.705169677734375, -104.99565124511719], [39.70507049560547, -104.99552917480469], [39.704959869384766, -104.9953842163086], [39.704837799072266, -104.99520874023438], [39.70473098754883, -104.99505615234375], [39.704627990722656, -104.99488067626953], [39.704551696777344, -104.99474334716797], [39.704471588134766, -104.99459838867188], [39.70440673828125, -104.99447631835938], [39.7043342590332, -104.99433135986328], [39.704261779785156, -104.99417877197266], [39.70420455932617, -104.99404907226562], [39.70415115356445, -104.99392700195312], [39.704097747802734, -104.99378204345703], [39.70404815673828, -104.99363708496094], [39.70399475097656, -104.99347686767578], [39.70393753051758, -104.9933090209961], [39.70388412475586, -104.99313354492188], [39.703792572021484, -104.99284362792969], [39.70363235473633, -104.9923324584961], [39.703487396240234, -104.99188232421875], [39.703304290771484, -104.99127197265625], [39.703189849853516, -104.99092102050781], [39.70305633544922, -104.990478515625], [39.702980041503906, -104.99024200439453], [39.70287322998047, -104.989990234375], [39.70277404785156, -104.98977661132812], [39.70265197753906, -104.98954010009766], [39.70252990722656, -104.98933410644531], [39.70241928100586, -104.98914337158203], [39.70228576660156, -104.98894500732422], [39.702110290527344, -104.98870849609375], [39.70179748535156, -104.9883041381836], [39.70148849487305, -104.98790740966797], [39.700843811035156, -104.987060546875], [39.700706481933594, -104.98689270019531], [39.70027542114258, -104.98641967773438], [39.700077056884766, -104.9861831665039], [39.69994354248047, -104.98603057861328], [39.699771881103516, -104.98583984375], [39.69960021972656, -104.98567962646484], [39.699462890625, -104.98554229736328], [39.699344635009766, -104.98542022705078], [39.69913101196289, -104.98521423339844], [39.698974609375, -104.98504638671875], [39.69866180419922, -104.9847412109375], [39.6981086730957, -104.98410034179688], [39.69713592529297, -104.98299407958984], [39.696075439453125, -104.98184967041016], [39.69560623168945, -104.9813003540039], [39.69524383544922, -104.98087310791016], [39.69488525390625, -104.98043823242188], [39.694786071777344, -104.98033905029297], [39.6947021484375, -104.98025512695312], [39.69462585449219, -104.98019409179688], [39.6945915222168, -104.98016357421875], [39.69448471069336, -104.98009490966797], [39.69437789916992, -104.98002624511719], [39.6942024230957, -104.97992706298828], [39.69398498535156, -104.97977447509766], [39.69377899169922, -104.97953033447266], [39.69367599487305, -104.97943115234375], [39.69364929199219, -104.97940063476562], [39.69361114501953, -104.97936248779297], [39.69355010986328, -104.97931671142578], [39.6934814453125, -104.9792709350586], [39.69330978393555, -104.97918701171875], [39.69325637817383, -104.97914123535156], [39.693199157714844, -104.97909545898438], [39.693145751953125, -104.97903442382812], [39.693092346191406, -104.97897338867188], [39.69303512573242, -104.97886657714844], [39.69300079345703, -104.97877502441406], [39.69298553466797, -104.97871398925781], [39.69298553466797, -104.97850036621094], [39.69298553466797, -104.97827911376953], [39.69298553466797, -104.97792053222656], [39.6929931640625, -104.9774398803711], [39.6929931640625, -104.9773941040039], [39.6929931640625, -104.9772720336914], [39.692989349365234, -104.97704315185547], [39.692989349365234, -104.97694396972656], [39.692989349365234, -104.97685241699219], [39.69298553466797, -104.97636413574219], [39.6929817199707, -104.97577667236328]],\n", + " var poly_line_2c8a5968d70c47cbf064b52ae14331a2 = L.polyline(\n", + " [[39.77902603149414, -104.96916961669922], [39.7789306640625, -104.96929931640625], [39.778900146484375, -104.9693374633789], [39.77882766723633, -104.96943664550781], [39.778751373291016, -104.96954345703125], [39.7786979675293, -104.96961975097656], [39.77864456176758, -104.96971130371094], [39.77876281738281, -104.96937561035156], [39.77878952026367, -104.96929931640625], [39.778804779052734, -104.9692153930664], [39.77880096435547, -104.96912384033203], [39.778785705566406, -104.96903991699219], [39.77874755859375, -104.96894836425781], [39.778587341308594, -104.9686508178711], [39.778480529785156, -104.96852111816406], [39.77839660644531, -104.96841430664062], [39.77846908569336, -104.96832275390625], [39.77865982055664, -104.96807098388672], [39.778709411621094, -104.96791076660156], [39.77894592285156, -104.96761322021484], [39.77906799316406, -104.96745300292969], [39.77915954589844, -104.96732330322266], [39.7791862487793, -104.96728515625], [39.779232025146484, -104.96722412109375], [39.77926254272461, -104.96719360351562], [39.779293060302734, -104.9671630859375], [39.77932357788086, -104.96714782714844], [39.77938461303711, -104.96710968017578], [39.779441833496094, -104.96707916259766], [39.77951431274414, -104.96704864501953], [39.7796745300293, -104.96698760986328], [39.77983093261719, -104.9669418334961], [39.78031921386719, -104.96683502197266], [39.780364990234375, -104.9668197631836], [39.78050231933594, -104.966796875], [39.78049850463867, -104.96688079833984], [39.78049850463867, -104.96698760986328], [39.78049850463867, -104.96705627441406], [39.78049087524414, -104.96717834472656], [39.78046798706055, -104.96759033203125], [39.78045654296875, -104.96772003173828], [39.78042984008789, -104.96797180175781], [39.78041458129883, -104.96810913085938], [39.780372619628906, -104.96839904785156], [39.78034210205078, -104.96859741210938], [39.780296325683594, -104.96888732910156], [39.7802734375, -104.96903228759766], [39.78025436401367, -104.96917724609375], [39.780250549316406, -104.96920776367188], [39.780235290527344, -104.96934509277344], [39.78020095825195, -104.96965789794922], [39.78001403808594, -104.9715347290039], [39.77994155883789, -104.97315216064453], [39.77980422973633, -104.97496032714844], [39.7797737121582, -104.97691345214844], [39.7797737121582, -104.9772720336914], [39.7797737121582, -104.97753143310547], [39.7797737121582, -104.97764587402344], [39.779781341552734, -104.97801971435547], [39.77980041503906, -104.97874450683594], [39.77981948852539, -104.97929382324219], [39.77983093261719, -104.97946166992188], [39.77986526489258, -104.98001861572266], [39.77991485595703, -104.98080444335938], [39.779991149902344, -104.98214721679688], [39.78001403808594, -104.98335266113281], [39.7800178527832, -104.98450469970703], [39.78002166748047, -104.98558044433594], [39.780033111572266, -104.98602294921875], [39.7800407409668, -104.98613739013672], [39.780059814453125, -104.98633575439453], [39.780086517333984, -104.9865493774414], [39.780128479003906, -104.98677825927734], [39.780174255371094, -104.98695373535156], [39.78023910522461, -104.98715209960938], [39.780540466308594, -104.98787689208984], [39.78069305419922, -104.98828887939453], [39.78076934814453, -104.98860168457031], [39.780784606933594, -104.98871612548828], [39.780792236328125, -104.98896026611328], [39.78078079223633, -104.98912048339844], [39.780765533447266, -104.98928833007812], [39.78071975708008, -104.98950958251953], [39.78061294555664, -104.98975372314453], [39.78052520751953, -104.98993682861328], [39.78038787841797, -104.99011993408203], [39.78028869628906, -104.99024963378906], [39.780174255371094, -104.99034881591797], [39.77997589111328, -104.990478515625], [39.77995300292969, -104.99049377441406], [39.77978515625, -104.99056243896484], [39.77960205078125, -104.99060821533203], [39.7794189453125, -104.99060821533203], [39.77922439575195, -104.9905776977539], [39.778968811035156, -104.99048614501953], [39.77858352661133, -104.9903335571289], [39.778541564941406, -104.99031066894531], [39.77811050415039, -104.99011993408203], [39.777706146240234, -104.98995208740234], [39.7775764465332, -104.98990631103516], [39.77741241455078, -104.98985290527344], [39.77730941772461, -104.98983001708984], [39.7772102355957, -104.98980712890625], [39.777130126953125, -104.98979949951172], [39.77692794799805, -104.98979187011719], [39.77660369873047, -104.98979187011719], [39.77629089355469, -104.98980712890625], [39.77605056762695, -104.98982238769531], [39.77583694458008, -104.98986053466797], [39.77559280395508, -104.98991394042969], [39.7751579284668, -104.99003601074219], [39.774871826171875, -104.99012756347656], [39.77482986450195, -104.9901351928711], [39.774696350097656, -104.99018096923828], [39.774539947509766, -104.99022674560547], [39.774383544921875, -104.99026489257812], [39.77424621582031, -104.99028778076172], [39.77410888671875, -104.99029541015625], [39.773887634277344, -104.99030303955078], [39.77339553833008, -104.99031829833984], [39.773284912109375, -104.99031829833984], [39.77314376831055, -104.99032592773438], [39.773006439208984, -104.99034118652344], [39.77288055419922, -104.99036407470703], [39.77272033691406, -104.99040222167969], [39.77251434326172, -104.99046325683594], [39.77234649658203, -104.99051666259766], [39.77214431762695, -104.99059295654297], [39.77194595336914, -104.99068450927734], [39.77174377441406, -104.99079895019531], [39.77142333984375, -104.99098205566406], [39.77122116088867, -104.9911117553711], [39.77073287963867, -104.9914321899414], [39.7704963684082, -104.99164581298828], [39.770259857177734, -104.99187469482422], [39.77001190185547, -104.99214172363281], [39.769779205322266, -104.99241638183594], [39.76954650878906, -104.99272918701172], [39.76931381225586, -104.99305725097656], [39.76912307739258, -104.99334716796875], [39.76897048950195, -104.99359893798828], [39.768775939941406, -104.99393463134766], [39.768592834472656, -104.99432373046875], [39.76849365234375, -104.99454498291016], [39.76826477050781, -104.9951171875], [39.768192291259766, -104.99535369873047], [39.76802062988281, -104.99580383300781], [39.767581939697266, -104.99694061279297], [39.767154693603516, -104.99806213378906], [39.766963958740234, -104.9985580444336], [39.76682662963867, -104.9989013671875], [39.7667121887207, -104.99915313720703], [39.76656723022461, -104.99944305419922], [39.76641845703125, -104.99970245361328], [39.766273498535156, -104.99990844726562], [39.766109466552734, -105.00015258789062], [39.7659912109375, -105.00031280517578], [39.7658805847168, -105.0004653930664], [39.765750885009766, -105.00062561035156], [39.765567779541016, -105.00081634521484], [39.76536560058594, -105.00100708007812], [39.76518249511719, -105.00117492675781], [39.76498794555664, -105.00135803222656], [39.763919830322266, -105.002197265625], [39.76262283325195, -105.00331115722656], [39.76240539550781, -105.00350189208984], [39.762203216552734, -105.0036849975586], [39.76198959350586, -105.00389099121094], [39.76179885864258, -105.00407409667969], [39.7616081237793, -105.0042724609375], [39.761444091796875, -105.00445556640625], [39.761260986328125, -105.00466918945312], [39.76103973388672, -105.00492858886719], [39.76044845581055, -105.00575256347656], [39.759456634521484, -105.0072021484375], [39.75861740112305, -105.0083999633789], [39.758094787597656, -105.00910949707031], [39.75727844238281, -105.0101547241211], [39.75709915161133, -105.01038360595703], [39.756736755371094, -105.0108871459961], [39.75618362426758, -105.0116195678711], [39.75572967529297, -105.01225280761719], [39.75527572631836, -105.01285552978516], [39.75492858886719, -105.01334381103516], [39.7547492980957, -105.01359558105469], [39.75423812866211, -105.01427459716797], [39.75400924682617, -105.01457214355469], [39.753841400146484, -105.0147705078125], [39.75370788574219, -105.01492309570312], [39.75352096557617, -105.01513671875], [39.75336837768555, -105.01529693603516], [39.753173828125, -105.01548767089844], [39.75297164916992, -105.01567840576172], [39.752811431884766, -105.01581573486328], [39.75261688232422, -105.01597595214844], [39.75239944458008, -105.0161361694336], [39.75222396850586, -105.01627349853516], [39.752037048339844, -105.01639556884766], [39.751853942871094, -105.0165023803711], [39.75165939331055, -105.01661682128906], [39.75148391723633, -105.01670837402344], [39.75117874145508, -105.0168685913086], [39.75090026855469, -105.01699829101562], [39.75063705444336, -105.01710510253906], [39.74983215332031, -105.01744079589844], [39.74938201904297, -105.01763916015625], [39.74889373779297, -105.01783752441406], [39.748531341552734, -105.01799011230469], [39.74820327758789, -105.01811218261719], [39.74799728393555, -105.01818084716797], [39.74775695800781, -105.01825714111328], [39.74755096435547, -105.01830291748047], [39.74735641479492, -105.01834106445312], [39.747108459472656, -105.01836395263672], [39.74689865112305, -105.01837158203125], [39.74666976928711, -105.01836395263672], [39.74650955200195, -105.01835632324219], [39.74633026123047, -105.01832580566406], [39.746131896972656, -105.0182876586914], [39.74597930908203, -105.01824951171875], [39.74581527709961, -105.01819610595703], [39.745609283447266, -105.01811218261719], [39.74538040161133, -105.01800537109375], [39.74514389038086, -105.01786804199219], [39.744937896728516, -105.01773834228516], [39.744747161865234, -105.01759338378906], [39.74456787109375, -105.0174560546875], [39.74444580078125, -105.01734161376953], [39.743892669677734, -105.01679992675781], [39.74342727661133, -105.0163345336914], [39.743038177490234, -105.015869140625], [39.742897033691406, -105.01570892333984], [39.74272537231445, -105.0155258178711], [39.7425422668457, -105.01532745361328], [39.74235916137695, -105.01516723632812], [39.7421875, -105.01500701904297], [39.74201965332031, -105.0148696899414], [39.74187469482422, -105.01476287841797], [39.74171447753906, -105.0146484375], [39.74155807495117, -105.01456451416016], [39.741329193115234, -105.01445007324219], [39.74116134643555, -105.01438903808594], [39.74099349975586, -105.01432037353516], [39.74075698852539, -105.01425170898438], [39.7405891418457, -105.01421356201172], [39.740386962890625, -105.01416778564453], [39.740230560302734, -105.01415252685547], [39.74014663696289, -105.0141372680664], [39.73987579345703, -105.01412963867188], [39.73881530761719, -105.01406860351562], [39.73861312866211, -105.0140609741211], [39.73841094970703, -105.0140609741211], [39.73823928833008, -105.01406860351562], [39.73807907104492, -105.01408386230469], [39.7379035949707, -105.01409912109375], [39.73770523071289, -105.01412963867188], [39.737457275390625, -105.01416778564453], [39.737152099609375, -105.01428985595703], [39.73687744140625, -105.01436614990234], [39.7366828918457, -105.01441955566406], [39.73640823364258, -105.01451873779297], [39.73619079589844, -105.01460266113281], [39.73607635498047, -105.01464080810547], [39.735904693603516, -105.01471710205078], [39.73575973510742, -105.01478576660156], [39.73533630371094, -105.0149917602539], [39.73477554321289, -105.01528930664062], [39.734619140625, -105.01536560058594], [39.73448181152344, -105.01542663574219], [39.73434066772461, -105.01548767089844], [39.73418426513672, -105.01554870605469], [39.73397445678711, -105.015625], [39.733829498291016, -105.01566314697266], [39.73370361328125, -105.01570129394531], [39.73356246948242, -105.01573944091797], [39.733436584472656, -105.0157699584961], [39.73330307006836, -105.01579284667969], [39.73316955566406, -105.01582336425781], [39.73301315307617, -105.01583862304688], [39.73285675048828, -105.01585388183594], [39.73271942138672, -105.01586151123047], [39.732574462890625, -105.015869140625], [39.73243713378906, -105.01587677001953], [39.732303619384766, -105.01588439941406], [39.73218536376953, -105.01588439941406], [39.73207092285156, -105.01587677001953], [39.73195266723633, -105.015869140625], [39.73179244995117, -105.01585388183594], [39.73155212402344, -105.01580047607422], [39.73124313354492, -105.01573181152344], [39.731075286865234, -105.01568603515625], [39.7308464050293, -105.01561737060547], [39.730567932128906, -105.01553344726562], [39.730201721191406, -105.0154037475586], [39.729949951171875, -105.01531219482422], [39.72952651977539, -105.01518249511719], [39.729122161865234, -105.0150375366211], [39.728843688964844, -105.01493835449219], [39.72844314575195, -105.01477813720703], [39.72832107543945, -105.01473236083984], [39.728145599365234, -105.01466369628906], [39.727943420410156, -105.01458740234375], [39.727439880371094, -105.01441192626953], [39.72711181640625, -105.01427459716797], [39.72694778442383, -105.01421356201172], [39.726749420166016, -105.01412200927734], [39.726558685302734, -105.0140380859375], [39.726375579833984, -105.01394653320312], [39.72616195678711, -105.01382446289062], [39.72585678100586, -105.01362609863281], [39.725624084472656, -105.01348114013672], [39.72536087036133, -105.01329803466797], [39.72511672973633, -105.01311492919922], [39.72493362426758, -105.01297760009766], [39.7247200012207, -105.01280212402344], [39.72451400756836, -105.01262664794922], [39.72426986694336, -105.01239776611328], [39.72408676147461, -105.01221466064453], [39.723899841308594, -105.01201629638672], [39.72377395629883, -105.01188659667969], [39.72359848022461, -105.01168060302734], [39.72343826293945, -105.0114974975586], [39.72330093383789, -105.01133728027344], [39.723079681396484, -105.01106262207031], [39.7227897644043, -105.01066589355469], [39.72258377075195, -105.01038360595703], [39.722251892089844, -105.0099105834961], [39.7220573425293, -105.0096435546875], [39.721920013427734, -105.00946807861328], [39.721744537353516, -105.00924682617188], [39.721649169921875, -105.00914001464844], [39.7214241027832, -105.00888061523438], [39.72117233276367, -105.00861358642578], [39.720741271972656, -105.0081787109375], [39.720523834228516, -105.00794219970703], [39.7200813293457, -105.0074691772461], [39.71998977661133, -105.00737762451172], [39.71975326538086, -105.00711822509766], [39.71941375732422, -105.00675201416016], [39.719242095947266, -105.0065689086914], [39.719085693359375, -105.00640106201172], [39.718936920166016, -105.00623321533203], [39.718807220458984, -105.00608825683594], [39.718658447265625, -105.00591278076172], [39.71849060058594, -105.00570678710938], [39.7183723449707, -105.00556182861328], [39.71826171875, -105.00541687011719], [39.71812057495117, -105.00521850585938], [39.71792221069336, -105.00492858886719], [39.71759796142578, -105.00445556640625], [39.717166900634766, -105.0038070678711], [39.716880798339844, -105.00337982177734], [39.71671676635742, -105.00314331054688], [39.716552734375, -105.00292205810547], [39.7164306640625, -105.00276184082031], [39.71633529663086, -105.00264739990234], [39.71624755859375, -105.00254821777344], [39.71617889404297, -105.00247192382812], [39.71608352661133, -105.00237274169922], [39.715999603271484, -105.00228118896484], [39.71593475341797, -105.0022201538086], [39.715885162353516, -105.0021743774414], [39.715755462646484, -105.00206756591797], [39.715660095214844, -105.00198364257812], [39.715538024902344, -105.00189208984375], [39.71543884277344, -105.00181579589844], [39.71533203125, -105.00173950195312], [39.7152214050293, -105.00166320800781], [39.71499252319336, -105.00151824951172], [39.714324951171875, -105.0010757446289], [39.71399688720703, -105.00086212158203], [39.71346664428711, -105.00052642822266], [39.71318435668945, -105.00035095214844], [39.71266174316406, -105.00003051757812], [39.71223449707031, -104.9997787475586], [39.71159362792969, -104.99940490722656], [39.71141052246094, -104.99930572509766], [39.710933685302734, -104.99901580810547], [39.71067810058594, -104.99886322021484], [39.710357666015625, -104.99867248535156], [39.71013641357422, -104.99855041503906], [39.70988464355469, -104.99840545654297], [39.70966720581055, -104.99829864501953], [39.7094841003418, -104.99820709228516], [39.70940017700195, -104.99816131591797], [39.709136962890625, -104.99803924560547], [39.708702087402344, -104.99784088134766], [39.70827865600586, -104.99764251708984], [39.7078857421875, -104.99746704101562], [39.707275390625, -104.9971923828125], [39.70710372924805, -104.99711608886719], [39.7068977355957, -104.99701690673828], [39.706809997558594, -104.99697875976562], [39.706729888916016, -104.99693298339844], [39.70663070678711, -104.99688720703125], [39.706539154052734, -104.99683380126953], [39.70646667480469, -104.99678802490234], [39.70637130737305, -104.9967269897461], [39.70630645751953, -104.99668884277344], [39.70623779296875, -104.99664306640625], [39.70616912841797, -104.99658966064453], [39.706085205078125, -104.99652862548828], [39.70596694946289, -104.9964370727539], [39.705814361572266, -104.9963150024414], [39.7056999206543, -104.9962158203125], [39.70561218261719, -104.99613189697266], [39.70552062988281, -104.99604034423828], [39.705467224121094, -104.99598693847656], [39.70537567138672, -104.99588775634766], [39.705299377441406, -104.99580383300781], [39.705169677734375, -104.99565124511719], [39.70507049560547, -104.99552917480469], [39.704959869384766, -104.9953842163086], [39.704837799072266, -104.99520874023438], [39.70473098754883, -104.99505615234375], [39.704627990722656, -104.99488067626953], [39.704551696777344, -104.99474334716797], [39.704471588134766, -104.99459838867188], [39.70440673828125, -104.99447631835938], [39.7043342590332, -104.99433135986328], [39.704261779785156, -104.99417877197266], [39.70420455932617, -104.99404907226562], [39.70415115356445, -104.99392700195312], [39.704097747802734, -104.99378204345703], [39.70404815673828, -104.99363708496094], [39.70399475097656, -104.99347686767578], [39.70393753051758, -104.9933090209961], [39.70388412475586, -104.99313354492188], [39.703792572021484, -104.99284362792969], [39.70363235473633, -104.9923324584961], [39.703487396240234, -104.99188232421875], [39.703304290771484, -104.99127197265625], [39.703189849853516, -104.99092102050781], [39.70305633544922, -104.990478515625], [39.702980041503906, -104.99024200439453], [39.70287322998047, -104.989990234375], [39.70277404785156, -104.98977661132812], [39.70265197753906, -104.98954010009766], [39.70252990722656, -104.98933410644531], [39.70241928100586, -104.98914337158203], [39.70228576660156, -104.98894500732422], [39.702110290527344, -104.98870849609375], [39.70179748535156, -104.9883041381836], [39.70148849487305, -104.98790740966797], [39.700843811035156, -104.987060546875], [39.700706481933594, -104.98689270019531], [39.700130462646484, -104.98612213134766], [39.69986343383789, -104.98579406738281], [39.699214935302734, -104.98503875732422], [39.696720123291016, -104.98221588134766], [39.6949462890625, -104.9802017211914], [39.69448471069336, -104.97967529296875], [39.69377136230469, -104.97888946533203], [39.693267822265625, -104.97833251953125], [39.6928596496582, -104.9778823852539], [39.692665100097656, -104.97766876220703], [39.69175720214844, -104.97666931152344], [39.691261291503906, -104.97602081298828], [39.690696716308594, -104.97518920898438]],\n", " {"bubblingMouseEvents": true, "color": "#eff821", "dashArray": null, "dashOffset": null, "fill": false, "fillColor": "#eff821", "fillOpacity": 0.2, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "noClip": false, "opacity": 0.8, "smoothFactor": 1.0, "stroke": true, "weight": 10}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " poly_line_b5d0064dc06afe599b6fe424054dc1d9.bindTooltip(\n", + " poly_line_2c8a5968d70c47cbf064b52ae14331a2.bindTooltip(\n", " `<div>\n", - " 0.32013055234991905\n", + " 0.3077343325263442\n", " </div>`,\n", " {"sticky": true}\n", " );\n", " \n", " \n", - " var marker_82a657f820f40b4c8f214ba2d6cd85d1 = L.marker(\n", + " var marker_3b9ce4145da3d8b43980c7ae62d5287c = L.marker(\n", " [39.77902603149414, -104.96916961669922],\n", " {}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " var icon_24690c2e345cc1762e6b8cdc0855535a = L.AwesomeMarkers.icon(\n", + " var icon_72d50d6873c31096f6c5c2328f518093 = L.AwesomeMarkers.icon(\n", " {"extraClasses": "fa-rotate-0", "icon": "circle", "iconColor": "white", "markerColor": "green", "prefix": "fa"}\n", " );\n", - " marker_82a657f820f40b4c8f214ba2d6cd85d1.setIcon(icon_24690c2e345cc1762e6b8cdc0855535a);\n", + " marker_3b9ce4145da3d8b43980c7ae62d5287c.setIcon(icon_72d50d6873c31096f6c5c2328f518093);\n", " \n", " \n", - " marker_82a657f820f40b4c8f214ba2d6cd85d1.bindTooltip(\n", + " marker_3b9ce4145da3d8b43980c7ae62d5287c.bindTooltip(\n", " `<div>\n", " Origin\n", " </div>`,\n", @@ -1398,19 +1388,19 @@ " );\n", " \n", " \n", - " var marker_4f82c89ca2669b5f6e6e0bb237b2dcc5 = L.marker(\n", - " [39.6929817199707, -104.97577667236328],\n", + " var marker_4bb36aaa63ebe8afd77d4c7e19524537 = L.marker(\n", + " [39.690696716308594, -104.97518920898438],\n", " {}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " var icon_5ce24d64ef02c98b121c1244ea88ccd3 = L.AwesomeMarkers.icon(\n", + " var icon_bfab77049a42cfba5c42d9ec7593a199 = L.AwesomeMarkers.icon(\n", " {"extraClasses": "fa-rotate-0", "icon": "circle", "iconColor": "white", "markerColor": "red", "prefix": "fa"}\n", " );\n", - " marker_4f82c89ca2669b5f6e6e0bb237b2dcc5.setIcon(icon_5ce24d64ef02c98b121c1244ea88ccd3);\n", + " marker_4bb36aaa63ebe8afd77d4c7e19524537.setIcon(icon_bfab77049a42cfba5c42d9ec7593a199);\n", " \n", " \n", - " marker_4f82c89ca2669b5f6e6e0bb237b2dcc5.bindTooltip(\n", + " marker_4bb36aaa63ebe8afd77d4c7e19524537.bindTooltip(\n", " `<div>\n", " Destination\n", " </div>`,\n", @@ -1418,33 +1408,33 @@ " );\n", " \n", " \n", - " var poly_line_0ff458fccdc2eac72411e88597e5a7bb = L.polyline(\n", - " [[39.77902603149414, -104.96916961669922], [39.77896499633789, -104.96910095214844], [39.77878189086914, -104.96887969970703], [39.778751373291016, -104.96884155273438], [39.778587341308594, -104.9686508178711], [39.778480529785156, -104.96852111816406], [39.77839660644531, -104.96841430664062], [39.778324127197266, -104.96851348876953], [39.778228759765625, -104.96863555908203], [39.778076171875, -104.96883392333984], [39.777626037597656, -104.96941375732422], [39.7774772644043, -104.96961212158203], [39.77703857421875, -104.97017669677734], [39.776737213134766, -104.97056579589844], [39.77666473388672, -104.97066497802734], [39.7766227722168, -104.97071838378906], [39.776371002197266, -104.97103881835938], [39.77608108520508, -104.9714126586914], [39.775978088378906, -104.97154998779297], [39.774810791015625, -104.97306060791016], [39.77475357055664, -104.97313690185547], [39.77467346191406, -104.97323608398438], [39.77459716796875, -104.97333526611328], [39.773738861083984, -104.97444915771484], [39.77363586425781, -104.97457885742188], [39.773353576660156, -104.97494506835938], [39.77303695678711, -104.97535705566406], [39.77297592163086, -104.9754409790039], [39.77287673950195, -104.97531127929688], [39.77263259887695, -104.9749984741211], [39.77257537841797, -104.97492218017578], [39.77229690551758, -104.97456359863281], [39.77223587036133, -104.9744873046875], [39.77199935913086, -104.97418212890625], [39.77191162109375, -104.97406768798828], [39.77157974243164, -104.9736328125], [39.77155303955078, -104.9736328125], [39.77154541015625, -104.97361755371094], [39.7712516784668, -104.97325897216797], [39.77125549316406, -104.97321319580078], [39.77090072631836, -104.97274017333984], [39.7706184387207, -104.97236633300781], [39.77056884765625, -104.97230529785156], [39.77048110961914, -104.97219848632812], [39.77042770385742, -104.9721450805664], [39.7703742980957, -104.97209167480469], [39.77033233642578, -104.97205352783203], [39.770233154296875, -104.97198486328125], [39.770118713378906, -104.9721450805664], [39.76996994018555, -104.97232818603516], [39.76978302001953, -104.97257232666016], [39.76957321166992, -104.97283172607422], [39.76926803588867, -104.97325134277344], [39.76918411254883, -104.97335815429688], [39.76904296875, -104.97335815429688], [39.76840591430664, -104.97335052490234], [39.76824188232422, -104.97335052490234], [39.7681770324707, -104.97335052490234], [39.7680549621582, -104.97335052490234], [39.7677001953125, -104.97335052490234], [39.767547607421875, -104.97335052490234], [39.7670783996582, -104.97335052490234], [39.76704788208008, -104.97335052490234], [39.766971588134766, -104.97335052490234], [39.76690673828125, -104.97335052490234], [39.76670455932617, -104.97335052490234], [39.76658248901367, -104.97335052490234], [39.766502380371094, -104.97335052490234], [39.76637649536133, -104.97335052490234], [39.766136169433594, -104.97335052490234], [39.76605987548828, -104.97335052490234], [39.765865325927734, -104.97335052490234], [39.76577377319336, -104.97335052490234], [39.76567459106445, -104.97335052490234], [39.76523208618164, -104.97335052490234], [39.76495361328125, -104.97335052490234], [39.764835357666016, -104.97335052490234], [39.7646598815918, -104.97335052490234], [39.764591217041016, -104.97335052490234], [39.7645149230957, -104.97335052490234], [39.764427185058594, -104.97335052490234], [39.76421356201172, -104.97335052490234], [39.764034271240234, -104.97335052490234], [39.76380920410156, -104.97335052490234], [39.763580322265625, -104.97335052490234], [39.76325988769531, -104.97335052490234], [39.76316833496094, -104.97339630126953], [39.763118743896484, -104.97339630126953], [39.76306915283203, -104.97335052490234], [39.762874603271484, -104.97335815429688], [39.762454986572266, -104.97335815429688], [39.76237869262695, -104.97335815429688], [39.76214599609375, -104.97335052490234], [39.762054443359375, -104.97335052490234], [39.76194381713867, -104.97335052490234], [39.76179122924805, -104.97335052490234], [39.76169967651367, -104.97335052490234], [39.76160430908203, -104.97335052490234], [39.76118087768555, -104.97335052490234], [39.76103973388672, -104.97335052490234], [39.76084518432617, -104.97335052490234], [39.76076126098633, -104.97335052490234], [39.76066589355469, -104.97335052490234], [39.760440826416016, -104.97335052490234], [39.76033401489258, -104.97335052490234], [39.759613037109375, -104.97335052490234], [39.7595100402832, -104.97335052490234], [39.75939178466797, -104.97339630126953], [39.759151458740234, -104.97339630126953], [39.75912094116211, -104.97335052490234], [39.759010314941406, -104.97335052490234], [39.758827209472656, -104.97335052490234], [39.75831604003906, -104.97335052490234], [39.75823211669922, -104.97335052490234], [39.758174896240234, -104.97335052490234], [39.75764083862305, -104.97335815429688], [39.7572021484375, -104.97335815429688], [39.75708770751953, -104.97335815429688], [39.75699234008789, -104.97335815429688], [39.75688171386719, -104.97335815429688], [39.75673294067383, -104.97335815429688], [39.75627899169922, -104.97335815429688], [39.75574493408203, -104.97335815429688], [39.75540542602539, -104.97335815429688], [39.75531005859375, -104.97335815429688], [39.75495147705078, -104.97335815429688], [39.75469970703125, -104.97335815429688], [39.754547119140625, -104.97335815429688], [39.75442886352539, -104.97335815429688], [39.753578186035156, -104.97335815429688], [39.75333786010742, -104.97335815429688], [39.75325012207031, -104.97335815429688], [39.75314712524414, -104.97335815429688], [39.75208282470703, -104.97335815429688], [39.751991271972656, -104.97335815429688], [39.751895904541016, -104.97335815429688], [39.75139236450195, -104.9733657836914], [39.75082778930664, -104.9733657836914], [39.750732421875, -104.9733657836914], [39.75063705444336, -104.9733657836914], [39.750423431396484, -104.9733657836914], [39.750282287597656, -104.9733657836914], [39.75018310546875, -104.9733657836914], [39.749576568603516, -104.9733657836914], [39.74947738647461, -104.9733657836914], [39.74938201904297, -104.9733657836914], [39.74884033203125, -104.9733657836914], [39.74821853637695, -104.97337341308594], [39.74812698364258, -104.97337341308594], [39.748016357421875, -104.97337341308594], [39.747798919677734, -104.97337341308594], [39.74757766723633, -104.97337341308594], [39.74747085571289, -104.97337341308594], [39.74736785888672, -104.97337341308594], [39.74721908569336, -104.97337341308594], [39.747066497802734, -104.97337341308594], [39.746952056884766, -104.97337341308594], [39.746864318847656, -104.97337341308594], [39.74663162231445, -104.97337341308594], [39.746551513671875, -104.97338104248047], [39.746482849121094, -104.97338104248047], [39.7460823059082, -104.97338104248047], [39.74594497680664, -104.97338104248047], [39.74583435058594, -104.97338104248047], [39.74509048461914, -104.97340393066406], [39.745052337646484, -104.97340393066406], [39.745018005371094, -104.97344207763672], [39.744972229003906, -104.97344970703125], [39.744937896728516, -104.97344970703125], [39.744834899902344, -104.97339630126953], [39.744834899902344, -104.97355651855469], [39.744834899902344, -104.97415924072266], [39.74483871459961, -104.97454833984375], [39.74483871459961, -104.97476196289062], [39.74464416503906, -104.97476196289062], [39.744606018066406, -104.97476196289062], [39.74433517456055, -104.97476959228516], [39.74381637573242, -104.97476959228516], [39.74373245239258, -104.97476959228516], [39.743377685546875, -104.97477722167969], [39.74324417114258, -104.97477722167969], [39.743133544921875, -104.97477722167969], [39.7426872253418, -104.97477722167969], [39.74175262451172, -104.97477722167969], [39.74166488647461, -104.97477722167969], [39.74156951904297, -104.97477722167969], [39.7412109375, -104.97478485107422], [39.740718841552734, -104.97479248046875], [39.74055862426758, -104.97479248046875], [39.74032211303711, -104.97479248046875], [39.74012756347656, -104.97480010986328], [39.740020751953125, -104.97480010986328], [39.740020751953125, -104.9746322631836], [39.740020751953125, -104.97451782226562], [39.74002456665039, -104.97415924072266], [39.73991775512695, -104.97415924072266], [39.73970031738281, -104.97415924072266], [39.73955535888672, -104.97415161132812], [39.739315032958984, -104.97415161132812], [39.73896789550781, -104.97415161132812], [39.738609313964844, -104.97415161132812], [39.73850631713867, -104.9741439819336], [39.73841857910156, -104.9741439819336], [39.73833465576172, -104.9741439819336], [39.736942291259766, -104.9741439819336], [39.736881256103516, -104.9741439819336], [39.73681640625, -104.9741439819336], [39.73567581176758, -104.97412109375], [39.735252380371094, -104.97411346435547], [39.735164642333984, -104.97411346435547], [39.735069274902344, -104.97411346435547], [39.73379898071289, -104.97410583496094], [39.73370361328125, -104.97410583496094], [39.733612060546875, -104.97410583496094], [39.73240280151367, -104.97410583496094], [39.732357025146484, -104.97410583496094], [39.73214340209961, -104.97410583496094], [39.7320556640625, -104.97410583496094], [39.73196029663086, -104.97410583496094], [39.731422424316406, -104.97410583496094], [39.73128890991211, -104.97410583496094], [39.730960845947266, -104.97410583496094], [39.73088455200195, -104.97410583496094], [39.73067855834961, -104.97410583496094], [39.73054504394531, -104.97410583496094], [39.7304573059082, -104.97410583496094], [39.730369567871094, -104.97410583496094], [39.73027420043945, -104.97410583496094], [39.73003387451172, -104.97410583496094], [39.729976654052734, -104.97410583496094], [39.729896545410156, -104.97410583496094], [39.72964859008789, -104.97410583496094], [39.7294807434082, -104.97410583496094], [39.729434967041016, -104.97410583496094], [39.72917175292969, -104.97410583496094], [39.72907257080078, -104.97410583496094], [39.72898864746094, -104.97410583496094], [39.727378845214844, -104.9740982055664], [39.72727966308594, -104.9740982055664], [39.727195739746094, -104.9740982055664], [39.7259635925293, -104.9740982055664], [39.72566604614258, -104.97409057617188], [39.7255859375, -104.97409057617188], [39.72549819946289, -104.97409057617188], [39.725337982177734, -104.97409057617188], [39.7252082824707, -104.97409057617188], [39.724693298339844, -104.97409057617188], [39.72453689575195, -104.97409057617188], [39.72406768798828, -104.97408294677734], [39.72374725341797, -104.97408294677734], [39.72247314453125, -104.97408294677734], [39.72218322753906, -104.97408294677734], [39.72205352783203, -104.97408294677734], [39.721946716308594, -104.97408294677734], [39.72013473510742, -104.97406768798828], [39.719642639160156, -104.97406005859375], [39.71931457519531, -104.97406005859375], [39.71918869018555, -104.97406005859375], [39.718971252441406, -104.97405242919922], [39.71888732910156, -104.97404479980469], [39.71880340576172, -104.97403717041016], [39.71875, -104.97402954101562], [39.71870422363281, -104.9740219116211], [39.718650817871094, -104.97401428222656], [39.71857452392578, -104.97399139404297], [39.718505859375, -104.97396850585938], [39.71845245361328, -104.97393798828125], [39.71842956542969, -104.97392272949219], [39.71839141845703, -104.97390747070312], [39.71834945678711, -104.97386932373047], [39.718318939208984, -104.97382354736328], [39.71824264526367, -104.97368621826172], [39.71818923950195, -104.97358703613281], [39.71816635131836, -104.97354888916016], [39.71815490722656, -104.9735336303711], [39.71811294555664, -104.97348022460938], [39.71806335449219, -104.97343444824219], [39.71802520751953, -104.97341918945312], [39.717979431152344, -104.97340393066406], [39.717952728271484, -104.97339630126953], [39.71792221069336, -104.973388671875], [39.717899322509766, -104.973388671875], [39.71767807006836, -104.973388671875], [39.716922760009766, -104.973388671875], [39.71653366088867, -104.97339630126953], [39.71645736694336, -104.97339630126953], [39.71589660644531, -104.97339630126953], [39.71546936035156, -104.97341918945312], [39.71541976928711, -104.97341918945312], [39.71538543701172, -104.97342681884766], [39.71536636352539, -104.97342681884766], [39.71527862548828, -104.97342681884766], [39.7148551940918, -104.97344970703125], [39.71479415893555, -104.97344970703125], [39.71472930908203, -104.97345733642578], [39.714656829833984, -104.97344970703125], [39.71451950073242, -104.97344207763672], [39.71427917480469, -104.9734115600586], [39.712989807128906, -104.97340393066406], [39.71291732788086, -104.97340393066406], [39.71285629272461, -104.97340393066406], [39.71247482299805, -104.97340393066406], [39.711551666259766, -104.97340393066406], [39.71137237548828, -104.97340393066406], [39.711204528808594, -104.97340393066406], [39.71110534667969, -104.97340393066406], [39.711021423339844, -104.97340393066406], [39.7109489440918, -104.97340393066406], [39.710845947265625, -104.97340393066406], [39.709381103515625, -104.973388671875], [39.70929718017578, -104.973388671875], [39.707820892333984, -104.973388671875], [39.707557678222656, -104.973388671875], [39.70749282836914, -104.973388671875], [39.707420349121094, -104.973388671875], [39.70706558227539, -104.97338104248047], [39.70566940307617, -104.97337341308594], [39.70392990112305, -104.973388671875], [39.70386505126953, -104.973388671875], [39.70379638671875, -104.973388671875], [39.70212173461914, -104.97339630126953], [39.70206069946289, -104.97339630126953], [39.70030212402344, -104.97339630126953], [39.70021057128906, -104.97340393066406], [39.700138092041016, -104.97339630126953], [39.698429107666016, -104.97340393066406], [39.69660949707031, -104.9734115600586], [39.69625473022461, -104.97341918945312], [39.694740295410156, -104.97341918945312], [39.694149017333984, -104.97343444824219], [39.69339370727539, -104.97343444824219], [39.69325256347656, -104.97343444824219], [39.69306564331055, -104.97342681884766], [39.6929817199707, -104.97342681884766], [39.6929817199707, -104.97357177734375], [39.6929817199707, -104.97403717041016], [39.6929817199707, -104.974609375], [39.69298553466797, -104.97517395019531], [39.6929817199707, -104.97577667236328]],\n", - " {"bubblingMouseEvents": true, "color": "#8104a7", "dashArray": null, "dashOffset": null, "fill": false, "fillColor": "#8104a7", "fillOpacity": 0.2, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "noClip": false, "opacity": 0.8, "smoothFactor": 1.0, "stroke": true, "weight": 10}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " var poly_line_402257b76627588e21735bcf67d8a108 = L.polyline(\n", + " [[39.77902603149414, -104.96916961669922], [39.7789306640625, -104.96929931640625], [39.778900146484375, -104.9693374633789], [39.77882766723633, -104.96943664550781], [39.778751373291016, -104.96954345703125], [39.7786979675293, -104.96961975097656], [39.77864456176758, -104.96971130371094], [39.77876281738281, -104.96937561035156], [39.77878952026367, -104.96929931640625], [39.778804779052734, -104.9692153930664], [39.77880096435547, -104.96912384033203], [39.778785705566406, -104.96903991699219], [39.77874755859375, -104.96894836425781], [39.778587341308594, -104.9686508178711], [39.778480529785156, -104.96852111816406], [39.77839660644531, -104.96841430664062], [39.778324127197266, -104.96851348876953], [39.778228759765625, -104.96863555908203], [39.778076171875, -104.96883392333984], [39.777626037597656, -104.96941375732422], [39.7774772644043, -104.96961212158203], [39.77703857421875, -104.97017669677734], [39.776737213134766, -104.97056579589844], [39.77666473388672, -104.97066497802734], [39.7766227722168, -104.97071838378906], [39.776371002197266, -104.97103881835938], [39.77608108520508, -104.9714126586914], [39.775978088378906, -104.97154998779297], [39.774810791015625, -104.97306060791016], [39.77475357055664, -104.97313690185547], [39.77467346191406, -104.97323608398438], [39.77459716796875, -104.97333526611328], [39.773738861083984, -104.97444915771484], [39.77363586425781, -104.97457885742188], [39.773353576660156, -104.97494506835938], [39.77303695678711, -104.97535705566406], [39.77297592163086, -104.9754409790039], [39.77290344238281, -104.97553253173828], [39.772544860839844, -104.97599029541016], [39.772335052490234, -104.97626495361328], [39.77207946777344, -104.97659301757812], [39.771976470947266, -104.97673034667969], [39.771705627441406, -104.97708129882812], [39.77125549316406, -104.97766876220703], [39.77039337158203, -104.9787826538086], [39.77033233642578, -104.9788589477539], [39.770263671875, -104.97895050048828], [39.769996643066406, -104.97929382324219], [39.76996994018555, -104.9793930053711], [39.76955032348633, -104.97993469238281], [39.769287109375, -104.98027801513672], [39.7691764831543, -104.98041534423828], [39.769039154052734, -104.98059844970703], [39.76881408691406, -104.98088836669922], [39.768733978271484, -104.98099517822266], [39.76864242553711, -104.98110961914062], [39.76858901977539, -104.9811782836914], [39.76840591430664, -104.98141479492188], [39.7678337097168, -104.98216247558594], [39.76764678955078, -104.9823989868164], [39.76701736450195, -104.98321533203125], [39.766876220703125, -104.9833984375], [39.766693115234375, -104.98363494873047], [39.766624450683594, -104.98372650146484], [39.76657485961914, -104.9837875366211], [39.76653289794922, -104.98384857177734], [39.766178131103516, -104.98429870605469], [39.766021728515625, -104.98450469970703], [39.76557159423828, -104.98507690429688], [39.76506423950195, -104.98573303222656], [39.76464080810547, -104.98627471923828], [39.764495849609375, -104.98646545410156], [39.76442337036133, -104.98655700683594], [39.764347076416016, -104.98664855957031], [39.763763427734375, -104.98738861083984], [39.76366424560547, -104.98750305175781], [39.763572692871094, -104.98760223388672], [39.76346969604492, -104.98770141601562], [39.76337814331055, -104.98778533935547], [39.76326370239258, -104.98786926269531], [39.76316452026367, -104.9879379272461], [39.76304626464844, -104.98800659179688], [39.762916564941406, -104.98807525634766], [39.762813568115234, -104.98812103271484], [39.76266860961914, -104.98816680908203], [39.76252746582031, -104.98819732666016], [39.762413024902344, -104.98820495605469], [39.762290954589844, -104.98821258544922], [39.76216125488281, -104.98821258544922], [39.762062072753906, -104.98820495605469], [39.76179885864258, -104.9881591796875], [39.76161575317383, -104.98812103271484], [39.76142501831055, -104.98808288574219], [39.76121520996094, -104.98804473876953], [39.75983428955078, -104.98776245117188], [39.75953674316406, -104.98770141601562], [39.75946807861328, -104.98763275146484], [39.75936508178711, -104.98761749267578], [39.7588996887207, -104.987548828125], [39.758426666259766, -104.98747253417969], [39.758270263671875, -104.9874496459961], [39.75812911987305, -104.98744201660156], [39.75796127319336, -104.98744201660156], [39.75767517089844, -104.9874267578125], [39.75761032104492, -104.9874267578125], [39.75736618041992, -104.98741912841797], [39.757179260253906, -104.98741149902344], [39.757102966308594, -104.98741149902344], [39.756961822509766, -104.98741149902344], [39.756805419921875, -104.9874038696289], [39.756404876708984, -104.9874038696289], [39.75601577758789, -104.9874038696289], [39.75578308105469, -104.98739624023438], [39.75563049316406, -104.98739624023438], [39.755496978759766, -104.98739624023438], [39.75507736206055, -104.98738861083984], [39.75468063354492, -104.98738861083984], [39.75453186035156, -104.98738098144531], [39.754398345947266, -104.98738098144531], [39.754364013671875, -104.98738098144531], [39.75428009033203, -104.98738861083984], [39.75388717651367, -104.98738861083984], [39.753604888916016, -104.98738861083984], [39.75343704223633, -104.98738861083984], [39.7532844543457, -104.98738861083984], [39.75323486328125, -104.98738861083984], [39.75295639038086, -104.98738861083984], [39.752933502197266, -104.98738861083984], [39.752662658691406, -104.98738861083984], [39.752262115478516, -104.98738861083984], [39.75224304199219, -104.98738098144531], [39.751827239990234, -104.98738098144531], [39.75173568725586, -104.98738098144531], [39.751583099365234, -104.98738098144531], [39.75148391723633, -104.98738098144531], [39.751014709472656, -104.98738098144531], [39.750850677490234, -104.98738098144531], [39.75082015991211, -104.98738098144531], [39.750736236572266, -104.98738098144531], [39.750389099121094, -104.98737335205078], [39.75023651123047, -104.98737335205078], [39.7501106262207, -104.98737335205078], [39.7497673034668, -104.98737335205078], [39.74958419799805, -104.98737335205078], [39.74951171875, -104.98737335205078], [39.749412536621094, -104.98737335205078], [39.74927520751953, -104.98738098144531], [39.749168395996094, -104.98738098144531], [39.74892044067383, -104.98738098144531], [39.74868392944336, -104.98738098144531], [39.74851989746094, -104.98738098144531], [39.74822235107422, -104.98738098144531], [39.74802017211914, -104.98738098144531], [39.7476692199707, -104.98738098144531], [39.74758529663086, -104.98738098144531], [39.74751281738281, -104.98738098144531], [39.7474365234375, -104.98738098144531], [39.747379302978516, -104.98738098144531], [39.74735641479492, -104.98738098144531], [39.74730682373047, -104.98738098144531], [39.74697494506836, -104.98738098144531], [39.746944427490234, -104.98738098144531], [39.74678039550781, -104.98738861083984], [39.74667739868164, -104.98738861083984], [39.74653244018555, -104.98738861083984], [39.746482849121094, -104.98738861083984], [39.74626541137695, -104.98738861083984], [39.74618148803711, -104.98738861083984], [39.74605178833008, -104.98738861083984], [39.745948791503906, -104.98738861083984], [39.74554443359375, -104.98738861083984], [39.745418548583984, -104.98738861083984], [39.74506378173828, -104.98739624023438], [39.74480438232422, -104.98739624023438], [39.74473571777344, -104.9874038696289], [39.74430847167969, -104.98739624023438], [39.743526458740234, -104.98739624023438], [39.74336242675781, -104.98739624023438], [39.74320602416992, -104.98739624023438], [39.74302291870117, -104.98739624023438], [39.74254608154297, -104.98739624023438], [39.74245834350586, -104.98739624023438], [39.74220275878906, -104.98739624023438], [39.74214172363281, -104.98738861083984], [39.74182891845703, -104.98738861083984], [39.74177932739258, -104.98738861083984], [39.7416877746582, -104.98738861083984], [39.74163818359375, -104.98738098144531], [39.74156188964844, -104.98738861083984], [39.74149703979492, -104.98738861083984], [39.741416931152344, -104.98738861083984], [39.74137496948242, -104.98738861083984], [39.74129867553711, -104.98738861083984], [39.7410888671875, -104.98738861083984], [39.74089050292969, -104.98739624023438], [39.740875244140625, -104.98739624023438], [39.74071502685547, -104.98739624023438], [39.740631103515625, -104.98739624023438], [39.740478515625, -104.98739624023438], [39.74021530151367, -104.9874038696289], [39.74014663696289, -104.9874038696289], [39.74000930786133, -104.9874038696289], [39.73992919921875, -104.9874038696289], [39.73912048339844, -104.98739624023438], [39.73855209350586, -104.98739624023438], [39.73845672607422, -104.98739624023438], [39.73835372924805, -104.98739624023438], [39.73801040649414, -104.98739624023438], [39.73710250854492, -104.98738861083984], [39.73695373535156, -104.98738861083984], [39.736900329589844, -104.98738861083984], [39.736846923828125, -104.98738861083984], [39.73676300048828, -104.98738861083984], [39.73644256591797, -104.98739624023438], [39.73640441894531, -104.98739624023438], [39.736244201660156, -104.98739624023438], [39.73619079589844, -104.98739624023438], [39.73557662963867, -104.98739624023438], [39.73536682128906, -104.98739624023438], [39.73527526855469, -104.98739624023438], [39.73518753051758, -104.98739624023438], [39.73509216308594, -104.98739624023438], [39.73466110229492, -104.98739624023438], [39.734039306640625, -104.9874038696289], [39.73394775390625, -104.98739624023438], [39.733848571777344, -104.9874038696289], [39.73375701904297, -104.9874038696289], [39.73365020751953, -104.9874038696289], [39.73337173461914, -104.9874038696289], [39.733306884765625, -104.9874038696289], [39.732810974121094, -104.9874038696289], [39.732444763183594, -104.98741149902344], [39.732147216796875, -104.98741149902344], [39.7320556640625, -104.98741149902344], [39.731964111328125, -104.98741149902344], [39.73185348510742, -104.98741149902344], [39.73183059692383, -104.98741149902344], [39.73168182373047, -104.98741149902344], [39.73122024536133, -104.98741912841797], [39.731178283691406, -104.98741912841797], [39.73095703125, -104.98741912841797], [39.73054885864258, -104.98741912841797], [39.73045349121094, -104.98741912841797], [39.73037338256836, -104.98741912841797], [39.730010986328125, -104.98741912841797], [39.729522705078125, -104.98741912841797], [39.72943115234375, -104.98741912841797], [39.72917175292969, -104.98741912841797], [39.72908020019531, -104.98741912841797], [39.7289924621582, -104.98741912841797], [39.728668212890625, -104.98741912841797], [39.72862243652344, -104.98741912841797], [39.72829055786133, -104.98741912841797], [39.727420806884766, -104.98741912841797], [39.727298736572266, -104.98741912841797], [39.72718048095703, -104.98741912841797], [39.72665786743164, -104.9874267578125], [39.72663497924805, -104.9874267578125], [39.726600646972656, -104.9874267578125], [39.726375579833984, -104.98743438720703], [39.726226806640625, -104.98744201660156], [39.726112365722656, -104.98744201660156], [39.72574996948242, -104.98745727539062], [39.72563934326172, -104.98746490478516], [39.72555923461914, -104.98746490478516], [39.725223541259766, -104.98747253417969], [39.7251091003418, -104.98747253417969], [39.724884033203125, -104.98748016357422], [39.72444152832031, -104.98748779296875], [39.72422409057617, -104.98748779296875], [39.72414779663086, -104.98748779296875], [39.72405242919922, -104.98748779296875], [39.72385025024414, -104.98748779296875], [39.72378921508789, -104.98748779296875], [39.72360610961914, -104.98748779296875], [39.72319793701172, -104.98750305175781], [39.723026275634766, -104.98751068115234], [39.722869873046875, -104.98751068115234], [39.72262191772461, -104.98751068115234], [39.72255325317383, -104.98751068115234], [39.72245788574219, -104.98751068115234], [39.72215270996094, -104.98750305175781], [39.72206497192383, -104.98750305175781], [39.72195816040039, -104.98749542236328], [39.7216911315918, -104.98748779296875], [39.72103500366211, -104.98748779296875], [39.720943450927734, -104.98748779296875], [39.720863342285156, -104.98748779296875], [39.71990966796875, -104.98748779296875], [39.71987533569336, -104.98748779296875], [39.719451904296875, -104.98748779296875], [39.7193603515625, -104.98748779296875], [39.71928787231445, -104.98748779296875], [39.71902847290039, -104.98748779296875], [39.71844482421875, -104.98748779296875], [39.71834945678711, -104.98748779296875], [39.7182731628418, -104.98748779296875], [39.71819305419922, -104.98748779296875], [39.71754455566406, -104.98748779296875], [39.717464447021484, -104.98748779296875], [39.7174186706543, -104.98748779296875], [39.716644287109375, -104.98748779296875], [39.71656799316406, -104.98748779296875], [39.71649932861328, -104.98748779296875], [39.716224670410156, -104.98749542236328], [39.71613311767578, -104.98749542236328], [39.71575927734375, -104.98750305175781], [39.71568298339844, -104.98750305175781], [39.715606689453125, -104.98750305175781], [39.71514892578125, -104.98751831054688], [39.714847564697266, -104.98753356933594], [39.71476364135742, -104.98753356933594], [39.71470260620117, -104.98753356933594], [39.713897705078125, -104.987548828125], [39.713294982910156, -104.987548828125], [39.71319580078125, -104.987548828125], [39.71306610107422, -104.98755645751953], [39.71297836303711, -104.98755645751953], [39.71291732788086, -104.98755645751953], [39.712486267089844, -104.98756408691406], [39.71209716796875, -104.9875717163086], [39.71201705932617, -104.98757934570312], [39.71174240112305, -104.98757934570312], [39.711578369140625, -104.98758697509766], [39.711280822753906, -104.98759460449219], [39.71114730834961, -104.98759460449219], [39.71101379394531, -104.98759460449219], [39.71085739135742, -104.98759460449219], [39.71025085449219, -104.98760986328125], [39.71002960205078, -104.98760986328125], [39.70989227294922, -104.98761749267578], [39.70948028564453, -104.98761749267578], [39.70942306518555, -104.98760986328125], [39.70934295654297, -104.98761749267578], [39.709259033203125, -104.98761749267578], [39.70914840698242, -104.98762512207031], [39.7091064453125, -104.98762512207031], [39.70846939086914, -104.9876480102539], [39.70835876464844, -104.9876480102539], [39.70762634277344, -104.9876480102539], [39.707542419433594, -104.9876480102539], [39.707462310791016, -104.98764038085938], [39.7066535949707, -104.98760223388672], [39.70616912841797, -104.98758697509766], [39.705841064453125, -104.9875717163086], [39.70573806762695, -104.98756408691406], [39.705665588378906, -104.98755645751953], [39.705406188964844, -104.98754119873047], [39.705223083496094, -104.98753356933594], [39.705101013183594, -104.9875259399414], [39.704872131347656, -104.9875259399414], [39.7047119140625, -104.9875259399414], [39.704627990722656, -104.98751831054688], [39.70394515991211, -104.98751068115234], [39.703880310058594, -104.98751068115234], [39.70368194580078, -104.98750305175781], [39.70335006713867, -104.98750305175781], [39.70302963256836, -104.98750305175781], [39.7028694152832, -104.98750305175781], [39.70270538330078, -104.98751831054688], [39.70259475708008, -104.9875259399414], [39.702491760253906, -104.98753356933594], [39.70227813720703, -104.987548828125], [39.7021369934082, -104.98755645751953], [39.70204162597656, -104.98756408691406], [39.700843811035156, -104.98760986328125], [39.700782775878906, -104.98749542236328], [39.70073318481445, -104.9874038696289], [39.700687408447266, -104.98731994628906], [39.700660705566406, -104.98727416992188], [39.70061111450195, -104.9871826171875], [39.70054626464844, -104.98707580566406], [39.70036315917969, -104.98675537109375], [39.70024490356445, -104.986572265625], [39.70008850097656, -104.98636627197266], [39.700042724609375, -104.98631286621094], [39.69866180419922, -104.9847412109375], [39.6981086730957, -104.98410034179688], [39.69713592529297, -104.98299407958984], [39.69563674926758, -104.98123168945312], [39.6947135925293, -104.9800796508789], [39.69377136230469, -104.97888946533203], [39.693267822265625, -104.97833251953125], [39.6928596496582, -104.9778823852539], [39.692665100097656, -104.97766876220703], [39.69175720214844, -104.97666931152344], [39.691261291503906, -104.97602081298828], [39.690696716308594, -104.97518920898438]],\n", + " {"bubblingMouseEvents": true, "color": "#0c0786", "dashArray": null, "dashOffset": null, "fill": false, "fillColor": "#0c0786", "fillOpacity": 0.2, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "noClip": false, "opacity": 0.8, "smoothFactor": 1.0, "stroke": true, "weight": 10}\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " poly_line_0ff458fccdc2eac72411e88597e5a7bb.bindTooltip(\n", + " poly_line_402257b76627588e21735bcf67d8a108.bindTooltip(\n", " `<div>\n", - " 0.28043218270205944\n", + " 0.2536668087584479\n", " </div>`,\n", " {"sticky": true}\n", " );\n", " \n", " \n", - " var marker_5b024e09f44e0c69d20201e7c466e857 = L.marker(\n", + " var marker_1b0a52e585f073664678f109937b3108 = L.marker(\n", " [39.77902603149414, -104.96916961669922],\n", " {}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " var icon_a4828c5314597a59594503d042d5de44 = L.AwesomeMarkers.icon(\n", + " var icon_b6a90517884c06ab1b7313f7925f898e = L.AwesomeMarkers.icon(\n", " {"extraClasses": "fa-rotate-0", "icon": "circle", "iconColor": "white", "markerColor": "green", "prefix": "fa"}\n", " );\n", - " marker_5b024e09f44e0c69d20201e7c466e857.setIcon(icon_a4828c5314597a59594503d042d5de44);\n", + " marker_1b0a52e585f073664678f109937b3108.setIcon(icon_b6a90517884c06ab1b7313f7925f898e);\n", " \n", " \n", - " marker_5b024e09f44e0c69d20201e7c466e857.bindTooltip(\n", + " marker_1b0a52e585f073664678f109937b3108.bindTooltip(\n", " `<div>\n", " Origin\n", " </div>`,\n", @@ -1452,19 +1442,19 @@ " );\n", " \n", " \n", - " var marker_e2f0f10ac30ff5067fbe03ae61cffc2f = L.marker(\n", - " [39.6929817199707, -104.97577667236328],\n", + " var marker_574d40658a657333ab28dfa70f2843cd = L.marker(\n", + " [39.690696716308594, -104.97518920898438],\n", " {}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " var icon_151e766457e8097b36b4cbf7f43ea64a = L.AwesomeMarkers.icon(\n", + " var icon_c88d519946073f3e85809d1f45d7a82d = L.AwesomeMarkers.icon(\n", " {"extraClasses": "fa-rotate-0", "icon": "circle", "iconColor": "white", "markerColor": "red", "prefix": "fa"}\n", " );\n", - " marker_e2f0f10ac30ff5067fbe03ae61cffc2f.setIcon(icon_151e766457e8097b36b4cbf7f43ea64a);\n", + " marker_574d40658a657333ab28dfa70f2843cd.setIcon(icon_c88d519946073f3e85809d1f45d7a82d);\n", " \n", " \n", - " marker_e2f0f10ac30ff5067fbe03ae61cffc2f.bindTooltip(\n", + " marker_574d40658a657333ab28dfa70f2843cd.bindTooltip(\n", " `<div>\n", " Destination\n", " </div>`,\n", @@ -1472,33 +1462,33 @@ " );\n", " \n", " \n", - " var poly_line_bef927904d15311d3f54d83fb4286a1a = L.polyline(\n", - " [[39.77902603149414, -104.96916961669922], [39.77896499633789, -104.96910095214844], [39.77878189086914, -104.96887969970703], [39.778751373291016, -104.96884155273438], [39.778587341308594, -104.9686508178711], [39.778480529785156, -104.96852111816406], [39.77839660644531, -104.96841430664062], [39.778324127197266, -104.96851348876953], [39.778228759765625, -104.96863555908203], [39.778076171875, -104.96883392333984], [39.777626037597656, -104.96941375732422], [39.7774772644043, -104.96961212158203], [39.77703857421875, -104.97017669677734], [39.776737213134766, -104.97056579589844], [39.77666473388672, -104.97066497802734], [39.7766227722168, -104.97071838378906], [39.776371002197266, -104.97103881835938], [39.77608108520508, -104.9714126586914], [39.775978088378906, -104.97154998779297], [39.774810791015625, -104.97306060791016], [39.77475357055664, -104.97313690185547], [39.77467346191406, -104.97323608398438], [39.77459716796875, -104.97333526611328], [39.773738861083984, -104.97444915771484], [39.77363586425781, -104.97457885742188], [39.773353576660156, -104.97494506835938], [39.77303695678711, -104.97535705566406], [39.77297592163086, -104.9754409790039], [39.77290344238281, -104.97553253173828], [39.772544860839844, -104.97599029541016], [39.772335052490234, -104.97626495361328], [39.77207946777344, -104.97659301757812], [39.771976470947266, -104.97673034667969], [39.771705627441406, -104.97708129882812], [39.77125549316406, -104.97766876220703], [39.77039337158203, -104.9787826538086], [39.77033233642578, -104.9788589477539], [39.770263671875, -104.97895050048828], [39.769996643066406, -104.97929382324219], [39.76996994018555, -104.9793930053711], [39.76955032348633, -104.97993469238281], [39.769287109375, -104.98027801513672], [39.7691764831543, -104.98041534423828], [39.769039154052734, -104.98059844970703], [39.76881408691406, -104.98088836669922], [39.768733978271484, -104.98099517822266], [39.76864242553711, -104.98110961914062], [39.76858901977539, -104.9811782836914], [39.76840591430664, -104.98141479492188], [39.7678337097168, -104.98216247558594], [39.76764678955078, -104.9823989868164], [39.76701736450195, -104.98321533203125], [39.766876220703125, -104.9833984375], [39.766693115234375, -104.98363494873047], [39.766624450683594, -104.98372650146484], [39.76657485961914, -104.9837875366211], [39.76653289794922, -104.98384857177734], [39.766178131103516, -104.98429870605469], [39.766021728515625, -104.98450469970703], [39.76557159423828, -104.98507690429688], [39.76506423950195, -104.98573303222656], [39.76464080810547, -104.98627471923828], [39.764495849609375, -104.98646545410156], [39.76442337036133, -104.98655700683594], [39.764347076416016, -104.98664855957031], [39.763763427734375, -104.98738861083984], [39.76366424560547, -104.98750305175781], [39.763572692871094, -104.98760223388672], [39.76346969604492, -104.98770141601562], [39.76337814331055, -104.98778533935547], [39.76326370239258, -104.98786926269531], [39.76316452026367, -104.9879379272461], [39.76304626464844, -104.98800659179688], [39.762916564941406, -104.98807525634766], [39.762813568115234, -104.98812103271484], [39.76266860961914, -104.98816680908203], [39.76252746582031, -104.98819732666016], [39.762413024902344, -104.98820495605469], [39.762290954589844, -104.98821258544922], [39.76216125488281, -104.98821258544922], [39.762062072753906, -104.98820495605469], [39.76179885864258, -104.9881591796875], [39.76161575317383, -104.98812103271484], [39.76142501831055, -104.98808288574219], [39.76121520996094, -104.98804473876953], [39.75983428955078, -104.98776245117188], [39.75953674316406, -104.98770141601562], [39.75946807861328, -104.98763275146484], [39.75936508178711, -104.98761749267578], [39.7588996887207, -104.987548828125], [39.758426666259766, -104.98747253417969], [39.758270263671875, -104.9874496459961], [39.75812911987305, -104.98744201660156], [39.75796127319336, -104.98744201660156], [39.75767517089844, -104.9874267578125], [39.75761032104492, -104.9874267578125], [39.75736618041992, -104.98741912841797], [39.757179260253906, -104.98741149902344], [39.757102966308594, -104.98741149902344], [39.756961822509766, -104.98741149902344], [39.756805419921875, -104.9874038696289], [39.756404876708984, -104.9874038696289], [39.75601577758789, -104.9874038696289], [39.75578308105469, -104.98739624023438], [39.75563049316406, -104.98739624023438], [39.755496978759766, -104.98739624023438], [39.75507736206055, -104.98738861083984], [39.75468063354492, -104.98738861083984], [39.75453186035156, -104.98738098144531], [39.754398345947266, -104.98738098144531], [39.754364013671875, -104.98738098144531], [39.75428009033203, -104.98738861083984], [39.75388717651367, -104.98738861083984], [39.753604888916016, -104.98738861083984], [39.75343704223633, -104.98738861083984], [39.7532844543457, -104.98738861083984], [39.75323486328125, -104.98738861083984], [39.75295639038086, -104.98738861083984], [39.752933502197266, -104.98738861083984], [39.752662658691406, -104.98738861083984], [39.752262115478516, -104.98738861083984], [39.75224304199219, -104.98738098144531], [39.751827239990234, -104.98738098144531], [39.75173568725586, -104.98738098144531], [39.751583099365234, -104.98738098144531], [39.75148391723633, -104.98738098144531], [39.751014709472656, -104.98738098144531], [39.750850677490234, -104.98738098144531], [39.75082015991211, -104.98738098144531], [39.750736236572266, -104.98738098144531], [39.750389099121094, -104.98737335205078], [39.75023651123047, -104.98737335205078], [39.7501106262207, -104.98737335205078], [39.7497673034668, -104.98737335205078], [39.74958419799805, -104.98737335205078], [39.74951171875, -104.98737335205078], [39.749412536621094, -104.98737335205078], [39.74927520751953, -104.98738098144531], [39.749168395996094, -104.98738098144531], [39.74892044067383, -104.98738098144531], [39.74868392944336, -104.98738098144531], [39.74851989746094, -104.98738098144531], [39.74822235107422, -104.98738098144531], [39.74802017211914, -104.98738098144531], [39.7476692199707, -104.98738098144531], [39.74758529663086, -104.98738098144531], [39.74751281738281, -104.98738098144531], [39.7474365234375, -104.98738098144531], [39.747379302978516, -104.98738098144531], [39.74735641479492, -104.98738098144531], [39.74730682373047, -104.98738098144531], [39.74697494506836, -104.98738098144531], [39.746944427490234, -104.98738098144531], [39.74678039550781, -104.98738861083984], [39.74667739868164, -104.98738861083984], [39.74653244018555, -104.98738861083984], [39.746482849121094, -104.98738861083984], [39.74626541137695, -104.98738861083984], [39.74618148803711, -104.98738861083984], [39.74605178833008, -104.98738861083984], [39.745948791503906, -104.98738861083984], [39.74554443359375, -104.98738861083984], [39.745418548583984, -104.98738861083984], [39.74506378173828, -104.98739624023438], [39.74480438232422, -104.98739624023438], [39.74473571777344, -104.9874038696289], [39.74430847167969, -104.98739624023438], [39.743526458740234, -104.98739624023438], [39.74336242675781, -104.98739624023438], [39.74320602416992, -104.98739624023438], [39.74302291870117, -104.98739624023438], [39.74254608154297, -104.98739624023438], [39.74245834350586, -104.98739624023438], [39.74220275878906, -104.98739624023438], [39.74214172363281, -104.98738861083984], [39.74182891845703, -104.98738861083984], [39.74177932739258, -104.98738861083984], [39.7416877746582, -104.98738861083984], [39.74163818359375, -104.98738098144531], [39.74156188964844, -104.98738861083984], [39.74149703979492, -104.98738861083984], [39.741416931152344, -104.98738861083984], [39.74137496948242, -104.98738861083984], [39.74129867553711, -104.98738861083984], [39.7410888671875, -104.98738861083984], [39.74089050292969, -104.98739624023438], [39.740875244140625, -104.98739624023438], [39.74071502685547, -104.98739624023438], [39.740631103515625, -104.98739624023438], [39.740478515625, -104.98739624023438], [39.74021530151367, -104.9874038696289], [39.74014663696289, -104.9874038696289], [39.74000930786133, -104.9874038696289], [39.73992919921875, -104.9874038696289], [39.73912048339844, -104.98739624023438], [39.73855209350586, -104.98739624023438], [39.73845672607422, -104.98739624023438], [39.73835372924805, -104.98739624023438], [39.73801040649414, -104.98739624023438], [39.73710250854492, -104.98738861083984], [39.73695373535156, -104.98738861083984], [39.736900329589844, -104.98738861083984], [39.736846923828125, -104.98738861083984], [39.73676300048828, -104.98738861083984], [39.73644256591797, -104.98739624023438], [39.73640441894531, -104.98739624023438], [39.736244201660156, -104.98739624023438], [39.73619079589844, -104.98739624023438], [39.73557662963867, -104.98739624023438], [39.73536682128906, -104.98739624023438], [39.73527526855469, -104.98739624023438], [39.73518753051758, -104.98739624023438], [39.73509216308594, -104.98739624023438], [39.73466110229492, -104.98739624023438], [39.734039306640625, -104.9874038696289], [39.73394775390625, -104.98739624023438], [39.733848571777344, -104.9874038696289], [39.73375701904297, -104.9874038696289], [39.73365020751953, -104.9874038696289], [39.73337173461914, -104.9874038696289], [39.733306884765625, -104.9874038696289], [39.732810974121094, -104.9874038696289], [39.732444763183594, -104.98741149902344], [39.732147216796875, -104.98741149902344], [39.7320556640625, -104.98741149902344], [39.731964111328125, -104.98741149902344], [39.73185348510742, -104.98741149902344], [39.73183059692383, -104.98741149902344], [39.73168182373047, -104.98741149902344], [39.73122024536133, -104.98741912841797], [39.731178283691406, -104.98741912841797], [39.73095703125, -104.98741912841797], [39.73054885864258, -104.98741912841797], [39.73045349121094, -104.98741912841797], [39.73037338256836, -104.98741912841797], [39.730010986328125, -104.98741912841797], [39.729522705078125, -104.98741912841797], [39.72943115234375, -104.98741912841797], [39.72917175292969, -104.98741912841797], [39.72908020019531, -104.98741912841797], [39.7289924621582, -104.98741912841797], [39.728668212890625, -104.98741912841797], [39.72862243652344, -104.98741912841797], [39.72829055786133, -104.98741912841797], [39.727420806884766, -104.98741912841797], [39.727298736572266, -104.98741912841797], [39.72718048095703, -104.98741912841797], [39.72665786743164, -104.9874267578125], [39.72663497924805, -104.9874267578125], [39.726600646972656, -104.9874267578125], [39.726375579833984, -104.98743438720703], [39.726226806640625, -104.98744201660156], [39.726112365722656, -104.98744201660156], [39.72574996948242, -104.98745727539062], [39.72563934326172, -104.98746490478516], [39.72555923461914, -104.98746490478516], [39.725223541259766, -104.98747253417969], [39.7251091003418, -104.98747253417969], [39.724884033203125, -104.98748016357422], [39.72444152832031, -104.98748779296875], [39.72422409057617, -104.98748779296875], [39.72414779663086, -104.98748779296875], [39.72405242919922, -104.98748779296875], [39.72385025024414, -104.98748779296875], [39.72378921508789, -104.98748779296875], [39.72360610961914, -104.98748779296875], [39.72319793701172, -104.98750305175781], [39.723026275634766, -104.98751068115234], [39.722869873046875, -104.98751068115234], [39.72262191772461, -104.98751068115234], [39.72255325317383, -104.98751068115234], [39.72245788574219, -104.98751068115234], [39.72215270996094, -104.98750305175781], [39.72206497192383, -104.98750305175781], [39.72195816040039, -104.98749542236328], [39.7216911315918, -104.98748779296875], [39.72103500366211, -104.98748779296875], [39.720943450927734, -104.98748779296875], [39.720863342285156, -104.98748779296875], [39.71990966796875, -104.98748779296875], [39.71987533569336, -104.98748779296875], [39.719451904296875, -104.98748779296875], [39.7193603515625, -104.98748779296875], [39.71928787231445, -104.98748779296875], [39.71902847290039, -104.98748779296875], [39.71844482421875, -104.98748779296875], [39.71834945678711, -104.98748779296875], [39.7182731628418, -104.98748779296875], [39.71819305419922, -104.98748779296875], [39.71754455566406, -104.98748779296875], [39.717464447021484, -104.98748779296875], [39.7174186706543, -104.98748779296875], [39.716644287109375, -104.98748779296875], [39.71656799316406, -104.98748779296875], [39.71649932861328, -104.98748779296875], [39.716224670410156, -104.98749542236328], [39.71613311767578, -104.98749542236328], [39.71575927734375, -104.98750305175781], [39.71568298339844, -104.98750305175781], [39.715606689453125, -104.98750305175781], [39.71514892578125, -104.98751831054688], [39.714847564697266, -104.98753356933594], [39.71476364135742, -104.98753356933594], [39.71470260620117, -104.98753356933594], [39.713897705078125, -104.987548828125], [39.713294982910156, -104.987548828125], [39.71319580078125, -104.987548828125], [39.71306610107422, -104.98755645751953], [39.71297836303711, -104.98755645751953], [39.71291732788086, -104.98755645751953], [39.712486267089844, -104.98756408691406], [39.71209716796875, -104.9875717163086], [39.71201705932617, -104.98757934570312], [39.71174240112305, -104.98757934570312], [39.711578369140625, -104.98758697509766], [39.711280822753906, -104.98759460449219], [39.71114730834961, -104.98759460449219], [39.71101379394531, -104.98759460449219], [39.71085739135742, -104.98759460449219], [39.71025085449219, -104.98760986328125], [39.71002960205078, -104.98760986328125], [39.70989227294922, -104.98761749267578], [39.70948028564453, -104.98761749267578], [39.70942306518555, -104.98760986328125], [39.70934295654297, -104.98761749267578], [39.709259033203125, -104.98761749267578], [39.70914840698242, -104.98762512207031], [39.7091064453125, -104.98762512207031], [39.70846939086914, -104.9876480102539], [39.70835876464844, -104.9876480102539], [39.70762634277344, -104.9876480102539], [39.707542419433594, -104.9876480102539], [39.707462310791016, -104.98764038085938], [39.7066535949707, -104.98760223388672], [39.70616912841797, -104.98758697509766], [39.705841064453125, -104.9875717163086], [39.70573806762695, -104.98756408691406], [39.705665588378906, -104.98755645751953], [39.705406188964844, -104.98754119873047], [39.705223083496094, -104.98753356933594], [39.705101013183594, -104.9875259399414], [39.704872131347656, -104.9875259399414], [39.7047119140625, -104.9875259399414], [39.704627990722656, -104.98751831054688], [39.70394515991211, -104.98751068115234], [39.703880310058594, -104.98751068115234], [39.70368194580078, -104.98750305175781], [39.70335006713867, -104.98750305175781], [39.70302963256836, -104.98750305175781], [39.7028694152832, -104.98750305175781], [39.70270538330078, -104.98751831054688], [39.70259475708008, -104.9875259399414], [39.702491760253906, -104.98753356933594], [39.70227813720703, -104.987548828125], [39.7021369934082, -104.98755645751953], [39.70204162597656, -104.98756408691406], [39.700843811035156, -104.98760986328125], [39.700782775878906, -104.98749542236328], [39.70073318481445, -104.9874038696289], [39.700687408447266, -104.98731994628906], [39.700660705566406, -104.98727416992188], [39.70061111450195, -104.9871826171875], [39.70054626464844, -104.98707580566406], [39.70036315917969, -104.98675537109375], [39.70024490356445, -104.986572265625], [39.70008850097656, -104.98636627197266], [39.700042724609375, -104.98631286621094], [39.69866180419922, -104.9847412109375], [39.6981086730957, -104.98410034179688], [39.69713592529297, -104.98299407958984], [39.696075439453125, -104.98184967041016], [39.69560623168945, -104.9813003540039], [39.69524383544922, -104.98087310791016], [39.69488525390625, -104.98043823242188], [39.694786071777344, -104.98033905029297], [39.6947021484375, -104.98025512695312], [39.69462585449219, -104.98019409179688], [39.6945915222168, -104.98016357421875], [39.69448471069336, -104.98009490966797], [39.69437789916992, -104.98002624511719], [39.6942024230957, -104.97992706298828], [39.69398498535156, -104.97977447509766], [39.69377899169922, -104.97953033447266], [39.69367599487305, -104.97943115234375], [39.69364929199219, -104.97940063476562], [39.69361114501953, -104.97936248779297], [39.69355010986328, -104.97931671142578], [39.6934814453125, -104.9792709350586], [39.69330978393555, -104.97918701171875], [39.69325637817383, -104.97914123535156], [39.693199157714844, -104.97909545898438], [39.693145751953125, -104.97903442382812], [39.693092346191406, -104.97897338867188], [39.69303512573242, -104.97886657714844], [39.69300079345703, -104.97877502441406], [39.69298553466797, -104.97871398925781], [39.69298553466797, -104.97850036621094], [39.69298553466797, -104.97827911376953], [39.69298553466797, -104.97792053222656], [39.6929931640625, -104.9774398803711], [39.6929931640625, -104.9773941040039], [39.6929931640625, -104.9772720336914], [39.692989349365234, -104.97704315185547], [39.692989349365234, -104.97694396972656], [39.692989349365234, -104.97685241699219], [39.69298553466797, -104.97636413574219], [39.6929817199707, -104.97577667236328]],\n", + " var poly_line_0f7283eac54d7692d977c3a04e427018 = L.polyline(\n", + " [[39.77902603149414, -104.96916961669922], [39.7789306640625, -104.96929931640625], [39.778900146484375, -104.9693374633789], [39.77882766723633, -104.96943664550781], [39.778751373291016, -104.96954345703125], [39.7786979675293, -104.96961975097656], [39.77864456176758, -104.96971130371094], [39.77876281738281, -104.96937561035156], [39.77878952026367, -104.96929931640625], [39.778804779052734, -104.9692153930664], [39.77880096435547, -104.96912384033203], [39.778785705566406, -104.96903991699219], [39.77874755859375, -104.96894836425781], [39.778587341308594, -104.9686508178711], [39.778480529785156, -104.96852111816406], [39.77839660644531, -104.96841430664062], [39.778324127197266, -104.96851348876953], [39.778228759765625, -104.96863555908203], [39.778076171875, -104.96883392333984], [39.777626037597656, -104.96941375732422], [39.7774772644043, -104.96961212158203], [39.77703857421875, -104.97017669677734], [39.776737213134766, -104.97056579589844], [39.77666473388672, -104.97066497802734], [39.7766227722168, -104.97071838378906], [39.776371002197266, -104.97103881835938], [39.77608108520508, -104.9714126586914], [39.775978088378906, -104.97154998779297], [39.774810791015625, -104.97306060791016], [39.77475357055664, -104.97313690185547], [39.77467346191406, -104.97323608398438], [39.77459716796875, -104.97333526611328], [39.773738861083984, -104.97444915771484], [39.77363586425781, -104.97457885742188], [39.773353576660156, -104.97494506835938], [39.77303695678711, -104.97535705566406], [39.77297592163086, -104.9754409790039], [39.77290344238281, -104.97553253173828], [39.772544860839844, -104.97599029541016], [39.772335052490234, -104.97626495361328], [39.77207946777344, -104.97659301757812], [39.771976470947266, -104.97673034667969], [39.771705627441406, -104.97708129882812], [39.77125549316406, -104.97766876220703], [39.77039337158203, -104.9787826538086], [39.77033233642578, -104.9788589477539], [39.770263671875, -104.97895050048828], [39.769996643066406, -104.97929382324219], [39.76996994018555, -104.9793930053711], [39.76955032348633, -104.97993469238281], [39.769287109375, -104.98027801513672], [39.7691764831543, -104.98041534423828], [39.769039154052734, -104.98059844970703], [39.76881408691406, -104.98088836669922], [39.768733978271484, -104.98099517822266], [39.76864242553711, -104.98110961914062], [39.76858901977539, -104.9811782836914], [39.76840591430664, -104.98141479492188], [39.7678337097168, -104.98216247558594], [39.76764678955078, -104.9823989868164], [39.76701736450195, -104.98321533203125], [39.766876220703125, -104.9833984375], [39.766693115234375, -104.98363494873047], [39.766624450683594, -104.98372650146484], [39.76657485961914, -104.9837875366211], [39.76653289794922, -104.98384857177734], [39.766178131103516, -104.98429870605469], [39.766021728515625, -104.98450469970703], [39.76557159423828, -104.98507690429688], [39.76506423950195, -104.98573303222656], [39.76464080810547, -104.98627471923828], [39.764495849609375, -104.98646545410156], [39.76442337036133, -104.98655700683594], [39.764347076416016, -104.98664855957031], [39.763763427734375, -104.98738861083984], [39.76366424560547, -104.98750305175781], [39.763572692871094, -104.98760223388672], [39.76346969604492, -104.98770141601562], [39.76337814331055, -104.98778533935547], [39.76326370239258, -104.98786926269531], [39.76316452026367, -104.9879379272461], [39.76304626464844, -104.98800659179688], [39.762916564941406, -104.98807525634766], [39.762813568115234, -104.98812103271484], [39.76266860961914, -104.98816680908203], [39.76252746582031, -104.98819732666016], [39.762413024902344, -104.98820495605469], [39.762290954589844, -104.98821258544922], [39.76216125488281, -104.98821258544922], [39.762062072753906, -104.98820495605469], [39.76179885864258, -104.9881591796875], [39.76161575317383, -104.98812103271484], [39.76142501831055, -104.98808288574219], [39.76121520996094, -104.98804473876953], [39.75983428955078, -104.98776245117188], [39.75953674316406, -104.98770141601562], [39.75946807861328, -104.98763275146484], [39.75936508178711, -104.98761749267578], [39.7588996887207, -104.987548828125], [39.758426666259766, -104.98747253417969], [39.758270263671875, -104.9874496459961], [39.75812911987305, -104.98744201660156], [39.75796127319336, -104.98744201660156], [39.75767517089844, -104.9874267578125], [39.75761032104492, -104.9874267578125], [39.75736618041992, -104.98741912841797], [39.757179260253906, -104.98741149902344], [39.757102966308594, -104.98741149902344], [39.756961822509766, -104.98741149902344], [39.756805419921875, -104.9874038696289], [39.756404876708984, -104.9874038696289], [39.75601577758789, -104.9874038696289], [39.75578308105469, -104.98739624023438], [39.75563049316406, -104.98739624023438], [39.755496978759766, -104.98739624023438], [39.75507736206055, -104.98738861083984], [39.75468063354492, -104.98738861083984], [39.75453186035156, -104.98738098144531], [39.754398345947266, -104.98738098144531], [39.754364013671875, -104.98738098144531], [39.75428009033203, -104.98738861083984], [39.75388717651367, -104.98738861083984], [39.753604888916016, -104.98738861083984], [39.75343704223633, -104.98738861083984], [39.7532844543457, -104.98738861083984], [39.75323486328125, -104.98738861083984], [39.75295639038086, -104.98738861083984], [39.752933502197266, -104.98738861083984], [39.752662658691406, -104.98738861083984], [39.752262115478516, -104.98738861083984], [39.75224304199219, -104.98738098144531], [39.751827239990234, -104.98738098144531], [39.75173568725586, -104.98738098144531], [39.751583099365234, -104.98738098144531], [39.75148391723633, -104.98738098144531], [39.751014709472656, -104.98738098144531], [39.750850677490234, -104.98738098144531], [39.75082015991211, -104.98738098144531], [39.750736236572266, -104.98738098144531], [39.750389099121094, -104.98737335205078], [39.75023651123047, -104.98737335205078], [39.7501106262207, -104.98737335205078], [39.7497673034668, -104.98737335205078], [39.74958419799805, -104.98737335205078], [39.74951171875, -104.98737335205078], [39.749412536621094, -104.98737335205078], [39.74927520751953, -104.98738098144531], [39.749168395996094, -104.98738098144531], [39.74892044067383, -104.98738098144531], [39.74868392944336, -104.98738098144531], [39.74851989746094, -104.98738098144531], [39.74822235107422, -104.98738098144531], [39.74802017211914, -104.98738098144531], [39.7476692199707, -104.98738098144531], [39.74758529663086, -104.98738098144531], [39.74751281738281, -104.98738098144531], [39.7474365234375, -104.98738098144531], [39.747379302978516, -104.98738098144531], [39.74735641479492, -104.98738098144531], [39.74730682373047, -104.98738098144531], [39.74697494506836, -104.98738098144531], [39.746944427490234, -104.98738098144531], [39.74678039550781, -104.98738861083984], [39.74667739868164, -104.98738861083984], [39.74653244018555, -104.98738861083984], [39.746482849121094, -104.98738861083984], [39.74626541137695, -104.98738861083984], [39.74618148803711, -104.98738861083984], [39.74605178833008, -104.98738861083984], [39.745948791503906, -104.98738861083984], [39.74554443359375, -104.98738861083984], [39.745418548583984, -104.98738861083984], [39.74506378173828, -104.98739624023438], [39.74480438232422, -104.98739624023438], [39.74473571777344, -104.9874038696289], [39.74430847167969, -104.98739624023438], [39.743526458740234, -104.98739624023438], [39.74336242675781, -104.98739624023438], [39.74320602416992, -104.98739624023438], [39.74302291870117, -104.98739624023438], [39.74254608154297, -104.98739624023438], [39.74245834350586, -104.98739624023438], [39.74220275878906, -104.98739624023438], [39.74214172363281, -104.98738861083984], [39.74182891845703, -104.98738861083984], [39.74177932739258, -104.98738861083984], [39.7416877746582, -104.98738861083984], [39.74163818359375, -104.98738098144531], [39.74156188964844, -104.98738861083984], [39.74149703979492, -104.98738861083984], [39.741416931152344, -104.98738861083984], [39.74137496948242, -104.98738861083984], [39.74129867553711, -104.98738861083984], [39.7410888671875, -104.98738861083984], [39.74089050292969, -104.98739624023438], [39.740875244140625, -104.98739624023438], [39.74071502685547, -104.98739624023438], [39.740631103515625, -104.98739624023438], [39.740478515625, -104.98739624023438], [39.74021530151367, -104.9874038696289], [39.74014663696289, -104.9874038696289], [39.74000930786133, -104.9874038696289], [39.73992919921875, -104.9874038696289], [39.73912048339844, -104.98739624023438], [39.73855209350586, -104.98739624023438], [39.73845672607422, -104.98739624023438], [39.73835372924805, -104.98739624023438], [39.73801040649414, -104.98739624023438], [39.73710250854492, -104.98738861083984], [39.73695373535156, -104.98738861083984], [39.736900329589844, -104.98738861083984], [39.736846923828125, -104.98738861083984], [39.73676300048828, -104.98738861083984], [39.73644256591797, -104.98739624023438], [39.73640441894531, -104.98739624023438], [39.736244201660156, -104.98739624023438], [39.73619079589844, -104.98739624023438], [39.73557662963867, -104.98739624023438], [39.73536682128906, -104.98739624023438], [39.73527526855469, -104.98739624023438], [39.73518753051758, -104.98739624023438], [39.73509216308594, -104.98739624023438], [39.73466110229492, -104.98739624023438], [39.734039306640625, -104.9874038696289], [39.73394775390625, -104.98739624023438], [39.733848571777344, -104.9874038696289], [39.73375701904297, -104.9874038696289], [39.73365020751953, -104.9874038696289], [39.73337173461914, -104.9874038696289], [39.733306884765625, -104.9874038696289], [39.732810974121094, -104.9874038696289], [39.732444763183594, -104.98741149902344], [39.732147216796875, -104.98741149902344], [39.7320556640625, -104.98741149902344], [39.731964111328125, -104.98741149902344], [39.73185348510742, -104.98741149902344], [39.73183059692383, -104.98741149902344], [39.73168182373047, -104.98741149902344], [39.73122024536133, -104.98741912841797], [39.731178283691406, -104.98741912841797], [39.73095703125, -104.98741912841797], [39.73054885864258, -104.98741912841797], [39.73045349121094, -104.98741912841797], [39.73037338256836, -104.98741912841797], [39.730010986328125, -104.98741912841797], [39.729522705078125, -104.98741912841797], [39.72943115234375, -104.98741912841797], [39.72917175292969, -104.98741912841797], [39.72908020019531, -104.98741912841797], [39.7289924621582, -104.98741912841797], [39.728668212890625, -104.98741912841797], [39.72862243652344, -104.98741912841797], [39.72829055786133, -104.98741912841797], [39.727420806884766, -104.98741912841797], [39.727298736572266, -104.98741912841797], [39.72718048095703, -104.98741912841797], [39.72665786743164, -104.9874267578125], [39.72663497924805, -104.9874267578125], [39.726600646972656, -104.9874267578125], [39.726375579833984, -104.98743438720703], [39.726226806640625, -104.98744201660156], [39.726112365722656, -104.98744201660156], [39.72574996948242, -104.98745727539062], [39.72563934326172, -104.98746490478516], [39.72555923461914, -104.98746490478516], [39.725223541259766, -104.98747253417969], [39.7251091003418, -104.98747253417969], [39.724884033203125, -104.98748016357422], [39.72444152832031, -104.98748779296875], [39.72422409057617, -104.98748779296875], [39.72414779663086, -104.98748779296875], [39.72405242919922, -104.98748779296875], [39.72385025024414, -104.98748779296875], [39.72378921508789, -104.98748779296875], [39.72360610961914, -104.98748779296875], [39.72319793701172, -104.98750305175781], [39.723026275634766, -104.98751068115234], [39.722869873046875, -104.98751068115234], [39.72262191772461, -104.98751068115234], [39.72255325317383, -104.98751068115234], [39.72245788574219, -104.98751068115234], [39.72215270996094, -104.98750305175781], [39.72206497192383, -104.98750305175781], [39.72195816040039, -104.98749542236328], [39.7216911315918, -104.98748779296875], [39.72103500366211, -104.98748779296875], [39.720943450927734, -104.98748779296875], [39.720863342285156, -104.98748779296875], [39.71990966796875, -104.98748779296875], [39.71987533569336, -104.98748779296875], [39.719451904296875, -104.98748779296875], [39.7193603515625, -104.98748779296875], [39.71928787231445, -104.98748779296875], [39.71902847290039, -104.98748779296875], [39.71844482421875, -104.98748779296875], [39.71834945678711, -104.98748779296875], [39.7182731628418, -104.98748779296875], [39.71819305419922, -104.98748779296875], [39.71754455566406, -104.98748779296875], [39.717464447021484, -104.98748779296875], [39.7174186706543, -104.98748779296875], [39.716644287109375, -104.98748779296875], [39.71656799316406, -104.98748779296875], [39.71649932861328, -104.98748779296875], [39.716224670410156, -104.98749542236328], [39.71613311767578, -104.98749542236328], [39.71575927734375, -104.98750305175781], [39.71568298339844, -104.98750305175781], [39.715606689453125, -104.98750305175781], [39.71514892578125, -104.98751831054688], [39.714847564697266, -104.98753356933594], [39.71476364135742, -104.98753356933594], [39.71470260620117, -104.98753356933594], [39.713897705078125, -104.987548828125], [39.713294982910156, -104.987548828125], [39.71319580078125, -104.987548828125], [39.71306610107422, -104.98755645751953], [39.71297836303711, -104.98755645751953], [39.71291732788086, -104.98755645751953], [39.712486267089844, -104.98756408691406], [39.71209716796875, -104.9875717163086], [39.71201705932617, -104.98757934570312], [39.71174240112305, -104.98757934570312], [39.711578369140625, -104.98758697509766], [39.711280822753906, -104.98759460449219], [39.71114730834961, -104.98759460449219], [39.71101379394531, -104.98759460449219], [39.71085739135742, -104.98759460449219], [39.71025085449219, -104.98760986328125], [39.71002960205078, -104.98760986328125], [39.70989227294922, -104.98761749267578], [39.70948028564453, -104.98761749267578], [39.70942306518555, -104.98760986328125], [39.70934295654297, -104.98761749267578], [39.709259033203125, -104.98761749267578], [39.70914840698242, -104.98762512207031], [39.7091064453125, -104.98762512207031], [39.70846939086914, -104.9876480102539], [39.70835876464844, -104.9876480102539], [39.70762634277344, -104.9876480102539], [39.707542419433594, -104.9876480102539], [39.707462310791016, -104.98764038085938], [39.7066535949707, -104.98760223388672], [39.70616912841797, -104.98758697509766], [39.705841064453125, -104.9875717163086], [39.70573806762695, -104.98756408691406], [39.705665588378906, -104.98755645751953], [39.705406188964844, -104.98754119873047], [39.705223083496094, -104.98753356933594], [39.705101013183594, -104.9875259399414], [39.704872131347656, -104.9875259399414], [39.7047119140625, -104.9875259399414], [39.704627990722656, -104.98751831054688], [39.70394515991211, -104.98751068115234], [39.703880310058594, -104.98751068115234], [39.70368194580078, -104.98750305175781], [39.70335006713867, -104.98750305175781], [39.70302963256836, -104.98750305175781], [39.7028694152832, -104.98750305175781], [39.70270538330078, -104.98751831054688], [39.70259475708008, -104.9875259399414], [39.702491760253906, -104.98753356933594], [39.70227813720703, -104.987548828125], [39.7021369934082, -104.98755645751953], [39.70204162597656, -104.98756408691406], [39.700843811035156, -104.98760986328125], [39.700782775878906, -104.98749542236328], [39.70073318481445, -104.9874038696289], [39.700687408447266, -104.98731994628906], [39.700660705566406, -104.98727416992188], [39.70061111450195, -104.9871826171875], [39.70054626464844, -104.98707580566406], [39.70036315917969, -104.98675537109375], [39.70024490356445, -104.986572265625], [39.70008850097656, -104.98636627197266], [39.700042724609375, -104.98631286621094], [39.69866180419922, -104.9847412109375], [39.6981086730957, -104.98410034179688], [39.69713592529297, -104.98299407958984], [39.69563674926758, -104.98123168945312], [39.6947135925293, -104.9800796508789], [39.69377136230469, -104.97888946533203], [39.693267822265625, -104.97833251953125], [39.6928596496582, -104.9778823852539], [39.692665100097656, -104.97766876220703], [39.69175720214844, -104.97666931152344], [39.691261291503906, -104.97602081298828], [39.690696716308594, -104.97518920898438]],\n", " {"bubblingMouseEvents": true, "color": "#0c0786", "dashArray": null, "dashOffset": null, "fill": false, "fillColor": "#0c0786", "fillOpacity": 0.2, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "noClip": false, "opacity": 0.8, "smoothFactor": 1.0, "stroke": true, "weight": 10}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " poly_line_bef927904d15311d3f54d83fb4286a1a.bindTooltip(\n", + " poly_line_0f7283eac54d7692d977c3a04e427018.bindTooltip(\n", " `<div>\n", - " 0.2665045784952342\n", + " 0.2536668087584479\n", " </div>`,\n", " {"sticky": true}\n", " );\n", " \n", " \n", - " var marker_3c3ccf484f13a3b164a726f9738510a7 = L.marker(\n", + " var marker_ba44a41425b30224b042c605e6e37ad0 = L.marker(\n", " [39.77902603149414, -104.96916961669922],\n", " {}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " var icon_e651a9b5e246c9a5b3f6b21a816c0898 = L.AwesomeMarkers.icon(\n", + " var icon_3f648c64ef6ffa0a38bbb1483d2cfb95 = L.AwesomeMarkers.icon(\n", " {"extraClasses": "fa-rotate-0", "icon": "circle", "iconColor": "white", "markerColor": "green", "prefix": "fa"}\n", " );\n", - " marker_3c3ccf484f13a3b164a726f9738510a7.setIcon(icon_e651a9b5e246c9a5b3f6b21a816c0898);\n", + " marker_ba44a41425b30224b042c605e6e37ad0.setIcon(icon_3f648c64ef6ffa0a38bbb1483d2cfb95);\n", " \n", " \n", - " marker_3c3ccf484f13a3b164a726f9738510a7.bindTooltip(\n", + " marker_ba44a41425b30224b042c605e6e37ad0.bindTooltip(\n", " `<div>\n", " Origin\n", " </div>`,\n", @@ -1506,19 +1496,19 @@ " );\n", " \n", " \n", - " var marker_55450ebdf8b16fefed55b362025f8aa4 = L.marker(\n", - " [39.6929817199707, -104.97577667236328],\n", + " var marker_60a7a39f6a69755ac819d7509795ee5d = L.marker(\n", + " [39.690696716308594, -104.97518920898438],\n", " {}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " var icon_3c83adf446da165e805032e359cb48f3 = L.AwesomeMarkers.icon(\n", + " var icon_10c14d93c287b88d705af05fef17ad27 = L.AwesomeMarkers.icon(\n", " {"extraClasses": "fa-rotate-0", "icon": "circle", "iconColor": "white", "markerColor": "red", "prefix": "fa"}\n", " );\n", - " marker_55450ebdf8b16fefed55b362025f8aa4.setIcon(icon_3c83adf446da165e805032e359cb48f3);\n", + " marker_60a7a39f6a69755ac819d7509795ee5d.setIcon(icon_10c14d93c287b88d705af05fef17ad27);\n", " \n", " \n", - " marker_55450ebdf8b16fefed55b362025f8aa4.bindTooltip(\n", + " marker_60a7a39f6a69755ac819d7509795ee5d.bindTooltip(\n", " `<div>\n", " Destination\n", " </div>`,\n", @@ -1526,36 +1516,36 @@ " );\n", " \n", " \n", - " tile_layer_a41c112b6f13f51514d72f177f5b5733.addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " tile_layer_7050bdfec7ea04700311b7c5e271facf.addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " var poly_line_ccc918f6c4f98bfd6e2cedb14e016e1c = L.polyline(\n", - " [[39.6677360534668, -105.08140563964844], [39.6677360534668, -105.08128356933594], [39.6677360534668, -105.08104705810547], [39.6677360534668, -105.08061218261719], [39.6677360534668, -105.08023071289062], [39.66773223876953, -105.07986450195312], [39.66773223876953, -105.07962799072266], [39.66773223876953, -105.07939147949219], [39.6677360534668, -105.07869720458984], [39.66774368286133, -105.07814025878906], [39.66776657104492, -105.07447814941406], [39.66777420043945, -105.07354736328125], [39.6668815612793, -105.07353210449219], [39.666893005371094, -105.07284545898438], [39.66685485839844, -105.07270050048828], [39.6667366027832, -105.07252502441406], [39.66661071777344, -105.07249450683594], [39.665771484375, -105.07249450683594], [39.664825439453125, -105.07267761230469], [39.664676666259766, -105.07173919677734], [39.66450500488281, -105.07077026367188], [39.66436004638672, -105.06983184814453], [39.66419982910156, -105.0688705444336], [39.664180755615234, -105.0672836303711], [39.664180755615234, -105.06665802001953], [39.664390563964844, -105.0660400390625], [39.664642333984375, -105.06564331054688], [39.66505813598633, -105.06523895263672], [39.66527557373047, -105.06513977050781], [39.665489196777344, -105.06509399414062], [39.667762756347656, -105.06513214111328], [39.667762756347656, -105.06404876708984], [39.667762756347656, -105.06297302246094], [39.66777038574219, -105.0612564086914], [39.66777420043945, -105.06085968017578], [39.66777420043945, -105.06013488769531], [39.66777420043945, -105.06005096435547], [39.667781829833984, -105.05903625488281], [39.667781829833984, -105.05797576904297], [39.66777801513672, -105.05694580078125], [39.667781829833984, -105.055908203125], [39.66778564453125, -105.05487060546875], [39.66777801513672, -105.05426788330078], [39.667781829833984, -105.05392456054688], [39.667781829833984, -105.0536880493164], [39.667781829833984, -105.05325317382812], [39.66777801513672, -105.05252075195312], [39.66777038574219, -105.05178833007812], [39.66777038574219, -105.05171966552734], [39.66777038574219, -105.0509033203125], [39.66777038574219, -105.05079650878906], [39.66777038574219, -105.05069732666016], [39.66775894165039, -105.04981231689453], [39.667762756347656, -105.048828125], [39.667762756347656, -105.0478286743164], [39.667762756347656, -105.04683685302734], [39.66775894165039, -105.04656982421875], [39.66775894165039, -105.04583740234375], [39.66775894165039, -105.04553985595703], [39.66775131225586, -105.04484558105469], [39.66775131225586, -105.0438461303711], [39.667747497558594, -105.04315948486328], [39.66774368286133, -105.04286193847656], [39.667724609375, -105.0418701171875], [39.667724609375, -105.041748046875], [39.667724609375, -105.0416488647461], [39.667720794677734, -105.04067993164062], [39.66771697998047, -105.04055786132812], [39.66771697998047, -105.04007720947266], [39.6677131652832, -105.03968048095703], [39.6677131652832, -105.03929138183594], [39.66770935058594, -105.0386962890625], [39.66770553588867, -105.03777313232422], [39.66769790649414, -105.0368423461914], [39.66769027709961, -105.03593444824219], [39.667686462402344, -105.03510284423828], [39.667686462402344, -105.03497314453125], [39.667686462402344, -105.03486633300781], [39.667694091796875, -105.03436279296875], [39.66769027709961, -105.03382873535156], [39.66769790649414, -105.03285217285156], [39.66769790649414, -105.0318832397461], [39.66769790649414, -105.0309066772461], [39.66769790649414, -105.0308609008789], [39.66770935058594, -105.02996063232422], [39.66770935058594, -105.02987670898438], [39.66770935058594, -105.02982330322266], [39.66770935058594, -105.02980041503906], [39.66771697998047, -105.02886199951172], [39.667720794677734, -105.02796173095703], [39.667724609375, -105.0274658203125], [39.66773223876953, -105.02699279785156], [39.667724609375, -105.02607727050781], [39.66771697998047, -105.0252685546875], [39.6677131652832, -105.02510833740234], [39.667869567871094, -105.02505493164062], [39.66807174682617, -105.0250473022461], [39.668357849121094, -105.0250244140625], [39.668460845947266, -105.02505493164062], [39.66855239868164, -105.02509307861328], [39.66887283325195, -105.02510070800781], [39.669010162353516, -105.02510070800781], [39.66918182373047, -105.02510070800781], [39.669734954833984, -105.02509307861328], [39.6701545715332, -105.02509307861328], [39.670249938964844, -105.02501678466797], [39.67046356201172, -105.02501678466797], [39.670631408691406, -105.02501678466797], [39.67064666748047, -105.02501678466797], [39.67120361328125, -105.02501678466797], [39.67182159423828, -105.02501678466797], [39.671966552734375, -105.02501678466797], [39.672340393066406, -105.02501678466797], [39.67251205444336, -105.02501678466797], [39.67269515991211, -105.02501678466797], [39.672733306884766, -105.02501678466797], [39.67283630371094, -105.02501678466797], [39.67300796508789, -105.02501678466797], [39.67327880859375, -105.02501678466797], [39.67340850830078, -105.02501678466797], [39.67379379272461, -105.02501678466797], [39.6738166809082, -105.02501678466797], [39.674041748046875, -105.02501678466797], [39.674190521240234, -105.02501678466797], [39.67448806762695, -105.02501678466797], [39.67451095581055, -105.02501678466797], [39.67471694946289, -105.02500915527344], [39.67487716674805, -105.02500915527344], [39.67493438720703, -105.02500915527344], [39.675010681152344, -105.02500915527344], [39.67530059814453, -105.02500915527344], [39.67533493041992, -105.02500915527344], [39.675376892089844, -105.02500915527344], [39.67547607421875, -105.02500915527344], [39.67558288574219, -105.02500915527344], [39.67561340332031, -105.02500915527344], [39.675968170166016, -105.02500915527344], [39.676109313964844, -105.02500915527344], [39.6762809753418, -105.02500915527344], [39.676395416259766, -105.02500915527344], [39.67662048339844, -105.02500915527344], [39.6767692565918, -105.02500915527344], [39.67729949951172, -105.02500915527344], [39.677696228027344, -105.0250015258789], [39.678077697753906, -105.02499389648438], [39.678504943847656, -105.02498626708984], [39.67864990234375, -105.02497863769531], [39.67864990234375, -105.02484893798828], [39.67864990234375, -105.02445983886719], [39.67864990234375, -105.02445220947266], [39.67864990234375, -105.02427673339844], [39.67864990234375, -105.0239486694336], [39.67864990234375, -105.02381134033203], [39.67864990234375, -105.02368927001953], [39.67864990234375, -105.0235824584961], [39.678653717041016, -105.02323913574219], [39.678653717041016, -105.02310943603516], [39.678653717041016, -105.02275848388672], [39.678653717041016, -105.022705078125], [39.67865753173828, -105.02210235595703], [39.67865753173828, -105.02203369140625], [39.67866516113281, -105.02108764648438], [39.67866516113281, -105.02105712890625], [39.67866897583008, -105.02051544189453], [39.67866897583008, -105.02037811279297], [39.67866897583008, -105.02024841308594], [39.67866897583008, -105.01970672607422], [39.678672790527344, -105.0191879272461], [39.678672790527344, -105.0189437866211], [39.67867660522461, -105.01802825927734], [39.67867660522461, -105.01740264892578], [39.678680419921875, -105.01725769042969], [39.678680419921875, -105.01705169677734], [39.678680419921875, -105.01679992675781], [39.678680419921875, -105.01677703857422], [39.678680419921875, -105.01656341552734], [39.678680419921875, -105.0163345336914], [39.678680419921875, -105.01615142822266], [39.67868423461914, -105.01593017578125], [39.67868423461914, -105.01590728759766], [39.67868423461914, -105.01569366455078], [39.678680419921875, -105.01528930664062], [39.678680419921875, -105.01522827148438], [39.678680419921875, -105.01507568359375], [39.678680419921875, -105.01486206054688], [39.67867660522461, -105.01463317871094], [39.67867660522461, -105.01461029052734], [39.67867660522461, -105.01438903808594], [39.67867660522461, -105.01427459716797], [39.67867660522461, -105.01416778564453], [39.678672790527344, -105.01394653320312], [39.678672790527344, -105.01387023925781], [39.678672790527344, -105.013671875], [39.67866897583008, -105.01337432861328], [39.67866516113281, -105.01300048828125], [39.67866516113281, -105.01278686523438], [39.67866516113281, -105.01273345947266], [39.67866134643555, -105.01251220703125], [39.67866134643555, -105.0123519897461], [39.67865753173828, -105.01211547851562], [39.67865753173828, -105.01190948486328], [39.678653717041016, -105.0115966796875], [39.67864990234375, -105.01128387451172], [39.67864990234375, -105.01102447509766], [39.67864227294922, -105.01040649414062], [39.67863845825195, -105.00994873046875], [39.67863845825195, -105.00981903076172], [39.67863464355469, -105.00942993164062], [39.67863082885742, -105.00929260253906], [39.678627014160156, -105.0086669921875], [39.67862319946289, -105.00843048095703], [39.678619384765625, -105.00827026367188], [39.67861557006836, -105.00798797607422], [39.6786003112793, -105.0073013305664], [39.67859649658203, -105.00709533691406], [39.678592681884766, -105.00678253173828], [39.678585052490234, -105.00640106201172], [39.67857360839844, -105.00562286376953], [39.678565979003906, -105.00524139404297], [39.67856216430664, -105.00475311279297], [39.678558349609375, -105.00411224365234], [39.678550720214844, -105.00385284423828], [39.67854309082031, -105.0033950805664], [39.67854309082031, -105.0029296875], [39.67854309082031, -105.00288391113281], [39.67853927612305, -105.00263214111328], [39.67853546142578, -105.00242614746094], [39.678531646728516, -105.00221252441406], [39.67852783203125, -105.00177764892578], [39.678524017333984, -105.0015640258789], [39.678524017333984, -105.00135803222656], [39.678524017333984, -105.00122833251953], [39.67852020263672, -105.00108337402344], [39.67852020263672, -105.00096130371094], [39.67852020263672, -105.00088500976562], [39.67851638793945, -105.00064086914062], [39.67851638793945, -105.00045013427734], [39.67851257324219, -105.00027465820312], [39.67850875854492, -105.00006866455078], [39.67850875854492, -104.99995422363281], [39.67850875854492, -104.99993896484375], [39.67850112915039, -104.99947357177734], [39.67849349975586, -104.9990463256836], [39.67849349975586, -104.99900817871094], [39.67848587036133, -104.99864959716797], [39.67848587036133, -104.99851989746094], [39.67848205566406, -104.99839782714844], [39.6784782409668, -104.99809265136719], [39.67847442626953, -104.99771118164062], [39.678470611572266, -104.99767303466797], [39.678470611572266, -104.9975357055664], [39.678466796875, -104.99745178222656], [39.678466796875, -104.99742889404297], [39.67845916748047, -104.99715423583984], [39.678443908691406, -104.99658203125], [39.678436279296875, -104.9959945678711], [39.67841339111328, -104.99501037597656], [39.67841339111328, -104.9941635131836], [39.67841339111328, -104.99386596679688], [39.67841339111328, -104.99348449707031], [39.67841339111328, -104.99308776855469], [39.67841339111328, -104.99292755126953], [39.678409576416016, -104.9913558959961], [39.67842102050781, -104.99060821533203], [39.67842102050781, -104.9904556274414], [39.678428649902344, -104.99029541015625], [39.678436279296875, -104.98995971679688], [39.67837142944336, -104.9898452758789], [39.67838668823242, -104.98939514160156], [39.67839431762695, -104.98908996582031], [39.678401947021484, -104.98880004882812], [39.678409576416016, -104.98860931396484], [39.67842102050781, -104.98822784423828], [39.67843246459961, -104.98780822753906], [39.678436279296875, -104.98779296875], [39.678497314453125, -104.9876708984375], [39.67850112915039, -104.98750305175781], [39.678504943847656, -104.98739624023438], [39.67851638793945, -104.9870834350586], [39.67851638793945, -104.98699951171875], [39.67852020263672, -104.98694610595703], [39.678531646728516, -104.98658752441406], [39.67853546142578, -104.98635864257812], [39.67855453491211, -104.98580932617188], [39.67855453491211, -104.98575592041016], [39.67855453491211, -104.98551940917969], [39.678550720214844, -104.98521423339844], [39.67850875854492, -104.98499298095703], [39.67851257324219, -104.98462677001953], [39.67851638793945, -104.98432159423828], [39.67851638793945, -104.98404693603516], [39.67851638793945, -104.98346710205078], [39.67851638793945, -104.98335266113281], [39.67851257324219, -104.98298645019531], [39.67851257324219, -104.98287200927734], [39.67851257324219, -104.98277282714844], [39.67851638793945, -104.98226928710938], [39.67852020263672, -104.98196411132812], [39.67852020263672, -104.98167419433594], [39.678524017333984, -104.98079681396484], [39.678524017333984, -104.98070526123047], [39.67854309082031, -104.98058319091797], [39.67856216430664, -104.98048400878906], [39.67856216430664, -104.98040771484375], [39.678558349609375, -104.98018646240234], [39.67855453491211, -104.97991180419922], [39.678550720214844, -104.97933959960938], [39.67854690551758, -104.97901153564453], [39.67854309082031, -104.9787368774414], [39.678531646728516, -104.97813415527344], [39.67852783203125, -104.97750091552734], [39.67852783203125, -104.97692108154297], [39.67852020263672, -104.97633361816406], [39.67852020263672, -104.97575378417969], [39.67852020263672, -104.97517395019531], [39.67852020263672, -104.974609375], [39.67851638793945, -104.97401428222656], [39.67851257324219, -104.97386169433594], [39.67851257324219, -104.97357177734375], [39.67851257324219, -104.97344207763672], [39.67851257324219, -104.97333526611328], [39.67850875854492, -104.97310638427734], [39.67850875854492, -104.97296142578125], [39.678504943847656, -104.97286224365234], [39.678504943847656, -104.97270965576172], [39.67850112915039, -104.9722671508789], [39.678497314453125, -104.97168731689453], [39.678497314453125, -104.97154998779297], [39.67849349975586, -104.97109985351562], [39.67848587036133, -104.97048950195312], [39.67848205566406, -104.96992492675781], [39.67847442626953, -104.96949005126953], [39.67847442626953, -104.96931457519531], [39.67847442626953, -104.96919250488281], [39.67847442626953, -104.96918487548828], [39.67847442626953, -104.9688491821289], [39.67847442626953, -104.96875], [39.678470611572266, -104.96866607666016], [39.678470611572266, -104.9684066772461], [39.678470611572266, -104.96833801269531], [39.678470611572266, -104.96832275390625], [39.678470611572266, -104.96817779541016], [39.678470611572266, -104.96802520751953], [39.67847442626953, -104.96757507324219], [39.67847442626953, -104.96704864501953], [39.67847442626953, -104.96699523925781], [39.67843246459961, -104.96640014648438], [39.67843246459961, -104.96619415283203], [39.678428649902344, -104.96582794189453], [39.678428649902344, -104.96563720703125], [39.678428649902344, -104.96537780761719], [39.67842483520508, -104.96524047851562], [39.67842483520508, -104.96512603759766], [39.67842102050781, -104.9638442993164], [39.67842102050781, -104.96356201171875], [39.67842102050781, -104.96241760253906], [39.67841339111328, -104.96146392822266], [39.67841339111328, -104.96134948730469], [39.67839813232422, -104.96038818359375], [39.67839050292969, -104.96003723144531], [39.67842483520508, -104.95954895019531], [39.678436279296875, -104.95938110351562], [39.678436279296875, -104.959228515625], [39.67843246459961, -104.95894622802734], [39.678428649902344, -104.95864868164062], [39.678428649902344, -104.95829772949219], [39.67842483520508, -104.95793914794922], [39.67839050292969, -104.95751190185547], [39.67839050292969, -104.9572525024414], [39.67839050292969, -104.9566421508789], [39.67839050292969, -104.95652770996094], [39.67839050292969, -104.955810546875], [39.67839050292969, -104.9551010131836], [39.67839050292969, -104.95439910888672], [39.67839050292969, -104.95368957519531], [39.67839050292969, -104.95355987548828], [39.67838668823242, -104.95238494873047], [39.67838668823242, -104.9522705078125], [39.67838668823242, -104.95214080810547], [39.67838668823242, -104.95154571533203], [39.67838668823242, -104.95096588134766], [39.67838668823242, -104.95084381103516], [39.67838668823242, -104.95072174072266], [39.67838668823242, -104.95012664794922], [39.678382873535156, -104.9495620727539], [39.678382873535156, -104.94941711425781], [39.67837905883789, -104.9487075805664], [39.67837905883789, -104.947998046875], [39.67837905883789, -104.94728088378906], [39.678382873535156, -104.9466781616211], [39.678382873535156, -104.94657135009766], [39.67837905883789, -104.94586181640625], [39.67837905883789, -104.9452896118164], [39.67837905883789, -104.94514465332031], [39.67837905883789, -104.94503021240234], [39.678382873535156, -104.9437255859375], [39.67838668823242, -104.9432144165039], [39.67842483520508, -104.94306945800781], [39.678428649902344, -104.94296264648438], [39.678428649902344, -104.94286346435547], [39.67843246459961, -104.94203186035156], [39.67843246459961, -104.94168853759766], [39.678436279296875, -104.9415054321289], [39.678436279296875, -104.9410400390625], [39.678436279296875, -104.94078063964844], [39.67829513549805, -104.94078063964844], [39.67782211303711, -104.94076538085938], [39.677772521972656, -104.94076538085938], [39.67747497558594, -104.94076538085938], [39.67737579345703, -104.94075775146484], [39.67732620239258, -104.94075775146484], [39.67720413208008, -104.94075775146484], [39.6771240234375, -104.94075775146484], [39.67698287963867, -104.94075012207031], [39.67678451538086, -104.94075012207031], [39.676612854003906, -104.94074249267578], [39.67646026611328, -104.94073486328125], [39.676177978515625, -104.94072723388672], [39.676116943359375, -104.94072723388672], [39.6760139465332, -104.94072723388672], [39.67588806152344, -104.94072723388672], [39.675262451171875, -104.94072723388672], [39.67515563964844, -104.94072723388672], [39.675140380859375, -104.94072723388672], [39.67489242553711, -104.94071960449219], [39.67481231689453, -104.94071960449219], [39.674747467041016, -104.94071960449219], [39.674530029296875, -104.94071197509766], [39.6744384765625, -104.94071197509766], [39.67431640625, -104.94071197509766], [39.674293518066406, -104.94071197509766], [39.673465728759766, -104.94071197509766], [39.673316955566406, -104.94071197509766], [39.673282623291016, -104.94071197509766], [39.67291259765625, -104.94071197509766], [39.67267990112305, -104.94071197509766], [39.67250061035156, -104.94071197509766], [39.672340393066406, -104.94071197509766], [39.67229080200195, -104.94071197509766], [39.67195510864258, -104.94071197509766], [39.6718864440918, -104.94071197509766], [39.67181396484375, -104.94071197509766], [39.67159652709961, -104.94071197509766], [39.67145919799805, -104.94071197509766], [39.67127227783203, -104.94071197509766], [39.67091751098633, -104.94071197509766], [39.670772552490234, -104.94071197509766], [39.670677185058594, -104.94071197509766], [39.67049789428711, -104.94071197509766], [39.67041015625, -104.94071197509766], [39.67033386230469, -104.94071197509766], [39.67013931274414, -104.94071197509766], [39.670101165771484, -104.94071197509766], [39.66994857788086, -104.94071197509766], [39.669776916503906, -104.94071197509766], [39.66945266723633, -104.94071197509766], [39.66943359375, -104.94071197509766], [39.669334411621094, -104.94071197509766], [39.66926193237305, -104.94071197509766], [39.669071197509766, -104.94071197509766], [39.668914794921875, -104.94071197509766], [39.668758392333984, -104.94071197509766], [39.668704986572266, -104.94071197509766], [39.66843032836914, -104.94070434570312], [39.66830825805664, -104.94070434570312], [39.668067932128906, -104.9406967163086], [39.66781234741211, -104.9406967163086], [39.66765594482422, -104.9406967163086], [39.66756820678711, -104.94068908691406], [39.66749954223633, -104.94068908691406], [39.66728591918945, -104.94068908691406], [39.66714859008789, -104.94068908691406], [39.66705322265625, -104.94068908691406], [39.66687774658203, -104.9406967163086], [39.666805267333984, -104.9406967163086], [39.6667594909668, -104.9406967163086], [39.6666374206543, -104.9406967163086], [39.66660690307617, -104.9406967163086], [39.666446685791016, -104.9406967163086], [39.66619110107422, -104.9406967163086], [39.66602325439453, -104.9406967163086], [39.66558074951172, -104.9406967163086], [39.665496826171875, -104.9406967163086], [39.665374755859375, -104.9406967163086], [39.665000915527344, -104.9406967163086], [39.66465377807617, -104.9406967163086], [39.66455078125, -104.9406967163086], [39.66450119018555, -104.9406967163086], [39.664207458496094, -104.9406967163086], [39.66395950317383, -104.9406967163086], [39.66379928588867, -104.94070434570312], [39.66347122192383, -104.94070434570312], [39.66297912597656, -104.94070434570312], [39.66283416748047, -104.94070434570312], [39.6624870300293, -104.94070434570312], [39.66123962402344, -104.94070434570312], [39.660770416259766, -104.94070434570312], [39.660682678222656, -104.94070434570312], [39.660552978515625, -104.94070434570312], [39.66044998168945, -104.9406967163086], [39.66028594970703, -104.94068908691406], [39.660179138183594, -104.94068145751953], [39.66008377075195, -104.940673828125], [39.659996032714844, -104.94066619873047], [39.65968704223633, -104.94062805175781], [39.65959548950195, -104.94061279296875], [39.65947341918945, -104.94059753417969], [39.65932846069336, -104.9405746459961], [39.65916061401367, -104.9405746459961], [39.65821838378906, -104.94056701660156], [39.657859802246094, -104.9405746459961], [39.65696334838867, -104.9405746459961], [39.65486526489258, -104.94058990478516], [39.65450668334961, -104.94062042236328], [39.65388870239258, -104.94064331054688], [39.65370559692383, -104.9406509399414], [39.65333557128906, -104.94084930419922], [39.65327835083008, -104.9408950805664], [39.653255462646484, -104.94092559814453], [39.653236389160156, -104.94094848632812], [39.6531982421875, -104.94100189208984], [39.65316390991211, -104.94107055664062], [39.65313720703125, -104.94114685058594], [39.653099060058594, -104.94127655029297], [39.65310287475586, -104.94180297851562], [39.65309524536133, -104.94206237792969], [39.65308380126953, -104.94307708740234], [39.653079986572266, -104.94464111328125], [39.653079986572266, -104.94536590576172], [39.653079986572266, -104.94613647460938], [39.653079986572266, -104.94637298583984], [39.65308380126953, -104.94657897949219], [39.6530876159668, -104.94861602783203], [39.6530876159668, -104.94932556152344], [39.65309143066406, -104.9501724243164], [39.65309524536133, -104.9517822265625], [39.65309524536133, -104.9525375366211], [39.653099060058594, -104.95402526855469], [39.653099060058594, -104.95413970947266]],\n", - " {"bubblingMouseEvents": true, "color": "#0c0786", "dashArray": null, "dashOffset": null, "fill": false, "fillColor": "#0c0786", "fillOpacity": 0.2, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "noClip": false, "opacity": 0.8, "smoothFactor": 1.0, "stroke": true, "weight": 10}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " var poly_line_f2998fe35f4cd531f30c13123b11e542 = L.polyline(\n", + " [[39.66568374633789, -105.08139038085938], [39.665809631347656, -105.08138275146484], [39.666587829589844, -105.08139038085938], [39.66707229614258, -105.0813980102539], [39.6675910949707, -105.08140563964844], [39.6677360534668, -105.08140563964844], [39.6677360534668, -105.08128356933594], [39.6677360534668, -105.08104705810547], [39.6677360534668, -105.08061218261719], [39.6677360534668, -105.08023071289062], [39.66773223876953, -105.07986450195312], [39.66773223876953, -105.07962799072266], [39.66773223876953, -105.07939147949219], [39.6677360534668, -105.07869720458984], [39.66774368286133, -105.07814025878906], [39.66776657104492, -105.07447814941406], [39.66777420043945, -105.07354736328125], [39.6668815612793, -105.07353210449219], [39.666893005371094, -105.07284545898438], [39.66685485839844, -105.07270050048828], [39.6667366027832, -105.07252502441406], [39.66661071777344, -105.07249450683594], [39.665771484375, -105.07249450683594], [39.664825439453125, -105.07267761230469], [39.664676666259766, -105.07173919677734], [39.66450500488281, -105.07077026367188], [39.66436004638672, -105.06983184814453], [39.66419982910156, -105.0688705444336], [39.664180755615234, -105.0672836303711], [39.664180755615234, -105.06665802001953], [39.664390563964844, -105.0660400390625], [39.664642333984375, -105.06564331054688], [39.66505813598633, -105.06523895263672], [39.66527557373047, -105.06513977050781], [39.665489196777344, -105.06509399414062], [39.667762756347656, -105.06513214111328], [39.667762756347656, -105.06404876708984], [39.667762756347656, -105.06297302246094], [39.66777038574219, -105.0612564086914], [39.66777420043945, -105.06085968017578], [39.66777420043945, -105.06013488769531], [39.66777420043945, -105.06005096435547], [39.667781829833984, -105.05903625488281], [39.667781829833984, -105.05797576904297], [39.66777801513672, -105.05694580078125], [39.667781829833984, -105.055908203125], [39.66778564453125, -105.05487060546875], [39.66777801513672, -105.05426788330078], [39.667781829833984, -105.05392456054688], [39.667781829833984, -105.0536880493164], [39.667781829833984, -105.05325317382812], [39.66777801513672, -105.05252075195312], [39.66777038574219, -105.05178833007812], [39.66777038574219, -105.05171966552734], [39.66777038574219, -105.0509033203125], [39.66777038574219, -105.05079650878906], [39.66777038574219, -105.05069732666016], [39.66775894165039, -105.04981231689453], [39.667762756347656, -105.048828125], [39.667762756347656, -105.0478286743164], [39.667762756347656, -105.04683685302734], [39.66775894165039, -105.04656982421875], [39.66775894165039, -105.04583740234375], [39.66775894165039, -105.04553985595703], [39.66775131225586, -105.04484558105469], [39.66775131225586, -105.0438461303711], [39.667747497558594, -105.04315948486328], [39.66774368286133, -105.04286193847656], [39.667724609375, -105.0418701171875], [39.667724609375, -105.041748046875], [39.667724609375, -105.0416488647461], [39.667720794677734, -105.04067993164062], [39.66771697998047, -105.04055786132812], [39.66771697998047, -105.04007720947266], [39.6677131652832, -105.03968048095703], [39.6677131652832, -105.03929138183594], [39.66770935058594, -105.0386962890625], [39.66770553588867, -105.03777313232422], [39.66769790649414, -105.0368423461914], [39.66769027709961, -105.03593444824219], [39.667686462402344, -105.03510284423828], [39.667686462402344, -105.03497314453125], [39.667686462402344, -105.03486633300781], [39.667694091796875, -105.03436279296875], [39.66769027709961, -105.03382873535156], [39.66769790649414, -105.03285217285156], [39.66769790649414, -105.0318832397461], [39.66769790649414, -105.0309066772461], [39.66769790649414, -105.0308609008789], [39.66770935058594, -105.02996063232422], [39.66770935058594, -105.02987670898438], [39.66770935058594, -105.02982330322266], [39.66770935058594, -105.02980041503906], [39.66771697998047, -105.02886199951172], [39.667720794677734, -105.02796173095703], [39.667724609375, -105.0274658203125], [39.66773223876953, -105.02699279785156], [39.667724609375, -105.02607727050781], [39.66771697998047, -105.0252685546875], [39.6677131652832, -105.02510833740234], [39.667869567871094, -105.02505493164062], [39.66807174682617, -105.0250473022461], [39.668357849121094, -105.0250244140625], [39.668460845947266, -105.02505493164062], [39.66855239868164, -105.02509307861328], [39.66887283325195, -105.02510070800781], [39.669010162353516, -105.02510070800781], [39.66918182373047, -105.02510070800781], [39.669734954833984, -105.02509307861328], [39.6701545715332, -105.02509307861328], [39.670249938964844, -105.02501678466797], [39.67046356201172, -105.02501678466797], [39.670631408691406, -105.02501678466797], [39.67064666748047, -105.02501678466797], [39.67120361328125, -105.02501678466797], [39.67182159423828, -105.02501678466797], [39.671966552734375, -105.02501678466797], [39.672340393066406, -105.02501678466797], [39.67251205444336, -105.02501678466797], [39.67269515991211, -105.02501678466797], [39.672733306884766, -105.02501678466797], [39.67283630371094, -105.02501678466797], [39.67300796508789, -105.02501678466797], [39.67327880859375, -105.02501678466797], [39.67340850830078, -105.02501678466797], [39.67379379272461, -105.02501678466797], [39.6738166809082, -105.02501678466797], [39.674041748046875, -105.02501678466797], [39.674190521240234, -105.02501678466797], [39.67448806762695, -105.02501678466797], [39.67451095581055, -105.02501678466797], [39.67471694946289, -105.02500915527344], [39.67487716674805, -105.02500915527344], [39.67493438720703, -105.02500915527344], [39.675010681152344, -105.02500915527344], [39.67530059814453, -105.02500915527344], [39.67533493041992, -105.02500915527344], [39.675376892089844, -105.02500915527344], [39.67547607421875, -105.02500915527344], [39.67558288574219, -105.02500915527344], [39.67561340332031, -105.02500915527344], [39.675968170166016, -105.02500915527344], [39.676109313964844, -105.02500915527344], [39.6762809753418, -105.02500915527344], [39.676395416259766, -105.02500915527344], [39.67662048339844, -105.02500915527344], [39.6767692565918, -105.02500915527344], [39.67729949951172, -105.02500915527344], [39.677696228027344, -105.0250015258789], [39.678077697753906, -105.02499389648438], [39.678504943847656, -105.02498626708984], [39.67864990234375, -105.02497863769531], [39.67864990234375, -105.02484893798828], [39.67864990234375, -105.02445983886719], [39.67864990234375, -105.02445220947266], [39.67864990234375, -105.02427673339844], [39.67864990234375, -105.0239486694336], [39.67864990234375, -105.02381134033203], [39.67864990234375, -105.02368927001953], [39.67864990234375, -105.0235824584961], [39.678653717041016, -105.02323913574219], [39.678653717041016, -105.02310943603516], [39.678653717041016, -105.02275848388672], [39.678653717041016, -105.022705078125], [39.67865753173828, -105.02210235595703], [39.67865753173828, -105.02203369140625], [39.67866516113281, -105.02108764648438], [39.67866516113281, -105.02105712890625], [39.67866897583008, -105.02051544189453], [39.67866897583008, -105.02037811279297], [39.67866897583008, -105.02024841308594], [39.67866897583008, -105.01970672607422], [39.678672790527344, -105.0191879272461], [39.678672790527344, -105.0189437866211], [39.67867660522461, -105.01802825927734], [39.67867660522461, -105.01740264892578], [39.678680419921875, -105.01725769042969], [39.678680419921875, -105.01705169677734], [39.678680419921875, -105.01679992675781], [39.678680419921875, -105.01677703857422], [39.678680419921875, -105.01656341552734], [39.678680419921875, -105.0163345336914], [39.678680419921875, -105.01615142822266], [39.67868423461914, -105.01593017578125], [39.67868423461914, -105.01590728759766], [39.67868423461914, -105.01569366455078], [39.678680419921875, -105.01528930664062], [39.678680419921875, -105.01522827148438], [39.678680419921875, -105.01507568359375], [39.678680419921875, -105.01486206054688], [39.67867660522461, -105.01463317871094], [39.67867660522461, -105.01461029052734], [39.67867660522461, -105.01438903808594], [39.67867660522461, -105.01427459716797], [39.67867660522461, -105.01416778564453], [39.678672790527344, -105.01394653320312], [39.678672790527344, -105.01387023925781], [39.678672790527344, -105.013671875], [39.67866897583008, -105.01337432861328], [39.67866516113281, -105.01300048828125], [39.67866516113281, -105.01278686523438], [39.67866516113281, -105.01273345947266], [39.67866134643555, -105.01251220703125], [39.67866134643555, -105.0123519897461], [39.67865753173828, -105.01211547851562], [39.67865753173828, -105.01190948486328], [39.678653717041016, -105.0115966796875], [39.67864990234375, -105.01128387451172], [39.67864990234375, -105.01102447509766], [39.67864227294922, -105.01040649414062], [39.67863845825195, -105.00994873046875], [39.67863845825195, -105.00981903076172], [39.67863464355469, -105.00942993164062], [39.67863082885742, -105.00929260253906], [39.678627014160156, -105.0086669921875], [39.67862319946289, -105.00843048095703], [39.678619384765625, -105.00827026367188], [39.67861557006836, -105.00798797607422], [39.6786003112793, -105.0073013305664], [39.67859649658203, -105.00709533691406], [39.678592681884766, -105.00678253173828], [39.678585052490234, -105.00640106201172], [39.67857360839844, -105.00562286376953], [39.678565979003906, -105.00524139404297], [39.67856216430664, -105.00475311279297], [39.678558349609375, -105.00411224365234], [39.678550720214844, -105.00385284423828], [39.67854309082031, -105.0033950805664], [39.67854309082031, -105.0029296875], [39.67854309082031, -105.00288391113281], [39.67853927612305, -105.00263214111328], [39.67853546142578, -105.00242614746094], [39.678531646728516, -105.00221252441406], [39.67852783203125, -105.00177764892578], [39.678524017333984, -105.0015640258789], [39.678524017333984, -105.00135803222656], [39.678524017333984, -105.00122833251953], [39.67852020263672, -105.00108337402344], [39.67852020263672, -105.00096130371094], [39.67852020263672, -105.00088500976562], [39.67851638793945, -105.00064086914062], [39.67851638793945, -105.00045013427734], [39.67851257324219, -105.00027465820312], [39.67850875854492, -105.00006866455078], [39.67850875854492, -104.99995422363281], [39.67850875854492, -104.99993896484375], [39.67850112915039, -104.99947357177734], [39.67849349975586, -104.9990463256836], [39.67849349975586, -104.99900817871094], [39.67848587036133, -104.99864959716797], [39.67848587036133, -104.99851989746094], [39.67848205566406, -104.99839782714844], [39.6784782409668, -104.99809265136719], [39.67847442626953, -104.99771118164062], [39.678470611572266, -104.99767303466797], [39.678470611572266, -104.9975357055664], [39.678466796875, -104.99745178222656], [39.678466796875, -104.99742889404297], [39.67845916748047, -104.99715423583984], [39.678443908691406, -104.99658203125], [39.678436279296875, -104.9959945678711], [39.67841339111328, -104.99501037597656], [39.67841339111328, -104.9941635131836], [39.67841339111328, -104.99386596679688], [39.67841339111328, -104.99348449707031], [39.67841339111328, -104.99308776855469], [39.67841339111328, -104.99292755126953], [39.678409576416016, -104.9913558959961], [39.67842102050781, -104.99060821533203], [39.67842102050781, -104.9904556274414], [39.678428649902344, -104.99029541015625], [39.678436279296875, -104.98995971679688], [39.67837142944336, -104.9898452758789], [39.67838668823242, -104.98939514160156], [39.67839431762695, -104.98908996582031], [39.678401947021484, -104.98880004882812], [39.678409576416016, -104.98860931396484], [39.67842102050781, -104.98822784423828], [39.67843246459961, -104.98780822753906], [39.678436279296875, -104.98779296875], [39.678497314453125, -104.9876708984375], [39.67850112915039, -104.98750305175781], [39.678504943847656, -104.98739624023438], [39.67851638793945, -104.9870834350586], [39.67851638793945, -104.98699951171875], [39.67852020263672, -104.98694610595703], [39.678531646728516, -104.98658752441406], [39.67853546142578, -104.98635864257812], [39.67855453491211, -104.98580932617188], [39.67855453491211, -104.98575592041016], [39.67855453491211, -104.98551940917969], [39.678550720214844, -104.98521423339844], [39.67850875854492, -104.98499298095703], [39.67851257324219, -104.98462677001953], [39.67851638793945, -104.98432159423828], [39.67851638793945, -104.98404693603516], [39.67851638793945, -104.98346710205078], [39.67851638793945, -104.98335266113281], [39.67851257324219, -104.98298645019531], [39.67851257324219, -104.98287200927734], [39.67851257324219, -104.98277282714844], [39.67851638793945, -104.98226928710938], [39.67852020263672, -104.98196411132812], [39.67852020263672, -104.98167419433594], [39.678524017333984, -104.98079681396484], [39.678524017333984, -104.98070526123047], [39.67854309082031, -104.98058319091797], [39.67856216430664, -104.98048400878906], [39.67856216430664, -104.98040771484375], [39.678558349609375, -104.98018646240234], [39.67855453491211, -104.97991180419922], [39.678550720214844, -104.97933959960938], [39.67854690551758, -104.97901153564453], [39.67854309082031, -104.9787368774414], [39.678531646728516, -104.97813415527344], [39.67852783203125, -104.97750091552734], [39.67852783203125, -104.97692108154297], [39.67852020263672, -104.97633361816406], [39.67852020263672, -104.97575378417969], [39.67852020263672, -104.97517395019531], [39.67852020263672, -104.974609375], [39.67851638793945, -104.97401428222656], [39.67851257324219, -104.97386169433594], [39.67851257324219, -104.97357177734375], [39.67851257324219, -104.97344207763672], [39.67851257324219, -104.97333526611328], [39.67850875854492, -104.97310638427734], [39.67850875854492, -104.97296142578125], [39.678504943847656, -104.97286224365234], [39.678504943847656, -104.97270965576172], [39.67850112915039, -104.9722671508789], [39.678497314453125, -104.97168731689453], [39.678497314453125, -104.97154998779297], [39.67849349975586, -104.97109985351562], [39.67848587036133, -104.97048950195312], [39.67848205566406, -104.96992492675781], [39.67847442626953, -104.96949005126953], [39.67847442626953, -104.96931457519531], [39.67847442626953, -104.96919250488281], [39.67847442626953, -104.96918487548828], [39.67847442626953, -104.9688491821289], [39.67847442626953, -104.96875], [39.678470611572266, -104.96866607666016], [39.678470611572266, -104.9684066772461], [39.678470611572266, -104.96833801269531], [39.678470611572266, -104.96832275390625], [39.678470611572266, -104.96817779541016], [39.678470611572266, -104.96802520751953], [39.67847442626953, -104.96757507324219], [39.67847442626953, -104.96704864501953], [39.67847442626953, -104.96699523925781], [39.67843246459961, -104.96640014648438], [39.67843246459961, -104.96619415283203], [39.678428649902344, -104.96582794189453], [39.678428649902344, -104.96563720703125], [39.678428649902344, -104.96537780761719], [39.67842483520508, -104.96524047851562], [39.67842483520508, -104.96512603759766], [39.67842102050781, -104.9638442993164], [39.67842102050781, -104.96356201171875], [39.67842102050781, -104.96241760253906], [39.67841339111328, -104.96146392822266], [39.67841339111328, -104.96134948730469], [39.67839813232422, -104.96038818359375], [39.67839050292969, -104.96003723144531], [39.67842483520508, -104.95954895019531], [39.678436279296875, -104.95938110351562], [39.67828369140625, -104.95938110351562], [39.6771125793457, -104.95940399169922], [39.67673873901367, -104.95940399169922], [39.67662048339844, -104.95941162109375], [39.676509857177734, -104.95940399169922], [39.67607879638672, -104.95941162109375], [39.67545700073242, -104.95941162109375], [39.6749382019043, -104.95941925048828], [39.67484664916992, -104.95941925048828], [39.67475891113281, -104.95941925048828], [39.674076080322266, -104.95941925048828], [39.67354965209961, -104.95941162109375], [39.6733283996582, -104.95940399169922], [39.67311477661133, -104.95940399169922], [39.673030853271484, -104.95939636230469], [39.6729621887207, -104.95939636230469], [39.67277145385742, -104.95939636230469], [39.67275619506836, -104.95939636230469], [39.672637939453125, -104.95939636230469], [39.672515869140625, -104.95939636230469], [39.6723747253418, -104.95939636230469], [39.67220687866211, -104.95939636230469], [39.6719856262207, -104.95939636230469], [39.671669006347656, -104.95939636230469], [39.67164993286133, -104.95939636230469], [39.671539306640625, -104.95939636230469], [39.67152404785156, -104.95939636230469], [39.67129135131836, -104.95939636230469], [39.67122268676758, -104.95939636230469], [39.671138763427734, -104.95939636230469], [39.67053985595703, -104.95939636230469], [39.670162200927734, -104.95940399169922], [39.67001724243164, -104.95940399169922], [39.66999816894531, -104.95940399169922], [39.669410705566406, -104.95940399169922], [39.6692008972168, -104.95940399169922], [39.66895294189453, -104.95940399169922], [39.668888092041016, -104.95940399169922], [39.66872787475586, -104.95940399169922], [39.668460845947266, -104.95939636230469], [39.668033599853516, -104.95938873291016], [39.66767501831055, -104.95939636230469], [39.6676025390625, -104.95939636230469], [39.66749572753906, -104.95939636230469], [39.6668701171875, -104.95940399169922], [39.66660690307617, -104.95940399169922], [39.66650390625, -104.95940399169922], [39.66603088378906, -104.95941162109375], [39.665550231933594, -104.95941925048828], [39.66462326049805, -104.95943450927734], [39.664249420166016, -104.95943450927734], [39.66393280029297, -104.95943450927734], [39.663055419921875, -104.95944213867188], [39.66191482543945, -104.95945739746094], [39.661354064941406, -104.95945739746094], [39.66096496582031, -104.95945739746094], [39.66044616699219, -104.95945739746094], [39.66034698486328, -104.95946502685547], [39.66027069091797, -104.95945739746094], [39.659568786621094, -104.95946502685547], [39.657691955566406, -104.95945739746094], [39.6572380065918, -104.95945739746094], [39.65707015991211, -104.95945739746094], [39.65707015991211, -104.95934295654297], [39.65707015991211, -104.95846557617188], [39.65707015991211, -104.95752716064453], [39.657066345214844, -104.95580291748047], [39.657066345214844, -104.95423126220703], [39.65705490112305, -104.95330810546875], [39.65705490112305, -104.952392578125], [39.65705108642578, -104.95204162597656], [39.65630340576172, -104.95204162597656], [39.656314849853516, -104.95127868652344], [39.65631103515625, -104.95108795166016], [39.65630340576172, -104.95092010498047], [39.656280517578125, -104.95063018798828], [39.656246185302734, -104.95034790039062], [39.65620040893555, -104.95006561279297], [39.65611267089844, -104.94964599609375]],\n", + " {"bubblingMouseEvents": true, "color": "#eff821", "dashArray": null, "dashOffset": null, "fill": false, "fillColor": "#eff821", "fillOpacity": 0.2, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "noClip": false, "opacity": 0.8, "smoothFactor": 1.0, "stroke": true, "weight": 10}\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " poly_line_ccc918f6c4f98bfd6e2cedb14e016e1c.bindTooltip(\n", + " poly_line_f2998fe35f4cd531f30c13123b11e542.bindTooltip(\n", " `<div>\n", - " 0.44915623716812586\n", + " 0.4155712183679041\n", " </div>`,\n", " {"sticky": true}\n", " );\n", " \n", " \n", - " var marker_1fd10858e9f0c4515fc4ada921377018 = L.marker(\n", - " [39.6677360534668, -105.08140563964844],\n", + " var marker_85c28f0cff0848efa36bb59a524b5f6a = L.marker(\n", + " [39.66568374633789, -105.08139038085938],\n", " {}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " var icon_27abcefd7f65cb06d755e1cadb1c9b59 = L.AwesomeMarkers.icon(\n", + " var icon_d7b941c9566981af744436d3f5c10525 = L.AwesomeMarkers.icon(\n", " {"extraClasses": "fa-rotate-0", "icon": "circle", "iconColor": "white", "markerColor": "green", "prefix": "fa"}\n", " );\n", - " marker_1fd10858e9f0c4515fc4ada921377018.setIcon(icon_27abcefd7f65cb06d755e1cadb1c9b59);\n", + " marker_85c28f0cff0848efa36bb59a524b5f6a.setIcon(icon_d7b941c9566981af744436d3f5c10525);\n", " \n", " \n", - " marker_1fd10858e9f0c4515fc4ada921377018.bindTooltip(\n", + " marker_85c28f0cff0848efa36bb59a524b5f6a.bindTooltip(\n", " `<div>\n", " Origin\n", " </div>`,\n", @@ -1563,19 +1553,19 @@ " );\n", " \n", " \n", - " var marker_367ed98c9a99a00a2fe582aece11b3ad = L.marker(\n", - " [39.653099060058594, -104.95413970947266],\n", + " var marker_ac7660261af79f53ab48c86750969ce0 = L.marker(\n", + " [39.65611267089844, -104.94964599609375],\n", " {}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " var icon_a8764eebcbddbda93f592d6f548c93d7 = L.AwesomeMarkers.icon(\n", + " var icon_e82613c24c23f67ab3592e54d9753e71 = L.AwesomeMarkers.icon(\n", " {"extraClasses": "fa-rotate-0", "icon": "circle", "iconColor": "white", "markerColor": "red", "prefix": "fa"}\n", " );\n", - " marker_367ed98c9a99a00a2fe582aece11b3ad.setIcon(icon_a8764eebcbddbda93f592d6f548c93d7);\n", + " marker_ac7660261af79f53ab48c86750969ce0.setIcon(icon_e82613c24c23f67ab3592e54d9753e71);\n", " \n", " \n", - " marker_367ed98c9a99a00a2fe582aece11b3ad.bindTooltip(\n", + " marker_ac7660261af79f53ab48c86750969ce0.bindTooltip(\n", " `<div>\n", " Destination\n", " </div>`,\n", @@ -1583,33 +1573,33 @@ " );\n", " \n", " \n", - " var poly_line_7cade121f56d7b10aa540a3b3b934d5c = L.polyline(\n", - " [[39.6677360534668, -105.08140563964844], [39.6677360534668, -105.08128356933594], [39.6677360534668, -105.08104705810547], [39.6677360534668, -105.08061218261719], [39.6677360534668, -105.08023071289062], [39.66773223876953, -105.07986450195312], [39.66773223876953, -105.07962799072266], [39.66773223876953, -105.07939147949219], [39.6677360534668, -105.07869720458984], [39.66774368286133, -105.07814025878906], [39.66776657104492, -105.07447814941406], [39.66777420043945, -105.07354736328125], [39.6668815612793, -105.07353210449219], [39.666893005371094, -105.07284545898438], [39.66685485839844, -105.07270050048828], [39.6667366027832, -105.07252502441406], [39.66661071777344, -105.07249450683594], [39.665771484375, -105.07249450683594], [39.664825439453125, -105.07267761230469], [39.664676666259766, -105.07173919677734], [39.66450500488281, -105.07077026367188], [39.66436004638672, -105.06983184814453], [39.66419982910156, -105.0688705444336], [39.664180755615234, -105.0672836303711], [39.664180755615234, -105.06665802001953], [39.664390563964844, -105.0660400390625], [39.664642333984375, -105.06564331054688], [39.66505813598633, -105.06523895263672], [39.66527557373047, -105.06513977050781], [39.665489196777344, -105.06509399414062], [39.667762756347656, -105.06513214111328], [39.667762756347656, -105.06404876708984], [39.667762756347656, -105.06297302246094], [39.66777038574219, -105.0612564086914], [39.66777420043945, -105.06085968017578], [39.66777420043945, -105.06013488769531], [39.66777420043945, -105.06005096435547], [39.667781829833984, -105.05903625488281], [39.667781829833984, -105.05797576904297], [39.66777801513672, -105.05694580078125], [39.667781829833984, -105.055908203125], [39.66778564453125, -105.05487060546875], [39.66777801513672, -105.05426788330078], [39.667781829833984, -105.05392456054688], [39.667781829833984, -105.0536880493164], [39.667781829833984, -105.05325317382812], [39.66777801513672, -105.05252075195312], [39.66777038574219, -105.05178833007812], [39.66777038574219, -105.05171966552734], [39.66777038574219, -105.0509033203125], [39.66777038574219, -105.05079650878906], [39.66777038574219, -105.05069732666016], [39.66775894165039, -105.04981231689453], [39.667762756347656, -105.048828125], [39.667762756347656, -105.0478286743164], [39.667762756347656, -105.04683685302734], [39.66775894165039, -105.04656982421875], [39.66775894165039, -105.04583740234375], [39.66775894165039, -105.04553985595703], [39.66775131225586, -105.04484558105469], [39.66775131225586, -105.0438461303711], [39.667747497558594, -105.04315948486328], [39.66774368286133, -105.04286193847656], [39.667724609375, -105.0418701171875], [39.667724609375, -105.041748046875], [39.667724609375, -105.0416488647461], [39.667720794677734, -105.04067993164062], [39.66771697998047, -105.04055786132812], [39.66771697998047, -105.04007720947266], [39.6677131652832, -105.03968048095703], [39.6677131652832, -105.03929138183594], [39.66770935058594, -105.0386962890625], [39.66770553588867, -105.03777313232422], [39.66769790649414, -105.0368423461914], [39.66769027709961, -105.03593444824219], [39.667686462402344, -105.03510284423828], [39.667686462402344, -105.03497314453125], [39.667686462402344, -105.03486633300781], [39.667694091796875, -105.03436279296875], [39.66769027709961, -105.03382873535156], [39.66769790649414, -105.03285217285156], [39.66769790649414, -105.0318832397461], [39.66769790649414, -105.0309066772461], [39.66769790649414, -105.0308609008789], [39.66770935058594, -105.02996063232422], [39.66770935058594, -105.02987670898438], [39.66770935058594, -105.02982330322266], [39.66770935058594, -105.02980041503906], [39.66771697998047, -105.02886199951172], [39.667720794677734, -105.02796173095703], [39.667724609375, -105.0274658203125], [39.66773223876953, -105.02699279785156], [39.667724609375, -105.02607727050781], [39.66771697998047, -105.0252685546875], [39.6677131652832, -105.02510833740234], [39.667869567871094, -105.02505493164062], [39.66807174682617, -105.0250473022461], [39.668357849121094, -105.0250244140625], [39.668460845947266, -105.02505493164062], [39.66855239868164, -105.02509307861328], [39.66887283325195, -105.02510070800781], [39.669010162353516, -105.02510070800781], [39.66918182373047, -105.02510070800781], [39.669734954833984, -105.02509307861328], [39.6701545715332, -105.02509307861328], [39.670249938964844, -105.02501678466797], [39.67046356201172, -105.02501678466797], [39.670631408691406, -105.02501678466797], [39.67064666748047, -105.02501678466797], [39.67120361328125, -105.02501678466797], [39.67182159423828, -105.02501678466797], [39.671966552734375, -105.02501678466797], [39.672340393066406, -105.02501678466797], [39.67251205444336, -105.02501678466797], [39.67269515991211, -105.02501678466797], [39.672733306884766, -105.02501678466797], [39.67283630371094, -105.02501678466797], [39.67300796508789, -105.02501678466797], [39.67327880859375, -105.02501678466797], [39.67340850830078, -105.02501678466797], [39.67379379272461, -105.02501678466797], [39.6738166809082, -105.02501678466797], [39.674041748046875, -105.02501678466797], [39.674190521240234, -105.02501678466797], [39.67448806762695, -105.02501678466797], [39.67451095581055, -105.02501678466797], [39.67471694946289, -105.02500915527344], [39.67487716674805, -105.02500915527344], [39.67493438720703, -105.02500915527344], [39.675010681152344, -105.02500915527344], [39.67530059814453, -105.02500915527344], [39.67533493041992, -105.02500915527344], [39.675376892089844, -105.02500915527344], [39.67547607421875, -105.02500915527344], [39.67558288574219, -105.02500915527344], [39.67561340332031, -105.02500915527344], [39.675968170166016, -105.02500915527344], [39.676109313964844, -105.02500915527344], [39.6762809753418, -105.02500915527344], [39.676395416259766, -105.02500915527344], [39.67662048339844, -105.02500915527344], [39.6767692565918, -105.02500915527344], [39.67729949951172, -105.02500915527344], [39.677696228027344, -105.0250015258789], [39.678077697753906, -105.02499389648438], [39.678504943847656, -105.02498626708984], [39.67864990234375, -105.02497863769531], [39.67864990234375, -105.02484893798828], [39.67864990234375, -105.02445983886719], [39.67864990234375, -105.02445220947266], [39.67864990234375, -105.02427673339844], [39.67864990234375, -105.0239486694336], [39.67864990234375, -105.02381134033203], [39.67864990234375, -105.02368927001953], [39.67864990234375, -105.0235824584961], [39.678653717041016, -105.02323913574219], [39.678653717041016, -105.02310943603516], [39.678653717041016, -105.02275848388672], [39.678653717041016, -105.022705078125], [39.67865753173828, -105.02210235595703], [39.67865753173828, -105.02203369140625], [39.67866516113281, -105.02108764648438], [39.67866516113281, -105.02105712890625], [39.67866897583008, -105.02051544189453], [39.67866897583008, -105.02037811279297], [39.67866897583008, -105.02024841308594], [39.67866897583008, -105.01970672607422], [39.678672790527344, -105.0191879272461], [39.678672790527344, -105.0189437866211], [39.67867660522461, -105.01802825927734], [39.67867660522461, -105.01740264892578], [39.678680419921875, -105.01725769042969], [39.678680419921875, -105.01705169677734], [39.678680419921875, -105.01679992675781], [39.678680419921875, -105.01677703857422], [39.678680419921875, -105.01656341552734], [39.678680419921875, -105.0163345336914], [39.678680419921875, -105.01615142822266], [39.67868423461914, -105.01593017578125], [39.67868423461914, -105.01590728759766], [39.67868423461914, -105.01569366455078], [39.678680419921875, -105.01528930664062], [39.678680419921875, -105.01522827148438], [39.678680419921875, -105.01507568359375], [39.678680419921875, -105.01486206054688], [39.67867660522461, -105.01463317871094], [39.67867660522461, -105.01461029052734], [39.67867660522461, -105.01438903808594], [39.67867660522461, -105.01427459716797], [39.67867660522461, -105.01416778564453], [39.678672790527344, -105.01394653320312], [39.678672790527344, -105.01387023925781], [39.678672790527344, -105.013671875], [39.67866897583008, -105.01337432861328], [39.67866516113281, -105.01300048828125], [39.67866516113281, -105.01278686523438], [39.67866516113281, -105.01273345947266], [39.67866134643555, -105.01251220703125], [39.67866134643555, -105.0123519897461], [39.67865753173828, -105.01211547851562], [39.67865753173828, -105.01190948486328], [39.678653717041016, -105.0115966796875], [39.67864990234375, -105.01128387451172], [39.67864990234375, -105.01102447509766], [39.67864227294922, -105.01040649414062], [39.67863845825195, -105.00994873046875], [39.67863845825195, -105.00981903076172], [39.67863464355469, -105.00942993164062], [39.67863082885742, -105.00929260253906], [39.678627014160156, -105.0086669921875], [39.67862319946289, -105.00843048095703], [39.678619384765625, -105.00827026367188], [39.67861557006836, -105.00798797607422], [39.6786003112793, -105.0073013305664], [39.67859649658203, -105.00709533691406], [39.678592681884766, -105.00678253173828], [39.678585052490234, -105.00640106201172], [39.67857360839844, -105.00562286376953], [39.678565979003906, -105.00524139404297], [39.67856216430664, -105.00475311279297], [39.678558349609375, -105.00411224365234], [39.678550720214844, -105.00385284423828], [39.67854309082031, -105.0033950805664], [39.67854309082031, -105.0029296875], [39.67854309082031, -105.00288391113281], [39.67853927612305, -105.00263214111328], [39.67853546142578, -105.00242614746094], [39.678531646728516, -105.00221252441406], [39.67852783203125, -105.00177764892578], [39.678524017333984, -105.0015640258789], [39.678524017333984, -105.00135803222656], [39.678524017333984, -105.00122833251953], [39.67852020263672, -105.00108337402344], [39.67852020263672, -105.00096130371094], [39.67852020263672, -105.00088500976562], [39.67851638793945, -105.00064086914062], [39.67851638793945, -105.00045013427734], [39.67851257324219, -105.00027465820312], [39.67850875854492, -105.00006866455078], [39.67850875854492, -104.99995422363281], [39.67850875854492, -104.99993896484375], [39.67850112915039, -104.99947357177734], [39.67849349975586, -104.9990463256836], [39.67849349975586, -104.99900817871094], [39.67848587036133, -104.99864959716797], [39.67848587036133, -104.99851989746094], [39.67848205566406, -104.99839782714844], [39.6784782409668, -104.99809265136719], [39.67847442626953, -104.99771118164062], [39.678470611572266, -104.99767303466797], [39.678470611572266, -104.9975357055664], [39.678466796875, -104.99745178222656], [39.678466796875, -104.99742889404297], [39.67845916748047, -104.99715423583984], [39.678443908691406, -104.99658203125], [39.678436279296875, -104.9959945678711], [39.67841339111328, -104.99501037597656], [39.67841339111328, -104.9941635131836], [39.67841339111328, -104.99386596679688], [39.67841339111328, -104.99348449707031], [39.67841339111328, -104.99308776855469], [39.67841339111328, -104.99292755126953], [39.678409576416016, -104.9913558959961], [39.67842102050781, -104.99060821533203], [39.67842102050781, -104.9904556274414], [39.678428649902344, -104.99029541015625], [39.678436279296875, -104.98995971679688], [39.67837142944336, -104.9898452758789], [39.67838668823242, -104.98939514160156], [39.67839431762695, -104.98908996582031], [39.678401947021484, -104.98880004882812], [39.678409576416016, -104.98860931396484], [39.67842102050781, -104.98822784423828], [39.67843246459961, -104.98780822753906], [39.678436279296875, -104.98779296875], [39.678497314453125, -104.9876708984375], [39.67850112915039, -104.98750305175781], [39.678504943847656, -104.98739624023438], [39.67851638793945, -104.9870834350586], [39.67851638793945, -104.98699951171875], [39.67852020263672, -104.98694610595703], [39.678531646728516, -104.98658752441406], [39.67853546142578, -104.98635864257812], [39.67855453491211, -104.98580932617188], [39.67855453491211, -104.98575592041016], [39.67855453491211, -104.98551940917969], [39.678550720214844, -104.98521423339844], [39.67850875854492, -104.98499298095703], [39.67851257324219, -104.98462677001953], [39.67851638793945, -104.98432159423828], [39.67851638793945, -104.98404693603516], [39.67851638793945, -104.98346710205078], [39.67851638793945, -104.98335266113281], [39.67851257324219, -104.98298645019531], [39.67851257324219, -104.98287200927734], [39.67851257324219, -104.98277282714844], [39.67851638793945, -104.98226928710938], [39.67852020263672, -104.98196411132812], [39.67852020263672, -104.98167419433594], [39.678524017333984, -104.98079681396484], [39.678524017333984, -104.98070526123047], [39.67854309082031, -104.98058319091797], [39.67856216430664, -104.98048400878906], [39.67856216430664, -104.98040771484375], [39.678558349609375, -104.98018646240234], [39.67855453491211, -104.97991180419922], [39.678550720214844, -104.97933959960938], [39.67854690551758, -104.97901153564453], [39.67854309082031, -104.9787368774414], [39.678531646728516, -104.97813415527344], [39.67852783203125, -104.97750091552734], [39.67852783203125, -104.97692108154297], [39.67852020263672, -104.97633361816406], [39.67852020263672, -104.97575378417969], [39.67852020263672, -104.97517395019531], [39.67852020263672, -104.974609375], [39.67851638793945, -104.97401428222656], [39.67851257324219, -104.97386169433594], [39.67851257324219, -104.97357177734375], [39.67851257324219, -104.97344207763672], [39.67851257324219, -104.97333526611328], [39.67850875854492, -104.97310638427734], [39.67850875854492, -104.97296142578125], [39.678504943847656, -104.97286224365234], [39.678504943847656, -104.97270965576172], [39.67850112915039, -104.9722671508789], [39.678497314453125, -104.97168731689453], [39.678497314453125, -104.97154998779297], [39.67849349975586, -104.97109985351562], [39.67848587036133, -104.97048950195312], [39.67848205566406, -104.96992492675781], [39.67847442626953, -104.96949005126953], [39.67847442626953, -104.96931457519531], [39.67847442626953, -104.96919250488281], [39.67847442626953, -104.96918487548828], [39.67847442626953, -104.9688491821289], [39.67847442626953, -104.96875], [39.678470611572266, -104.96866607666016], [39.678470611572266, -104.9684066772461], [39.678470611572266, -104.96833801269531], [39.678470611572266, -104.96832275390625], [39.678470611572266, -104.96817779541016], [39.678470611572266, -104.96802520751953], [39.67847442626953, -104.96757507324219], [39.67847442626953, -104.96704864501953], [39.67847442626953, -104.96699523925781], [39.67843246459961, -104.96640014648438], [39.67843246459961, -104.96619415283203], [39.678428649902344, -104.96582794189453], [39.678428649902344, -104.96563720703125], [39.678428649902344, -104.96537780761719], [39.67842483520508, -104.96524047851562], [39.67842483520508, -104.96512603759766], [39.67842102050781, -104.9638442993164], [39.67842102050781, -104.96356201171875], [39.67842102050781, -104.96241760253906], [39.67841339111328, -104.96146392822266], [39.67841339111328, -104.96134948730469], [39.67839813232422, -104.96038818359375], [39.67839050292969, -104.96003723144531], [39.67842483520508, -104.95954895019531], [39.678436279296875, -104.95938110351562], [39.678436279296875, -104.959228515625], [39.67843246459961, -104.95894622802734], [39.678428649902344, -104.95864868164062], [39.678428649902344, -104.95829772949219], [39.67842483520508, -104.95793914794922], [39.67839050292969, -104.95751190185547], [39.67839050292969, -104.9572525024414], [39.67839050292969, -104.9566421508789], [39.67839050292969, -104.95652770996094], [39.67839050292969, -104.955810546875], [39.67839050292969, -104.9551010131836], [39.67839050292969, -104.95439910888672], [39.67839050292969, -104.95368957519531], [39.67839050292969, -104.95355987548828], [39.67838668823242, -104.95238494873047], [39.67838668823242, -104.9522705078125], [39.67838668823242, -104.95214080810547], [39.67838668823242, -104.95154571533203], [39.67838668823242, -104.95096588134766], [39.67838668823242, -104.95084381103516], [39.67838668823242, -104.95072174072266], [39.67838668823242, -104.95012664794922], [39.678382873535156, -104.9495620727539], [39.678382873535156, -104.94941711425781], [39.67837905883789, -104.9487075805664], [39.67837905883789, -104.947998046875], [39.67837905883789, -104.94728088378906], [39.678382873535156, -104.9466781616211], [39.678382873535156, -104.94657135009766], [39.67837905883789, -104.94586181640625], [39.67837905883789, -104.9452896118164], [39.67837905883789, -104.94514465332031], [39.67837905883789, -104.94503021240234], [39.678382873535156, -104.9437255859375], [39.67838668823242, -104.9432144165039], [39.67842483520508, -104.94306945800781], [39.678428649902344, -104.94296264648438], [39.678428649902344, -104.94286346435547], [39.67843246459961, -104.94203186035156], [39.67843246459961, -104.94168853759766], [39.678436279296875, -104.9415054321289], [39.678436279296875, -104.9410400390625], [39.678436279296875, -104.94078063964844], [39.67829513549805, -104.94078063964844], [39.67782211303711, -104.94076538085938], [39.677772521972656, -104.94076538085938], [39.67747497558594, -104.94076538085938], [39.67737579345703, -104.94075775146484], [39.67732620239258, -104.94075775146484], [39.67720413208008, -104.94075775146484], [39.6771240234375, -104.94075775146484], [39.67698287963867, -104.94075012207031], [39.67678451538086, -104.94075012207031], [39.676612854003906, -104.94074249267578], [39.67646026611328, -104.94073486328125], [39.676177978515625, -104.94072723388672], [39.676116943359375, -104.94072723388672], [39.6760139465332, -104.94072723388672], [39.67588806152344, -104.94072723388672], [39.675262451171875, -104.94072723388672], [39.67515563964844, -104.94072723388672], [39.675140380859375, -104.94072723388672], [39.67489242553711, -104.94071960449219], [39.67481231689453, -104.94071960449219], [39.674747467041016, -104.94071960449219], [39.674530029296875, -104.94071197509766], [39.6744384765625, -104.94071197509766], [39.67431640625, -104.94071197509766], [39.674293518066406, -104.94071197509766], [39.673465728759766, -104.94071197509766], [39.673316955566406, -104.94071197509766], [39.673282623291016, -104.94071197509766], [39.67291259765625, -104.94071197509766], [39.67267990112305, -104.94071197509766], [39.67250061035156, -104.94071197509766], [39.672340393066406, -104.94071197509766], [39.67229080200195, -104.94071197509766], [39.67195510864258, -104.94071197509766], [39.6718864440918, -104.94071197509766], [39.67181396484375, -104.94071197509766], [39.67159652709961, -104.94071197509766], [39.67145919799805, -104.94071197509766], [39.67127227783203, -104.94071197509766], [39.67091751098633, -104.94071197509766], [39.670772552490234, -104.94071197509766], [39.670677185058594, -104.94071197509766], [39.67049789428711, -104.94071197509766], [39.67041015625, -104.94071197509766], [39.67033386230469, -104.94071197509766], [39.67013931274414, -104.94071197509766], [39.670101165771484, -104.94071197509766], [39.66994857788086, -104.94071197509766], [39.669776916503906, -104.94071197509766], [39.66945266723633, -104.94071197509766], [39.66943359375, -104.94071197509766], [39.669334411621094, -104.94071197509766], [39.66926193237305, -104.94071197509766], [39.669071197509766, -104.94071197509766], [39.668914794921875, -104.94071197509766], [39.668758392333984, -104.94071197509766], [39.668704986572266, -104.94071197509766], [39.66843032836914, -104.94070434570312], [39.66830825805664, -104.94070434570312], [39.668067932128906, -104.9406967163086], [39.66781234741211, -104.9406967163086], [39.66765594482422, -104.9406967163086], [39.66756820678711, -104.94068908691406], [39.66749954223633, -104.94068908691406], [39.66728591918945, -104.94068908691406], [39.66714859008789, -104.94068908691406], [39.66705322265625, -104.94068908691406], [39.66687774658203, -104.9406967163086], [39.666805267333984, -104.9406967163086], [39.6667594909668, -104.9406967163086], [39.6666374206543, -104.9406967163086], [39.66660690307617, -104.9406967163086], [39.666446685791016, -104.9406967163086], [39.66619110107422, -104.9406967163086], [39.66602325439453, -104.9406967163086], [39.66558074951172, -104.9406967163086], [39.665496826171875, -104.9406967163086], [39.665374755859375, -104.9406967163086], [39.665000915527344, -104.9406967163086], [39.66465377807617, -104.9406967163086], [39.66455078125, -104.9406967163086], [39.66450119018555, -104.9406967163086], [39.664207458496094, -104.9406967163086], [39.66395950317383, -104.9406967163086], [39.66379928588867, -104.94070434570312], [39.66347122192383, -104.94070434570312], [39.66297912597656, -104.94070434570312], [39.66283416748047, -104.94070434570312], [39.6624870300293, -104.94070434570312], [39.66123962402344, -104.94070434570312], [39.660770416259766, -104.94070434570312], [39.660682678222656, -104.94070434570312], [39.660552978515625, -104.94070434570312], [39.66044998168945, -104.9406967163086], [39.66028594970703, -104.94068908691406], [39.660179138183594, -104.94068145751953], [39.66008377075195, -104.940673828125], [39.659996032714844, -104.94066619873047], [39.65968704223633, -104.94062805175781], [39.65959548950195, -104.94061279296875], [39.65947341918945, -104.94059753417969], [39.65932846069336, -104.9405746459961], [39.65916061401367, -104.9405746459961], [39.65821838378906, -104.94056701660156], [39.657859802246094, -104.9405746459961], [39.65696334838867, -104.9405746459961], [39.65486526489258, -104.94058990478516], [39.65450668334961, -104.94062042236328], [39.65388870239258, -104.94064331054688], [39.65370559692383, -104.9406509399414], [39.65333557128906, -104.94084930419922], [39.65327835083008, -104.9408950805664], [39.653255462646484, -104.94092559814453], [39.653236389160156, -104.94094848632812], [39.6531982421875, -104.94100189208984], [39.65316390991211, -104.94107055664062], [39.65313720703125, -104.94114685058594], [39.653099060058594, -104.94127655029297], [39.65310287475586, -104.94180297851562], [39.65309524536133, -104.94206237792969], [39.65308380126953, -104.94307708740234], [39.653079986572266, -104.94464111328125], [39.653079986572266, -104.94536590576172], [39.653079986572266, -104.94613647460938], [39.653079986572266, -104.94637298583984], [39.65308380126953, -104.94657897949219], [39.6530876159668, -104.94861602783203], [39.6530876159668, -104.94932556152344], [39.65309143066406, -104.9501724243164], [39.65309524536133, -104.9517822265625], [39.65309524536133, -104.9525375366211], [39.653099060058594, -104.95402526855469], [39.653099060058594, -104.95413970947266]],\n", - " {"bubblingMouseEvents": true, "color": "#0c0786", "dashArray": null, "dashOffset": null, "fill": false, "fillColor": "#0c0786", "fillOpacity": 0.2, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "noClip": false, "opacity": 0.8, "smoothFactor": 1.0, "stroke": true, "weight": 10}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " var poly_line_71ac2c9ed32aab0058bc71727990857b = L.polyline(\n", + " [[39.66568374633789, -105.08139038085938], [39.665809631347656, -105.08138275146484], [39.666587829589844, -105.08139038085938], [39.66707229614258, -105.0813980102539], [39.6675910949707, -105.08140563964844], [39.6677360534668, -105.08140563964844], [39.6677360534668, -105.08128356933594], [39.6677360534668, -105.08104705810547], [39.6677360534668, -105.08061218261719], [39.6677360534668, -105.08023071289062], [39.66773223876953, -105.07986450195312], [39.66773223876953, -105.07962799072266], [39.66773223876953, -105.07939147949219], [39.6677360534668, -105.07869720458984], [39.66774368286133, -105.07814025878906], [39.66776657104492, -105.07447814941406], [39.66777420043945, -105.07354736328125], [39.6668815612793, -105.07353210449219], [39.666893005371094, -105.07284545898438], [39.66685485839844, -105.07270050048828], [39.6667366027832, -105.07252502441406], [39.66661071777344, -105.07249450683594], [39.665771484375, -105.07249450683594], [39.664825439453125, -105.07267761230469], [39.664676666259766, -105.07173919677734], [39.66450500488281, -105.07077026367188], [39.66436004638672, -105.06983184814453], [39.66419982910156, -105.0688705444336], [39.664180755615234, -105.0672836303711], [39.664180755615234, -105.06665802001953], [39.664390563964844, -105.0660400390625], [39.664642333984375, -105.06564331054688], [39.66505813598633, -105.06523895263672], [39.66527557373047, -105.06513977050781], [39.665489196777344, -105.06509399414062], [39.667762756347656, -105.06513214111328], [39.667762756347656, -105.06404876708984], [39.667762756347656, -105.06297302246094], [39.66777038574219, -105.0612564086914], [39.66777420043945, -105.06085968017578], [39.66777420043945, -105.06013488769531], [39.66777420043945, -105.06005096435547], [39.667781829833984, -105.05903625488281], [39.667781829833984, -105.05797576904297], [39.66777801513672, -105.05694580078125], [39.667781829833984, -105.055908203125], [39.66778564453125, -105.05487060546875], [39.66777801513672, -105.05426788330078], [39.667781829833984, -105.05392456054688], [39.667781829833984, -105.0536880493164], [39.667781829833984, -105.05325317382812], [39.66777801513672, -105.05252075195312], [39.66777038574219, -105.05178833007812], [39.66777038574219, -105.05171966552734], [39.66777038574219, -105.0509033203125], [39.66777038574219, -105.05079650878906], [39.66777038574219, -105.05069732666016], [39.66775894165039, -105.04981231689453], [39.667762756347656, -105.048828125], [39.667762756347656, -105.0478286743164], [39.667762756347656, -105.04683685302734], [39.66775894165039, -105.04656982421875], [39.66775894165039, -105.04583740234375], [39.66775894165039, -105.04553985595703], [39.66775131225586, -105.04484558105469], [39.66775131225586, -105.0438461303711], [39.667747497558594, -105.04315948486328], [39.66774368286133, -105.04286193847656], [39.667724609375, -105.0418701171875], [39.667724609375, -105.041748046875], [39.667724609375, -105.0416488647461], [39.667720794677734, -105.04067993164062], [39.66771697998047, -105.04055786132812], [39.66771697998047, -105.04007720947266], [39.6677131652832, -105.03968048095703], [39.6677131652832, -105.03929138183594], [39.66770935058594, -105.0386962890625], [39.66770553588867, -105.03777313232422], [39.66769790649414, -105.0368423461914], [39.66769027709961, -105.03593444824219], [39.667686462402344, -105.03510284423828], [39.667686462402344, -105.03497314453125], [39.667686462402344, -105.03486633300781], [39.667694091796875, -105.03436279296875], [39.66769027709961, -105.03382873535156], [39.66769790649414, -105.03285217285156], [39.66769790649414, -105.0318832397461], [39.66769790649414, -105.0309066772461], [39.66769790649414, -105.0308609008789], [39.66770935058594, -105.02996063232422], [39.66770935058594, -105.02987670898438], [39.66770935058594, -105.02982330322266], [39.66770935058594, -105.02980041503906], [39.66771697998047, -105.02886199951172], [39.667720794677734, -105.02796173095703], [39.667724609375, -105.0274658203125], [39.66773223876953, -105.02699279785156], [39.667724609375, -105.02607727050781], [39.66771697998047, -105.0252685546875], [39.6677131652832, -105.02510833740234], [39.667869567871094, -105.02505493164062], [39.66807174682617, -105.0250473022461], [39.668357849121094, -105.0250244140625], [39.668460845947266, -105.02505493164062], [39.66855239868164, -105.02509307861328], [39.66887283325195, -105.02510070800781], [39.669010162353516, -105.02510070800781], [39.66918182373047, -105.02510070800781], [39.669734954833984, -105.02509307861328], [39.6701545715332, -105.02509307861328], [39.670249938964844, -105.02501678466797], [39.67046356201172, -105.02501678466797], [39.670631408691406, -105.02501678466797], [39.67064666748047, -105.02501678466797], [39.67120361328125, -105.02501678466797], [39.67182159423828, -105.02501678466797], [39.671966552734375, -105.02501678466797], [39.672340393066406, -105.02501678466797], [39.67251205444336, -105.02501678466797], [39.67269515991211, -105.02501678466797], [39.672733306884766, -105.02501678466797], [39.67283630371094, -105.02501678466797], [39.67300796508789, -105.02501678466797], [39.67327880859375, -105.02501678466797], [39.67340850830078, -105.02501678466797], [39.67379379272461, -105.02501678466797], [39.6738166809082, -105.02501678466797], [39.674041748046875, -105.02501678466797], [39.674190521240234, -105.02501678466797], [39.67448806762695, -105.02501678466797], [39.67451095581055, -105.02501678466797], [39.67471694946289, -105.02500915527344], [39.67487716674805, -105.02500915527344], [39.67493438720703, -105.02500915527344], [39.675010681152344, -105.02500915527344], [39.67530059814453, -105.02500915527344], [39.67533493041992, -105.02500915527344], [39.675376892089844, -105.02500915527344], [39.67547607421875, -105.02500915527344], [39.67558288574219, -105.02500915527344], [39.67561340332031, -105.02500915527344], [39.675968170166016, -105.02500915527344], [39.676109313964844, -105.02500915527344], [39.6762809753418, -105.02500915527344], [39.676395416259766, -105.02500915527344], [39.67662048339844, -105.02500915527344], [39.6767692565918, -105.02500915527344], [39.67729949951172, -105.02500915527344], [39.677696228027344, -105.0250015258789], [39.678077697753906, -105.02499389648438], [39.678504943847656, -105.02498626708984], [39.67864990234375, -105.02497863769531], [39.67864990234375, -105.02484893798828], [39.67864990234375, -105.02445983886719], [39.67864990234375, -105.02445220947266], [39.67864990234375, -105.02427673339844], [39.67864990234375, -105.0239486694336], [39.67864990234375, -105.02381134033203], [39.67864990234375, -105.02368927001953], [39.67864990234375, -105.0235824584961], [39.678653717041016, -105.02323913574219], [39.678653717041016, -105.02310943603516], [39.678653717041016, -105.02275848388672], [39.678653717041016, -105.022705078125], [39.67865753173828, -105.02210235595703], [39.67865753173828, -105.02203369140625], [39.67866516113281, -105.02108764648438], [39.67866516113281, -105.02105712890625], [39.67866897583008, -105.02051544189453], [39.67866897583008, -105.02037811279297], [39.67866897583008, -105.02024841308594], [39.67866897583008, -105.01970672607422], [39.678672790527344, -105.0191879272461], [39.678672790527344, -105.0189437866211], [39.67867660522461, -105.01802825927734], [39.67867660522461, -105.01740264892578], [39.678680419921875, -105.01725769042969], [39.678680419921875, -105.01705169677734], [39.678680419921875, -105.01679992675781], [39.678680419921875, -105.01677703857422], [39.678680419921875, -105.01656341552734], [39.678680419921875, -105.0163345336914], [39.678680419921875, -105.01615142822266], [39.67868423461914, -105.01593017578125], [39.67868423461914, -105.01590728759766], [39.67868423461914, -105.01569366455078], [39.678680419921875, -105.01528930664062], [39.678680419921875, -105.01522827148438], [39.678680419921875, -105.01507568359375], [39.678680419921875, -105.01486206054688], [39.67867660522461, -105.01463317871094], [39.67867660522461, -105.01461029052734], [39.67867660522461, -105.01438903808594], [39.67867660522461, -105.01427459716797], [39.67867660522461, -105.01416778564453], [39.678672790527344, -105.01394653320312], [39.678672790527344, -105.01387023925781], [39.678672790527344, -105.013671875], [39.67866897583008, -105.01337432861328], [39.67866516113281, -105.01300048828125], [39.67866516113281, -105.01278686523438], [39.67866516113281, -105.01273345947266], [39.67866134643555, -105.01251220703125], [39.67866134643555, -105.0123519897461], [39.67865753173828, -105.01211547851562], [39.67865753173828, -105.01190948486328], [39.678653717041016, -105.0115966796875], [39.67864990234375, -105.01128387451172], [39.67864990234375, -105.01102447509766], [39.67864227294922, -105.01040649414062], [39.67863845825195, -105.00994873046875], [39.67863845825195, -105.00981903076172], [39.67863464355469, -105.00942993164062], [39.67863082885742, -105.00929260253906], [39.678627014160156, -105.0086669921875], [39.67862319946289, -105.00843048095703], [39.678619384765625, -105.00827026367188], [39.67861557006836, -105.00798797607422], [39.6786003112793, -105.0073013305664], [39.67859649658203, -105.00709533691406], [39.678592681884766, -105.00678253173828], [39.678585052490234, -105.00640106201172], [39.67857360839844, -105.00562286376953], [39.678565979003906, -105.00524139404297], [39.67856216430664, -105.00475311279297], [39.678558349609375, -105.00411224365234], [39.678550720214844, -105.00385284423828], [39.67854309082031, -105.0033950805664], [39.67854309082031, -105.0029296875], [39.67854309082031, -105.00288391113281], [39.67853927612305, -105.00263214111328], [39.67853546142578, -105.00242614746094], [39.678531646728516, -105.00221252441406], [39.67852783203125, -105.00177764892578], [39.678524017333984, -105.0015640258789], [39.678524017333984, -105.00135803222656], [39.678524017333984, -105.00122833251953], [39.67852020263672, -105.00108337402344], [39.67852020263672, -105.00096130371094], [39.67852020263672, -105.00088500976562], [39.67851638793945, -105.00064086914062], [39.67851638793945, -105.00045013427734], [39.67851257324219, -105.00027465820312], [39.67850875854492, -105.00006866455078], [39.67850875854492, -104.99995422363281], [39.67850875854492, -104.99993896484375], [39.67850112915039, -104.99947357177734], [39.67849349975586, -104.9990463256836], [39.67849349975586, -104.99900817871094], [39.67848587036133, -104.99864959716797], [39.67848587036133, -104.99851989746094], [39.67848205566406, -104.99839782714844], [39.6784782409668, -104.99809265136719], [39.67847442626953, -104.99771118164062], [39.678470611572266, -104.99767303466797], [39.678470611572266, -104.9975357055664], [39.678466796875, -104.99745178222656], [39.678466796875, -104.99742889404297], [39.67845916748047, -104.99715423583984], [39.678443908691406, -104.99658203125], [39.678436279296875, -104.9959945678711], [39.67841339111328, -104.99501037597656], [39.67841339111328, -104.9941635131836], [39.67841339111328, -104.99386596679688], [39.67841339111328, -104.99348449707031], [39.67841339111328, -104.99308776855469], [39.67841339111328, -104.99292755126953], [39.678409576416016, -104.9913558959961], [39.67842102050781, -104.99060821533203], [39.67842102050781, -104.9904556274414], [39.678428649902344, -104.99029541015625], [39.678436279296875, -104.98995971679688], [39.67837142944336, -104.9898452758789], [39.67838668823242, -104.98939514160156], [39.67839431762695, -104.98908996582031], [39.678401947021484, -104.98880004882812], [39.678409576416016, -104.98860931396484], [39.67842102050781, -104.98822784423828], [39.67843246459961, -104.98780822753906], [39.678436279296875, -104.98779296875], [39.678497314453125, -104.9876708984375], [39.67850112915039, -104.98750305175781], [39.678504943847656, -104.98739624023438], [39.67851638793945, -104.9870834350586], [39.67851638793945, -104.98699951171875], [39.67852020263672, -104.98694610595703], [39.678531646728516, -104.98658752441406], [39.67853546142578, -104.98635864257812], [39.67855453491211, -104.98580932617188], [39.67855453491211, -104.98575592041016], [39.67855453491211, -104.98551940917969], [39.678550720214844, -104.98521423339844], [39.67850875854492, -104.98499298095703], [39.67851257324219, -104.98462677001953], [39.67851638793945, -104.98432159423828], [39.67851638793945, -104.98404693603516], [39.67851638793945, -104.98346710205078], [39.67851638793945, -104.98335266113281], [39.67851257324219, -104.98298645019531], [39.67851257324219, -104.98287200927734], [39.67851257324219, -104.98277282714844], [39.67851638793945, -104.98226928710938], [39.67852020263672, -104.98196411132812], [39.67852020263672, -104.98167419433594], [39.678524017333984, -104.98079681396484], [39.678524017333984, -104.98070526123047], [39.67854309082031, -104.98058319091797], [39.67856216430664, -104.98048400878906], [39.67856216430664, -104.98040771484375], [39.678558349609375, -104.98018646240234], [39.67855453491211, -104.97991180419922], [39.678550720214844, -104.97933959960938], [39.67854690551758, -104.97901153564453], [39.67854309082031, -104.9787368774414], [39.678531646728516, -104.97813415527344], [39.67852783203125, -104.97750091552734], [39.67852783203125, -104.97692108154297], [39.67852020263672, -104.97633361816406], [39.67852020263672, -104.97575378417969], [39.67852020263672, -104.97517395019531], [39.67852020263672, -104.974609375], [39.67851638793945, -104.97401428222656], [39.67851257324219, -104.97386169433594], [39.67851257324219, -104.97357177734375], [39.67851257324219, -104.97344207763672], [39.67851257324219, -104.97333526611328], [39.67850875854492, -104.97310638427734], [39.67850875854492, -104.97296142578125], [39.678504943847656, -104.97286224365234], [39.678504943847656, -104.97270965576172], [39.67850112915039, -104.9722671508789], [39.678497314453125, -104.97168731689453], [39.678497314453125, -104.97154998779297], [39.67849349975586, -104.97109985351562], [39.67848587036133, -104.97048950195312], [39.67848205566406, -104.96992492675781], [39.67847442626953, -104.96949005126953], [39.67847442626953, -104.96931457519531], [39.67847442626953, -104.96919250488281], [39.67847442626953, -104.96918487548828], [39.67847442626953, -104.9688491821289], [39.67847442626953, -104.96875], [39.678470611572266, -104.96866607666016], [39.678470611572266, -104.9684066772461], [39.678470611572266, -104.96833801269531], [39.678470611572266, -104.96832275390625], [39.678470611572266, -104.96817779541016], [39.678470611572266, -104.96802520751953], [39.67847442626953, -104.96757507324219], [39.67847442626953, -104.96704864501953], [39.67847442626953, -104.96699523925781], [39.67843246459961, -104.96640014648438], [39.67843246459961, -104.96619415283203], [39.678428649902344, -104.96582794189453], [39.678428649902344, -104.96563720703125], [39.678428649902344, -104.96537780761719], [39.67842483520508, -104.96524047851562], [39.67842483520508, -104.96512603759766], [39.67842102050781, -104.9638442993164], [39.67842102050781, -104.96356201171875], [39.67842102050781, -104.96241760253906], [39.67841339111328, -104.96146392822266], [39.67841339111328, -104.96134948730469], [39.67839813232422, -104.96038818359375], [39.67839050292969, -104.96003723144531], [39.67842483520508, -104.95954895019531], [39.678436279296875, -104.95938110351562], [39.67828369140625, -104.95938110351562], [39.6771125793457, -104.95940399169922], [39.67673873901367, -104.95940399169922], [39.67662048339844, -104.95941162109375], [39.676509857177734, -104.95940399169922], [39.67607879638672, -104.95941162109375], [39.67545700073242, -104.95941162109375], [39.6749382019043, -104.95941925048828], [39.67484664916992, -104.95941925048828], [39.67475891113281, -104.95941925048828], [39.674076080322266, -104.95941925048828], [39.67354965209961, -104.95941162109375], [39.6733283996582, -104.95940399169922], [39.67311477661133, -104.95940399169922], [39.673030853271484, -104.95939636230469], [39.6729621887207, -104.95939636230469], [39.67277145385742, -104.95939636230469], [39.67275619506836, -104.95939636230469], [39.672637939453125, -104.95939636230469], [39.672515869140625, -104.95939636230469], [39.6723747253418, -104.95939636230469], [39.67220687866211, -104.95939636230469], [39.6719856262207, -104.95939636230469], [39.671669006347656, -104.95939636230469], [39.67164993286133, -104.95939636230469], [39.671539306640625, -104.95939636230469], [39.67152404785156, -104.95939636230469], [39.67129135131836, -104.95939636230469], [39.67122268676758, -104.95939636230469], [39.671138763427734, -104.95939636230469], [39.67053985595703, -104.95939636230469], [39.670162200927734, -104.95940399169922], [39.67001724243164, -104.95940399169922], [39.66999816894531, -104.95940399169922], [39.669410705566406, -104.95940399169922], [39.6692008972168, -104.95940399169922], [39.66895294189453, -104.95940399169922], [39.668888092041016, -104.95940399169922], [39.66872787475586, -104.95940399169922], [39.668460845947266, -104.95939636230469], [39.668033599853516, -104.95938873291016], [39.66767501831055, -104.95939636230469], [39.6676025390625, -104.95939636230469], [39.66749572753906, -104.95939636230469], [39.6668701171875, -104.95940399169922], [39.66660690307617, -104.95940399169922], [39.66650390625, -104.95940399169922], [39.66603088378906, -104.95941162109375], [39.665550231933594, -104.95941925048828], [39.66462326049805, -104.95943450927734], [39.664249420166016, -104.95943450927734], [39.66393280029297, -104.95943450927734], [39.663055419921875, -104.95944213867188], [39.66191482543945, -104.95945739746094], [39.661354064941406, -104.95945739746094], [39.66096496582031, -104.95945739746094], [39.66044616699219, -104.95945739746094], [39.66034698486328, -104.95946502685547], [39.66027069091797, -104.95945739746094], [39.659568786621094, -104.95946502685547], [39.657691955566406, -104.95945739746094], [39.6572380065918, -104.95945739746094], [39.65707015991211, -104.95945739746094], [39.65707015991211, -104.95934295654297], [39.65707015991211, -104.95846557617188], [39.65707015991211, -104.95752716064453], [39.657066345214844, -104.95580291748047], [39.657066345214844, -104.95423126220703], [39.65705490112305, -104.95330810546875], [39.65705490112305, -104.952392578125], [39.65705108642578, -104.95204162597656], [39.65630340576172, -104.95204162597656], [39.656314849853516, -104.95127868652344], [39.65631103515625, -104.95108795166016], [39.65630340576172, -104.95092010498047], [39.656280517578125, -104.95063018798828], [39.656246185302734, -104.95034790039062], [39.65620040893555, -104.95006561279297], [39.65611267089844, -104.94964599609375]],\n", + " {"bubblingMouseEvents": true, "color": "#eff821", "dashArray": null, "dashOffset": null, "fill": false, "fillColor": "#eff821", "fillOpacity": 0.2, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "noClip": false, "opacity": 0.8, "smoothFactor": 1.0, "stroke": true, "weight": 10}\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " poly_line_7cade121f56d7b10aa540a3b3b934d5c.bindTooltip(\n", + " poly_line_71ac2c9ed32aab0058bc71727990857b.bindTooltip(\n", " `<div>\n", - " 0.44915623716812586\n", + " 0.4155712183679041\n", " </div>`,\n", " {"sticky": true}\n", " );\n", " \n", " \n", - " var marker_97e2b6c4eb6d7219c8d43e2bbaabaaef = L.marker(\n", - " [39.6677360534668, -105.08140563964844],\n", + " var marker_bbc462df108eaf704b386655516808a4 = L.marker(\n", + " [39.66568374633789, -105.08139038085938],\n", " {}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " var icon_cbdd24ed32ca507c1bcab57cdd9870b3 = L.AwesomeMarkers.icon(\n", + " var icon_4ae31cdb0089a595f8db79295628af18 = L.AwesomeMarkers.icon(\n", " {"extraClasses": "fa-rotate-0", "icon": "circle", "iconColor": "white", "markerColor": "green", "prefix": "fa"}\n", " );\n", - " marker_97e2b6c4eb6d7219c8d43e2bbaabaaef.setIcon(icon_cbdd24ed32ca507c1bcab57cdd9870b3);\n", + " marker_bbc462df108eaf704b386655516808a4.setIcon(icon_4ae31cdb0089a595f8db79295628af18);\n", " \n", " \n", - " marker_97e2b6c4eb6d7219c8d43e2bbaabaaef.bindTooltip(\n", + " marker_bbc462df108eaf704b386655516808a4.bindTooltip(\n", " `<div>\n", " Origin\n", " </div>`,\n", @@ -1617,19 +1607,19 @@ " );\n", " \n", " \n", - " var marker_2d5f2b1a0c31c34607644984bd78a362 = L.marker(\n", - " [39.653099060058594, -104.95413970947266],\n", + " var marker_18e5f45eb068f1b964585472b8708616 = L.marker(\n", + " [39.65611267089844, -104.94964599609375],\n", " {}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " var icon_de0cd036f0290cb620dbcb3310a34481 = L.AwesomeMarkers.icon(\n", + " var icon_8aa1f211c4cdbdd434ef2749f73c4037 = L.AwesomeMarkers.icon(\n", " {"extraClasses": "fa-rotate-0", "icon": "circle", "iconColor": "white", "markerColor": "red", "prefix": "fa"}\n", " );\n", - " marker_2d5f2b1a0c31c34607644984bd78a362.setIcon(icon_de0cd036f0290cb620dbcb3310a34481);\n", + " marker_18e5f45eb068f1b964585472b8708616.setIcon(icon_8aa1f211c4cdbdd434ef2749f73c4037);\n", " \n", " \n", - " marker_2d5f2b1a0c31c34607644984bd78a362.bindTooltip(\n", + " marker_18e5f45eb068f1b964585472b8708616.bindTooltip(\n", " `<div>\n", " Destination\n", " </div>`,\n", @@ -1637,33 +1627,33 @@ " );\n", " \n", " \n", - " var poly_line_df733bcd1fb8227670616d46700c5f9c = L.polyline(\n", - " [[39.6677360534668, -105.08140563964844], [39.6677360534668, -105.08128356933594], [39.6677360534668, -105.08104705810547], [39.6677360534668, -105.08061218261719], [39.6677360534668, -105.08023071289062], [39.66773223876953, -105.07986450195312], [39.66773223876953, -105.07962799072266], [39.66773223876953, -105.07939147949219], [39.6677360534668, -105.07869720458984], [39.66774368286133, -105.07814025878906], [39.66776657104492, -105.07447814941406], [39.66777420043945, -105.07354736328125], [39.6668815612793, -105.07353210449219], [39.666893005371094, -105.07284545898438], [39.66685485839844, -105.07270050048828], [39.6667366027832, -105.07252502441406], [39.66661071777344, -105.07249450683594], [39.665771484375, -105.07249450683594], [39.664825439453125, -105.07267761230469], [39.664676666259766, -105.07173919677734], [39.66450500488281, -105.07077026367188], [39.66436004638672, -105.06983184814453], [39.66419982910156, -105.0688705444336], [39.664180755615234, -105.0672836303711], [39.664180755615234, -105.06665802001953], [39.664390563964844, -105.0660400390625], [39.664642333984375, -105.06564331054688], [39.66505813598633, -105.06523895263672], [39.66527557373047, -105.06513977050781], [39.665489196777344, -105.06509399414062], [39.667762756347656, -105.06513214111328], [39.667762756347656, -105.06404876708984], [39.667762756347656, -105.06297302246094], [39.66777038574219, -105.0612564086914], [39.66777420043945, -105.06085968017578], [39.66777420043945, -105.06013488769531], [39.66777420043945, -105.06005096435547], [39.667781829833984, -105.05903625488281], [39.667781829833984, -105.05797576904297], [39.66777801513672, -105.05694580078125], [39.667781829833984, -105.055908203125], [39.66778564453125, -105.05487060546875], [39.66777801513672, -105.05426788330078], [39.667781829833984, -105.05392456054688], [39.667781829833984, -105.0536880493164], [39.667781829833984, -105.05325317382812], [39.66777801513672, -105.05252075195312], [39.66777038574219, -105.05178833007812], [39.66777038574219, -105.05171966552734], [39.66777038574219, -105.0509033203125], [39.66777038574219, -105.05079650878906], [39.66777038574219, -105.05069732666016], [39.66775894165039, -105.04981231689453], [39.667762756347656, -105.048828125], [39.667762756347656, -105.0478286743164], [39.667762756347656, -105.04683685302734], [39.66775894165039, -105.04656982421875], [39.66775894165039, -105.04583740234375], [39.66775894165039, -105.04553985595703], [39.66775131225586, -105.04484558105469], [39.66775131225586, -105.0438461303711], [39.667747497558594, -105.04315948486328], [39.66774368286133, -105.04286193847656], [39.667724609375, -105.0418701171875], [39.667724609375, -105.041748046875], [39.667724609375, -105.0416488647461], [39.667720794677734, -105.04067993164062], [39.66771697998047, -105.04055786132812], [39.66771697998047, -105.04007720947266], [39.6677131652832, -105.03968048095703], [39.6677131652832, -105.03929138183594], [39.66770935058594, -105.0386962890625], [39.66770553588867, -105.03777313232422], [39.66769790649414, -105.0368423461914], [39.66769027709961, -105.03593444824219], [39.667686462402344, -105.03510284423828], [39.667686462402344, -105.03497314453125], [39.667686462402344, -105.03486633300781], [39.667694091796875, -105.03436279296875], [39.66769027709961, -105.03382873535156], [39.66769790649414, -105.03285217285156], [39.66769790649414, -105.0318832397461], [39.66769790649414, -105.0309066772461], [39.66769790649414, -105.0308609008789], [39.66770935058594, -105.02996063232422], [39.66770935058594, -105.02987670898438], [39.66770935058594, -105.02982330322266], [39.66770935058594, -105.02980041503906], [39.66771697998047, -105.02886199951172], [39.667720794677734, -105.02796173095703], [39.667724609375, -105.0274658203125], [39.66773223876953, -105.02699279785156], [39.667724609375, -105.02607727050781], [39.66771697998047, -105.0252685546875], [39.6677131652832, -105.02510833740234], [39.667869567871094, -105.02505493164062], [39.66807174682617, -105.0250473022461], [39.668357849121094, -105.0250244140625], [39.668460845947266, -105.02505493164062], [39.66855239868164, -105.02509307861328], [39.66887283325195, -105.02510070800781], [39.669010162353516, -105.02510070800781], [39.66918182373047, -105.02510070800781], [39.669734954833984, -105.02509307861328], [39.6701545715332, -105.02509307861328], [39.670249938964844, -105.02501678466797], [39.67046356201172, -105.02501678466797], [39.670631408691406, -105.02501678466797], [39.67064666748047, -105.02501678466797], [39.67120361328125, -105.02501678466797], [39.67182159423828, -105.02501678466797], [39.671966552734375, -105.02501678466797], [39.672340393066406, -105.02501678466797], [39.67251205444336, -105.02501678466797], [39.67269515991211, -105.02501678466797], [39.672733306884766, -105.02501678466797], [39.67283630371094, -105.02501678466797], [39.67300796508789, -105.02501678466797], [39.67327880859375, -105.02501678466797], [39.67340850830078, -105.02501678466797], [39.67379379272461, -105.02501678466797], [39.6738166809082, -105.02501678466797], [39.674041748046875, -105.02501678466797], [39.674190521240234, -105.02501678466797], [39.67448806762695, -105.02501678466797], [39.67451095581055, -105.02501678466797], [39.67471694946289, -105.02500915527344], [39.67487716674805, -105.02500915527344], [39.67493438720703, -105.02500915527344], [39.675010681152344, -105.02500915527344], [39.67530059814453, -105.02500915527344], [39.67533493041992, -105.02500915527344], [39.675376892089844, -105.02500915527344], [39.67547607421875, -105.02500915527344], [39.67558288574219, -105.02500915527344], [39.67561340332031, -105.02500915527344], [39.675968170166016, -105.02500915527344], [39.676109313964844, -105.02500915527344], [39.6762809753418, -105.02500915527344], [39.676395416259766, -105.02500915527344], [39.67662048339844, -105.02500915527344], [39.6767692565918, -105.02500915527344], [39.67729949951172, -105.02500915527344], [39.677696228027344, -105.0250015258789], [39.678077697753906, -105.02499389648438], [39.678504943847656, -105.02498626708984], [39.67864990234375, -105.02497863769531], [39.67864990234375, -105.02484893798828], [39.67864990234375, -105.02445983886719], [39.67864990234375, -105.02445220947266], [39.67864990234375, -105.02427673339844], [39.67864990234375, -105.0239486694336], [39.67864990234375, -105.02381134033203], [39.67864990234375, -105.02368927001953], [39.67864990234375, -105.0235824584961], [39.678653717041016, -105.02323913574219], [39.678653717041016, -105.02310943603516], [39.678653717041016, -105.02275848388672], [39.678653717041016, -105.022705078125], [39.67865753173828, -105.02210235595703], [39.67865753173828, -105.02203369140625], [39.67866516113281, -105.02108764648438], [39.67866516113281, -105.02105712890625], [39.67866897583008, -105.02051544189453], [39.67866897583008, -105.02037811279297], [39.67866897583008, -105.02024841308594], [39.67866897583008, -105.01970672607422], [39.678672790527344, -105.0191879272461], [39.678672790527344, -105.0189437866211], [39.67867660522461, -105.01802825927734], [39.67867660522461, -105.01740264892578], [39.678680419921875, -105.01725769042969], [39.678680419921875, -105.01705169677734], [39.678680419921875, -105.01679992675781], [39.678680419921875, -105.01677703857422], [39.678680419921875, -105.01656341552734], [39.678680419921875, -105.0163345336914], [39.678680419921875, -105.01615142822266], [39.67868423461914, -105.01593017578125], [39.67868423461914, -105.01590728759766], [39.67868423461914, -105.01569366455078], [39.678680419921875, -105.01528930664062], [39.678680419921875, -105.01522827148438], [39.678680419921875, -105.01507568359375], [39.678680419921875, -105.01486206054688], [39.67867660522461, -105.01463317871094], [39.67867660522461, -105.01461029052734], [39.67867660522461, -105.01438903808594], [39.67867660522461, -105.01427459716797], [39.67867660522461, -105.01416778564453], [39.678672790527344, -105.01394653320312], [39.678672790527344, -105.01387023925781], [39.678672790527344, -105.013671875], [39.67866897583008, -105.01337432861328], [39.67866516113281, -105.01300048828125], [39.67866516113281, -105.01278686523438], [39.67866516113281, -105.01273345947266], [39.67866134643555, -105.01251220703125], [39.67866134643555, -105.0123519897461], [39.67865753173828, -105.01211547851562], [39.67865753173828, -105.01190948486328], [39.678653717041016, -105.0115966796875], [39.67864990234375, -105.01128387451172], [39.67864990234375, -105.01102447509766], [39.67864227294922, -105.01040649414062], [39.67863845825195, -105.00994873046875], [39.67863845825195, -105.00981903076172], [39.67863464355469, -105.00942993164062], [39.67863082885742, -105.00929260253906], [39.678627014160156, -105.0086669921875], [39.67862319946289, -105.00843048095703], [39.678619384765625, -105.00827026367188], [39.67861557006836, -105.00798797607422], [39.6786003112793, -105.0073013305664], [39.67859649658203, -105.00709533691406], [39.678592681884766, -105.00678253173828], [39.678585052490234, -105.00640106201172], [39.67857360839844, -105.00562286376953], [39.678565979003906, -105.00524139404297], [39.67856216430664, -105.00475311279297], [39.678558349609375, -105.00411224365234], [39.678550720214844, -105.00385284423828], [39.67854309082031, -105.0033950805664], [39.67854309082031, -105.0029296875], [39.67854309082031, -105.00288391113281], [39.67853927612305, -105.00263214111328], [39.67853546142578, -105.00242614746094], [39.678531646728516, -105.00221252441406], [39.67852783203125, -105.00177764892578], [39.678524017333984, -105.0015640258789], [39.678524017333984, -105.00135803222656], [39.678524017333984, -105.00122833251953], [39.67852020263672, -105.00108337402344], [39.67852020263672, -105.00096130371094], [39.67852020263672, -105.00088500976562], [39.67851638793945, -105.00064086914062], [39.67851638793945, -105.00045013427734], [39.67851257324219, -105.00027465820312], [39.67850875854492, -105.00006866455078], [39.67850875854492, -104.99995422363281], [39.67850875854492, -104.99993896484375], [39.67850112915039, -104.99947357177734], [39.67849349975586, -104.9990463256836], [39.67849349975586, -104.99900817871094], [39.67848587036133, -104.99864959716797], [39.67848587036133, -104.99851989746094], [39.67848205566406, -104.99839782714844], [39.6784782409668, -104.99809265136719], [39.67847442626953, -104.99771118164062], [39.678470611572266, -104.99767303466797], [39.678470611572266, -104.9975357055664], [39.678466796875, -104.99745178222656], [39.678466796875, -104.99742889404297], [39.67845916748047, -104.99715423583984], [39.678443908691406, -104.99658203125], [39.678436279296875, -104.9959945678711], [39.67841339111328, -104.99501037597656], [39.67841339111328, -104.9941635131836], [39.67841339111328, -104.99386596679688], [39.67841339111328, -104.99348449707031], [39.67841339111328, -104.99308776855469], [39.67841339111328, -104.99292755126953], [39.678409576416016, -104.9913558959961], [39.67842102050781, -104.99060821533203], [39.67842102050781, -104.9904556274414], [39.678428649902344, -104.99029541015625], [39.678436279296875, -104.98995971679688], [39.67837142944336, -104.9898452758789], [39.67838668823242, -104.98939514160156], [39.67839431762695, -104.98908996582031], [39.678401947021484, -104.98880004882812], [39.678409576416016, -104.98860931396484], [39.67842102050781, -104.98822784423828], [39.67843246459961, -104.98780822753906], [39.678436279296875, -104.98779296875], [39.678497314453125, -104.9876708984375], [39.67850112915039, -104.98750305175781], [39.678504943847656, -104.98739624023438], [39.67851638793945, -104.9870834350586], [39.67851638793945, -104.98699951171875], [39.67852020263672, -104.98694610595703], [39.678531646728516, -104.98658752441406], [39.67853546142578, -104.98635864257812], [39.67855453491211, -104.98580932617188], [39.67855453491211, -104.98575592041016], [39.67855453491211, -104.98551940917969], [39.678550720214844, -104.98521423339844], [39.67850875854492, -104.98499298095703], [39.67851257324219, -104.98462677001953], [39.67851638793945, -104.98432159423828], [39.67851638793945, -104.98404693603516], [39.67851638793945, -104.98346710205078], [39.67851638793945, -104.98335266113281], [39.67851257324219, -104.98298645019531], [39.67851257324219, -104.98287200927734], [39.67851257324219, -104.98277282714844], [39.67851638793945, -104.98226928710938], [39.67852020263672, -104.98196411132812], [39.67852020263672, -104.98167419433594], [39.678524017333984, -104.98079681396484], [39.678524017333984, -104.98070526123047], [39.67854309082031, -104.98058319091797], [39.67856216430664, -104.98048400878906], [39.67856216430664, -104.98040771484375], [39.678558349609375, -104.98018646240234], [39.67855453491211, -104.97991180419922], [39.678550720214844, -104.97933959960938], [39.67854690551758, -104.97901153564453], [39.67854309082031, -104.9787368774414], [39.678531646728516, -104.97813415527344], [39.67852783203125, -104.97750091552734], [39.67852783203125, -104.97692108154297], [39.67852020263672, -104.97633361816406], [39.67852020263672, -104.97575378417969], [39.67852020263672, -104.97517395019531], [39.67852020263672, -104.974609375], [39.67851638793945, -104.97401428222656], [39.67851257324219, -104.97386169433594], [39.67851257324219, -104.97357177734375], [39.67851257324219, -104.97344207763672], [39.67851257324219, -104.97333526611328], [39.67850875854492, -104.97310638427734], [39.67850875854492, -104.97296142578125], [39.678504943847656, -104.97286224365234], [39.678504943847656, -104.97270965576172], [39.67850112915039, -104.9722671508789], [39.678497314453125, -104.97168731689453], [39.678497314453125, -104.97154998779297], [39.67849349975586, -104.97109985351562], [39.67848587036133, -104.97048950195312], [39.67848205566406, -104.96992492675781], [39.67847442626953, -104.96949005126953], [39.67847442626953, -104.96931457519531], [39.67847442626953, -104.96919250488281], [39.67847442626953, -104.96918487548828], [39.67847442626953, -104.9688491821289], [39.67847442626953, -104.96875], [39.678470611572266, -104.96866607666016], [39.678470611572266, -104.9684066772461], [39.678470611572266, -104.96833801269531], [39.678470611572266, -104.96832275390625], [39.678470611572266, -104.96817779541016], [39.678470611572266, -104.96802520751953], [39.67847442626953, -104.96757507324219], [39.67847442626953, -104.96704864501953], [39.67847442626953, -104.96699523925781], [39.67843246459961, -104.96640014648438], [39.67843246459961, -104.96619415283203], [39.678428649902344, -104.96582794189453], [39.678428649902344, -104.96563720703125], [39.678428649902344, -104.96537780761719], [39.67842483520508, -104.96524047851562], [39.67842483520508, -104.96512603759766], [39.67842102050781, -104.9638442993164], [39.67842102050781, -104.96356201171875], [39.67842102050781, -104.96241760253906], [39.67841339111328, -104.96146392822266], [39.67841339111328, -104.96134948730469], [39.67839813232422, -104.96038818359375], [39.67839050292969, -104.96003723144531], [39.67842483520508, -104.95954895019531], [39.678436279296875, -104.95938110351562], [39.678436279296875, -104.959228515625], [39.67843246459961, -104.95894622802734], [39.678428649902344, -104.95864868164062], [39.678428649902344, -104.95829772949219], [39.67842483520508, -104.95793914794922], [39.67839050292969, -104.95751190185547], [39.67839050292969, -104.9572525024414], [39.67839050292969, -104.9566421508789], [39.67839050292969, -104.95652770996094], [39.67839050292969, -104.955810546875], [39.67839050292969, -104.9551010131836], [39.67839050292969, -104.95439910888672], [39.67839050292969, -104.95368957519531], [39.67839050292969, -104.95355987548828], [39.67838668823242, -104.95238494873047], [39.67838668823242, -104.9522705078125], [39.67838668823242, -104.95214080810547], [39.67838668823242, -104.95154571533203], [39.67838668823242, -104.95096588134766], [39.67838668823242, -104.95084381103516], [39.67838668823242, -104.95072174072266], [39.67838668823242, -104.95012664794922], [39.678382873535156, -104.9495620727539], [39.678382873535156, -104.94941711425781], [39.67837905883789, -104.9487075805664], [39.67837905883789, -104.947998046875], [39.67837905883789, -104.94728088378906], [39.678382873535156, -104.9466781616211], [39.678382873535156, -104.94657135009766], [39.67837905883789, -104.94586181640625], [39.67837905883789, -104.9452896118164], [39.67837905883789, -104.94514465332031], [39.67837905883789, -104.94503021240234], [39.678382873535156, -104.9437255859375], [39.67838668823242, -104.9432144165039], [39.67842483520508, -104.94306945800781], [39.678428649902344, -104.94296264648438], [39.678428649902344, -104.94286346435547], [39.67843246459961, -104.94203186035156], [39.67843246459961, -104.94168853759766], [39.678436279296875, -104.9415054321289], [39.678436279296875, -104.9410400390625], [39.678436279296875, -104.94078063964844], [39.67829513549805, -104.94078063964844], [39.67782211303711, -104.94076538085938], [39.677772521972656, -104.94076538085938], [39.67747497558594, -104.94076538085938], [39.67737579345703, -104.94075775146484], [39.67732620239258, -104.94075775146484], [39.67720413208008, -104.94075775146484], [39.6771240234375, -104.94075775146484], [39.67698287963867, -104.94075012207031], [39.67678451538086, -104.94075012207031], [39.676612854003906, -104.94074249267578], [39.67646026611328, -104.94073486328125], [39.676177978515625, -104.94072723388672], [39.676116943359375, -104.94072723388672], [39.6760139465332, -104.94072723388672], [39.67588806152344, -104.94072723388672], [39.675262451171875, -104.94072723388672], [39.67515563964844, -104.94072723388672], [39.675140380859375, -104.94072723388672], [39.67489242553711, -104.94071960449219], [39.67481231689453, -104.94071960449219], [39.674747467041016, -104.94071960449219], [39.674530029296875, -104.94071197509766], [39.6744384765625, -104.94071197509766], [39.67431640625, -104.94071197509766], [39.674293518066406, -104.94071197509766], [39.673465728759766, -104.94071197509766], [39.673316955566406, -104.94071197509766], [39.673282623291016, -104.94071197509766], [39.67291259765625, -104.94071197509766], [39.67267990112305, -104.94071197509766], [39.67250061035156, -104.94071197509766], [39.672340393066406, -104.94071197509766], [39.67229080200195, -104.94071197509766], [39.67195510864258, -104.94071197509766], [39.6718864440918, -104.94071197509766], [39.67181396484375, -104.94071197509766], [39.67159652709961, -104.94071197509766], [39.67145919799805, -104.94071197509766], [39.67127227783203, -104.94071197509766], [39.67091751098633, -104.94071197509766], [39.670772552490234, -104.94071197509766], [39.670677185058594, -104.94071197509766], [39.67049789428711, -104.94071197509766], [39.67041015625, -104.94071197509766], [39.67033386230469, -104.94071197509766], [39.67013931274414, -104.94071197509766], [39.670101165771484, -104.94071197509766], [39.66994857788086, -104.94071197509766], [39.669776916503906, -104.94071197509766], [39.66945266723633, -104.94071197509766], [39.66943359375, -104.94071197509766], [39.669334411621094, -104.94071197509766], [39.66926193237305, -104.94071197509766], [39.669071197509766, -104.94071197509766], [39.668914794921875, -104.94071197509766], [39.668758392333984, -104.94071197509766], [39.668704986572266, -104.94071197509766], [39.66843032836914, -104.94070434570312], [39.66830825805664, -104.94070434570312], [39.668067932128906, -104.9406967163086], [39.66781234741211, -104.9406967163086], [39.66765594482422, -104.9406967163086], [39.66756820678711, -104.94068908691406], [39.66749954223633, -104.94068908691406], [39.66728591918945, -104.94068908691406], [39.66714859008789, -104.94068908691406], [39.66705322265625, -104.94068908691406], [39.66687774658203, -104.9406967163086], [39.666805267333984, -104.9406967163086], [39.6667594909668, -104.9406967163086], [39.6666374206543, -104.9406967163086], [39.66660690307617, -104.9406967163086], [39.666446685791016, -104.9406967163086], [39.66619110107422, -104.9406967163086], [39.66602325439453, -104.9406967163086], [39.66558074951172, -104.9406967163086], [39.665496826171875, -104.9406967163086], [39.665374755859375, -104.9406967163086], [39.665000915527344, -104.9406967163086], [39.66465377807617, -104.9406967163086], [39.66455078125, -104.9406967163086], [39.66450119018555, -104.9406967163086], [39.664207458496094, -104.9406967163086], [39.66395950317383, -104.9406967163086], [39.66379928588867, -104.94070434570312], [39.66347122192383, -104.94070434570312], [39.66297912597656, -104.94070434570312], [39.66283416748047, -104.94070434570312], [39.6624870300293, -104.94070434570312], [39.66123962402344, -104.94070434570312], [39.660770416259766, -104.94070434570312], [39.660682678222656, -104.94070434570312], [39.660552978515625, -104.94070434570312], [39.66044998168945, -104.9406967163086], [39.66028594970703, -104.94068908691406], [39.660179138183594, -104.94068145751953], [39.66008377075195, -104.940673828125], [39.659996032714844, -104.94066619873047], [39.65968704223633, -104.94062805175781], [39.65959548950195, -104.94061279296875], [39.65947341918945, -104.94059753417969], [39.65932846069336, -104.9405746459961], [39.65916061401367, -104.9405746459961], [39.65821838378906, -104.94056701660156], [39.657859802246094, -104.9405746459961], [39.65696334838867, -104.9405746459961], [39.65486526489258, -104.94058990478516], [39.65450668334961, -104.94062042236328], [39.65388870239258, -104.94064331054688], [39.65370559692383, -104.9406509399414], [39.65333557128906, -104.94084930419922], [39.65327835083008, -104.9408950805664], [39.653255462646484, -104.94092559814453], [39.653236389160156, -104.94094848632812], [39.6531982421875, -104.94100189208984], [39.65316390991211, -104.94107055664062], [39.65313720703125, -104.94114685058594], [39.653099060058594, -104.94127655029297], [39.65310287475586, -104.94180297851562], [39.65309524536133, -104.94206237792969], [39.65308380126953, -104.94307708740234], [39.653079986572266, -104.94464111328125], [39.653079986572266, -104.94536590576172], [39.653079986572266, -104.94613647460938], [39.653079986572266, -104.94637298583984], [39.65308380126953, -104.94657897949219], [39.6530876159668, -104.94861602783203], [39.6530876159668, -104.94932556152344], [39.65309143066406, -104.9501724243164], [39.65309524536133, -104.9517822265625], [39.65309524536133, -104.9525375366211], [39.653099060058594, -104.95402526855469], [39.653099060058594, -104.95413970947266]],\n", + " var poly_line_2e70f6692a414d677c4c5cb7fbc1eab4 = L.polyline(\n", + " [[39.66568374633789, -105.08139038085938], [39.665809631347656, -105.08138275146484], [39.666587829589844, -105.08139038085938], [39.66707229614258, -105.0813980102539], [39.6675910949707, -105.08140563964844], [39.6677360534668, -105.08140563964844], [39.6677360534668, -105.08128356933594], [39.6677360534668, -105.08104705810547], [39.6677360534668, -105.08061218261719], [39.6677360534668, -105.08023071289062], [39.66773223876953, -105.07986450195312], [39.66773223876953, -105.07962799072266], [39.66773223876953, -105.07939147949219], [39.6677360534668, -105.07869720458984], [39.66774368286133, -105.07814025878906], [39.66776657104492, -105.07447814941406], [39.66777420043945, -105.07354736328125], [39.6668815612793, -105.07353210449219], [39.666893005371094, -105.07284545898438], [39.66685485839844, -105.07270050048828], [39.6667366027832, -105.07252502441406], [39.66661071777344, -105.07249450683594], [39.665771484375, -105.07249450683594], [39.664825439453125, -105.07267761230469], [39.664676666259766, -105.07173919677734], [39.66450500488281, -105.07077026367188], [39.66436004638672, -105.06983184814453], [39.66419982910156, -105.0688705444336], [39.664180755615234, -105.0672836303711], [39.664180755615234, -105.06665802001953], [39.664390563964844, -105.0660400390625], [39.664642333984375, -105.06564331054688], [39.66505813598633, -105.06523895263672], [39.66527557373047, -105.06513977050781], [39.665489196777344, -105.06509399414062], [39.667762756347656, -105.06513214111328], [39.667762756347656, -105.06404876708984], [39.667762756347656, -105.06297302246094], [39.66777038574219, -105.0612564086914], [39.66777420043945, -105.06085968017578], [39.66777420043945, -105.06013488769531], [39.66777420043945, -105.06005096435547], [39.667781829833984, -105.05903625488281], [39.667781829833984, -105.05797576904297], [39.66777801513672, -105.05694580078125], [39.667781829833984, -105.055908203125], [39.66778564453125, -105.05487060546875], [39.66777801513672, -105.05426788330078], [39.667781829833984, -105.05392456054688], [39.667781829833984, -105.0536880493164], [39.667781829833984, -105.05325317382812], [39.66777801513672, -105.05252075195312], [39.66777038574219, -105.05178833007812], [39.66777038574219, -105.05171966552734], [39.66777038574219, -105.0509033203125], [39.66777038574219, -105.05079650878906], [39.66777038574219, -105.05069732666016], [39.66775894165039, -105.04981231689453], [39.667762756347656, -105.048828125], [39.667762756347656, -105.0478286743164], [39.667762756347656, -105.04683685302734], [39.66775894165039, -105.04656982421875], [39.66775894165039, -105.04583740234375], [39.66775894165039, -105.04553985595703], [39.66775131225586, -105.04484558105469], [39.66775131225586, -105.0438461303711], [39.667747497558594, -105.04315948486328], [39.66774368286133, -105.04286193847656], [39.667724609375, -105.0418701171875], [39.667724609375, -105.041748046875], [39.667724609375, -105.0416488647461], [39.667720794677734, -105.04067993164062], [39.66771697998047, -105.04055786132812], [39.66771697998047, -105.04007720947266], [39.6677131652832, -105.03968048095703], [39.6677131652832, -105.03929138183594], [39.66770935058594, -105.0386962890625], [39.66770553588867, -105.03777313232422], [39.66769790649414, -105.0368423461914], [39.66769027709961, -105.03593444824219], [39.667686462402344, -105.03510284423828], [39.667686462402344, -105.03497314453125], [39.667686462402344, -105.03486633300781], [39.667694091796875, -105.03436279296875], [39.66769027709961, -105.03382873535156], [39.66769790649414, -105.03285217285156], [39.66769790649414, -105.0318832397461], [39.66769790649414, -105.0309066772461], [39.66769790649414, -105.0308609008789], [39.66770935058594, -105.02996063232422], [39.66770935058594, -105.02987670898438], [39.66770935058594, -105.02982330322266], [39.66770935058594, -105.02980041503906], [39.66771697998047, -105.02886199951172], [39.667720794677734, -105.02796173095703], [39.667724609375, -105.0274658203125], [39.66773223876953, -105.02699279785156], [39.667724609375, -105.02607727050781], [39.66771697998047, -105.0252685546875], [39.6677131652832, -105.02510833740234], [39.667869567871094, -105.02505493164062], [39.66807174682617, -105.0250473022461], [39.668357849121094, -105.0250244140625], [39.668460845947266, -105.02505493164062], [39.66855239868164, -105.02509307861328], [39.66887283325195, -105.02510070800781], [39.669010162353516, -105.02510070800781], [39.66918182373047, -105.02510070800781], [39.669734954833984, -105.02509307861328], [39.6701545715332, -105.02509307861328], [39.670249938964844, -105.02501678466797], [39.67046356201172, -105.02501678466797], [39.670631408691406, -105.02501678466797], [39.67064666748047, -105.02501678466797], [39.67120361328125, -105.02501678466797], [39.67182159423828, -105.02501678466797], [39.671966552734375, -105.02501678466797], [39.672340393066406, -105.02501678466797], [39.67251205444336, -105.02501678466797], [39.67269515991211, -105.02501678466797], [39.672733306884766, -105.02501678466797], [39.67283630371094, -105.02501678466797], [39.67300796508789, -105.02501678466797], [39.67327880859375, -105.02501678466797], [39.67340850830078, -105.02501678466797], [39.67379379272461, -105.02501678466797], [39.6738166809082, -105.02501678466797], [39.674041748046875, -105.02501678466797], [39.674190521240234, -105.02501678466797], [39.67448806762695, -105.02501678466797], [39.67451095581055, -105.02501678466797], [39.67471694946289, -105.02500915527344], [39.67487716674805, -105.02500915527344], [39.67493438720703, -105.02500915527344], [39.675010681152344, -105.02500915527344], [39.67530059814453, -105.02500915527344], [39.67533493041992, -105.02500915527344], [39.675376892089844, -105.02500915527344], [39.67547607421875, -105.02500915527344], [39.67558288574219, -105.02500915527344], [39.67561340332031, -105.02500915527344], [39.675968170166016, -105.02500915527344], [39.676109313964844, -105.02500915527344], [39.6762809753418, -105.02500915527344], [39.676395416259766, -105.02500915527344], [39.67662048339844, -105.02500915527344], [39.6767692565918, -105.02500915527344], [39.67729949951172, -105.02500915527344], [39.677696228027344, -105.0250015258789], [39.678077697753906, -105.02499389648438], [39.678504943847656, -105.02498626708984], [39.67864990234375, -105.02497863769531], [39.67864990234375, -105.02484893798828], [39.67864990234375, -105.02445983886719], [39.67864990234375, -105.02445220947266], [39.67864990234375, -105.02427673339844], [39.67864990234375, -105.0239486694336], [39.67864990234375, -105.02381134033203], [39.67864990234375, -105.02368927001953], [39.67864990234375, -105.0235824584961], [39.678653717041016, -105.02323913574219], [39.678653717041016, -105.02310943603516], [39.678653717041016, -105.02275848388672], [39.678653717041016, -105.022705078125], [39.67865753173828, -105.02210235595703], [39.67865753173828, -105.02203369140625], [39.67866516113281, -105.02108764648438], [39.67866516113281, -105.02105712890625], [39.67866897583008, -105.02051544189453], [39.67866897583008, -105.02037811279297], [39.67866897583008, -105.02024841308594], [39.67866897583008, -105.01970672607422], [39.678672790527344, -105.0191879272461], [39.678672790527344, -105.0189437866211], [39.67867660522461, -105.01802825927734], [39.67867660522461, -105.01740264892578], [39.678680419921875, -105.01725769042969], [39.678680419921875, -105.01705169677734], [39.678680419921875, -105.01679992675781], [39.678680419921875, -105.01677703857422], [39.678680419921875, -105.01656341552734], [39.678680419921875, -105.0163345336914], [39.678680419921875, -105.01615142822266], [39.67868423461914, -105.01593017578125], [39.67868423461914, -105.01590728759766], [39.67868423461914, -105.01569366455078], [39.678680419921875, -105.01528930664062], [39.678680419921875, -105.01522827148438], [39.678680419921875, -105.01507568359375], [39.678680419921875, -105.01486206054688], [39.67867660522461, -105.01463317871094], [39.67867660522461, -105.01461029052734], [39.67867660522461, -105.01438903808594], [39.67867660522461, -105.01427459716797], [39.67867660522461, -105.01416778564453], [39.678672790527344, -105.01394653320312], [39.678672790527344, -105.01387023925781], [39.678672790527344, -105.013671875], [39.67866897583008, -105.01337432861328], [39.67866516113281, -105.01300048828125], [39.67866516113281, -105.01278686523438], [39.67866516113281, -105.01273345947266], [39.67866134643555, -105.01251220703125], [39.67866134643555, -105.0123519897461], [39.67865753173828, -105.01211547851562], [39.67865753173828, -105.01190948486328], [39.678653717041016, -105.0115966796875], [39.67864990234375, -105.01128387451172], [39.67864990234375, -105.01102447509766], [39.67864227294922, -105.01040649414062], [39.67863845825195, -105.00994873046875], [39.67863845825195, -105.00981903076172], [39.67863464355469, -105.00942993164062], [39.67863082885742, -105.00929260253906], [39.678627014160156, -105.0086669921875], [39.67862319946289, -105.00843048095703], [39.678619384765625, -105.00827026367188], [39.67861557006836, -105.00798797607422], [39.6786003112793, -105.0073013305664], [39.67859649658203, -105.00709533691406], [39.678592681884766, -105.00678253173828], [39.678585052490234, -105.00640106201172], [39.67857360839844, -105.00562286376953], [39.678565979003906, -105.00524139404297], [39.67856216430664, -105.00475311279297], [39.678558349609375, -105.00411224365234], [39.678550720214844, -105.00385284423828], [39.67854309082031, -105.0033950805664], [39.67854309082031, -105.0029296875], [39.67854309082031, -105.00288391113281], [39.67853927612305, -105.00263214111328], [39.67853546142578, -105.00242614746094], [39.678531646728516, -105.00221252441406], [39.67852783203125, -105.00177764892578], [39.678524017333984, -105.0015640258789], [39.678524017333984, -105.00135803222656], [39.678524017333984, -105.00122833251953], [39.67852020263672, -105.00108337402344], [39.67852020263672, -105.00096130371094], [39.67852020263672, -105.00088500976562], [39.67851638793945, -105.00064086914062], [39.67851638793945, -105.00045013427734], [39.67851257324219, -105.00027465820312], [39.67850875854492, -105.00006866455078], [39.67850875854492, -104.99995422363281], [39.67850875854492, -104.99993896484375], [39.67850112915039, -104.99947357177734], [39.67849349975586, -104.9990463256836], [39.67849349975586, -104.99900817871094], [39.67848587036133, -104.99864959716797], [39.67848587036133, -104.99851989746094], [39.67848205566406, -104.99839782714844], [39.6784782409668, -104.99809265136719], [39.67847442626953, -104.99771118164062], [39.678470611572266, -104.99767303466797], [39.678470611572266, -104.9975357055664], [39.678466796875, -104.99745178222656], [39.678466796875, -104.99742889404297], [39.67845916748047, -104.99715423583984], [39.678443908691406, -104.99658203125], [39.678436279296875, -104.9959945678711], [39.67841339111328, -104.99501037597656], [39.67841339111328, -104.9941635131836], [39.67841339111328, -104.99386596679688], [39.67841339111328, -104.99348449707031], [39.67841339111328, -104.99308776855469], [39.67841339111328, -104.99292755126953], [39.678409576416016, -104.9913558959961], [39.67842102050781, -104.99060821533203], [39.67842102050781, -104.9904556274414], [39.678428649902344, -104.99029541015625], [39.678436279296875, -104.98995971679688], [39.67837142944336, -104.9898452758789], [39.67838668823242, -104.98939514160156], [39.67839431762695, -104.98908996582031], [39.678401947021484, -104.98880004882812], [39.678409576416016, -104.98860931396484], [39.67842102050781, -104.98822784423828], [39.67843246459961, -104.98780822753906], [39.678436279296875, -104.98779296875], [39.678497314453125, -104.9876708984375], [39.67850112915039, -104.98750305175781], [39.678504943847656, -104.98739624023438], [39.67851638793945, -104.9870834350586], [39.67851638793945, -104.98699951171875], [39.67852020263672, -104.98694610595703], [39.678531646728516, -104.98658752441406], [39.67853546142578, -104.98635864257812], [39.67855453491211, -104.98580932617188], [39.67855453491211, -104.98575592041016], [39.67855453491211, -104.98551940917969], [39.678550720214844, -104.98521423339844], [39.67850875854492, -104.98499298095703], [39.67851257324219, -104.98462677001953], [39.67851638793945, -104.98432159423828], [39.67851638793945, -104.98404693603516], [39.67851638793945, -104.98346710205078], [39.67851638793945, -104.98335266113281], [39.67851257324219, -104.98298645019531], [39.67851257324219, -104.98287200927734], [39.67851257324219, -104.98277282714844], [39.67851638793945, -104.98226928710938], [39.67852020263672, -104.98196411132812], [39.67852020263672, -104.98167419433594], [39.678524017333984, -104.98079681396484], [39.678524017333984, -104.98070526123047], [39.67854309082031, -104.98058319091797], [39.67856216430664, -104.98048400878906], [39.67856216430664, -104.98040771484375], [39.678558349609375, -104.98018646240234], [39.67855453491211, -104.97991180419922], [39.678550720214844, -104.97933959960938], [39.67854690551758, -104.97901153564453], [39.67854309082031, -104.9787368774414], [39.678531646728516, -104.97813415527344], [39.67852783203125, -104.97750091552734], [39.67852783203125, -104.97692108154297], [39.67852020263672, -104.97633361816406], [39.67852020263672, -104.97575378417969], [39.67852020263672, -104.97517395019531], [39.67852020263672, -104.974609375], [39.67851638793945, -104.97401428222656], [39.67851257324219, -104.97386169433594], [39.67851257324219, -104.97357177734375], [39.67851257324219, -104.97344207763672], [39.67851257324219, -104.97333526611328], [39.67850875854492, -104.97310638427734], [39.67850875854492, -104.97296142578125], [39.678504943847656, -104.97286224365234], [39.678504943847656, -104.97270965576172], [39.67850112915039, -104.9722671508789], [39.678497314453125, -104.97168731689453], [39.678497314453125, -104.97154998779297], [39.67849349975586, -104.97109985351562], [39.67848587036133, -104.97048950195312], [39.67848205566406, -104.96992492675781], [39.67847442626953, -104.96949005126953], [39.67847442626953, -104.96931457519531], [39.67847442626953, -104.96919250488281], [39.67847442626953, -104.96918487548828], [39.67847442626953, -104.9688491821289], [39.67847442626953, -104.96875], [39.678470611572266, -104.96866607666016], [39.678470611572266, -104.9684066772461], [39.678470611572266, -104.96833801269531], [39.678470611572266, -104.96832275390625], [39.678470611572266, -104.96817779541016], [39.678470611572266, -104.96802520751953], [39.67847442626953, -104.96757507324219], [39.67847442626953, -104.96704864501953], [39.67847442626953, -104.96699523925781], [39.67843246459961, -104.96640014648438], [39.67843246459961, -104.96619415283203], [39.678428649902344, -104.96582794189453], [39.678428649902344, -104.96563720703125], [39.678428649902344, -104.96537780761719], [39.67842483520508, -104.96524047851562], [39.67842483520508, -104.96512603759766], [39.67842102050781, -104.9638442993164], [39.67842102050781, -104.96356201171875], [39.67842102050781, -104.96241760253906], [39.67841339111328, -104.96146392822266], [39.67841339111328, -104.96134948730469], [39.67839813232422, -104.96038818359375], [39.67839050292969, -104.96003723144531], [39.67842483520508, -104.95954895019531], [39.678436279296875, -104.95938110351562], [39.67828369140625, -104.95938110351562], [39.6771125793457, -104.95940399169922], [39.67673873901367, -104.95940399169922], [39.67662048339844, -104.95941162109375], [39.676509857177734, -104.95940399169922], [39.67607879638672, -104.95941162109375], [39.67545700073242, -104.95941162109375], [39.6749382019043, -104.95941925048828], [39.67484664916992, -104.95941925048828], [39.67475891113281, -104.95941925048828], [39.674076080322266, -104.95941925048828], [39.67354965209961, -104.95941162109375], [39.67340087890625, -104.95946502685547], [39.6733283996582, -104.95948791503906], [39.67318344116211, -104.9594955444336], [39.67313003540039, -104.95950317382812], [39.673091888427734, -104.95951843261719], [39.673057556152344, -104.95954132080078], [39.673030853271484, -104.95956420898438], [39.673030853271484, -104.95939636230469], [39.6729621887207, -104.95939636230469], [39.67277145385742, -104.95939636230469], [39.67275619506836, -104.95939636230469], [39.672637939453125, -104.95939636230469], [39.672515869140625, -104.95939636230469], [39.6723747253418, -104.95939636230469], [39.67220687866211, -104.95939636230469], [39.6719856262207, -104.95939636230469], [39.671669006347656, -104.95939636230469], [39.67164993286133, -104.95939636230469], [39.671539306640625, -104.95939636230469], [39.67152404785156, -104.95939636230469], [39.67129135131836, -104.95939636230469], [39.67122268676758, -104.95939636230469], [39.671138763427734, -104.95939636230469], [39.67053985595703, -104.95939636230469], [39.670162200927734, -104.95940399169922], [39.67001724243164, -104.95940399169922], [39.66999816894531, -104.95940399169922], [39.669410705566406, -104.95940399169922], [39.6692008972168, -104.95940399169922], [39.66895294189453, -104.95940399169922], [39.668888092041016, -104.95940399169922], [39.66872787475586, -104.95940399169922], [39.668460845947266, -104.95939636230469], [39.668033599853516, -104.95938873291016], [39.66767501831055, -104.95939636230469], [39.6676025390625, -104.95939636230469], [39.66749572753906, -104.95939636230469], [39.6668701171875, -104.95940399169922], [39.66660690307617, -104.95940399169922], [39.66650390625, -104.95940399169922], [39.66603088378906, -104.95941162109375], [39.665550231933594, -104.95941925048828], [39.66462326049805, -104.95943450927734], [39.664249420166016, -104.95943450927734], [39.66393280029297, -104.95943450927734], [39.663055419921875, -104.95944213867188], [39.66191482543945, -104.95945739746094], [39.661354064941406, -104.95945739746094], [39.66096496582031, -104.95945739746094], [39.66044616699219, -104.95945739746094], [39.66034698486328, -104.95946502685547], [39.66027069091797, -104.95945739746094], [39.659568786621094, -104.95946502685547], [39.657691955566406, -104.95945739746094], [39.6572380065918, -104.95945739746094], [39.65707015991211, -104.95945739746094], [39.65707015991211, -104.95934295654297], [39.65707015991211, -104.95846557617188], [39.65707015991211, -104.95752716064453], [39.657066345214844, -104.95580291748047], [39.657066345214844, -104.95423126220703], [39.65705490112305, -104.95330810546875], [39.65705490112305, -104.952392578125], [39.65705108642578, -104.95204162597656], [39.65630340576172, -104.95204162597656], [39.656314849853516, -104.95127868652344], [39.65631103515625, -104.95108795166016], [39.65630340576172, -104.95092010498047], [39.656280517578125, -104.95063018798828], [39.656246185302734, -104.95034790039062], [39.65620040893555, -104.95006561279297], [39.65611267089844, -104.94964599609375]],\n", " {"bubblingMouseEvents": true, "color": "#0c0786", "dashArray": null, "dashOffset": null, "fill": false, "fillColor": "#0c0786", "fillOpacity": 0.2, "fillRule": "evenodd", "lineCap": "round", "lineJoin": "round", "noClip": false, "opacity": 0.8, "smoothFactor": 1.0, "stroke": true, "weight": 10}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " poly_line_df733bcd1fb8227670616d46700c5f9c.bindTooltip(\n", + " poly_line_2e70f6692a414d677c4c5cb7fbc1eab4.bindTooltip(\n", " `<div>\n", - " 0.44915623716812586\n", + " 0.4152563162071193\n", " </div>`,\n", " {"sticky": true}\n", " );\n", " \n", " \n", - " var marker_081150ad295480aa655bdcf6e4b32c7e = L.marker(\n", - " [39.6677360534668, -105.08140563964844],\n", + " var marker_2cc7d3f16b77775e5a2f8b7df610acbd = L.marker(\n", + " [39.66568374633789, -105.08139038085938],\n", " {}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " var icon_c799154fc01266cf95307594b4eff5fc = L.AwesomeMarkers.icon(\n", + " var icon_ebb83974dbe53c517ce18464d105c54e = L.AwesomeMarkers.icon(\n", " {"extraClasses": "fa-rotate-0", "icon": "circle", "iconColor": "white", "markerColor": "green", "prefix": "fa"}\n", " );\n", - " marker_081150ad295480aa655bdcf6e4b32c7e.setIcon(icon_c799154fc01266cf95307594b4eff5fc);\n", + " marker_2cc7d3f16b77775e5a2f8b7df610acbd.setIcon(icon_ebb83974dbe53c517ce18464d105c54e);\n", " \n", " \n", - " marker_081150ad295480aa655bdcf6e4b32c7e.bindTooltip(\n", + " marker_2cc7d3f16b77775e5a2f8b7df610acbd.bindTooltip(\n", " `<div>\n", " Origin\n", " </div>`,\n", @@ -1671,19 +1661,19 @@ " );\n", " \n", " \n", - " var marker_69d9acadd480b806cc3f93a289cb5be8 = L.marker(\n", - " [39.653099060058594, -104.95413970947266],\n", + " var marker_424eea2cefd3e331181733968ab80402 = L.marker(\n", + " [39.65611267089844, -104.94964599609375],\n", " {}\n", - " ).addTo(map_629bb259d75ff180ceb711ebfa96c189);\n", + " ).addTo(map_f99e0025f25ec785f8c8aa60379b5e2f);\n", " \n", " \n", - " var icon_8b1af515d4a04c16b72319175fde789f = L.AwesomeMarkers.icon(\n", + " var icon_392e1084668d17fdeca7594ff18e8b7d = L.AwesomeMarkers.icon(\n", " {"extraClasses": "fa-rotate-0", "icon": "circle", "iconColor": "white", "markerColor": "red", "prefix": "fa"}\n", " );\n", - " marker_69d9acadd480b806cc3f93a289cb5be8.setIcon(icon_8b1af515d4a04c16b72319175fde789f);\n", + " marker_424eea2cefd3e331181733968ab80402.setIcon(icon_392e1084668d17fdeca7594ff18e8b7d);\n", " \n", " \n", - " marker_69d9acadd480b806cc3f93a289cb5be8.bindTooltip(\n", + " marker_424eea2cefd3e331181733968ab80402.bindTooltip(\n", " `<div>\n", " Destination\n", " </div>`,\n", @@ -1694,10 +1684,10 @@ "</html>\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" allowfullscreen webkitallowfullscreen mozallowfullscreen>" ], "text/plain": [ - "" + "" ] }, - "execution_count": 20, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -1721,7 +1711,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 22, "id": "fb7c4f93-7b70-44a2-b661-d17f7ae369c9", "metadata": {}, "outputs": [], @@ -1739,7 +1729,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 23, "id": "0d625a58-bdee-41af-8f37-4ffa0a0ff4a7", "metadata": {}, "outputs": [ @@ -1775,26 +1765,26 @@ " \n", " 0\n", " least_time\n", - " 10.897049\n", - " 9.152879\n", - " 0.320131\n", - " 10.551553\n", + " 10.197181\n", + " 8.967677\n", + " 0.307734\n", + " 10.162102\n", " \n", " \n", " 1\n", " least_cost\n", - " 13.158831\n", - " 6.470756\n", - " 0.280432\n", - " 9.422056\n", + " 12.330560\n", + " 6.548479\n", + " 0.253667\n", + " 9.119339\n", " \n", " \n", " 2\n", " least_energy\n", - " 12.774715\n", - " 6.733433\n", - " 0.266505\n", - " 9.425568\n", + " 12.330560\n", + " 6.548479\n", + " 0.253667\n", + " 9.119339\n", " \n", " \n", "\n", @@ -1802,12 +1792,12 @@ ], "text/plain": [ " scenario time_minutes distance_miles energy_gge cost_dollars\n", - "0 least_time 10.897049 9.152879 0.320131 10.551553\n", - "1 least_cost 13.158831 6.470756 0.280432 9.422056\n", - "2 least_energy 12.774715 6.733433 0.266505 9.425568" + "0 least_time 10.197181 8.967677 0.307734 10.162102\n", + "1 least_cost 12.330560 6.548479 0.253667 9.119339\n", + "2 least_energy 12.330560 6.548479 0.253667 9.119339" ] }, - "execution_count": 22, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -1827,7 +1817,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 24, "id": "7cae7446-0b14-40b6-9bdc-d4c37d20f8bf", "metadata": {}, "outputs": [ @@ -1837,13 +1827,13 @@ "Text(0.5, 1.0, 'Cost vs Time by Scenario')" ] }, - "execution_count": 23, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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fTs6d+6MX375BeHh4di5c6cq6yMiIiJSOaUCkBACxcXFAIDDhw+jd+/eAABHR0fcu3dPddURERER1QClAlC7du3wxRdfYNOmTYiOjpYPkE5OToa1tbVKCyQiIiJSNaUC0PLlyxEfH4+pU6dizpw5cHd3BwDs2LEDvr6+Ki2QiIiISNWq/SgMmUyGhw8fIjo6Gubm5grzvv76a2hra6usOCIiIqKaUO0jQNra2ggICEB2dnaZefr6+tDR0VFJYUREREQ1RalTYN7e3rh586aqayEiIiKqFUoFoC+//BIfffQR9u3bh4yMDOTk5Ci8iIiIiNRZlZ8F9jwtrf/lJolEIv93IQQkEglkMplqqqsjfBYYERFR/VMjzwJ73pEjR5QqjIiIiEgdKBWAunTpouo6iIiIiGqNUgGo1NOnT5GamlrmAag+Pj4vVRQRERFRTVIqAN29exdjx47F77//Xu78+j4GiIiIiBo2pa4CCwkJwcOHD/HXX39BKpXi4MGD2LhxI5o1a4a9e/equkYiIiIilVLqCNCff/6JPXv24LXXXoOWlhacnZ3RvXt3mJiYYOHChfJngxERERGpI6WOAOXm5sLKygoAYG5ujrt37wIouUFifHy86qojIiIiqgFKBSBPT09cvXoVANCqVSt8//33SE9Px5o1a2Bra6vSAomIiIhUTalTYCEhIcjIyAAAzJ8/HwEBAdi8eTN0dXURHh6uyvqIiIiIVE6pO0H/29OnT/H333/DyckJTZo0UUVddYp3giYiIqp/avxO0P9mYGCANm3aqGJVRERERDWuygHoww8/rPJKly5dqlQxRERERLWhygHo3LlzVer3/MNRiYiIiNRRlQMQH4BKREREDYVSl8ETERER1WdVPgI0cODAKq80IiJCqWKIiIiIakOVA5CpqWlN1kFERERUa6ocgDZs2FCTdRARERHVmpe6D9Ddu3dx9epVSCQSeHh4wNLSUlV1EREREdUYpR+GOm7cONja2qJz587o1KkT7Ozs8J///AdPnz5VdY1EREREKqVUAPrwww8RHR2N3377DY8ePcKjR4+wZ88eREdHY8aMGVVez7Fjx9CvXz/Y2dlBIpFg9+7dCvOFEAgNDYWdnR2kUin8/Pxw+fLlF653586daNGiBfT09NCiRQvs2rWrurtIREREDZhSAWjnzp1Yv349evXqBRMTE5iY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8vsDEREREakrpQLQW2+9heDgYNy5c0felp6ejunTp6Nr164qK46IiIioJigVgFatWoXHjx/DxcUFbm5ucHd3h6urKx4/foyVK1equkYiIiIilVLqKjBHR0fEx8cjKioKf//9N4QQaNGiBbp166bq+oiIiIhUTqU3QmwoOAiaiIio/qmxQdB//vknWrRogZycnDLzsrOz8corryAmJqZ61RIRERHVsmoFoOXLl2P8+PHlpipTU1NMnDgRS5cuVVlxRERERDWhWgHo/Pnz6NmzZ4Xze/TogbNnz750UUREREQ1qVoB6J9//qn0QaeNGjXC3bt3X7ooIiIioppUrQBkb2+PixcvVjj/woULsLW1femiiIiIiGpStQJQ7969MW/ePDx79qzMvLy8PMyfPx99+/ZVWXFERERENaFal8H/888/aNOmDbS1tTF16lR4enpCIpEgMTER3377LWQyGeLj42FtbV2TNdc4XgZPRERU/1Tn97taN0K0trbGyZMnMWnSJMyePRul2UkikSAgIACrV6+u9+GHiIiIGr5q3wna2dkZBw4cwMOHD5GUlAQhBJo1awYzM7OaqI+IiIhI5ZR6FAYAmJmZ4bXXXlNlLURERES1QqmHoRIRERHVZwxAREREpHHUPgA9fvwYISEhcHZ2hlQqha+vL06fPl3pMps3b0bLli1hYGAAW1tbjB07Fvfv36+liomIiEjdqX0Aeu+99xAVFYVNmzbh4sWL6NGjB7p164b09PRy+x8/fhxBQUH4z3/+g8uXL2P79u04ffo03nvvvVqunIiIiNSVWgegvLw87Ny5E4sXL0bnzp3h7u6O0NBQuLq64rvvvit3mb/++gsuLi6YNm0aXF1d8eabb2LixIk4c+ZMLVdPRERE6kqtA1BRURFkMhn09fUV2qVSKY4fP17uMr6+vrh9+zYOHDgAIQT++ecf7NixA3369KlwO/n5+cjJyVF4ERERUcOl1gHI2NgYHTp0wOeff447d+5AJpPh559/RlxcHDIyMspdxtfXF5s3b8bQoUOhq6sLGxsbNG7cGCtXrqxwOwsXLoSpqan85ejoWFO7RERERGpArQMQAGzatAlCCNjb20NPTw8rVqzAiBEjoK2tXW7/K1euYNq0aZg3bx7Onj2LgwcPIjk5Ge+//36F25g9ezays7Plr7S0tJraHSIiIlID1XoWWF3Kzc1FTk4ObG1tMXToUDx58gT79+8v02/UqFF49uwZtm/fLm87fvw4OnXqhDt37lTpafV8FhgREVH9U53fb7U/AlTK0NAQtra2ePjwIQ4dOoTAwMBy+z19+hRaWoq7VXq0qJ5kPSIiIqphah+ADh06JD+NFRUVBX9/f3h6emLs2LEASk5fBQUFyfv369cPERER+O6773Dz5k2cOHEC06ZNw+uvvw47O7u62g0iIiJSI0o/C6y2ZGdnY/bs2bh9+zbMzc3xzjvv4Msvv4SOjg4AICMjA6mpqfL+Y8aMwePHj7Fq1SrMmDEDjRs3xltvvYVFixbV1S4QERGRmqk3Y4BqE8cAERER1T8NcgwQERERkaowABEREZHGYQAiIiIijcMARERERBqHAYiIiIg0DgMQERERaRwGICIiItI4DEBERESkcRiAiIiISOMwABEREZHGYQAiIiIijcMARERERBqHAYiIiIg0DgMQERERaRwGICIiItI4DEBERESkcRiAiIiISOMwABEREZHGYQAiIiIijcMARERERBqHAYiIiIg0DgMQERERaRwGICIiItI4DEBERESkcRiAiIiISOMwABEREZHGYQAiIiIijcMARERERBqHAYiIiIg0DgMQERERaRwGICIiItI4DEBERESkcRiAiIiISOMwABEREZHGYQAiIiIijcMARERERBqHAYiIiIg0DgMQERERaRwGICIiItI4DEBERESkcRiAiIiISOMwABEREZHGYQAiIiIijcMARERERBqHAYiIiIg0DgMQERERaRwGICIiItI4DEBERESkcRiAiIiISOOofQB6/PgxQkJC4OzsDKlUCl9fX5w+fbrSZfLz8zFnzhw4OztDT08Pbm5u+PHHH2upYiIiIlJ3jeq6gBd57733cOnSJWzatAl2dnb4+eef0a1bN1y5cgX29vblLjNkyBD8888/WL9+Pdzd3ZGVlYWioqJarpyIiIjUlUQIIeq6iIrk5eXB2NgYe/bsQZ8+feTtrVq1Qt++ffHFF1+UWebgwYMYNmwYbt68CXNzc6W2m5OTA1NTU2RnZ8PExETp+omIiKj2VOf3W61PgRUVFUEmk0FfX1+hXSqV4vjx4+Uus3fvXrRr1w6LFy+Gvb09PDw88NFHHyEvL6/C7eTn5yMnJ0fhRURERA2XWgcgY2NjdOjQAZ9//jnu3LkDmUyG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cePGAIAHDx4AqPi9IaKKMQARkdpo06YNtm3bBisrqypf2u3m5gYTExNcuXIFHh4eNVxhWZaWlgqDomUyGS5dugR/f395m66uLmQymcJybdq0weXLl+Hu7l7huhs1aoRu3bqhW7dumD9/Pho3bow///wTAwcOBABcunQJDg4O8hBIRFXHQdBEpDZGjhyJJk2aIDAwEDExMUhOTkZ0dDSCg4Nx+/btcpfR0tJCt27dcPz48VqutsRbb72F/fv3Y//+/fj7778xefLkMjdSdHFxwbFjx5Ceno579+4BAGbNmoXY2FhMmTIFCQkJuH79Ovbu3YsPPvgAALBv3z6sWLECCQkJuHXrFn766ScUFxfD09NTvt6YmBj06NGj1vaVqCFhACIitWFgYIBjx47ByckJAwcOhJeXF8aNG4e8vLxKjwhNmDABW7durfRUVk0ZN24cRo8ejaCgIHTp0gWurq4KR38A4LPPPkNKSgrc3Nzkp6t8fHwQHR2N69evo1OnTmjdujXmzp0LW1tbAEDjxo0RERGBt956C15eXlizZg22bNmCV155BUDJuKhdu3Zh/PjxtbvDRA0E7wRNRPWeEAJvvPEGQkJCMHz48Loup1Z8++232LNnDyIjI+u6FKJ6iUeAiKjek0gkWLt2LYqKiuq6lFqjo6ODlStX1nUZRPUWjwARERGRxuERICIiItI4DEBERESkcRiAiIiISOMwABEREZHGYQAiIiIijcMARERERBqHAYiIiIg0DgMQERERaRwGICIiItI4/w8fk8SUi4sXxgAAAABJRU5ErkJggg==", + "image/png": "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/ftCKpWK3377rQI/iepR3u9KZb6/OQZI3Tp0ABwdiwY8lzYOSCIpWt6hQ9XXRkRElfb++++jV69eiIqKQnR0NPbv34/Fixfjv//9LzIyMuDo6AhPT89S1z179iwSExOxefNmeZsQAoWFhUhKSkLDhg0BQOEl3hKJBLa2tsjIyJC37dixA8uXL0diYiKePn2KgoKCEg/+c3FxgbW1dZnHkZCQgFq1aqF169byNisrK3h5eSEhIaFyP5QaiJfA1E1XF1ixoujfX354U/H88uUcAE1EVIMYGhqia9eumDNnDk6ePIkRI0Zg7ty5r3yKdWFhIcaMGYO4uDj59M8//+DatWtwd3eX93v5FQ8SiQSFhYUAgL///hsffPABevTogT179uDcuXOYNWsW8vLyFNYxNjYutxZRxosghBBa8UBKBqCq0L8/sGMH4OCg2O7oWNTev3/11EVERCrRqFEjZGdno0mTJrh9+zauXr1aar8WLVrg0qVL8PDwKDFV9O3mJ06cgIuLC2bNmoVWrVqhfv36uHnzplI1FxQUICYmRt724MEDXL16VX4m6k3GS2BVpX//olvd+SRoIqIa68GDBxg4cCBGjhyJJk2awNTUFGfOnMHixYsREBAAX19fdOzYEe+//z6WLl0KDw8PXL58GRKJBN27d8eMGTPQpk0bTJgwAaNGjYKxsTESEhIQERGBVatWVagGDw8PpKSkYOvWrXj77bexd+9ehIeHV/pY6tevj4CAAIwaNQo//PADTE1N8fnnn8PBwQEBAQGV3l5NwwBUlXR1AT+/6q6CiIiUZGJigtatW2PZsmW4fv068vPz4eTkhFGjRuGLL74AAOzcuROffvopBg8ejOzsbHh4eODrr78GUDS2JzIyErNmzUKHDh0ghIC7uzsCAwMrXENAQACmTJmCiRMnIjc3F7169cLs2bMxb968Sh/PunXrMHnyZPTu3Rt5eXno2LEj9u3b91pvWa8p+Db4UvBt8EREVav4bfClveGb6EXl/a7wbfBERERE5WAAIiIiIq3DAERERERahwGIiIiItA4DEBEREWkdBiAiIiLSOgxAREREpHUYgIiIiEjrMAARERGR1mEAIiIieg1+fn4ICQmp7jKokhiAiIiIaogRI0agX79+1V2GnKurK5YvX17dZSiFL0MlIqI3ikwGREUBaWmAnR3QoUPRu6iJXsQz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grCwMNy7d08ekFxdXXH+/HlcuXIF9+/fR35+frk11a1bF1KpVD5AOTMzU2XHO2HCBDx8+BCDBw/GqVOncOPGDRw8eBAjR45US+BSNQYgIiKq+XR1gRUriv795RBUPL98udqfB7Ru3ToEBQVh2rRp8PLyQt++fRETEwMnJycAwOzZs9GiRQv4+/vDz88Ptra2Crejm5mZ4dixY+jZsyc8PT3xr3/9C0uWLEGPHj0AAKNGjYKXlxdatWoFa2trnDhxotx6atWqhZUrV+KHH36Avb09AgICVHas9vb2OHHiBGQyGfz9/fHWW29h8uTJMDc3V3hHp6biu8BKwXeBERFVLZW9CywsDJg8WXFAtJNTUfjp3/+166Tqp6p3gdW8i3ZERERl6d8fCAjgk6DplTT/HBUREVFl6OoW3eo+eHDRP9/g8BMaGgoTE5NSp+LLZlQ6ngEiIiKqocaOHVvmk5elUmkVV1OzMAARERHVUJaWlrC0tKzuMmokXgIjIiIircMAREREGqP4KcNEZVHVzeu8BEZERNVOX18fOjo6uHPnDqytraGvry9/9QJRMSEE7t27V+I1HcpgACIiomqno6MDNzc3pKWl4c6dO9VdDmkwiUQCR0fHEu9bqywGICIi0gj6+vpwdnZGQUFBjXiVAlUPPT291w4/AAMQERFpkOJLG697eYPoVTgImoiIiLQOAxARERFpHQYgIiIi0joMQERERKR1GICIiIhI6zAAERERkdZhACIiIiKtwwBEREREWocBiIiIiLQOAxARERFpHQYgIiIi0joMQERERKR1GICIiIhI6zAAERERkdZhACIiIiKtwwBEREREWocBiIiIiLQOAxARERFpHQYgIiIi0joMQERERKR1GICIiIhI6zAAERERkdZhACIiIiKtwwBEREREWocBiIiIiLQOAxARERFpHQYgIiIi0joMQERERKR1GICIiIhI6zAAERERkdZhACIiIiKto/EB6MmTJwgJCYGLiwukUil8fHxw+vTpctfZvHkzmjZtCiMjI9jZ2SE4OBgPHjyoooqJiIhI02l8APr4448RERGBjRs34sKFC+jWrRu6dOmC1NTUUvsfP34cQUFB+Oijj3Dp0iVs374dp0+fxscff1zFlRMREZGm0ugAlJOTg507d2Lx4sXo2LEjPDw8MG/ePLi5ueH7778vdZ2///4brq6u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dYW7uzs8PDzg5uaGJ0+eYNWqVaqukYiIiEillLoLzMnJCbGxsYiIiMDly5chhECjRo3QpUsXVddHREREpHIqfRDim4KDoImIiGoetQ2CPnz4MBo1aoSsrKwSyzIzM9G4cWNERUVVrloiIiKiKlapALR8+XKMGjWq1FRlbm6OMWPGYOnSpSorjoiIiEgdKhWA/vnnH3Tv3r3M5d26dcPZs2dfuygiIiIidapUALp79265LzqtVasW7t2799pFEREREalTpQKQg4MDLly4UOby8+fPw87O7rWLIiIiIlKnSgWgnj17Ys6cOXj+/HmJZTk5OZg7dy569+6tsuKIiIiI1KFSt8HfvXsXLVq0gK6uLiZOnAgvLy9IJBIkJCTgu+++g0wmQ2xsLGxsbNRZs9rxNngiIqKapzLf35V6EKKNjQ1OnjyJcePGYebMmSjOThKJBP7+/li9enWNDz9ERET05qv0k6BdXFywb98+PHr0CImJiRBCoH79+rCwsFBHfUREREQqp9SrMADAwsICb7/9tiprISIiIqoSSr0MlYiIiKgmYwAiIiIircMARERERFqHAYiIiIi0DgMQERERaR0GICIiItI6DEBERESkdRiAiIiISOswABEREZHWYQAiIiIircMARERERFqHAYiIiIi0DgMQERERaR0GICIiItI6DEBERESkdRiAiIiISOswABEREZHWYQAiIiIircMARERERFqHAYiIiIi0DgMQERERaR0GICIiItI6DEBERESkdRiAiIiISOtofAB68uQJQkJC4OLiAqlUCh8fH5w+fbpC6544cQK1atVCs2bN1FskERER1SgaH4A+/vhjREREYOPGjbhw4QK6deuGLl26IDU1tdz1MjMzERQUhM6dO1dRpURERFRTSIQQorqLKEtOTg5MTU2xa9cu9OrVS97erFkz9O7dGwsWLChz3Q8++AD169eHrq4ufv/9d8TFxVV4v1lZWTA3N0dmZibMzMxe5xCIiIioilTm+1ujzwAVFBRAJpPB0NBQoV0qleL48eNlrrdu3Tpcv34dc+fOrdB+cnNzkZWVpTARERHRm0ujA5CpqSnatm2Lr776Cnfu3IFMJsOmTZsQExODtLS0Ute5du0aPv/8c2zevBm1atWq0H4WLlwIc3Nz+eTk5KTKwyAiIiINo9EBCAA2btwIIQQcHBxgYGCAlStXYsiQIdDV1S3RVyaTYciQIZg/fz48PT0rvI+ZM2ciMzNTPt26dUuVh0BEREQaRqPHAL0oOzsbWVlZsLOzQ2BgIJ4+fYq9e/cq9Hn8+DEsLCwUwlFhYSGEENDV1cXBgwfx7rvvvnJfHANERERU81Tm+7ti14g0gLGxMYyNjfHo0SMcOHAAixcvLtHHzMwMFy5cUGhbvXo1Dh8+jB07dsDNza2qyiUiIiINpvEB6MCBAxBCwMvLC4mJifjss8/g5eWF4OBgAEWXr1JTU/HLL79AR0cHb731lsL6devWhaGhYYl2IiIi0l4aPwYoMzMTEyZMQIMGDRAUFIT27dvj4MGD0NPTAwCkpaUhJSWlmqskIiKimqTGjAGqShwDREREVPO8Mc8BIiIiIlIHBiAiIiLSOgxAREREpHUYgIiIiEjrMAARERGR1mEAIiIiIq3DAERERERahwGIiIiItA4DEBEREWkdBiAiIiLSOgxAREREpHUYgIiIiEjrMAARERGR1mEAIiIiIq3DAERERERahwGIiIiItA4DEBEREWkdBiAiIiLSOgxAREREpHUYgIiIiEjrMAARERGR1mEAIiIiIq3DAERERERahwGIiIiItA4DEBEREWkdBiAiIiLSOgxAREREpHUYgIiIiEjrMAARERGR1mEAIiIiIq3DAERERERahwGIiIiItA4DEBEREWkdBiAiIiLSOgxAREREpHUYgIiIiEjrMAARERGR1mEAIiIiIq3DAERERERahwGIiIiItA4DEBEREWkdBiAiIiLSOgxAREREpHUYgIiIiEjrMAARERGR1mEAIiIiIq3DAERERERahwGIiIiItA4DEBEREWkdBiAiIiLSOgxAREREpHUYgIiIiEjrMAARERGR1mEAIiIiIq2j8QHoyZMnCAkJgYuLC6RSKXx8fHD69Oky+4eFhaFr166wtraGmZkZ2rZtiwMHDlRhxURERKTpND4Affzxx4iIiMDGjRtx4cIFdOvWDV26dEFqamqp/Y8dO4auXbti3759OHv2LDp16oQ+ffrg3LlzVVw5ERERaSqJEEJUdxFlycnJgampKXbt2oVevXrJ25s1a4bevXtjwYIFFdpO48aNERgYiDlz5lSof1ZWFszNzZGZmQkzMzOlaiciIqKqVZnv71pVVJNSCgoKIJPJYGhoqNAulUpx/PjxCm2jsLAQT548gaWlZZl9cnNzkZubK5/PyspSrmAiIiKqETT6EpipqSnatm2Lr776Cnfu3IFMJsOmTZsQExODtLS0Cm1jyZIlyM7OxqBBg8rss3DhQpibm8snJycnVR0CERERaSCNDkAAsHHjRggh4ODgAAMDA6xcuRJDhgyBrq7uK9fdsmUL5s2bh23btqFu3bpl9ps5cyYyMzPl061bt1R5CERERKRhNPoSGAC4u7sjMjIS2dnZyMrKgp2dHQIDA+Hm5lbuetu2bcNHH32E7du3o0uXLuX2NTAwgIGBgSrLJiIiIg2m8WeAihkbG8POzg6PHj3CgQMHEBAQUGbfLVu2YMSIEfj1118VBk8TERERATXgDNCBAwcghICXlxcSExPx2WefwcvLC8HBwQCKLl+lpqbil19+AVAUfoKCgrBixQq0adMG6enpAIoGTpubm1fbcRAREZHm0PgzQJmZmZgwYQIaNGiAoKAgtG/fHgcPHoSenh4AIC0tDSkpKfL+P/zwAwoKCjBhwgTY2dnJp8mTJ1fXIRAREZGG0ejnAFUXPgeIiIio5qnM97fGnwEiIiIiUjUGICIiItI6DEBERESkdRiAiIiISOswABEREZHWYQAiIiIircMARERERFqHAYiIiIi0DgMQERERaR0GICIiItI6DEBERESkdRiAiIiISOswABEREZHWYQAiIiIirVOrugsgIiIi7ZGXL8PqvVG4fjcN7jZ2GN+rA/T1dKu8DgYgIiIiqhLT14VhafxkyExuFzWkA5+ecMTURiuwOLh/ldbCS2BERESkdtPXheGbmwMgM76t0C4zTsU3Nwdg+rqwKq2HAYiIiIjUKi9fhqXxkwEIQPLSQokAACyND0FevqzKamIAIiIiIrVavTeq6LLXy+GnmERAZnILq/dGVVlNDEBERESkVtfvpqm0nyowABEREZFaudvYqbSfKjAAERERkVqN79UBuk8dAVHGNTAhge5TJ4zv1aHKamIAIiIiIrXS19PF1EYrimZeDkH/Pz+10fIqfR4QAxARERGp3eLg/vjMZQd0sx0U2nWzHfGZy44qfw6QRAghqnSPNUBWVhbMzc2RmZkJMzOz6i6HiIjojaHOJ0FX5vubT4ImIiKiKqOvp4uQfn7VXQYvgREREZH2YQAiIiIircMARERERFqHAYiIiIi0DgMQERERaR0GICIiItI6DEBERESk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", "text/plain": [ "
" ] @@ -1875,7 +1865,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 25, "id": "f1ff1f2e-ad6a-4881-88aa-37227a6d30fb", "metadata": {}, "outputs": [ @@ -1885,13 +1875,13 @@ "Text(0.5, 1.0, 'Cost vs Energy by Scenario')" ] }, - "execution_count": 24, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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ERFpHAYgIiIi0jgMQERERKRxGICIiIhI4zAAERERkcZhACIiIiKNwwBEREREGocBiIiIiDQOAxARERFpHAYgIiIi0jgMQERERKRxGICIiIhI4zAAERERkcZhACIiIiKNwwBEREREGocBiIiIiDQOAxARERFpHAYgIiIi0jgMQERERKRxGICIiIhI4zAAERERkcZhACIiIiKNwwBEREREGocBiIiIiDQOAxARERFpHAYgIiIi0jgMQERERKRxGICIiIhI4zAAERERkcZhACIiIiKNwwBEREREGocBiIiIiDQOAxARERFpHAYgIiIi0jgMQERERKRxGICIiIhI4zAAERERkcZhACIiIiKNwwBEREREGocBiIiIiDQOAxARERFpHAYgIiIi0jgMQERERKRxGICIiIhI46g9AG3YsAFOTk7Q19eHu7s74uLiKuwbHR2Nfv36oXHjxjA1NUW3bt1w5MgRhT69evWCRCIpc3vzzTdreleIiIionlBrAIqKikJoaCjCwsKQnJwMLy8vDBgwAOnp6eX2j42NRb9+/XDo0CEkJSWhd+/eGDx4MJKTk+V9oqOjkZmZKb9dvnwZ2traGD58eG3tFhEREdVxEiGEUNeTe3p6onPnzti4caO8rU2bNvD398fSpUuVGqNdu3YICAjAggULyt0eERGBBQsWIDMzE0ZGRkqNmZeXBzMzM+Tm5sLU1FSpxxAREZF6qfL9rbYZoMLCQiQlJcHHx0eh3cfHB/Hx8UqNIZPJ8PjxYzRq1KjCPtu2bcM777xTafgpKChAXl6ewo2IiIheXWoLQA8ePIBUKoWVlZVCu5WVFbKyspQaY9WqVcjPz8eIESPK3X7mzBlcvnwZ77//fqXjLF26FGZmZvKbnZ2dcjtBRERE9ZLaF0FLJBKF+0KIMm3l2bNnD8LDwxEVFYUmTZqU22fbtm1o3749unTpUulYc+bMQW5urvx2+/Zt5XeAiIiI6p0G6npiS0tLaGtrl5ntyc7OLjMr9LyoqCi89957+Pbbb9G3b99y+zx58gR79+7FokWLXliLnp4e9PT0lC+eiIiI6jW1zQDp6urC3d0dMTExCu0xMTHo3r17hY/bs2cPxowZg927d1d6avs333yDgoICjBo1qtpqJiIioleD2maAAGDmzJkICgqCh4cHunXrhi1btiA9PR2TJk0CUHJoKiMjAzt3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", + "image/png": "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c3JyYGZmhuzsbJiamqqxRURERKQp6vx+a2wGKD8/H4mJiejVq5dSe69evRAfH1+uMeRyOR49egRzc3NFW15eHvT19ZX6GRgY4MSJE6WOk5eXh5ycHKUHERERvbo0FoDu3buHoqIiWFtbK7VbW1sjIyOjXGOsWLECubm5GDZsmKLN19cXK1euxPXr1yGXyxEbG4sffvgB6enppY6zaNEimJmZKR4ODg4V2ygiIiKqFTR+ELREIlFaFkKotJUkMjIS4eHhiIqKgpWVlaJ99erVaNasGZo3bw6pVIqpU6di7Nix0NXVLXWsWbNmITs7W/G4fft2xTeIiIiIajyNBaD69etDV1dXZbYnMzNTZVboeVFRUXj77bfx7bffomfPnkrrLC0t8f333yM3Nxe3bt3ClStXYGxsjEaNGpU6nkwmg6mpqdKDiIiIXl0aC0BSqRQeHh6IjY1Vao+NjUWnTp1KfV5kZCTGjBmDnTt3ol+/fqX209fXR4MGDVBYWIg9e/bAz8+v0monIiKi2q2OJl98xowZCAgIgKenJzp27IhNmzYhNTUVkyZNAlC8ayotLQ3bt28HUBx+AgMDsXr1anTo0EExe2RgYAAzMzMAwKlTp5CWloY2bdogLS0N4eHhkMvl+OCDDzSzkURERFTjaDQADR8+HFlZWViwYAHS09PRqlUrxMTEwNHREQCQnp6udE2gjRs3orCwEMHBwUqnuQcFBWHr1q0AgKdPn2LOnDn466+/YGxsjL59+2LHjh2oW7dudW4aERER1WAavQ5QTcXrABEREdU+teI6QERERESawgBEREREWocBiIiIiLQOAxARERFpHQYgIiIi0joMQERERKR1GICIiIhI6zAAERERkdZR60rQV69eRWRkJOLi4nDz5k08fvwYlpaWaNu2LXx9ffHmm29CJpNVVa1ERERElaJcV4JOSkrCBx98gLi4OHTq1Ant27dHgwYNYGBggPv37+PSpUuIi4tDTk4OPvjgA4SGhtbqIMQrQRMREdU+6vx+l2sGyN/fH++//z6ioqJgbm5ear+EhASsWrUKK1aswOzZs9WrmoiIiKialGsGKD8/H1KptNyDqtu/puEMEBERUe1T6fcCKy3MPH36VK3+RERERDWB2meByeVy/O9//0ODBg1gbGyMv/76CwAwd+5cbN68udILJCIiIqpsagegTz75BFu3bsXSpUuVZnrc3Nzw5ZdfVmpxRERERFVB7QC0fft2bNq0CaNGjYKurq6i3d3dHVeuXKnU4oiIiIiqgtoBKC0tDU2bNlVpl8vlKCgoqJSiiIiIiKqS2gGoZcuWiIuLU2n/7rvv0LZt20opioiIiKgqqXUlaACYP38+AgICkJaWBrlcjujoaFy9ehXbt2/H/v37q6JGIiIiokql9gzQgAEDEBUVhZiYGEgkEsybNw/Jycn48ccf4ePjUxU1EhEREVWqcl0IUdvwQohERES1T6VfCJGIiIjoVaL2MUD16tWDRCJRaZdIJNDX10fTpk0xZswYjB07tlIKJCIiIqpsagegefPm4dNPP0WfPn3Qvn17CCFw5swZHDhwAMHBwUhJScHkyZNRWFiI8ePHV0XNRERERC9F7QB04sQJfPLJJ5g0aZJS+8aNG3Ho0CHs2bMH7u7u+OyzzxiAiIiIqEZS+xiggwcPomfPnirtPXr0wMGDBwEAffv2VdwjjIiIiKimUTsAmZub48cff1Rp//HHH2Fubg4AyM3NhYmJyctXR0RERFQF1N4FNnfuXEyePBlHjhxB+/btIZFIcPr0acTExGDDhg0AgNjYWHh7e1d6sURERESVoULXATp58iQ+//xzXL16FUIING/eHNOmTUOnTp2qosZqx+sAERER1T7q/H7zQoglYAAiIiKqfdT5/VZ7F1hOTk6J7RKJBDKZDFKpVN0hiYiIiKqV2gGobt26JV4I8Rl7e3uMGTMG8+fPh44OLzRNRERENY/aAWjr1q0ICwvDmDFjlC6EuG3bNsyZMwf//PMPli9fDplMhtmzZ1dFzUREREQvRe0AtG3bNqxYsQLDhg1TtA0cOBBubm7YuHEjfvnlFzRs2BCffvopAxARERHVSGrvo0pISEDbtm1V2tu2bYuEhAQAwOuvv47U1NSXr46IiIioCqgdgOzt7bF582aV9s2bN8PBwQEAkJWVhXr16r18dURERERVQO1dYMuXL8fQoUPx888/47XXXoNEIsGZM2dw5coV7N69GwBw5swZDB8+vNKLJSIiIqoMFboO0K1bt7BhwwalCyFOnDgRTk5OVVBi9eN1gIiIiGofXgjxJTEAERER1T7q/H6X6xggdQ9oTktLU6s/ERERUXUqVwB67bXXMH78eJw+fbrUPtnZ2fjiiy/QqlUrREdHV1qBRERERJWtXAdBJycnY+HChejduzf09PTg6ekJOzs76Ovr48GDB7h8+TL++OMPeHp6YtmyZejTp09V101ERERUYWodA/T06VPExMQgLi4ON2/exJMnT1C/fn20bdsWvr6+aNWqVVXWWm14DBAREVHtw4OgXxIDEBERUe1T6QdBExEREb1KGICIiIhI6zAAERERkdZhACIiIiKto3YAys3NrYo6iIiIiKqN2gHI2toa48aNw4kTJ6qiHiIiIqIqp3YAioyMRHZ2Nnr06AFnZ2csXrwYd+/erYraiIiIiKqE2gFowIAB2LNnD+7evYvJkycjMjISjo6O6N+/P6Kjo1FYWKjWeOvWrUOjRo2gr68PDw8PxMXFldo3OjoaPj4+sLS0hKmpKTp27IiDBw+q9IuIiICLiwsMDAzg4OCA6dOn4+nTp+puKhEREb2iKnwQtIWFBaZPn44LFy5g5cqVOHz4MIYMGQI7OzvMmzcPjx8/fuEYUVFRCA0NRVhYGJKSktClSxf06dOn1JuvHj9+HD4+PoiJiUFiYiK6d++OAQMGICkpSdHnm2++wUcffYT58+cjOTkZmzdvRlRUFGbNmlXRTSUiIqJXTIWvBJ2RkYHt27djy5YtSE1NxaBBg/D222/j7t27WLx4MWxtbXHo0KEyx/Dy8kK7du2wfv16RZurqyv8/f2xaNGictXRsmVLDB8+HPPmzQMATJ06FcnJyfjll18UfWbOnInTp0+XObv0X7wSNBERUe2jzu93uW6G+l/R0dHYsmULDh48iBYtWiA4OBijR49G3bp1FX3atGmDtm3bljlOfn4+EhMT8dFHHym19+rVC/Hx8eWqRS6X49GjRzA3N1e0vf766/j6669x+vRptG/fHn/99RdiYmIQFBRU6jh5eXnIy8tTLOfk5JTr9YmIiKh2UjsAjR07FiNGjMDJkyfx2muvldincePGCAsLK3Oce/fuoaioCNbW1krt1tbWyMjIKFctK1asQG5uLoYNG6ZoGzFiBP755x+8/vrrEEKgsLAQkydPVgla/7Vo0SJ8/PHH5XpNIiIiqv3UDkDp6ekwNDQss4+BgQHmz59frvEkEonSshBCpa0kkZGRCA8Pxw8//AArKytF+9GjR/Hpp59i3bp18PLywo0bNxASEgJbW1vMnTu3xLFmzZqFGTNmKJZzcnLg4OBQrvqJiIio9lE7ABUWFpa4i0gikUAmk0EqlZZrnPr160NXV1dlticzM1NlVuh5UVFRePvtt/Hdd9+hZ8+eSuvmzp2LgIAAvPPOOwAANzc35ObmYsKECQgLC4OOjupx3zKZDDKZrFx1ExERUe2n9llgdevWRb169VQedevWhYGBARwdHTF//nzI5fIyx5FKpfDw8EBsbKxSe2xsLDp16lTq8yIjIzFmzBjs3LkT/fr1U1n/+PFjlZCjq6sLIQQqeLw3ERERvWLUngHaunUrwsLCMGbMGLRv3x5CCJw5cwbbtm3DnDlz8M8//2D58uWQyWSYPXt2mWPNmDEDAQEB8PT0RMeOHbFp0yakpqZi0qRJAIp3TaWlpWH79u0AisNPYGAgVq9ejQ4dOihmjwwMDGBmZgag+DpFK1euRNu2bRW7wObOnYuBAwdCV1dX3c0lIiKiV5FQ0xtvvCGioqJU2qOiosQbb7whhBBi+/btwsXFpVzjrV27Vjg6OgqpVCratWsnjh07plgXFBQkvL29Fcve3t4CgMojKChI0aegoECEh4eLJk2aCH19feHg4CCmTJkiHjx4UO5tzM7OFgBEdnZ2uZ9DREREmqXO77fa1wEyNDTEhQsX0KxZM6X269evo3Xr1nj8+DFSUlLQsmXLcl0MsSbidYCIiIhqH3V+v9U+Bsje3h6bN29Wad+8ebPizKmsrCzUq1dP3aGJiIiIqoXaxwAtX74cQ4cOxc8//4zXXnsNEokEZ86cwZUrV7B7924AwJkzZzB8+PBKL5aIiIioMlToVhi3bt3Chg0bcPXqVQgh0Lx5c0ycOBFOTk5VUGL14y4wIiKi2qfKboVRUFCAXr16YePGjeW+VxcRERFRTaPWMUB6enq4dOlSua7UTERERFRTqX0QdGBgYIkHQRMRERHVFmofBJ2fn48vv/wSsbGx8PT0hJGRkdL6lStXVlpxRERERFVB7QB06dIltGvXDgBw7do1pXXcNUZERES1gdoB6MiRI1VRBxEREVG1UfsYoGdu3LiBgwcP4smTJwDAG40SERFRraF2AMrKykKPHj3g7OyMvn37Ij09HQDwzjvvYObMmZVeIBEREVFlUzsATZ8+HXp6ekhNTYWhoaGiffjw4Thw4EClFkdERERUFdQ+BujQoUM4ePAg7O3tldqbNWuGW7duVVphRERERFVF7Rmg3NxcpZmfZ+7duweZTFYpRRERERFVJbUDUNeuXbF9+3bFskQigVwux7Jly9C9e/dKLY6IiIioKqi9C2zZsmXo1q0bzp49i/z8fHzwwQf4448/cP/+fZw8ebIqaiQiIiKqVGrPALVo0QIXL15E+/bt4ePjg9zcXAwePBhJSUlo0qRJVdRIREREVKkkghfwUZGTkwMzMzNkZ2fD1NRU0+UQERFROajz+632LjAAePjwIU6fPo3MzEzI5XKldYGBgRUZkoiIiKjaqB2AfvzxR4waNQq5ubkwMTFRuv+XRCJhACIiIqIaT+1jgGbOnIlx48bh0aNHePjwIR48eKB43L9/vypqJCIiIqpUagegtLQ0vPvuuyVeC4iIiIioNlA7APn6+uLs2bNVUQsRERFRtVD7GKB+/frh/fffx+XLl+Hm5gY9PT2l9QMHDqy04oiIiIiqgtqnwevolD5pJJFIUFRU9NJFaRpPgyciIqp9qvQ0+OdPeyciIiKqbdQ+BoiIiIiotit3AOrbty+ys7MVy59++ikePnyoWM7KykKLFi0qtTgiIiKiqlDuAHTw4EHk5eUplpcsWaJ03Z/CwkJcvXq1cqsjIiIiqgLlDkDPHyvNW4gRERFRbcVjgIiIiEjrlDsASSQSpft+PWsjIiIiqm3KfRq8EAJjxoyBTCYDADx9+hSTJk2CkZERACgdH0RERERUk5U7AAUFBSktjx49WqUP7wRPREREtUG5A9CWLVuqsg4iIiKiasODoImIiEjrMAARERGR1mEAIiIiIq3DAERERERahwGIiIiItA4DEBEREWkdBiAiIiLSOgxAREREpHUYgIiIiEjrMAARERGR1mEAIiIiIq3DAERERERahwGIiIiItA4DEBEREWkdBiAiIiLSOgxAREREpHU0HoDWrVuHRo0aQV9fHx4eHoiLiyu1b3R0NHx8fGBpaQlTU1N07NgRBw8eVOrTrVs3SCQSlUe/fv2qelOIiIioltBoAIqKikJoaCjCwsKQlJSELl26oE+fPkhNTS2x//Hjx+Hj44OYmBgkJiaie/fuGDBgAJKSkhR9oqOjkZ6ernhcunQJurq6GDp0aHVtFhEREdVwEiGE0NSLe3l5oV27dli/fr2izdXVFf7+/li0aFG5xmjZsiWGDx+OefPmlbg+IiIC8+bNQ3p6OoyMjMo1Zk5ODszMzJCdnQ1TU9NyPYeIiIg0S53fb43NAOXn5yMxMRG9evVSau/Vqxfi4+PLNYZcLsejR49gbm5eap/NmzdjxIgRZYafvLw85OTkKD2IiIjo1aWxAHTv3j0UFRXB2tpaqd3a2hoZGRnlGmPFihXIzc3FsGHDSlx/+vRpXLp0Ce+8806Z4yxatAhmZmaKh4ODQ/k2goiIiGoljR8ELZFIlJaFECptJYmMjER4eDiioqJgZWVVYp/NmzejVatWaN++fZljzZo1C9nZ2YrH7du3y78BREREVOvU0dQL169fH7q6uiqzPZmZmSqzQs+LiorC22+/je+++w49e/Yssc/jx4+xa9cuLFiw4IW1yGQyyGSy8hdPREREtZrGZoCkUik8PDwQGxur1B4bG4tOnTqV+rzIyEiMGTMGO3fuLPPU9m+//RZ5eXkYPXp0pdVMRERErwaNzQABwIwZMxAQEABPT0907NgRmzZtQmpqKiZNmgSgeNdUWloatm/fDqA4/AQGBmL16tXo0KGDYvbIwMAAZmZmSmNv3rwZ/v7+sLCwqN6NIiIiohpPowFo+PDhyMrKwoIFC5Ceno5WrVohJiYGjo6OAID09HSlawJt3LgRhYWFCA4ORnBwsKI9KCgIW7duVSxfu3YNJ06cwKFDh6ptW4iIiKj20Oh1gGoqXgeIiIio9qkV1wEiIiIi0hQGICIiItI6DEBERESkdRiAiIiISOswABEREZHWYQAiIiIircMARERERFqHAYiIiIi0DgMQERERaR0GICIiItI6DEBERESkdRiAiIiISOswABEREZHWYQAiIiIircMARERERFqHAYiIiIi0DgMQERERaR0GICIiItI6DEBERESkdRiAiIiISOswABEREZHWYQAiIiIircMARERERFqHAYiIiIi0DgMQERERaR0GICIiItI6DEBERESkdRiAiIiISOswABEREZHWYQAiIiIircMARERERFqHAYiIiIi0DgMQERERaR0GICIiItI6DEBERESkdRiAiIiISOswABEREZHWYQAiIiIircMARERERFqHAYiIiIi0DgMQERERaR0GICIiItI6DEBERESkdRiAiIiISOswABEREZHWYQAiIiIircMARERERFqHAYiIiIi0DgMQERERaR0GICIiItI6DEBERESkdTQegNatW4dGjRpBX18fHh4eiIuLK7VvdHQ0fHx8YGlpCVNTU3Ts2BEHDx5U6ffw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", "text/plain": [ "
" ] @@ -1933,7 +1923,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 26, "id": "2ab9a357-2827-417f-b4e7-bf40d079bcc0", "metadata": {}, "outputs": [], @@ -1985,22 +1975,16 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 27, "id": "28218b6e-5965-4649-b640-d33e44113674", "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] - }, { "name": "stderr", "output_type": "stream", "text": [ - "search: 100%|██████████| 3/3 [00:00<00:00, 61.29it/s]4.12it/s]" + "input plugins: 100%|██████████| 1/1 [00:00<00:00, 3496.58it/s]\n", + "search: 100%|██████████| 3/3 [00:00<00:00, 35.28it/s]155.95it/s]s]\n" ] } ], @@ -2019,7 +2003,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 28, "id": "725e8422-6a73-44d4-b712-7ea37a2553e6", "metadata": {}, "outputs": [ @@ -2028,26 +2012,34 @@ "output_type": "stream", "text": [ "{\n", + " \"time\": {\n", + " \"time_unit\": \"minutes\",\n", + " \"initial\": 0.0,\n", + " \"index\": 0,\n", + " \"name\": \"time\"\n", + " },\n", + " \"distance\": {\n", + " \"distance_unit\": \"miles\",\n", + " \"initial\": 0.0,\n", + " \"index\": 1,\n", + " \"name\": \"distance\"\n", + " },\n", " \"battery_state\": {\n", + " \"type\": \"soc\",\n", + " \"unit\": \"percent\",\n", " \"format\": {\n", " \"floating_point\": {\n", " \"initial\": 100.0\n", " }\n", " },\n", - " \"type\": \"soc\",\n", - " \"unit\": \"percent\"\n", - " },\n", - " \"distance\": {\n", - " \"distance_unit\": \"miles\",\n", - " \"initial\": 0.0\n", + " \"index\": 2,\n", + " \"name\": \"battery_state\"\n", " },\n", " \"energy_electric\": {\n", " \"energy_unit\": \"kilowatt_hours\",\n", - " \"initial\": 0.0\n", - " },\n", - " \"time\": {\n", " \"initial\": 0.0,\n", - " \"time_unit\": \"minutes\"\n", + " \"index\": 3,\n", + " \"name\": \"energy_electric\"\n", " }\n", "}\n" ] @@ -2068,7 +2060,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 29, "id": "cfc67831-ff3f-408b-808c-ae72236a91fd", "metadata": {}, "outputs": [ @@ -2077,10 +2069,10 @@ "output_type": "stream", "text": [ "{\n", - " \"battery_state\": 95.01694417725626,\n", - " \"distance\": 9.152878807061885,\n", - " \"energy_electric\": 2.989833493646233,\n", - " \"time\": 10.897048882084228\n", + " \"distance\": 8.96767743974592,\n", + " \"battery_state\": 95.26711549479498,\n", + " \"time\": 10.197181162285162,\n", + " \"energy_electric\": 2.839730703123052\n", "}\n" ] } @@ -2101,7 +2093,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 30, "id": "c351cdc1-1a39-435c-9677-266f9ef85eb3", "metadata": {}, "outputs": [], @@ -2157,22 +2149,16 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 31, "id": "94ff3964-45cd-43ca-a164-5e5b5327625a", "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n" - ] - }, { "name": "stderr", "output_type": "stream", "text": [ - "search: 100%|██████████| 3/3 [00:00<00:00, 44.46it/s]1.88it/s]" + "input plugins: 100%|██████████| 1/1 [00:00<00:00, 4857.86it/s]\n", + "search: 100%|██████████| 3/3 [00:00<00:00, 19.07it/s]9908.87it/s]]\n" ] } ], @@ -2182,7 +2168,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 32, "id": "3fdc7f86-284e-4a1d-a058-5b8b42f8e128", "metadata": {}, "outputs": [ @@ -2191,30 +2177,40 @@ "output_type": "stream", "text": [ "{\n", - " \"battery_state\": {\n", - " \"format\": {\n", - " \"floating_point\": {\n", - " \"initial\": 100.0\n", - " }\n", - " },\n", - " \"type\": \"soc\",\n", - " \"unit\": \"percent\"\n", - " },\n", - " \"distance\": {\n", - " \"distance_unit\": \"miles\",\n", - " \"initial\": 0.0\n", + " \"energy_liquid\": {\n", + " \"energy_unit\": \"gallons_gasoline\",\n", + " \"initial\": 0.0,\n", + " \"index\": 0,\n", + " \"name\": \"energy_liquid\"\n", " },\n", " \"energy_electric\": {\n", " \"energy_unit\": \"kilowatt_hours\",\n", - " \"initial\": 0.0\n", - " },\n", - " \"energy_liquid\": {\n", - " \"energy_unit\": \"gallons_gasoline\",\n", - " \"initial\": 0.0\n", + " \"initial\": 0.0,\n", + " \"index\": 1,\n", + " \"name\": \"energy_electric\"\n", " },\n", " \"time\": {\n", + " \"time_unit\": \"minutes\",\n", " \"initial\": 0.0,\n", - " \"time_unit\": \"minutes\"\n", + " \"index\": 2,\n", + " \"name\": \"time\"\n", + " },\n", + " \"distance\": {\n", + " \"distance_unit\": \"miles\",\n", + " \"initial\": 0.0,\n", + " \"index\": 3,\n", + " \"name\": \"distance\"\n", + " },\n", + " \"battery_state\": {\n", + " \"type\": \"soc\",\n", + " \"unit\": \"percent\",\n", + " \"format\": {\n", + " \"floating_point\": {\n", + " \"initial\": 100.0\n", + " }\n", + " },\n", + " \"index\": 4,\n", + " \"name\": \"battery_state\"\n", " }\n", "}\n" ] @@ -2226,7 +2222,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 33, "id": "d02ec8fb-9cd3-42d8-afc5-0983e93dfa21", "metadata": {}, "outputs": [ @@ -2235,11 +2231,11 @@ "output_type": "stream", "text": [ "{\n", - " \"battery_state\": 78.14694106580795,\n", - " \"distance\": 9.152878807061885,\n", - " \"energy_electric\": 2.6223670721030534,\n", " \"energy_liquid\": 0.0,\n", - " \"time\": 10.897048882084228\n", + " \"distance\": 8.96767743974592,\n", + " \"battery_state\": 78.97899058654468,\n", + " \"energy_electric\": 2.522521129614639,\n", + " \"time\": 10.197181162285162\n", "}\n" ] } @@ -2257,11 +2253,17 @@ "\n", "At this point we could repeat all of the analysis above with the new results (plotting, tradeoffs, etc)." ] + }, + { + "cell_type": "markdown", + "id": "7b6db514", + "metadata": {}, + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "routee-compass", "language": "python", "name": "python3" }, diff --git a/python/nrel/routee/compass/plot/plot_folium.py b/python/nrel/routee/compass/plot/plot_folium.py index 5fa14f12..e5186159 100644 --- a/python/nrel/routee/compass/plot/plot_folium.py +++ b/python/nrel/routee/compass/plot/plot_folium.py @@ -132,7 +132,7 @@ def _create_empty_folium_map(fit_coords: Sequence[Tuple[float, float]]) -> foliu def plot_route_folium( result_dict: QueryResult, line_kwargs: Optional[QueryResult] = None, - folium_map: folium.Map = None, + folium_map: Optional[folium.Map] = None, ) -> folium.Map: """ Plots a single route from a compass query on a folium map. @@ -197,7 +197,7 @@ def plot_coords_folium( kwargs = {**DEFAULT_LINE_KWARGS, **(line_kwargs or {})} - folium.PolyLine( + folium.PolyLine( # type: ignore locations=coords, **kwargs, ).add_to(folium_map) @@ -223,7 +223,7 @@ def plot_routes_folium( results: Union[QueryResult, QueryResults], value_fn: Callable[[QueryResult], Any] = lambda r: r["request"].get("name"), color_map: str = "viridis", - folium_map: folium.Map = None, + folium_map: Optional[folium.Map] = None, ) -> folium.Map: """ Plot multiple routes from a CompassApp query on a folium map diff --git a/python/nrel/routee/compass/resources/downtown_denver_example/osm_default_distance.toml b/python/nrel/routee/compass/resources/downtown_denver_example/osm_default_distance.toml index c97067e4..f04195b8 100644 --- a/python/nrel/routee/compass/resources/downtown_denver_example/osm_default_distance.toml +++ b/python/nrel/routee/compass/resources/downtown_denver_example/osm_default_distance.toml @@ -1,11 +1,18 @@ parallelism = 2 -search_orientation = "vertex" [graph] edge_list_input_file = "edges-compass.csv.gz" vertex_list_input_file = "vertices-compass.csv.gz" verbose = true +[mapping] +type = "edge" +geometry_input_file = "edges-geometries-enumerated.txt.gz" +tolerance.distance = 15.0 +tolerance.unit = "meters" +queries_without_destinations = false +matching_type = ["point", "vertex_id", "edge_id"] + [traversal] type = "distance" distance_unit = "miles" @@ -15,12 +22,6 @@ type = "turn_delay" edge_heading_input_file = "edges-headings-enumerated.csv.gz" [plugin] -[[plugin.input_plugins]] -type = "vertex_rtree" -distance_tolerance = 0.2 -distance_unit = "kilometers" -vertices_input_file = "vertices-compass.csv.gz" - [[plugin.input_plugins]] type = "grid_search" @@ -37,10 +38,6 @@ type = "traversal" route = "geo_json" geometry_input_file = "edges-geometries-enumerated.txt.gz" -[[plugin.output_plugins]] -type = "uuid" -uuid_input_file = "vertices-uuid-enumerated.txt.gz" - [access.turn_delay_model] type = "tabular_discrete" time_unit = "seconds" diff --git a/python/nrel/routee/compass/resources/downtown_denver_example/osm_default_energy.toml b/python/nrel/routee/compass/resources/downtown_denver_example/osm_default_energy.toml index 1cf12b44..8e668060 100644 --- a/python/nrel/routee/compass/resources/downtown_denver_example/osm_default_energy.toml +++ b/python/nrel/routee/compass/resources/downtown_denver_example/osm_default_energy.toml @@ -1,18 +1,19 @@ parallelism = 2 -search_orientation = "vertex" [graph] edge_list_input_file = "edges-compass.csv.gz" vertex_list_input_file = "vertices-compass.csv.gz" verbose = true -[plugin] -[[plugin.input_plugins]] -type = "vertex_rtree" -distance_tolerance = 0.2 -distance_unit = "kilometers" -vertices_input_file = "vertices-compass.csv.gz" +[mapping] +type = "edge" +geometry_input_file = "edges-geometries-enumerated.txt.gz" +tolerance.distance = 15.0 +tolerance.unit = "meters" +queries_without_destinations = false +matching_type = ["point", "vertex_id", "edge_id"] +[plugin] [[plugin.input_plugins]] type = "grid_search" @@ -30,10 +31,6 @@ route = "geo_json" tree = "geo_json" geometry_input_file = "edges-geometries-enumerated.txt.gz" -[[plugin.output_plugins]] -type = "uuid" -uuid_input_file = "vertices-uuid-enumerated.txt.gz" - [access] type = "turn_delay" edge_heading_input_file = "edges-headings-enumerated.csv.gz" diff --git a/python/nrel/routee/compass/resources/downtown_denver_example/osm_default_speed.toml b/python/nrel/routee/compass/resources/downtown_denver_example/osm_default_speed.toml index ce44d0a4..2f8c7827 100644 --- a/python/nrel/routee/compass/resources/downtown_denver_example/osm_default_speed.toml +++ b/python/nrel/routee/compass/resources/downtown_denver_example/osm_default_speed.toml @@ -1,11 +1,18 @@ parallelism = 2 -search_orientation = "vertex" [graph] edge_list_input_file = "edges-compass.csv.gz" vertex_list_input_file = "vertices-compass.csv.gz" verbose = true +[mapping] +type = "edge" +geometry_input_file = "edges-geometries-enumerated.txt.gz" +tolerance.distance = 15.0 +tolerance.unit = "meters" +queries_without_destinations = false +matching_type = ["point", "vertex_id", "edge_id"] + [traversal] type = "speed_table" speed_table_input_file = "edges-posted-speed-enumerated.txt.gz" @@ -18,12 +25,6 @@ type = "turn_delay" edge_heading_input_file = "edges-headings-enumerated.csv.gz" [plugin] -[[plugin.input_plugins]] -type = "vertex_rtree" -distance_tolerance = 0.2 -distance_unit = "kilometers" -vertices_input_file = "vertices-compass.csv.gz" - [[plugin.input_plugins]] type = "grid_search" @@ -40,10 +41,6 @@ type = "traversal" route = "geo_json" geometry_input_file = "edges-geometries-enumerated.txt.gz" -[[plugin.output_plugins]] -type = "uuid" -uuid_input_file = "vertices-uuid-enumerated.txt.gz" - [access.turn_delay_model] type = "tabular_discrete" time_unit = "seconds" diff --git a/python/nrel/routee/compass/resources/osm_default_distance.toml b/python/nrel/routee/compass/resources/osm_default_distance.toml index 52612a9d..0baba175 100644 --- a/python/nrel/routee/compass/resources/osm_default_distance.toml +++ b/python/nrel/routee/compass/resources/osm_default_distance.toml @@ -1,11 +1,18 @@ parallelism = 2 -search_orientation = "vertex" [graph] edge_list_input_file = "edges-compass.csv.gz" vertex_list_input_file = "vertices-compass.csv.gz" verbose = true +[mapping] +type = "edge" +geometry_input_file = "edges-geometries-enumerated.txt.gz" +tolerance.distance = 15.0 +tolerance.unit = "meters" +queries_without_destinations = false +matching_type = ["point", "vertex_id", "edge_id"] + [traversal] type = "distance" distance_unit = "miles" @@ -35,12 +42,10 @@ distance = 1 [plugin] input_plugins = [ - { type = "vertex_rtree", distance_tolerance = 0.2, distance_unit = "kilometers", vertices_input_file = "vertices-compass.csv.gz" }, { type = "grid_search" }, { type = "load_balancer", weight_heuristic = { type = "haversine" } }, ] output_plugins = [ { type = "summary" }, - { type = "traversal", route = "geo_json", geometry_input_file = "edges-geometries-enumerated.txt.gz" }, - { type = "uuid", uuid_input_file = "vertices-uuid-enumerated.txt.gz" }, + { type = "traversal", route = "geo_json" }, ] diff --git a/python/nrel/routee/compass/resources/osm_default_energy.toml b/python/nrel/routee/compass/resources/osm_default_energy.toml index 37f9d450..04179f05 100644 --- a/python/nrel/routee/compass/resources/osm_default_energy.toml +++ b/python/nrel/routee/compass/resources/osm_default_energy.toml @@ -1,21 +1,26 @@ parallelism = 2 -search_orientation = "vertex" [graph] edge_list_input_file = "edges-compass.csv.gz" vertex_list_input_file = "vertices-compass.csv.gz" verbose = true +[mapping] +type = "edge" +geometry_input_file = "edges-geometries-enumerated.txt.gz" +tolerance.distance = 15.0 +tolerance.unit = "meters" +queries_without_destinations = false +matching_type = ["point", "vertex_id", "edge_id"] + [plugin] input_plugins = [ - { type = "vertex_rtree", distance_tolerance = 0.2, distance_unit = "kilometers", vertices_input_file = "vertices-compass.csv.gz" }, { type = "grid_search" }, { type = "load_balancer", weight_heuristic = { type = "haversine" } }, ] output_plugins = [ { type = "summary" }, { type = "traversal", route = "geo_json", geometry_input_file = "edges-geometries-enumerated.txt.gz" }, - { type = "uuid", uuid_input_file = "vertices-uuid-enumerated.txt.gz" }, ] # based on 65.5 cents per mile 2023 IRS mileage rate, $/mile to match traversal distance_unit = "miles" [cost.vehicle_rates.distance] diff --git a/python/nrel/routee/compass/resources/osm_default_speed.toml b/python/nrel/routee/compass/resources/osm_default_speed.toml index bda4364c..577b9557 100644 --- a/python/nrel/routee/compass/resources/osm_default_speed.toml +++ b/python/nrel/routee/compass/resources/osm_default_speed.toml @@ -1,11 +1,18 @@ parallelism = 2 -search_orientation = "vertex" [graph] edge_list_input_file = "edges-compass.csv.gz" vertex_list_input_file = "vertices-compass.csv.gz" verbose = true +[mapping] +type = "edge" +geometry_input_file = "edges-geometries-enumerated.txt.gz" +tolerance.distance = 15.0 +tolerance.unit = "meters" +queries_without_destinations = false +matching_type = ["point", "vertex_id", "edge_id"] + [traversal] type = "speed_table" speed_table_input_file = "edges-posted-speed-enumerated.txt.gz" @@ -45,12 +52,10 @@ time = 1 [plugin] input_plugins = [ - { type = "vertex_rtree", distance_tolerance = 0.2, distance_unit = "kilometers", vertices_input_file = "vertices-compass.csv.gz" }, { type = "grid_search" }, { type = "load_balancer", weight_heuristic = { type = "haversine" } }, ] output_plugins = [ { type = "summary" }, { type = "traversal", route = "geo_json", geometry_input_file = "edges-geometries-enumerated.txt.gz" }, - { type = "uuid", uuid_input_file = "vertices-uuid-enumerated.txt.gz" }, ] diff --git a/python/tests/test_downtown_denver_example.py b/python/tests/test_downtown_denver_example.py index 94836935..bc17022d 100644 --- a/python/tests/test_downtown_denver_example.py +++ b/python/tests/test_downtown_denver_example.py @@ -21,7 +21,10 @@ def test_downtown_denver_example(self) -> None: "model_name": "2016_TOYOTA_Camry_4cyl_2WD", "weights": {"distance": 1, "time": 1, "energy_liquid": 1}, } - + result = app.run(query) - self.assertTrue("error" not in result) + self.assertTrue( + "error" not in result, + msg=f"error in downtown denver test: {result.get('error')}", + ) diff --git a/rust/routee-compass-core/Cargo.toml b/rust/routee-compass-core/Cargo.toml index cf432155..26f6cc0c 100644 --- a/rust/routee-compass-core/Cargo.toml +++ b/rust/routee-compass-core/Cargo.toml @@ -30,3 +30,4 @@ regex = { workspace = true } wkt = { workspace = true } wkb = { workspace = true } allocative = { workspace = true } +rstar = { workspace = true } diff --git a/rust/routee-compass-core/src/algorithm/search/a_star/a_star_algorithm.rs b/rust/routee-compass-core/src/algorithm/search/a_star/a_star_algorithm.rs index 641d130a..a723baf0 100644 --- a/rust/routee-compass-core/src/algorithm/search/a_star/a_star_algorithm.rs +++ b/rust/routee-compass-core/src/algorithm/search/a_star/a_star_algorithm.rs @@ -60,10 +60,10 @@ pub fn run_a_star( }; let last_edge_id = get_last_traversed_edge_id(¤t_vertex_id, &source, &solution)?; - let last_edge = match last_edge_id { - Some(id) => Some(si.directed_graph.get_edge(&id)?), - None => None, - }; + // let last_edge = match last_edge_id { + // Some(id) => Some(si.directed_graph.get_edge(&id)?), + // None => None, + // }; // grab the current state from the solution let current_state = if current_vertex_id == source { @@ -85,14 +85,18 @@ pub fn run_a_star( // visit all neighbors of this source vertex let incident_edge_iterator = direction.get_incident_edges(¤t_vertex_id, si); for edge_id in incident_edge_iterator { - let e = si.directed_graph.get_edge(edge_id)?; + let e = si.graph.get_edge(edge_id)?; let terminal_vertex_id = direction.terminal_vertex_id(e); let key_vertex_id = direction.tree_key_vertex_id(e); - let valid_frontier = - si.frontier_model - .valid_frontier(e, ¤t_state, last_edge, &si.state_model)?; + let valid_frontier = si.frontier_model.valid_frontier( + e, + ¤t_state, + &solution, + direction, + &si.state_model, + )?; if !valid_frontier { continue; } @@ -188,8 +192,8 @@ pub fn run_a_star_edge_oriented( si: &SearchInstance, ) -> Result { // 1. guard against edge conditions (src==dst, src.dst_v == dst.src_v) - let e1_src = si.directed_graph.src_vertex_id(&source)?; - let e1_dst = si.directed_graph.dst_vertex_id(&source)?; + let e1_src = si.graph.src_vertex_id(&source)?; + let e1_dst = si.graph.dst_vertex_id(&source)?; let src_et = EdgeTraversal { edge_id: source, access_cost: Cost::ZERO, @@ -217,8 +221,8 @@ pub fn run_a_star_edge_oriented( Ok(updated) } Some(target_edge) => { - let e2_src = si.directed_graph.src_vertex_id(&target_edge)?; - let e2_dst = si.directed_graph.dst_vertex_id(&target_edge)?; + let e2_src = si.graph.src_vertex_id(&target_edge)?; + let e2_dst = si.graph.dst_vertex_id(&target_edge)?; if source == target_edge { Ok(SearchResult::default()) @@ -376,6 +380,9 @@ mod tests { use crate::model::cost::cost_model::CostModel; use crate::model::cost::vehicle::vehicle_cost_rate::VehicleCostRate; use crate::model::frontier::default::no_restriction::NoRestriction; + + use crate::model::map::map_model::MapModel; + use crate::model::map::map_model_config::MapModelConfig; use crate::model::network::edge_id::EdgeId; use crate::model::network::graph::Graph; use crate::model::network::Edge; @@ -471,6 +478,9 @@ mod tests { (VertexId(2), VertexId(3), vec![EdgeId(4)]), // 2 -[4]-> 3 ]; + let graph = Arc::new(build_mock_graph()); + let map_model = Arc::new(MapModel::new(graph.clone(), MapModelConfig::default()).unwrap()); + // setup the graph, traversal model, and a* heuristic to be shared across the queries in parallel // these live in the "driver" process and are passed as read-only memory to each executor process let state_model = Arc::new( @@ -497,7 +507,8 @@ mod tests { ) .unwrap(); let si = SearchInstance { - directed_graph: Arc::new(build_mock_graph()), + graph, + map_model, state_model: state_model.clone(), traversal_model: Arc::new(DistanceTraversalModel::new(DistanceUnit::Meters)), access_model: Arc::new(NoAccessModel {}), diff --git a/rust/routee-compass-core/src/algorithm/search/a_star/bidirectional_ops.rs b/rust/routee-compass-core/src/algorithm/search/a_star/bidirectional_ops.rs index 398f7731..7ca16dbd 100644 --- a/rust/routee-compass-core/src/algorithm/search/a_star/bidirectional_ops.rs +++ b/rust/routee-compass-core/src/algorithm/search/a_star/bidirectional_ops.rs @@ -67,7 +67,7 @@ pub fn route_contains_loop( ) -> Result { let src_vertices = route .iter() - .map(|e| si.directed_graph.src_vertex_id(&e.edge_id)) + .map(|e| si.graph.src_vertex_id(&e.edge_id)) .collect::, _>>()?; Ok(src_vertices.iter().unique().collect_vec().len() < src_vertices.len()) } diff --git a/rust/routee-compass-core/src/algorithm/search/direction.rs b/rust/routee-compass-core/src/algorithm/search/direction.rs index d51bd5ae..6c2e6a88 100644 --- a/rust/routee-compass-core/src/algorithm/search/direction.rs +++ b/rust/routee-compass-core/src/algorithm/search/direction.rs @@ -20,8 +20,8 @@ impl Direction { si: &'a SearchInstance, ) -> Box + 'a> { match self { - Direction::Forward => si.directed_graph.out_edges_iter(vertex_id), - Direction::Reverse => si.directed_graph.in_edges_iter(vertex_id), + Direction::Forward => si.graph.out_edges_iter(vertex_id), + Direction::Reverse => si.graph.in_edges_iter(vertex_id), } } diff --git a/rust/routee-compass-core/src/algorithm/search/edge_traversal.rs b/rust/routee-compass-core/src/algorithm/search/edge_traversal.rs index 675975ed..4ff0f87e 100644 --- a/rust/routee-compass-core/src/algorithm/search/edge_traversal.rs +++ b/rust/routee-compass-core/src/algorithm/search/edge_traversal.rs @@ -57,13 +57,13 @@ impl EdgeTraversal { let mut access_cost = Cost::ZERO; // find this traversal in the graph - let traversal_trajectory = si.directed_graph.edge_triplet(&next_edge_id)?; + let traversal_trajectory = si.graph.edge_triplet(&next_edge_id)?; // perform access traversal for (v2)-[next]->(v3) // access cost for (v1)-[prev]->(v2)-[next]->(v3) if let Some(prev_edge_id) = prev_edge_id_opt { - let e1 = si.directed_graph.get_edge(&prev_edge_id)?; - let v1 = si.directed_graph.get_vertex(&e1.src_vertex_id)?; + let e1 = si.graph.get_edge(&prev_edge_id)?; + let v1 = si.graph.get_vertex(&e1.src_vertex_id)?; let (v2, e2, v3) = traversal_trajectory; let access_trajectory = (v1, e1, v2, e2, v3); @@ -127,13 +127,13 @@ impl EdgeTraversal { let mut access_cost = Cost::ZERO; // find this traversal in the graph - let traversal_trajectory = si.directed_graph.edge_triplet(&prev_edge_id)?; + let traversal_trajectory = si.graph.edge_triplet(&prev_edge_id)?; // perform access traversal for (v1)-[prev]->(v2) // access cost for (v1)-[prev]->(v2)-[next]->(v3) if let Some(next_edge_id) = next_edge_id_opt { - let e2 = si.directed_graph.get_edge(&next_edge_id)?; - let v3 = si.directed_graph.get_vertex(&e2.dst_vertex_id)?; + let e2 = si.graph.get_edge(&next_edge_id)?; + let v3 = si.graph.get_vertex(&e2.dst_vertex_id)?; let (v1, e1, v2) = traversal_trajectory; let access_trajectory = (v1, e1, v2, e2, v3); diff --git a/rust/routee-compass-core/src/algorithm/search/ksp/yens_algorithm.rs b/rust/routee-compass-core/src/algorithm/search/ksp/yens_algorithm.rs index b480cfc0..f98b8439 100644 --- a/rust/routee-compass-core/src/algorithm/search/ksp/yens_algorithm.rs +++ b/rust/routee-compass-core/src/algorithm/search/ksp/yens_algorithm.rs @@ -69,7 +69,7 @@ pub fn run( "root path is empty", )))?; let spur_vertex_id = si - .directed_graph + .graph .get_edge(&spur_edge_traversal.edge_id)? .dst_vertex_id; @@ -86,7 +86,8 @@ pub fn run( // execute a new path search using a wrapped frontier model to exclude edges let yens_frontier = EdgeCutFrontierModel::new(si.frontier_model.clone(), cut_edges); let yens_si = SearchInstance { - directed_graph: si.directed_graph.clone(), + graph: si.graph.clone(), + map_model: si.map_model.clone(), state_model: si.state_model.clone(), traversal_model: si.traversal_model.clone(), access_model: si.access_model.clone(), diff --git a/rust/routee-compass-core/src/algorithm/search/search_algorithm.rs b/rust/routee-compass-core/src/algorithm/search/search_algorithm.rs index 34fe869f..fa9757b9 100644 --- a/rust/routee-compass-core/src/algorithm/search/search_algorithm.rs +++ b/rust/routee-compass-core/src/algorithm/search/search_algorithm.rs @@ -140,7 +140,7 @@ impl SearchAlgorithm { src_id, dst_id, &search_result.tree, - search_instance.directed_graph.clone(), + search_instance.graph.clone(), )?; vec![route] } @@ -182,8 +182,8 @@ pub fn run_edge_oriented( si: &SearchInstance, ) -> Result { // 1. guard against edge conditions (src==dst, src.dst_v == dst.src_v) - let e1_src = si.directed_graph.src_vertex_id(&source)?; - let e1_dst = si.directed_graph.dst_vertex_id(&source)?; + let e1_src = si.graph.src_vertex_id(&source)?; + let e1_dst = si.graph.dst_vertex_id(&source)?; let src_et = EdgeTraversal { edge_id: source, access_cost: Cost::ZERO, @@ -218,8 +218,8 @@ pub fn run_edge_oriented( Ok(updated) } Some(target_edge) => { - let e2_src = si.directed_graph.src_vertex_id(&target_edge)?; - let e2_dst = si.directed_graph.dst_vertex_id(&target_edge)?; + let e2_src = si.graph.src_vertex_id(&target_edge)?; + let e2_dst = si.graph.dst_vertex_id(&target_edge)?; if source == target_edge { Ok(SearchAlgorithmResult::default()) diff --git a/rust/routee-compass-core/src/algorithm/search/search_instance.rs b/rust/routee-compass-core/src/algorithm/search/search_instance.rs index e71e665c..97de4965 100644 --- a/rust/routee-compass-core/src/algorithm/search/search_instance.rs +++ b/rust/routee-compass-core/src/algorithm/search/search_instance.rs @@ -3,6 +3,7 @@ use crate::model::{ access::access_model::AccessModel, cost::cost_model::CostModel, frontier::frontier_model::FrontierModel, + map::map_model::MapModel, network::{graph::Graph, vertex_id::VertexId}, state::state_model::StateModel, termination::termination_model::TerminationModel, @@ -14,7 +15,8 @@ use std::sync::Arc; /// instances of read-only objects used for a search that have /// been prepared for a specific query. pub struct SearchInstance { - pub directed_graph: Arc, + pub graph: Arc, + pub map_model: Arc, pub state_model: Arc, pub traversal_model: Arc, pub access_model: Arc, @@ -32,8 +34,8 @@ impl SearchInstance { dst: VertexId, state: &[StateVar], ) -> Result { - let src = self.directed_graph.get_vertex(&src)?; - let dst = self.directed_graph.get_vertex(&dst)?; + let src = self.graph.get_vertex(&src)?; + let dst = self.graph.get_vertex(&dst)?; let mut dst_state = state.to_vec(); self.traversal_model diff --git a/rust/routee-compass-core/src/algorithm/search/util/edge_cut_frontier_model.rs b/rust/routee-compass-core/src/algorithm/search/util/edge_cut_frontier_model.rs index 58b591fb..067a361b 100644 --- a/rust/routee-compass-core/src/algorithm/search/util/edge_cut_frontier_model.rs +++ b/rust/routee-compass-core/src/algorithm/search/util/edge_cut_frontier_model.rs @@ -29,14 +29,29 @@ impl FrontierModel for EdgeCutFrontierModel { &self, edge: &Edge, state: &[crate::model::traversal::state::state_variable::StateVar], - previous_edge: Option<&Edge>, + tree: &std::collections::HashMap< + crate::model::network::VertexId, + crate::algorithm::search::search_tree_branch::SearchTreeBranch, + >, + direction: &crate::algorithm::search::direction::Direction, state_model: &crate::model::state::state_model::StateModel, ) -> Result { if self.cut_edges.contains(&edge.edge_id) { Ok(false) } else { self.underlying - .valid_frontier(edge, state, previous_edge, state_model) + .valid_frontier(edge, state, tree, direction, state_model) + } + } + + fn valid_edge( + &self, + edge: &Edge, + ) -> Result { + if self.cut_edges.contains(&edge.edge_id) { + self.underlying.valid_edge(edge) + } else { + Ok(false) } } } diff --git a/rust/routee-compass-core/src/algorithm/search/util/route_similarity_function.rs b/rust/routee-compass-core/src/algorithm/search/util/route_similarity_function.rs index cc219898..19e175f1 100644 --- a/rust/routee-compass-core/src/algorithm/search/util/route_similarity_function.rs +++ b/rust/routee-compass-core/src/algorithm/search/util/route_similarity_function.rs @@ -85,7 +85,7 @@ impl RouteSimilarityFunction { } RouteSimilarityFunction::DistanceWeightedCosineSimilarity { threshold: _ } => { let dist_fn = Box::new(|edge_id: &EdgeId| { - si.directed_graph + si.graph .get_edge(edge_id) .map(|edge| edge.distance.as_f64()) .map_err(SearchError::from) diff --git a/rust/routee-compass-core/src/model/frontier/default/no_restriction.rs b/rust/routee-compass-core/src/model/frontier/default/no_restriction.rs index 26bb64ff..8ee86887 100644 --- a/rust/routee-compass-core/src/model/frontier/default/no_restriction.rs +++ b/rust/routee-compass-core/src/model/frontier/default/no_restriction.rs @@ -10,7 +10,25 @@ use std::sync::Arc; #[derive(Clone)] pub struct NoRestriction {} -impl FrontierModel for NoRestriction {} +impl FrontierModel for NoRestriction { + fn valid_frontier( + &self, + _edge: &crate::model::network::Edge, + _state: &[crate::model::traversal::state::state_variable::StateVar], + _tree: &std::collections::HashMap< + crate::model::network::VertexId, + crate::algorithm::search::search_tree_branch::SearchTreeBranch, + >, + _direction: &crate::algorithm::search::direction::Direction, + _state_model: &StateModel, + ) -> Result { + Ok(true) + } + + fn valid_edge(&self, _edge: &crate::model::network::Edge) -> Result { + Ok(true) + } +} impl FrontierModelService for NoRestriction { fn build( diff --git a/rust/routee-compass-core/src/model/frontier/frontier_model.rs b/rust/routee-compass-core/src/model/frontier/frontier_model.rs index 135704d7..40c0a4be 100644 --- a/rust/routee-compass-core/src/model/frontier/frontier_model.rs +++ b/rust/routee-compass-core/src/model/frontier/frontier_model.rs @@ -1,6 +1,13 @@ +use std::collections::HashMap; + use super::frontier_model_error::FrontierModelError; -use crate::model::{ - network::Edge, state::state_model::StateModel, traversal::state::state_variable::StateVar, +use crate::{ + algorithm::search::{direction::Direction, search_tree_branch::SearchTreeBranch}, + model::{ + network::{Edge, VertexId}, + state::state_model::StateModel, + traversal::state::state_variable::StateVar, + }, }; /// Validates edge and traversal states. Provides an API for removing edges from @@ -10,24 +17,39 @@ use crate::model::{ /// /// [TraversalModel]: crate::model::traversal::traversal_model::TraversalModel pub trait FrontierModel: Send + Sync { - /// Validates an edge before allowing it to be added to the frontier. + /// Validates an edge before allowing it to be added to the search frontier. /// /// # Arguments /// /// * `edge` - the edge to traverse /// * `state` - the state of the traversal at the beginning of this edge - /// * `previous_edge` - the edge that was traversed to reach this edge + /// * `tree` - the search tree for this search + /// * `direction` - search direction + /// * `state_model` - provides operations on the state vector /// /// # Returns /// - /// True if the edge is valid, false otherwise; Or, an error from processing + /// True if the edge is a valid part of the frontier, false otherwise fn valid_frontier( &self, - _edge: &Edge, - _state: &[StateVar], - _previous_edge: Option<&Edge>, - _state_model: &StateModel, - ) -> Result { - Ok(true) - } + edge: &Edge, + state: &[StateVar], + tree: &HashMap, + direction: &Direction, + state_model: &StateModel, + ) -> Result; + + /// Validates an edge independent of a search state, noting whether it + /// is simply impassable with this FrontierModel configuration. Can be + /// called by valid_frontier as a cheaper first-pass operation. Also + /// used by MapModel during query map matching. + /// + /// # Arguments + /// + /// * `edge` - the edge to test for validity + /// + /// # Returns + /// + /// True if the edge is valid + fn valid_edge(&self, edge: &Edge) -> Result; } diff --git a/rust/routee-compass-core/src/model/map/geometry_model.rs b/rust/routee-compass-core/src/model/map/geometry_model.rs new file mode 100644 index 00000000..ae239568 --- /dev/null +++ b/rust/routee-compass-core/src/model/map/geometry_model.rs @@ -0,0 +1,246 @@ +use std::sync::Arc; + +use super::map_error::MapError; +use crate::{ + model::network::{EdgeId, Graph}, + util::{fs::read_utils, geo::geo_io_utils}, +}; +use geo::LineString; +use kdam::BarExt; + +/// model for link geometries by edge id. can be constructed either +/// from edge geometry dataset ([`GeometryModel::new_from_edges`]) or +/// from the vertices ([`GeometryModel::new_from_vertices`]) by simply +/// drawing lines between coordinates. +pub struct GeometryModel(Vec>); + +impl GeometryModel { + /// with no provided geometries, create minimal LineStrings from pairs of vertex Points + pub fn new_from_vertices(graph: Arc) -> Result { + let edges = create_linestrings_from_vertices(graph)?; + Ok(GeometryModel(edges)) + } + + /// use a user-provided enumerated textfile input to load LineString geometries + pub fn new_from_edges( + geometry_input_file: &String, + graph: Arc, + ) -> Result { + let edges = read_linestrings(geometry_input_file, graph.edges.len())?; + Ok(GeometryModel(edges)) + } + + /// iterate through the geometries of this model + pub fn geometries<'a>(&'a self) -> Box> + 'a> { + Box::new(self.0.iter()) + } + + /// get a single geometry by it's EdgeId + pub fn get<'a>(&'a self, edge_id: &EdgeId) -> Result<&'a LineString, MapError> { + self.0 + .get(edge_id.0) + .ok_or(MapError::MissingEdgeId(*edge_id)) + } +} + +fn read_linestrings( + geometry_input_file: &String, + n_edges: usize, +) -> Result>, MapError> { + let mut pb = kdam::Bar::builder() + .total(n_edges) + .animation("fillup") + .desc("edge LineString geometry file") + .build() + .map_err(MapError::InternalError)?; + + let cb = Box::new(|| { + let _ = pb.update(1); + }); + let geoms = read_utils::read_raw_file( + geometry_input_file, + geo_io_utils::parse_wkt_linestring, + Some(cb), + ) + .map_err(|e: std::io::Error| { + MapError::BuildError(format!("error loading {}: {}", geometry_input_file, e)) + })? + .to_vec(); + eprintln!(); + Ok(geoms) +} + +fn create_linestrings_from_vertices(graph: Arc) -> Result>, MapError> { + let n_edges = graph.edges.len(); + let mut pb = kdam::Bar::builder() + .total(n_edges) + .animation("fillup") + .desc("edge LineString geometry file") + .build() + .map_err(MapError::InternalError)?; + + let edges = graph + .edges + .iter() + .map(|e| { + let src_v = graph.get_vertex(&e.src_vertex_id).map_err(|_| { + MapError::InternalError(format!( + "edge {} src vertex {} missing", + e.edge_id, e.src_vertex_id + )) + })?; + let dst_v = graph.get_vertex(&e.dst_vertex_id).map_err(|_| { + MapError::InternalError(format!( + "edge {} dst vertex {} missing", + e.edge_id, e.dst_vertex_id + )) + })?; + + let linestring = geo::line_string![src_v.coordinate.0, dst_v.coordinate.0,]; + let _ = pb.update(1); + Ok(linestring) + }) + .collect::, MapError>>()?; + + eprintln!(); + Ok(edges) +} + +// TODO: +// - the API for OutputPlugin now expects a SearchInstance which is non-trivial to instantiate. +// the logic for adding geometries should be refactored into a separate function and this test +// should be moved to the file where that function exists. +// - the loading of geometries is now handled by the MapModel. testing geometry retrieval and +// linestring reconstruction should be moved to the map_model.rs file. + +#[cfg(test)] +mod tests { + + use crate::{ + model::{ + map::geometry_model::GeometryModel, + network::{Edge, EdgeId, Graph, Vertex, VertexId}, + }, + util::{ + compact_ordered_hash_map::CompactOrderedHashMap, fs::read_utils::read_raw_file, + geo::geo_io_utils::parse_wkt_linestring, + }, + }; + + use std::{path::PathBuf, sync::Arc}; + + fn mock_geometry_file() -> PathBuf { + PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("src") + .join("model") + .join("map") + .join("test") + .join("geometries.txt") + } + + fn mock_graph() -> Graph { + let edges = Box::new([ + Edge::new(0, 0, 2, 2.8284271247), + Edge::new(1, 3, 5, 2.8284271247), + Edge::new(2, 6, 8, 2.8284271247), + ]); + let vertices = Box::new([ + Vertex::new(0, 0.0, 0.0), + Vertex::new(1, 1.0, 1.0), + Vertex::new(2, 2.0, 2.0), + Vertex::new(3, 3.0, 3.0), + Vertex::new(4, 4.0, 4.0), + Vertex::new(5, 5.0, 5.0), + Vertex::new(6, 6.0, 6.0), + Vertex::new(7, 7.0, 7.0), + Vertex::new(8, 8.0, 8.0), + ]); + let adj = Box::new([ + CompactOrderedHashMap::new(vec![(EdgeId(0), VertexId(2))]), + CompactOrderedHashMap::empty(), + CompactOrderedHashMap::empty(), + CompactOrderedHashMap::new(vec![(EdgeId(1), VertexId(5))]), + CompactOrderedHashMap::empty(), + CompactOrderedHashMap::empty(), + CompactOrderedHashMap::new(vec![(EdgeId(2), VertexId(8))]), + CompactOrderedHashMap::empty(), + CompactOrderedHashMap::empty(), + ]); + let rev = Box::new([ + CompactOrderedHashMap::empty(), + CompactOrderedHashMap::empty(), + CompactOrderedHashMap::new(vec![(EdgeId(0), VertexId(0))]), + CompactOrderedHashMap::empty(), + CompactOrderedHashMap::empty(), + CompactOrderedHashMap::new(vec![(EdgeId(1), VertexId(3))]), + CompactOrderedHashMap::empty(), + CompactOrderedHashMap::empty(), + CompactOrderedHashMap::new(vec![(EdgeId(2), VertexId(6))]), + ]); + Graph { + adj, + rev, + edges, + vertices, + } + } + + #[test] + fn test_geometry_deserialization() { + let result = read_raw_file(mock_geometry_file(), parse_wkt_linestring, None).unwrap(); + assert_eq!(result.len(), 3); + } + + #[ignore = "no ideal candidate module for this unit test. TraversalOutputFormat concatenates linestrings but is too high-level for this test"] + fn test_add_geometry() { + let geoms_filepath = mock_geometry_file(); + let geoms_file_string = geoms_filepath.to_str().unwrap().to_string(); + let graph = Arc::new(mock_graph()); + let geometry_model = + GeometryModel::new_from_edges(&geoms_file_string, graph.clone()).unwrap(); + + // OLD TEST STUB: + // let expected_geometry = String::from("LINESTRING(0 0,1 1,2 2,3 3,4 4,5 5,6 6,7 7,8 8)"); + // let mut output_result = serde_json::json!({}); + // let route = vec![ + // EdgeTraversal { + // edge_id: EdgeId(0), + // access_cost: Cost::from(0.0), + // traversal_cost: Cost::from(0.0), + // result_state: vec![StateVar(0.0)], + // }, + // EdgeTraversal { + // edge_id: EdgeId(1), + // access_cost: Cost::from(0.0), + // traversal_cost: Cost::from(0.0), + // result_state: vec![StateVar(0.0)], + // }, + // EdgeTraversal { + // edge_id: EdgeId(2), + // access_cost: Cost::from(0.0), + // traversal_cost: Cost::from(0.0), + // result_state: vec![StateVar(0.0)], + // }, + // ]; + // let search_result = SearchAppResult { + // route, + // tree: HashMap::new(), + // search_executed_time: Local::now().to_rfc3339(), + // algorithm_runtime: Duration::ZERO, + // route_runtime: Duration::ZERO, + // search_app_runtime: Duration::ZERO, + // iterations: 0, + // }; + // let filename = mock_geometry_file(); + // let _route_geometry = true; + // let _tree_geometry = false; + // let geom_plugin = + // TraversalPlugin::from_file(&filename, Some(TraversalOutputFormat::Wkt), None).unwrap(); + + // geom_plugin + // .process(&mut output_result, &Ok(search_result)) + // .unwrap(); + // let geometry_wkt = output_result.get_route_geometry_wkt().unwrap(); + // assert_eq!(geometry_wkt, expected_geometry); + } +} diff --git a/rust/routee-compass-core/src/model/map/map_edge_rtree_object.rs b/rust/routee-compass-core/src/model/map/map_edge_rtree_object.rs new file mode 100644 index 00000000..ae1bb147 --- /dev/null +++ b/rust/routee-compass-core/src/model/map/map_edge_rtree_object.rs @@ -0,0 +1,59 @@ +use super::{map_error::MapError, spatial_index_ops as ops}; +use crate::model::{ + network::{Edge, EdgeId}, + unit::{Distance, DistanceUnit}, +}; +use geo::{LineString, Point}; +use rstar::{PointDistance, RTreeObject, AABB}; + +/// rtree element for edge-oriented map matching. +#[derive(Clone)] +pub struct MapEdgeRTreeObject { + pub edge_id: EdgeId, + pub envelope: AABB>, +} + +impl MapEdgeRTreeObject { + pub fn new(edge: &Edge, linestring: &LineString) -> MapEdgeRTreeObject { + MapEdgeRTreeObject { + edge_id: edge.edge_id, + envelope: linestring.envelope(), + } + } + + pub fn test_threshold( + &self, + point: &Point, + tolerance: &Option<(Distance, DistanceUnit)>, + ) -> Result { + match tolerance { + Some((dist, unit)) => ops::test_threshold(&self.envelope, point, *dist, *unit), + None => Ok(true), + } + } + + pub fn within_distance_threshold( + &self, + point: &Point, + tolerance: &Option<(Distance, DistanceUnit)>, + ) -> Result<(), MapError> { + match tolerance { + Some((dist, unit)) => ops::within_threshold(&self.envelope, point, *dist, *unit), + None => Ok(()), + } + } +} + +impl RTreeObject for MapEdgeRTreeObject { + type Envelope = AABB>; + + fn envelope(&self) -> Self::Envelope { + self.envelope + } +} + +impl PointDistance for MapEdgeRTreeObject { + fn distance_2(&self, point: &Point) -> f32 { + self.envelope.distance_2(point) + } +} diff --git a/rust/routee-compass-core/src/model/map/map_error.rs b/rust/routee-compass-core/src/model/map/map_error.rs new file mode 100644 index 00000000..ec370acc --- /dev/null +++ b/rust/routee-compass-core/src/model/map/map_error.rs @@ -0,0 +1,32 @@ +use crate::model::{ + network::EdgeId, + unit::{Distance, DistanceUnit}, +}; + +use super::{map_json_key::MapJsonKey, matching_type::MatchingType}; + +#[derive(thiserror::Error, Debug)] +pub enum MapError { + #[error("failure building model: {0}")] + BuildError(String), + #[error("map geometries missing EdgeId {0}")] + MissingEdgeId(EdgeId), + #[error("failure matching query to map: {0}")] + MapMatchError(String), + #[error("this Compass instance is configured to require destinations on inputs, but the appropriate 'destination_*' fields were not found on query (looked for: {0})")] + DestinationsRequired(MatchingType), + #[error("cannot map match on key '{0}', must be one of [origin_x, origin_y, destination_x, destination_y]")] + InvalidMapMatchingKey(MapJsonKey), + #[error("input missing required field '{0}'")] + InputMissingField(MapJsonKey), + #[error("failure deserializing value {0} as expected type {1}")] + InputDeserializingError(String, String), + #[error("input has '{0}' field without required paired field '{1}'")] + InputMissingPairedField(MapJsonKey, MapJsonKey), + #[error("failure re-projecting geometry: {error} original: {geometry}")] + ProjectionError { geometry: String, error: String }, + #[error("result not found within distance threshold of {1}/{2}: {0}")] + DistanceThresholdError(String, Distance, DistanceUnit), + #[error("{0}")] + InternalError(String), +} diff --git a/rust/routee-compass-core/src/model/map/map_json_extensions.rs b/rust/routee-compass-core/src/model/map/map_json_extensions.rs new file mode 100644 index 00000000..f6b61697 --- /dev/null +++ b/rust/routee-compass-core/src/model/map/map_json_extensions.rs @@ -0,0 +1,165 @@ +use super::{map_error::MapError, map_json_key::MapJsonKey}; +use crate::model::network::{EdgeId, VertexId}; +use geo; + +pub trait MapJsonExtensions { + fn get_origin_coordinate(&self) -> Result, MapError>; + fn get_destination_coordinate(&self) -> Result>, MapError>; + fn add_origin_vertex(&mut self, vertex_id: VertexId) -> Result<(), MapError>; + fn add_destination_vertex(&mut self, vertex_id: VertexId) -> Result<(), MapError>; + fn add_origin_edge(&mut self, edge_id: EdgeId) -> Result<(), MapError>; + fn add_destination_edge(&mut self, edge_id: EdgeId) -> Result<(), MapError>; + fn get_origin_vertex(&self) -> Result; + fn get_destination_vertex(&self) -> Result, MapError>; + fn get_origin_edge(&self) -> Result; + fn get_destination_edge(&self) -> Result, MapError>; +} + +impl MapJsonExtensions for serde_json::Value { + fn get_origin_coordinate(&self) -> Result, MapError> { + let origin_x = self + .get(MapJsonKey::OriginX.to_string()) + .ok_or(MapError::InputMissingField(MapJsonKey::OriginX))? + .as_f64() + .ok_or_else(|| { + MapError::InputDeserializingError( + MapJsonKey::OriginX.to_string(), + String::from("f64"), + ) + })?; + let origin_y = self + .get(MapJsonKey::OriginY.to_string()) + .ok_or(MapError::InputMissingField(MapJsonKey::OriginY))? + .as_f64() + .ok_or_else(|| { + MapError::InputDeserializingError( + MapJsonKey::OriginY.to_string(), + String::from("f64"), + ) + })?; + Ok(geo::Coord::from((origin_x as f32, origin_y as f32))) + } + fn get_destination_coordinate(&self) -> Result>, MapError> { + let x_field = MapJsonKey::DestinationX; + let y_field = MapJsonKey::DestinationY; + let x_opt = self.get(x_field.to_string()); + let y_opt = self.get(y_field.to_string()); + match (x_opt, y_opt) { + (None, None) => Ok(None), + (None, Some(_)) => Err(MapError::InputMissingPairedField(y_field, x_field)), + (Some(_), None) => Err(MapError::InputMissingPairedField(x_field, y_field)), + (Some(x_json), Some(y_json)) => { + let x = x_json.as_f64().ok_or_else(|| { + MapError::InputDeserializingError(x_field.to_string(), String::from("f64")) + })?; + let y = y_json.as_f64().ok_or_else(|| { + MapError::InputDeserializingError(y_field.to_string(), String::from("f64")) + })?; + Ok(Some(geo::Coord::from((x as f32, y as f32)))) + } + } + } + fn add_origin_vertex(&mut self, vertex_id: VertexId) -> Result<(), MapError> { + match self { + serde_json::Value::Object(map) => { + map.insert( + MapJsonKey::OriginVertex.to_string(), + serde_json::Value::from(vertex_id.0), + ); + Ok(()) + } + _ => Err(MapError::InputDeserializingError( + String::from(""), + String::from("json object"), + )), + } + } + fn add_destination_vertex(&mut self, vertex_id: VertexId) -> Result<(), MapError> { + match self { + serde_json::Value::Object(map) => { + map.insert( + MapJsonKey::DestinationVertex.to_string(), + serde_json::Value::from(vertex_id.0), + ); + Ok(()) + } + _ => Err(MapError::InputDeserializingError( + String::from(""), + String::from("json object"), + )), + } + } + + fn get_origin_vertex(&self) -> Result { + let key = MapJsonKey::OriginVertex.to_string(); + self.get(&key) + .ok_or(MapError::InputMissingField(MapJsonKey::OriginVertex))? + .as_u64() + .map(|v| VertexId(v as usize)) + .ok_or_else(|| { + MapError::InputDeserializingError( + MapJsonKey::OriginVertex.to_string(), + String::from("u64"), + ) + }) + } + + fn get_destination_vertex(&self) -> Result, MapError> { + let key = MapJsonKey::OriginVertex.to_string(); + match self.get(&key) { + None => Ok(None), + Some(v) => v + .as_u64() + .map(|v| Some(VertexId(v as usize))) + .ok_or_else(|| MapError::InputDeserializingError(key.clone(), String::from("u64"))), + } + } + + fn get_origin_edge(&self) -> Result { + let key = MapJsonKey::OriginEdge.to_string(); + self.get(&key) + .ok_or(MapError::InputMissingField(MapJsonKey::OriginEdge))? + .as_u64() + .map(|v| EdgeId(v as usize)) + .ok_or_else(|| MapError::InputDeserializingError(key.clone(), String::from("u64"))) + } + + fn get_destination_edge(&self) -> Result, MapError> { + let key = MapJsonKey::DestinationEdge.to_string(); + match self.get(&key) { + None => Ok(None), + Some(v) => v + .as_u64() + .map(|v| Some(EdgeId(v as usize))) + .ok_or_else(|| MapError::InputDeserializingError(key.clone(), String::from("u64"))), + } + } + + fn add_origin_edge(&mut self, edge_id: EdgeId) -> Result<(), MapError> { + let key = MapJsonKey::OriginEdge.to_string(); + match self { + serde_json::Value::Object(map) => { + map.insert(key, serde_json::Value::from(edge_id.0)); + Ok(()) + } + _ => Err(MapError::InputDeserializingError( + String::from(""), + String::from("json object"), + )), + } + } + + fn add_destination_edge(&mut self, edge_id: EdgeId) -> Result<(), MapError> { + let key = MapJsonKey::DestinationEdge.to_string(); + match self { + serde_json::Value::Object(map) => { + map.insert(key, serde_json::Value::from(edge_id.0)); + Ok(()) + } + _ => Err(MapError::InputDeserializingError( + String::from(""), + String::from("json object"), + )), + } + } +} diff --git a/rust/routee-compass-core/src/model/map/map_json_key.rs b/rust/routee-compass-core/src/model/map/map_json_key.rs new file mode 100644 index 00000000..570017d1 --- /dev/null +++ b/rust/routee-compass-core/src/model/map/map_json_key.rs @@ -0,0 +1,32 @@ +use serde::{Deserialize, Serialize}; +use std::fmt::Display; + +#[derive(Serialize, Deserialize, Clone, Copy, Debug)] +#[serde(rename_all = "snake_case")] +pub enum MapJsonKey { + OriginX, + OriginY, + DestinationX, + DestinationY, + OriginVertex, + DestinationVertex, + OriginEdge, + DestinationEdge, +} + +impl Display for MapJsonKey { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + use MapJsonKey as I; + let s = match self { + I::OriginX => "origin_x", + I::OriginY => "origin_y", + I::DestinationX => "destination_x", + I::DestinationY => "destination_y", + I::OriginVertex => "origin_vertex", + I::DestinationVertex => "destination_vertex", + I::OriginEdge => "origin_edge", + I::DestinationEdge => "destination_edge", + }; + write!(f, "{}", s) + } +} diff --git a/rust/routee-compass-core/src/model/map/map_model.rs b/rust/routee-compass-core/src/model/map/map_model.rs new file mode 100644 index 00000000..82983ee3 --- /dev/null +++ b/rust/routee-compass-core/src/model/map/map_model.rs @@ -0,0 +1,83 @@ +use super::map_error::MapError; +use super::map_model_config::MapModelConfig; +use super::matching_type::MatchingType; +use super::spatial_index::SpatialIndex; +use super::{geometry_model::GeometryModel, matching_type::MapInputResult}; +use crate::algorithm::search::search_instance::SearchInstance; +use crate::model::network::{EdgeId, Graph}; +use geo::LineString; +use std::sync::Arc; + +pub struct MapModel { + pub matching_type: MatchingType, + pub spatial_index: SpatialIndex, + pub geometry_model: GeometryModel, + pub queries_without_destinations: bool, +} + +impl MapModel { + pub fn new(graph: Arc, config: MapModelConfig) -> Result { + let matching_type = config.get_matching_type()?; + match config { + MapModelConfig::VertexMapModelConfig { + tolerance, + geometry_input_file, + queries_without_destinations, + matching_type: _, + } => { + let tol_unpacked = tolerance.map(|t| t.unpack()); + let spatial_index = + SpatialIndex::new_vertex_oriented(&graph.clone().vertices, tol_unpacked); + let geometry_model = match geometry_input_file { + None => GeometryModel::new_from_vertices(graph), + Some(file) => GeometryModel::new_from_edges(&file, graph.clone()), + }?; + + let map_model = MapModel { + matching_type, + spatial_index, + geometry_model, + queries_without_destinations, + }; + Ok(map_model) + } + MapModelConfig::EdgeMapModelConfig { + tolerance, + geometry_input_file, + queries_without_destinations, + matching_type: _, + } => { + let tol_unpacked = tolerance.map(|t| t.unpack()); + let geometry_model = + GeometryModel::new_from_edges(&geometry_input_file, graph.clone())?; + let spatial_index = + SpatialIndex::new_edge_oriented(graph.clone(), &geometry_model, tol_unpacked); + let map_model = MapModel { + matching_type, + spatial_index, + geometry_model, + queries_without_destinations, + }; + Ok(map_model) + } + } + } + + pub fn get<'a>(&'a self, edge_id: &EdgeId) -> Result<&'a LineString, MapError> { + self.geometry_model.get(edge_id) + } + + pub fn map_match( + &self, + query: &mut serde_json::Value, + si: &SearchInstance, + ) -> Result<(), MapError> { + self.matching_type.process_origin(query, si)?; + match self.matching_type.process_destination(query, si)? { + MapInputResult::NotFound if !self.queries_without_destinations => { + Err(MapError::DestinationsRequired(self.matching_type.clone())) + } + _ => Ok(()), + } + } +} diff --git a/rust/routee-compass-core/src/model/map/map_model_config.rs b/rust/routee-compass-core/src/model/map/map_model_config.rs new file mode 100644 index 00000000..eb011b64 --- /dev/null +++ b/rust/routee-compass-core/src/model/map/map_model_config.rs @@ -0,0 +1,105 @@ +use super::{map_error::MapError, matching_type::MatchingType}; +use crate::model::unit::{Distance, DistanceUnit}; +use serde::{Deserialize, Serialize}; +use serde_json::Value; +use std::str::FromStr; + +#[derive(Serialize, Deserialize, Clone, Debug)] +#[serde(tag = "type")] +pub enum MapModelConfig { + #[serde(rename = "vertex")] + VertexMapModelConfig { + // #[serde(deserialize_with = "de_tolerance")] + tolerance: Option, + geometry_input_file: Option, + queries_without_destinations: bool, + matching_type: Option>, + }, + #[serde(rename = "edge")] + EdgeMapModelConfig { + // #[serde(deserialize_with = "de_tolerance")] + tolerance: Option, + geometry_input_file: String, + queries_without_destinations: bool, + matching_type: Option>, + }, +} + +impl MapModelConfig { + pub fn get_matching_type(&self) -> Result { + let matching_type = match self { + MapModelConfig::VertexMapModelConfig { + tolerance: _, + geometry_input_file: _, + queries_without_destinations: _, + matching_type, + } => matching_type, + MapModelConfig::EdgeMapModelConfig { + tolerance: _, + geometry_input_file: _, + queries_without_destinations: _, + matching_type, + } => matching_type, + }; + match matching_type { + None => Ok(MatchingType::default()), + Some(string_list) => { + let deserialized = string_list + .iter() + .map(|s| MatchingType::from_str(s.as_str())) + .collect::, _>>()?; + match deserialized[..] { + [MatchingType::Point] => Ok(MatchingType::Point), + [MatchingType::VertexId] => Ok(MatchingType::VertexId), + [MatchingType::EdgeId] => Ok(MatchingType::EdgeId), + _ => Ok(MatchingType::Combined(deserialized)), + } + } + } + } +} + +impl Default for MapModelConfig { + fn default() -> Self { + MapModelConfig::VertexMapModelConfig { + tolerance: None, + geometry_input_file: None, + queries_without_destinations: true, + matching_type: Some(MatchingType::names()), + } + } +} + +impl TryFrom> for MapModelConfig { + type Error = String; + + fn try_from(value: Option<&Value>) -> Result { + match value { + None => Ok(MapModelConfig::default()), + Some(json) => { + let map_model_str = serde_json::to_string_pretty(&json).unwrap_or_default(); + let map_model_config: MapModelConfig = + serde_json::from_value(json.clone()).map_err(|e| { + format!( + "unable to deserialize map model configuration section due to '{}'. input data: \n{}", + e, + map_model_str + ) + })?; + Ok(map_model_config) + } + } + } +} + +#[derive(Serialize, Deserialize, Debug, Clone)] +pub struct DistanceTolerance { + pub distance: Distance, + pub unit: DistanceUnit, +} + +impl DistanceTolerance { + pub fn unpack(&self) -> (Distance, DistanceUnit) { + (self.distance, self.unit) + } +} diff --git a/rust/routee-compass-core/src/model/map/map_vertex_rtree_object.rs b/rust/routee-compass-core/src/model/map/map_vertex_rtree_object.rs new file mode 100644 index 00000000..d179ceac --- /dev/null +++ b/rust/routee-compass-core/src/model/map/map_vertex_rtree_object.rs @@ -0,0 +1,62 @@ +use super::{map_error::MapError, spatial_index_ops as ops}; +use crate::model::{ + network::{Vertex, VertexId}, + unit::{Distance, DistanceUnit}, +}; +use geo::{coord, Point}; +use rstar::{PointDistance, RTreeObject, AABB}; + +/// rtree element for vertex-oriented map matching. +#[derive(Clone)] +pub struct MapVertexRTreeObject { + pub vertex_id: VertexId, + pub envelope: AABB>, +} + +impl PointDistance for MapVertexRTreeObject { + fn distance_2(&self, point: &Point) -> f32 { + self.envelope.distance_2(point) + } +} + +impl MapVertexRTreeObject { + pub fn new(vertex: &Vertex) -> MapVertexRTreeObject { + MapVertexRTreeObject { + vertex_id: vertex.vertex_id, + envelope: AABB::from_corners( + geo::Point(coord! {x: vertex.x(), y: vertex.y()}), + geo::Point(coord! {x: vertex.x(), y: vertex.y()}), + ), + } + } + + pub fn test_threshold( + &self, + point: &Point, + tolerance: &Option<(Distance, DistanceUnit)>, + ) -> Result { + match tolerance { + Some((dist, unit)) => ops::test_threshold(&self.envelope, point, *dist, *unit), + None => Ok(true), + } + } + + pub fn within_distance_threshold( + &self, + point: &Point, + tolerance: &Option<(Distance, DistanceUnit)>, + ) -> Result<(), MapError> { + match tolerance { + Some((dist, unit)) => ops::within_threshold(&self.envelope, point, *dist, *unit), + None => Ok(()), + } + } +} + +impl RTreeObject for MapVertexRTreeObject { + type Envelope = AABB>; + + fn envelope(&self) -> Self::Envelope { + self.envelope + } +} diff --git a/rust/routee-compass-core/src/model/map/matching_type.rs b/rust/routee-compass-core/src/model/map/matching_type.rs new file mode 100644 index 00000000..24206eb9 --- /dev/null +++ b/rust/routee-compass-core/src/model/map/matching_type.rs @@ -0,0 +1,293 @@ +use super::{ + map_error::MapError, map_json_extensions::MapJsonExtensions, + nearest_search_result::NearestSearchResult, +}; +use crate::{ + algorithm::search::search_instance::SearchInstance, + model::{frontier::frontier_model::FrontierModel, network::Edge}, +}; +use itertools::Itertools; +use serde::{Deserialize, Serialize}; +use std::{fmt::Display, str::FromStr, sync::Arc}; + +/// a [`MatchingType`] is the type of data expected on a query +/// that can be mapped to the graph. +#[derive(Serialize, Deserialize, Clone, Debug)] +#[serde(rename_all = "snake_case")] +pub enum MatchingType { + /// expect origin [, destination] VertexIds on the query. + VertexId, + /// expect origin [, destination] EdgeIds on the query. + EdgeId, + /// expect origin [, destination] Points on the query. + Point, + /// expect any combination of the map input types provided + Combined(Vec), +} + +impl MatchingType { + pub const ALL: [MatchingType; 3] = [Self::Point, Self::VertexId, Self::EdgeId]; + + pub fn names() -> Vec { + MatchingType::ALL + .iter() + .map(|t| t.to_string()) + .collect_vec() + } + + pub fn names_str() -> String { + Self::names().iter().join(", ") + } +} + +impl Default for MatchingType { + /// the default MatchingType is to first attempt to process a Point into VertexIds, + /// then attempt to find VertexIds on the query, + /// then finally attempt to find EdgeIds on the query. + fn default() -> Self { + Self::Combined(Self::ALL.to_vec()) + } +} + +impl Display for MatchingType { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + let self_str = match self { + MatchingType::Combined(vec) => vec.iter().map(|mit| mit.to_string()).join(","), + MatchingType::VertexId => String::from("vertex_id"), + MatchingType::EdgeId => String::from("edge_id"), + MatchingType::Point => String::from("point"), + }; + write!(f, "{}", self_str) + } +} + +impl FromStr for MatchingType { + type Err = MapError; + + fn from_str(s: &str) -> Result { + match s.trim().to_lowercase().as_str() { + "vertex_id" => Ok(Self::VertexId), + "edge_id" => Ok(Self::EdgeId), + "point" => Ok(Self::Point), + _ => Err(MapError::BuildError(format!( + "unrecognized matching type '{}', must be one of [{}]", + s, + MatchingType::names_str() + ))), + } + } +} + +pub enum MapInputResult { + Found, + NotFound, +} + +impl MatchingType { + /// attempts to find any valid input origin fields, or performs map matching, in order to + /// append those fields to the query, based on the type of [`MatchingType`] supported. + pub fn process_origin( + &self, + query: &mut serde_json::Value, + si: &SearchInstance, + ) -> Result<(), MapError> { + use MatchingType as MT; + match self { + MT::Combined(vec) => { + let mut errors = vec![]; + for matching_type in vec.iter() { + match matching_type.process_origin(query, si) { + Ok(_) => return Ok(()), + Err(e) => { + let mit = serde_json::to_string(matching_type).unwrap_or_default(); + let msg = format!("no origin {} on input query: {}", mit, e); + errors.push(msg); + } + } + } + if !errors.is_empty() { + let msg = errors.iter().join("; "); + Err(MapError::MapMatchError(format!( + "unable to match query to map: {}", + msg + ))) + } else { + Ok(()) + } + } + MT::VertexId => { + // validate all out-edges for this vertex + let vertex_id = query.get_origin_vertex()?; + let edges = si.graph.out_edges(&vertex_id).iter().map(|edge_id| si.graph.get_edge(edge_id)).collect::, _>>().map_err(|e| MapError::MapMatchError(format!("while attempting to validate vertex id {} for map matching, the underlying Graph model caused an error: {}", vertex_id, e)))?; + for edge in edges.into_iter() { + if let Ok(true) = test_edge(edge, si.frontier_model.clone()) { + return Ok(()); + } + } + Err(MapError::MapMatchError(format!("attempted to map match origin vertex_id {} provided in query, but no out-edges are valid for traversal according to this FrontierModel instance", vertex_id))) + } + MT::EdgeId => { + // validate this edge + let edge_id = query.get_origin_edge()?; + let edge = si.graph.get_edge(&edge_id).map_err(|e| MapError::MapMatchError(format!("while attempting to validate edge id {} for map matching, the underlying Graph model caused an error: {}", edge_id, e)))?; + validate_edge(edge, si.frontier_model.clone()) + } + MT::Point => { + // iterate through nearest values in the spatial index to this point that + // are within our matching tolerance and validate them with the frontier model + let src_point = geo::Point(query.get_origin_coordinate()?); + for nearest in si.map_model.spatial_index.nearest_graph_id_iter(&src_point) { + match nearest { + NearestSearchResult::NearestVertex(vertex_id) => { + // if any of the out-edges of this vertex are valid, we can finish + let edges = si.graph.out_edges(&vertex_id).iter().map(|edge_id| si.graph.get_edge(edge_id)).collect::, _>>().map_err(|e| MapError::MapMatchError(format!("while attempting to validate vertex id {} for map matching, the underlying Graph model caused an error: {}", vertex_id, e)))?; + for edge in edges.into_iter() { + let is_valid = test_edge(edge, si.frontier_model.clone())?; + if is_valid { + query.add_origin_vertex(vertex_id)?; + return Ok(()); + } + } + continue; + } + NearestSearchResult::NearestEdge(edge_id) => { + let edge = si.graph.get_edge(&edge_id).map_err(|e| MapError::MapMatchError(format!("while attempting to validate edge id {} from nearest neighbor search for map matching, the underlying Graph model caused an error: {}", edge_id, e)))?; + let is_valid = test_edge(edge, si.frontier_model.clone())?; + if is_valid { + query.add_origin_edge(edge_id)?; + return Ok(()); + } + } + } + } + Err(MapError::MapMatchError(format!( + "attempted to match query origin coordinate ({}, {}) to map but exausted all possibilities", + src_point.x(), + src_point.y(), + ))) + } + } + } + + /// attempts to find any valid input destination fields, or performs map matching, in order to + /// append those fields to the query, based on the type of [`MatchingType`] supported. + /// since destinations are optional, the method returns a [`MapInputResult`] that indicates if + /// a destination was found or not found. + pub fn process_destination( + &self, + query: &mut serde_json::Value, + si: &SearchInstance, + ) -> Result { + use MatchingType as MT; + match self { + MT::Combined(vec) => { + let mut errors = vec![]; + for matching_type in vec.iter() { + match matching_type.process_destination(query, si) { + Ok(_) => return Ok(MapInputResult::Found), + Err(e) => { + let mit = serde_json::to_string(matching_type).unwrap_or_default(); + let msg = format!("no destination {} on input query: {}", mit, e); + errors.push(msg); + } + } + } + if !errors.is_empty() { + let msg = errors.iter().join("; "); + Err(MapError::MapMatchError(format!( + "unable to match query to map: {}", + msg + ))) + } else { + Ok(MapInputResult::NotFound) + } + } + + MT::VertexId => { + // validate all out-edges for this vertex, if one is accepted, we are done. + let vertex_id_option = query.get_destination_vertex()?; + match vertex_id_option { + Some(vertex_id) => { + let edges = si.graph.in_edges(&vertex_id).iter().map(|edge_id| si.graph.get_edge(edge_id)).collect::, _>>().map_err(|e| MapError::MapMatchError(format!("while attempting to validate vertex id {} for map matching, the underlying Graph model caused an error: {}", vertex_id, e)))?; + for edge in edges.into_iter() { + if let Ok(true) = test_edge(edge, si.frontier_model.clone()) { + return Ok(MapInputResult::Found); + } + } + Err(MapError::MapMatchError(format!("attempted to map match destination vertex_id {} provided in query, but no in-edges are valid for traversal according to this FrontierModel instance", vertex_id))) + } + None => Ok(MapInputResult::NotFound), + } + } + + MT::EdgeId => { + // validate this edge + let dest_edge_option = query.get_destination_edge()?; + match dest_edge_option { + Some(edge_id) => { + let edge = si.graph.get_edge(&edge_id).map_err(|e| MapError::MapMatchError(format!("while attempting to validate edge id {} for map matching, the underlying Graph model caused an error: {}", edge_id, e)))?; + validate_edge(edge, si.frontier_model.clone())?; + Ok(MapInputResult::Found) + } + None => Ok(MapInputResult::NotFound), + } + } + + MT::Point => { + // iterate through nearest values in the spatial index to this point that + // are within our matching tolerance and validate them with the frontier model + let dst_point = match query.get_destination_coordinate()? { + Some(coord) => geo::Point(coord), + None => return Ok(MapInputResult::NotFound), + }; + + for nearest in si.map_model.spatial_index.nearest_graph_id_iter(&dst_point) { + match nearest { + NearestSearchResult::NearestVertex(vertex_id) => { + // if any of the out-edges of this vertex are valid, we can finish + let edges = si.graph.out_edges(&vertex_id).iter().map(|edge_id| si.graph.get_edge(edge_id)).collect::, _>>().map_err(|e| MapError::MapMatchError(format!("while attempting to validate vertex id {} for map matching, the underlying Graph model caused an error: {}", vertex_id, e)))?; + for edge in edges.into_iter() { + let is_valid = test_edge(edge, si.frontier_model.clone())?; + if is_valid { + query.add_destination_vertex(vertex_id)?; + return Ok(MapInputResult::Found); + } + } + continue; + } + NearestSearchResult::NearestEdge(edge_id) => { + let edge = si.graph.get_edge(&edge_id).map_err(|e| MapError::MapMatchError(format!("while attempting to validate edge id {} from nearest neighbor search for map matching, the underlying Graph model caused an error: {}", edge_id, e)))?; + let is_valid = test_edge(edge, si.frontier_model.clone())?; + if is_valid { + query.add_destination_edge(edge_id)?; + return Ok(MapInputResult::Found); + } + } + } + } + Err(MapError::MapMatchError(format!( + "attempted to match query destination coordinate ({}, {}) to map but exausted all possibilities", + dst_point.x(), + dst_point.y(), + ))) + } + } + } +} + +fn test_edge(edge: &Edge, fm: Arc) -> Result { + let is_valid = fm.valid_edge(edge).map_err(|e| MapError::MapMatchError(format!("while attempting to validate edge id {} for map matching, the underlying FrontierModel caused an error: {}", edge.edge_id, e)))?; + Ok(is_valid) +} + +fn validate_edge(edge: &Edge, fm: Arc) -> Result<(), MapError> { + let is_valid = test_edge(edge, fm)?; + if !is_valid { + Err(MapError::MapMatchError(format!( + "query assigned origin of edge {} is not valid according to the FrontierModel", + edge.edge_id + ))) + } else { + Ok(()) + } +} diff --git a/rust/routee-compass-core/src/model/map/mod.rs b/rust/routee-compass-core/src/model/map/mod.rs new file mode 100644 index 00000000..6579fe41 --- /dev/null +++ b/rust/routee-compass-core/src/model/map/mod.rs @@ -0,0 +1,12 @@ +pub mod geometry_model; +pub mod map_edge_rtree_object; +pub mod map_error; +pub mod map_json_extensions; +pub mod map_json_key; +pub mod map_model; +pub mod map_model_config; +pub mod map_vertex_rtree_object; +pub mod matching_type; +pub mod nearest_search_result; +pub mod spatial_index; +pub mod spatial_index_ops; diff --git a/rust/routee-compass-core/src/model/map/nearest_search_result.rs b/rust/routee-compass-core/src/model/map/nearest_search_result.rs new file mode 100644 index 00000000..c073d939 --- /dev/null +++ b/rust/routee-compass-core/src/model/map/nearest_search_result.rs @@ -0,0 +1,8 @@ +use crate::model::network::{EdgeId, VertexId}; + +/// simple 'Either' return type that covers both vertex-oriented and edge-oriented +/// search implementations. +pub enum NearestSearchResult { + NearestVertex(VertexId), + NearestEdge(EdgeId), +} diff --git a/rust/routee-compass-core/src/model/map/spatial_index.rs b/rust/routee-compass-core/src/model/map/spatial_index.rs new file mode 100644 index 00000000..731a120e --- /dev/null +++ b/rust/routee-compass-core/src/model/map/spatial_index.rs @@ -0,0 +1,152 @@ +use std::sync::Arc; + +use super::{ + geometry_model::GeometryModel, map_edge_rtree_object::MapEdgeRTreeObject, map_error::MapError, + map_vertex_rtree_object::MapVertexRTreeObject, nearest_search_result::NearestSearchResult, +}; +use crate::model::{ + network::{Graph, Vertex}, + unit::{Distance, DistanceUnit}, +}; +use geo::Point; +use rstar::RTree; + +pub enum SpatialIndex { + VertexOrientedIndex { + rtree: RTree, + tolerance: Option<(Distance, DistanceUnit)>, + }, + EdgeOrientedIndex { + rtree: RTree, + tolerance: Option<(Distance, DistanceUnit)>, + }, +} + +impl SpatialIndex { + /// creates a new instance of the rtree model that is vertex-oriented; that is, the + /// rtree is built over the vertices in the graph, and nearest neighbor searches return + /// a VertexId. + pub fn new_vertex_oriented( + vertices: &[Vertex], + tolerance: Option<(Distance, DistanceUnit)>, + ) -> Self { + let entries: Vec = + vertices.iter().map(MapVertexRTreeObject::new).collect(); + let rtree = RTree::bulk_load(entries); + Self::VertexOrientedIndex { rtree, tolerance } + } + + /// creates a new instance of the rtree model that is edge-oriented; that is, the + /// rtree is built over the edges in the graph, and nearest neighbor searches return + /// the edge's destination vertex. + /// - future work: make SearchOrientation set which incident vertex is returned. + pub fn new_edge_oriented( + graph: Arc, + geometry_model: &GeometryModel, + tolerance: Option<(Distance, DistanceUnit)>, + ) -> Self { + let entries: Vec = graph + .edges + .iter() + .zip(geometry_model.geometries()) + .map(|(e, g)| MapEdgeRTreeObject::new(e, g)) + .collect(); + let rtree = RTree::bulk_load(entries.to_vec()); + + Self::EdgeOrientedIndex { rtree, tolerance } + } + + /// gets the nearest graph id, which is a VertexId or EdgeId depending on the orientation + /// of the RTree. + pub fn nearest_graph_id(&self, point: &Point) -> Result { + match self { + SpatialIndex::VertexOrientedIndex { rtree, tolerance } => { + let nearest = rtree.nearest_neighbor(point).ok_or_else(|| { + MapError::MapMatchError(String::from("no map vertices exist for matching")) + })?; + nearest.within_distance_threshold(point, tolerance)?; + Ok(NearestSearchResult::NearestVertex(nearest.vertex_id)) + } + SpatialIndex::EdgeOrientedIndex { rtree, tolerance } => { + let nearest = rtree.nearest_neighbor(point).ok_or_else(|| { + MapError::MapMatchError(String::from("no map vertices exist for matching")) + })?; + nearest.within_distance_threshold(point, tolerance)?; + Ok(NearestSearchResult::NearestEdge(nearest.edge_id)) + } + } + } + + /// builds an iterator over map edges ordered by nearness to the given point. + /// applies the (map-matching) distance tolerance filter. + pub fn nearest_graph_id_iter<'a>( + &'a self, + point: &'a Point, + ) -> Box + 'a> { + match self { + SpatialIndex::VertexOrientedIndex { rtree, tolerance } => { + let iter = rtree + .nearest_neighbor_iter_with_distance_2(point) + .filter(|(obj, _)| obj.test_threshold(point, tolerance).unwrap_or(false)) + .map(|(next, _)| NearestSearchResult::NearestVertex(next.vertex_id)); + Box::new(iter) + } + SpatialIndex::EdgeOrientedIndex { rtree, tolerance } => { + let iter = rtree + .nearest_neighbor_iter_with_distance_2(point) + .filter(|(obj, _)| obj.test_threshold(point, tolerance).unwrap_or(false)) + .map(|(next, _)| NearestSearchResult::NearestEdge(next.edge_id)); + Box::new(iter) + } + } + } +} + +#[cfg(test)] +mod test { + use std::path::PathBuf; + + use super::*; + use crate::{ + model::network::{Vertex, VertexId}, + util::fs::read_utils, + }; + use geo; + + #[test] + fn test_vertex_oriented_e2e() { + let vertices_filepath = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("src") + .join("model") + .join("map") + .join("test") + .join("rtree_vertices.csv"); + + let query_filepath = PathBuf::from(env!("CARGO_MANIFEST_DIR")) + .join("src") + .join("model") + .join("map") + .join("test") + .join("rtree_query.json"); + + let vertices: Box<[Vertex]> = + read_utils::from_csv(&vertices_filepath.as_path(), true, None).unwrap(); + let index = SpatialIndex::new_vertex_oriented(&vertices, None); + + // test nearest neighbor queries perform as expected + let o_result = index + .nearest_graph_id(&geo::Point(geo::Coord::from((0.101, 0.101)))) + .unwrap(); + let d_result = index + .nearest_graph_id(&geo::Point(geo::Coord::from((1.901, 2.101)))) + .unwrap(); + match o_result { + NearestSearchResult::NearestEdge(_) => panic!("should find a vertex!"), + NearestSearchResult::NearestVertex(vertex_id) => assert_eq!(vertex_id, VertexId(0)), + } + match d_result { + NearestSearchResult::NearestEdge(_) => panic!("should find a vertex!"), + NearestSearchResult::NearestVertex(vertex_id) => assert_eq!(vertex_id, VertexId(2)), + } + } +} diff --git a/rust/routee-compass-core/src/model/map/spatial_index_ops.rs b/rust/routee-compass-core/src/model/map/spatial_index_ops.rs new file mode 100644 index 00000000..c064ed99 --- /dev/null +++ b/rust/routee-compass-core/src/model/map/spatial_index_ops.rs @@ -0,0 +1,47 @@ +use super::map_error::MapError; +use crate::{ + model::unit::{Distance, DistanceUnit}, + util::geo::haversine, +}; +use geo::Point; +use rstar::AABB; + +pub fn test_threshold( + envelope: &AABB>, + other: &Point, + tolerance_distance: Distance, + tolerance_distance_unit: DistanceUnit, +) -> Result { + let this_coord = envelope.lower().0; + let distance_meters = + haversine::coord_distance_meters(&this_coord, &other.0).map_err(MapError::MapMatchError)?; + let distance = DistanceUnit::Meters.convert(&distance_meters, &tolerance_distance_unit); + Ok(distance >= tolerance_distance) +} + +pub fn within_threshold( + envelope: &AABB>, + other: &Point, + tolerance_distance: Distance, + tolerance_distance_unit: DistanceUnit, +) -> Result<(), MapError> { + let this_coord = envelope.lower().0; + let distance_meters = + haversine::coord_distance_meters(&this_coord, &other.0).map_err(MapError::MapMatchError)?; + let distance = DistanceUnit::Meters.convert(&distance_meters, &tolerance_distance_unit); + if distance >= tolerance_distance { + Err(MapError::MapMatchError( + format!( + "coord {:?} nearest vertex coord is {:?} which is {} {} away, exceeding the distance tolerance of {} {}", + this_coord, + other, + distance, + tolerance_distance_unit, + tolerance_distance, + tolerance_distance_unit, + ) + )) + } else { + Ok(()) + } +} diff --git a/rust/routee-compass/src/plugin/output/default/test/geometry.txt b/rust/routee-compass-core/src/model/map/test/geometries.txt similarity index 100% rename from rust/routee-compass/src/plugin/output/default/test/geometry.txt rename to rust/routee-compass-core/src/model/map/test/geometries.txt diff --git a/rust/routee-compass/src/plugin/input/default/vertex_rtree/test/rtree_query.json b/rust/routee-compass-core/src/model/map/test/rtree_query.json similarity index 100% rename from rust/routee-compass/src/plugin/input/default/vertex_rtree/test/rtree_query.json rename to rust/routee-compass-core/src/model/map/test/rtree_query.json diff --git a/rust/routee-compass/src/plugin/input/default/vertex_rtree/test/rtree_vertices.csv b/rust/routee-compass-core/src/model/map/test/rtree_vertices.csv similarity index 100% rename from rust/routee-compass/src/plugin/input/default/vertex_rtree/test/rtree_vertices.csv rename to rust/routee-compass-core/src/model/map/test/rtree_vertices.csv diff --git a/rust/routee-compass-core/src/model/mod.rs b/rust/routee-compass-core/src/model/mod.rs index c2922796..a2abe779 100644 --- a/rust/routee-compass-core/src/model/mod.rs +++ b/rust/routee-compass-core/src/model/mod.rs @@ -1,6 +1,7 @@ pub mod access; pub mod cost; pub mod frontier; +pub mod map; pub mod network; pub mod state; pub mod termination; diff --git a/rust/routee-compass-core/src/model/network/edge.rs b/rust/routee-compass-core/src/model/network/edge.rs index 2f3bd972..a94aaf4e 100644 --- a/rust/routee-compass-core/src/model/network/edge.rs +++ b/rust/routee-compass-core/src/model/network/edge.rs @@ -24,14 +24,3 @@ impl Edge { } } } - -impl Default for Edge { - fn default() -> Self { - Edge { - edge_id: EdgeId(0), - src_vertex_id: VertexId(0), - dst_vertex_id: VertexId(1), - distance: Distance::ONE, - } - } -} diff --git a/rust/routee-compass/src/app/bindings.rs b/rust/routee-compass/src/app/bindings.rs index 88d6a711..3ae0bed9 100644 --- a/rust/routee-compass/src/app/bindings.rs +++ b/rust/routee-compass/src/app/bindings.rs @@ -210,12 +210,12 @@ pub trait CompassAppBindings { None => None, }; - let json_queries = queries + let mut json_queries = queries .iter() .map(|q| serde_json::from_str(q)) .collect::, serde_json::Error>>()?; - let results = self.app().run(json_queries, config_inner.as_ref())?; + let results = self.app().run(&mut json_queries, config_inner.as_ref())?; let string_results: Vec = results.iter().map(|r| r.to_string()).collect(); Ok(string_results) diff --git a/rust/routee-compass/src/app/cli/run.rs b/rust/routee-compass/src/app/cli/run.rs index ba319fdb..651e17f8 100644 --- a/rust/routee-compass/src/app/cli/run.rs +++ b/rust/routee-compass/src/app/cli/run.rs @@ -71,8 +71,8 @@ fn run_json( ) -> Result<(), CompassAppError> { let reader = BufReader::new(query_file); let user_json: serde_json::Value = serde_json::from_reader(reader)?; - let user_queries = user_json.get_queries()?; - let results = compass_app.run(user_queries, run_config)?; + let mut user_queries = user_json.get_queries()?; + let results = compass_app.run(&mut user_queries, run_config)?; for result in results.iter() { log_error(result); } @@ -97,7 +97,7 @@ fn run_newline_json( for (iteration, chunk) in chunks.into_iter().enumerate() { debug!("executing batch {}", iteration + 1); // parse JSON output - let (chunk_queries, errors): (Vec, Vec) = + let (mut chunk_queries, errors): (Vec, Vec) = chunk.partition_map(|row| match row { Ok(string) => match serde_json::from_str(&string) { Ok(query) => Either::Left(query), @@ -112,7 +112,7 @@ fn run_newline_json( }); // run Compass on this chunk of queries - for result in compass_app.run(chunk_queries, run_config)?.iter() { + for result in compass_app.run(&mut chunk_queries, run_config)?.iter() { log_error(result) } diff --git a/rust/routee-compass/src/app/compass/compass_app.rs b/rust/routee-compass/src/app/compass/compass_app.rs index 801c0e7d..be879787 100644 --- a/rust/routee-compass/src/app/compass/compass_app.rs +++ b/rust/routee-compass/src/app/compass/compass_app.rs @@ -1,9 +1,7 @@ +use super::compass_app_configuration::CompassAppConfiguration; use super::response::response_output_policy::ResponseOutputPolicy; use super::response::response_sink::ResponseSink; -use super::{ - compass_app_ops as ops, config::compass_app_builder::CompassAppBuilder, - search_orientation::SearchOrientation, -}; +use super::{compass_app_ops as ops, config::compass_app_builder::CompassAppBuilder}; use crate::app::compass::response::response_persistence_policy::ResponsePersistencePolicy; use crate::{ app::{ @@ -31,6 +29,8 @@ use itertools::{Either, Itertools}; use kdam::{Bar, BarExt}; use rayon::{current_num_threads, prelude::*}; use routee_compass_core::algorithm::search::search_instance::SearchInstance; +use routee_compass_core::model::map::map_model::MapModel; +use routee_compass_core::model::map::map_model_config::MapModelConfig; use routee_compass_core::model::state::state_model::StateModel; use routee_compass_core::{ algorithm::search::search_algorithm::SearchAlgorithm, @@ -52,13 +52,10 @@ use std::{ /// A CompassApp instance provides the high-level API for building and /// running RouteE Compass. pub struct CompassApp { - pub search_app: SearchApp, + pub search_app: Arc, pub input_plugins: Vec>, pub output_plugins: Vec>, - pub parallelism: usize, - pub search_orientation: SearchOrientation, - pub response_persistence_policy: ResponsePersistencePolicy, - pub response_output_policy: ResponseOutputPolicy, + pub configuration: CompassAppConfiguration, } impl CompassApp { @@ -207,7 +204,7 @@ impl TryFrom<(&Config, &CompassAppBuilder)> for CompassApp { let graph_start = Local::now(); let graph_params = config_json.get_config_section(CompassConfigurationField::Graph, &"TOML")?; - let graph = DefaultGraphBuilder::build(&graph_params)?; + let graph = Arc::new(DefaultGraphBuilder::build(&graph_params)?); let graph_duration = (Local::now() - graph_start) .to_std() .map_err(|e| CompassAppError::InternalError(e.to_string()))?; @@ -219,6 +216,19 @@ impl TryFrom<(&Config, &CompassAppBuilder)> for CompassApp { let graph_bytes = allocative::size_of_unique_allocated_data(&graph); log::info!("graph size: {} GB", graph_bytes as f64 / 1e9); + let map_start = Local::now(); + let map_model_json = config_json.get(CompassConfigurationField::MapModel.to_str()); + let map_model_config = + MapModelConfig::try_from(map_model_json).map_err(CompassAppError::BuildFailure)?; + let map_model = Arc::new(MapModel::new(graph.clone(), map_model_config).map_err(|e| { + CompassAppError::BuildFailure(format!("unable to load MapModel from config: {}", e)) + })?); + let map_dur = to_std(Local::now() - map_start)?; + log::info!( + "finished loading map model with duration {}", + map_dur.hhmmss() + ); + #[cfg(debug_assertions)] { use std::io::Write; @@ -247,16 +257,17 @@ impl TryFrom<(&Config, &CompassAppBuilder)> for CompassApp { } // build search app - let search_app: SearchApp = SearchApp::new( + let search_app = Arc::new(SearchApp::new( search_algorithm, graph, + map_model, state_model, traversal_model_service, access_model_service, cost_model_service, frontier_model_service, termination_model, - ); + )); // build plugins let plugins_start = Local::now(); @@ -272,31 +283,18 @@ impl TryFrom<(&Config, &CompassAppBuilder)> for CompassApp { plugins_duration.hhmmss() ); - // other parameters - let parallelism = config.get::(CompassConfigurationField::Parallelism.to_str())?; - let search_orientation = config - .get::(CompassConfigurationField::SearchOrientation.to_str())?; - let response_persistence_policy = config.get::( - CompassConfigurationField::ResponsePersistencePolicy.to_str(), - )?; - let response_output_policy = config.get::( - CompassConfigurationField::ResponseOutputPolicy.to_str(), - )?; + let configuration = CompassAppConfiguration::try_from(config)?; log::info!( - "additional parameters - parallelism={}, search orientation={:?}", - parallelism, - search_orientation + "additional parameters - parallelism={}", + configuration.parallelism, ); Ok(CompassApp { search_app, input_plugins, output_plugins, - parallelism, - search_orientation, - response_persistence_policy, - response_output_policy, + configuration, }) } } @@ -322,83 +320,46 @@ impl CompassApp { /// if pub fn run( &self, - queries: Vec, - config: Option<&serde_json::Value>, - ) -> Result, CompassAppError> { - // allow the user to overwrite global configurations + queries: &mut [serde_json::Value], + config: Option<&Value>, + ) -> Result, CompassAppError> { + // allow the user to overwrite global configurations for this run let parallelism: usize = get_optional_run_config( &CompassConfigurationField::Parallelism.to_str(), &"run configuration", config, )? - .unwrap_or(self.parallelism); + .unwrap_or(self.configuration.parallelism); let response_persistence_policy: ResponsePersistencePolicy = get_optional_run_config( &CompassConfigurationField::ResponsePersistencePolicy.to_str(), &"run configuration", config, )? - .unwrap_or(self.response_persistence_policy); + .unwrap_or(self.configuration.response_persistence_policy); let response_output_policy: ResponseOutputPolicy = get_optional_run_config( &CompassConfigurationField::ResponseOutputPolicy.to_str(), &"run configuration", config, )? - .unwrap_or_else(|| self.response_output_policy.clone()); + .unwrap_or_else(|| self.configuration.response_output_policy.clone()); let response_writer = response_output_policy.build()?; - let input_pb = Bar::builder() - .total(queries.len()) - .animation("fillup") - .desc("input plugins") - .build() - .map_err(|e| { - CompassAppError::InternalError(format!("could not build progress bar: {}", e)) - })?; - let input_pb_shared = Arc::new(Mutex::new(input_pb)); - - // input plugins need to be flattened, and queries that fail input processing need to be - // returned at the end. - let plugin_chunk_size = (queries.len() as f64 / self.parallelism as f64).ceil() as usize; - let input_plugin_result: (Vec<_>, Vec<_>) = queries - .par_chunks(plugin_chunk_size) - .map(|queries| { - let result: (Vec>, Vec) = queries - .iter() - .map(|q| { - let inner_processed = apply_input_plugins(q, &self.input_plugins); - if let Ok(mut pb_local) = input_pb_shared.lock() { - let _ = pb_local.update(1); - } - inner_processed - }) - .partition_map(|r| match r { - Ok(values) => Either::Left(values), - Err(error_response) => Either::Right(error_response), - }); - - result - }) - .unzip(); - - eprintln!(); - - // unpack input plugin results - let (processed_inputs_nested, error_inputs_nested) = input_plugin_result; - let processed_inputs: Vec = processed_inputs_nested - .into_iter() - .flatten() - .flatten() - .collect(); - let load_balanced_inputs = - ops::apply_load_balancing_policy(&processed_inputs, parallelism, 1.0)?; - let error_inputs: Vec = error_inputs_nested.into_iter().flatten().collect(); - if load_balanced_inputs.is_empty() { - return Ok(error_inputs); - } + // INPUT PROCESSING + let parallel_batch_size = + (queries.len() as f64 / self.configuration.parallelism as f64).ceil() as usize; + let input_plugin_result = apply_input_plugins( + queries, + &self.input_plugins, + self.search_app.clone(), + parallel_batch_size, + )?; + let (processed_inputs, input_errors) = input_plugin_result; + let mut load_balanced_inputs = + ops::apply_load_balancing_policy(processed_inputs, parallelism, 1.0)?; log::info!( "creating {} parallel batches across {} threads to run queries", - self.parallelism, + self.configuration.parallelism, current_num_threads(), ); let proc_batch_sizes = load_balanced_inputs @@ -427,16 +388,14 @@ impl CompassApp { // across a thread pool managed by rayon let run_query_result = match response_persistence_policy { ResponsePersistencePolicy::PersistResponseInMemory => run_batch_with_responses( - &load_balanced_inputs, - &self.search_orientation, + &mut load_balanced_inputs, &self.output_plugins, &self.search_app, &response_writer, search_pb_shared, )?, ResponsePersistencePolicy::DiscardResponseFromMemory => run_batch_without_responses( - &load_balanced_inputs, - &self.search_orientation, + &mut load_balanced_inputs, &self.output_plugins, &self.search_app, &response_writer, @@ -445,11 +404,76 @@ impl CompassApp { }; eprintln!(); - let run_result = run_query_result.chain(error_inputs).collect(); + // combine successful runs along with any error rows for response + let run_result = run_query_result + // .chain(mapped_errors) + .chain(input_errors) + .collect(); Ok(run_result) } } +/// executes the input plugins on each query, returning all +/// successful mappings (left) and mapping errors (right) as the pair +/// (left, right). errors are already serialized into JSON. +fn apply_input_plugins( + mapped_queries: &mut [Value], + input_plugins: &Vec>, + search_app: Arc, + parallel_batch_size: usize, +) -> Result<(Vec, Vec), CompassAppError> { + let input_pb = Bar::builder() + .total(mapped_queries.len()) + .animation("fillup") + .desc("input plugins") + .build() + .map_err(|e| { + CompassAppError::InternalError(format!( + "could not build input plugin progress bar: {}", + e + )) + })?; + let input_pb_shared = Arc::new(Mutex::new(input_pb)); + + // input plugins need to be flattened, and queries that fail input processing need to be + // returned at the end. + let (good, bad): (Vec<_>, Vec<_>) = mapped_queries + .par_chunks(parallel_batch_size) + .map(|qs| { + let (good, bad): (Vec>, Vec) = qs + .iter() + .map(|q| { + let mut plugin_state = serde_json::Value::Array(vec![q.to_owned()]); + for plugin in input_plugins { + let p = plugin.clone(); + let op: in_ops::InputArrayOp = + Rc::new(|q| p.process(q, search_app.clone())); + in_ops::json_array_op(&mut plugin_state, op)? + } + let inner_processed = in_ops::json_array_flatten(&mut plugin_state)?; + // let inner_processed = apply_input_plugins(q, input_plugins); + if let Ok(mut pb_local) = input_pb_shared.lock() { + let _ = pb_local.update(1); + } + Ok(inner_processed) + }) + .partition_map(|r| match r { + Ok(values) => Either::Left(values), + Err(error_response) => Either::Right(error_response), + }); + + (good.into_iter().flatten().collect_vec(), bad) + }) + .unzip(); + eprintln!(); // end input plugin pb + + let result = ( + good.into_iter().flatten().collect_vec(), + bad.into_iter().flatten().collect_vec(), + ); + Ok(result) +} + pub fn get_optional_run_config<'a, K, T>( key: &K, parent_key: &K, @@ -467,6 +491,7 @@ where None => Ok(None), } } + /// Helper function that runs CompassApp on a single query. /// It is assumed that all pre-processing from InputPlugins have been applied. /// This function runs a vertex-oriented search and feeds the result into the @@ -480,12 +505,11 @@ where /// /// * The result of the search and post-processing as a JSON object, or, an error pub fn run_single_query( - query: &serde_json::Value, - search_orientation: &SearchOrientation, + query: &mut serde_json::Value, output_plugins: &[Arc], search_app: &SearchApp, ) -> Result { - let search_result = search_app.run(query, search_orientation); + let search_result = search_app.run(query); let output = apply_output_processing(query, search_result, search_app, output_plugins); Ok(output) } @@ -503,21 +527,19 @@ fn to_std(dur: Duration) -> Result { /// runs a query batch which has been sorted into parallel chunks /// and retains the responses from each search in memory. pub fn run_batch_with_responses( - load_balanced_inputs: &Vec>, - search_orientation: &SearchOrientation, + load_balanced_inputs: &mut Vec>, output_plugins: &[Arc], search_app: &SearchApp, response_writer: &ResponseSink, pb: Arc>, ) -> Result>, CompassAppError> { let run_query_result = load_balanced_inputs - .par_iter() + .par_iter_mut() .map(|queries| { queries - .iter() + .iter_mut() .map(|q| { - let mut response = - run_single_query(q, search_orientation, output_plugins, search_app)?; + let mut response = run_single_query(q, output_plugins, search_app)?; if let Ok(mut pb_local) = pb.lock() { let _ = pb_local.update(1); } @@ -529,8 +551,6 @@ pub fn run_batch_with_responses( .collect::>, CompassAppError>>()?; let run_result = run_query_result.into_iter().flatten(); - // .chain(error_inputs) - // .collect(); Ok(Box::new(run_result)) } @@ -538,8 +558,7 @@ pub fn run_batch_with_responses( /// runs a query batch which has been sorted into parallel chunks. /// the search result is not persisted in memory. pub fn run_batch_without_responses( - load_balanced_inputs: &Vec>, - search_orientation: &SearchOrientation, + load_balanced_inputs: &mut Vec>, output_plugins: &[Arc], search_app: &SearchApp, response_writer: &ResponseSink, @@ -547,15 +566,14 @@ pub fn run_batch_without_responses( ) -> Result>, CompassAppError> { // run the computations, discard values that do not trigger an error let _ = load_balanced_inputs - .par_iter() + .par_iter_mut() .map(|queries| { // fold over query iterator allows us to propagate failures up while still using constant // memory to hold the state of the result object. we can't similarly return error values from // within a for loop or for_each call, and map creates more allocations. open to other ideas! let initial: Result<(), CompassAppError> = Ok(()); - let _ = queries.iter().fold(initial, |_, q| { - let mut response = - run_single_query(q, search_orientation, output_plugins, search_app)?; + let _ = queries.iter_mut().fold(initial, |_, q| { + let mut response = run_single_query(q, output_plugins, search_app)?; if let Ok(mut pb_local) = pb.lock() { let _ = pb_local.update(1); } @@ -569,21 +587,6 @@ pub fn run_batch_without_responses( Ok(Box::new(std::iter::empty::())) } -/// helper that applies the input plugins to a query, returning the result(s) or an error if failed -pub fn apply_input_plugins( - query: &serde_json::Value, - plugins: &Vec>, -) -> Result, serde_json::Value> { - let mut plugin_state = serde_json::Value::Array(vec![query.clone()]); - for plugin in plugins { - let p = plugin.clone(); - let op: in_ops::InputArrayOp = Rc::new(|q| p.process(q)); - in_ops::json_array_op(&mut plugin_state, op)? - } - let result = in_ops::json_array_flatten(&mut plugin_state)?; - Ok(result) -} - // helper that applies the output processing. this includes // 1. summarizing from the TraversalModel // 2. applying the output plugins @@ -625,8 +628,8 @@ mod tests { Ok(cwd_path) => String::from(cwd_path.to_str().unwrap_or("")), _ => String::from(""), }; - println!("cwd : {}", cwd_str); - println!("Cargo.toml dir: {}", env!("CARGO_MANIFEST_DIR")); + // eprintln!("cwd : {}", cwd_str); + // eprintln!("Cargo.toml dir: {}", env!("CARGO_MANIFEST_DIR")); // rust runs test and debug at different locations, which breaks the URLs // written in the referenced TOML files. here's a quick fix @@ -664,13 +667,16 @@ mod tests { "origin_vertex": 0, "destination_vertex": 2 }); - let result = app.run(vec![query], None).unwrap(); - println!("{}", serde_json::to_string_pretty(&result).unwrap()); + let mut queries = vec![query]; + let result = app.run(&mut queries, None).unwrap(); + assert_eq!(result.len(), 1, "expected one result"); + // eprintln!("{}", serde_json::to_string_pretty(&result).unwrap()); let route_0 = result[0].get("route").unwrap(); let path_0 = route_0.get("path").unwrap(); + // path [1] is distance-optimal; path [0, 2] is time-optimal - let expected = serde_json::json!(vec![0, 2]); - assert_eq!(path_0, &expected); + let expected_path = serde_json::json!(vec![0, 2]); + assert_eq!(path_0, &expected_path); } // #[test] diff --git a/rust/routee-compass/src/app/compass/compass_app_configuration.rs b/rust/routee-compass/src/app/compass/compass_app_configuration.rs new file mode 100644 index 00000000..bd4d5744 --- /dev/null +++ b/rust/routee-compass/src/app/compass/compass_app_configuration.rs @@ -0,0 +1,53 @@ +use super::{ + compass_app_error::CompassAppError, + response::{ + response_output_policy::ResponseOutputPolicy, + response_persistence_policy::ResponsePersistencePolicy, + }, +}; +use crate::app::compass::config::compass_configuration_field::CompassConfigurationField; +use config::Config; +use serde::{Deserialize, Serialize}; + +#[derive(Serialize, Deserialize)] +pub struct CompassAppConfiguration { + pub parallelism: usize, + pub response_persistence_policy: ResponsePersistencePolicy, + pub response_output_policy: ResponseOutputPolicy, +} + +impl CompassAppConfiguration { + pub fn new( + parallelism: usize, + response_persistence_policy: ResponsePersistencePolicy, + response_output_policy: ResponseOutputPolicy, + ) -> CompassAppConfiguration { + CompassAppConfiguration { + parallelism, + response_persistence_policy, + response_output_policy, + } + } +} + +impl TryFrom<&Config> for CompassAppConfiguration { + type Error = CompassAppError; + + fn try_from(config: &Config) -> Result { + // other parameters + let parallelism = config.get::(CompassConfigurationField::Parallelism.to_str())?; + let response_persistence_policy = config.get::( + CompassConfigurationField::ResponsePersistencePolicy.to_str(), + )?; + let response_output_policy = config.get::( + CompassConfigurationField::ResponseOutputPolicy.to_str(), + )?; + let configuration = CompassAppConfiguration::new( + parallelism, + response_persistence_policy, + response_output_policy, + ); + + Ok(configuration) + } +} diff --git a/rust/routee-compass/src/app/compass/compass_app_error.rs b/rust/routee-compass/src/app/compass/compass_app_error.rs index b28255d7..39ce35ee 100644 --- a/rust/routee-compass/src/app/compass/compass_app_error.rs +++ b/rust/routee-compass/src/app/compass/compass_app_error.rs @@ -7,8 +7,8 @@ use routee_compass_core::{ algorithm::search::search_error::SearchError, model::{ access::access_model_error::AccessModelError, cost::cost_model_error::CostModelError, - frontier::frontier_model_error::FrontierModelError, network::network_error::NetworkError, - state::state_model_error::StateModelError, + frontier::frontier_model_error::FrontierModelError, map::map_error::MapError, + network::network_error::NetworkError, state::state_model_error::StateModelError, termination::termination_model_error::TerminationModelError, traversal::traversal_model_error::TraversalModelError, }, @@ -45,6 +45,11 @@ pub enum CompassAppError { // CONTEXTUALIZED MODULE FAILURES // failures from these modules are happening outside of the context of running the search, // which is clarified for the user and may help direct where to look to solve the problem. + #[error("While interacting with the map model outside of the context of search, an error occurred. Source: {source}")] + MappingFailure { + #[from] + source: MapError, + }, #[error("While interacting with the state model outside of the context of search, an error occurred. Source: {source}")] StateFailure { #[from] diff --git a/rust/routee-compass/src/app/compass/compass_app_ops.rs b/rust/routee-compass/src/app/compass/compass_app_ops.rs index df358a4d..93f02193 100644 --- a/rust/routee-compass/src/app/compass/compass_app_ops.rs +++ b/rust/routee-compass/src/app/compass/compass_app_ops.rs @@ -1,6 +1,7 @@ use super::{compass_app_error::CompassAppError, compass_input_field::CompassInputField}; use crate::plugin::{input::input_json_extensions::InputJsonExtensions, plugin_error::PluginError}; use config::Config; +use kdam::tqdm; use ordered_float::OrderedFloat; use std::path::Path; @@ -92,16 +93,24 @@ pub fn read_config_from_string( /// load balances the queries across processes based on the estimates. the resulting /// batches are not equal-sized pub fn apply_load_balancing_policy( - queries: &[serde_json::Value], + queries: Vec, parallelism: usize, default: f64, -) -> Result>, CompassAppError> { +) -> Result>, CompassAppError> { if queries.is_empty() { return Ok(vec![]); } + let mut bin_totals = vec![0.0; parallelism]; - let mut assignments: Vec> = vec![vec![]; parallelism]; - for q in queries.iter() { + let mut assignments: Vec> = vec![vec![]; parallelism]; + let n_queries = queries.len(); + let iter = tqdm!( + queries.into_iter(), + total = n_queries, + desc = "load balancing", + animation = "fillup" + ); + for q in iter { let w = q.get_query_weight_estimate()?.unwrap_or(default); let min_bin = min_bin(&bin_totals)?; bin_totals[min_bin] += w; @@ -127,7 +136,7 @@ mod test { use serde_json::json; fn test_run_policy(queries: Vec, parallelism: usize) -> Vec> { - apply_load_balancing_policy(&queries, parallelism, 1.0) + apply_load_balancing_policy(queries, parallelism, 1.0) .unwrap() .iter() .map(|qs| { diff --git a/rust/routee-compass/src/app/compass/config.default.toml b/rust/routee-compass/src/app/compass/config.default.toml index 2df35edf..934b49f9 100644 --- a/rust/routee-compass/src/app/compass/config.default.toml +++ b/rust/routee-compass/src/app/compass/config.default.toml @@ -1,5 +1,4 @@ parallelism = 2 -search_orientation = "vertex" response_persistence_policy = "persist_response_in_memory" [response_output_policy] type = "none" @@ -14,6 +13,36 @@ type = "none" [graph] verbose = true +# [mapping] +# # when type = "vertex", simpler mapping is used. (default) +# type = "vertex" + +# # default map matching will pair an input origin|destination with +# # edges in the system. these are also subject to whatever frontier +# # model is insantiated for the query. +# type = "edge" + +# # source for edge geometries used in mapping. +# # when type = "vertex", this can be omitted, and the system will +# # instead use the graph vertex coordinates to build map geometries +# # which produces far simpler route sequences as a result. +# geometry_input_file = "edges-geometries-enumerated.txt.gz" + +# # optional query distance tolerance for map matching, +# # an array of [Distance, DistanceUnit]. +# tolerance.distance = 15.0 +# tolerance.unit = "meters" + +# # allow user to submit queries without destinations, such as when +# # shortest path trees are the desired result, not routes. true by default. +# queries_without_destinations = true + +# # the default map input type is a combined strategy that attempts to +# # match by Point, otherwise expects the user to pass either a vertex ({origin|destination}_vertex) +# # or an edge ({origin|destination}_edge). a more restrictive strategy can be +# # specified here with a subset of these values or a single value such as "point". +# matching_type = ["point", "edge_id", "vertex_id"] + [algorithm] type = "a*" diff --git a/rust/routee-compass/src/app/compass/config/compass_app_builder.rs b/rust/routee-compass/src/app/compass/config/compass_app_builder.rs index 7f3e0e6a..2aa8e1d1 100644 --- a/rust/routee-compass/src/app/compass/config/compass_app_builder.rs +++ b/rust/routee-compass/src/app/compass/config/compass_app_builder.rs @@ -21,10 +21,9 @@ use super::{ use crate::plugin::{ input::{ default::{ - debug::debug_builder::DebugInputPluginBuilder, - edge_rtree::edge_rtree_input_plugin_builder::EdgeRtreeInputPluginBuilder, - grid_search::builder::GridSearchBuilder, inject::inject_builder::InjectPluginBuilder, - load_balancer::builder::LoadBalancerBuilder, vertex_rtree::builder::VertexRTreeBuilder, + debug::debug_builder::DebugInputPluginBuilder, grid_search::builder::GridSearchBuilder, + inject::inject_builder::InjectPluginBuilder, + load_balancer::builder::LoadBalancerBuilder, }, input_plugin::InputPlugin, }, @@ -123,95 +122,6 @@ impl CompassAppBuilder { let _ = self.output_plugin_builders.insert(name, builder); } - /// Builds the default builder. - /// All components present in the routee-compass library are injected here - /// into a builder instance with their expected `type` keys. - /// - /// # Returns - /// - /// * an instance of a CompassAppBuilder that can be used to build a CompassApp - fn default() -> CompassAppBuilder { - // Traversal model builders - let dist: Rc = Rc::new(DistanceTraversalBuilder {}); - let speed: Rc = Rc::new(SpeedLookupBuilder {}); - let energy: Rc = Rc::new(EnergyModelBuilder::new( - HashMap::from([(String::from("speed_table"), speed.clone())]), - )); - let tm_builders: HashMap> = HashMap::from([ - (String::from("distance"), dist), - (String::from("speed_table"), speed), - (String::from("energy_model"), energy), - ]); - - // Access model builders - let no_access_model: Rc = Rc::new(NoAccessModel {}); - let turn_delay: Rc = Rc::new(TurnDelayAccessModelBuilder {}); - let combined_am: Rc = Rc::new(CombinedAccessModelBuilder { - builders: HashMap::from([ - (String::from("no_access_model"), no_access_model.clone()), - (String::from("turn_delay"), turn_delay.clone()), - ]), - }); - let am_builders: HashMap> = HashMap::from([ - (String::from("no_access_model"), no_access_model), - (String::from("turn_delay"), turn_delay), - (String::from("combined"), combined_am), - ]); - - // Frontier model builders - let no_restriction: Rc = Rc::new(NoRestrictionBuilder {}); - let road_class: Rc = Rc::new(RoadClassBuilder {}); - let turn_restriction: Rc = Rc::new(TurnRestrictionBuilder {}); - let vehicle_restriction: Rc = - Rc::new(VehicleRestrictionBuilder {}); - let base_frontier_builders: HashMap> = - HashMap::from([ - (String::from("no_restriction"), no_restriction), - (String::from("road_class"), road_class), - (String::from("turn_restriction"), turn_restriction), - (String::from("vehicle_restriction"), vehicle_restriction), - ]); - let combined = Rc::new(CombinedBuilder { - builders: base_frontier_builders.clone(), - }); - let mut all_frontier_builders = base_frontier_builders.clone(); - all_frontier_builders.insert(String::from("combined"), combined); - - // Input plugin builders - let grid_search: Rc = Rc::new(GridSearchBuilder {}); - let vertex_tree: Rc = Rc::new(VertexRTreeBuilder {}); - let edge_rtree: Rc = Rc::new(EdgeRtreeInputPluginBuilder {}); - let load_balancer: Rc = Rc::new(LoadBalancerBuilder {}); - let inject: Rc = Rc::new(InjectPluginBuilder {}); - let debug: Rc = Rc::new(DebugInputPluginBuilder {}); - let input_plugin_builders = HashMap::from([ - (String::from("grid_search"), grid_search), - (String::from("vertex_rtree"), vertex_tree), - (String::from("edge_rtree"), edge_rtree), - (String::from("load_balancer"), load_balancer), - (String::from("inject"), inject), - (String::from("debug"), debug), - ]); - - // Output plugin builders - let traversal: Rc = Rc::new(TraversalPluginBuilder {}); - let summary: Rc = Rc::new(SummaryOutputPluginBuilder {}); - let uuid: Rc = Rc::new(UUIDOutputPluginBuilder {}); - let output_plugin_builders = HashMap::from([ - (String::from("traversal"), traversal), - (String::from("summary"), summary), - (String::from("uuid"), uuid), - ]); - - CompassAppBuilder { - traversal_model_builders: tm_builders, - access_model_builders: am_builders, - frontier_builders: all_frontier_builders, - input_plugin_builders, - output_plugin_builders, - } - } - /// builds a traversal model with the specified type name with the provided /// traversal model configuration JSON pub fn build_traversal_model_service( @@ -338,7 +248,88 @@ impl CompassAppBuilder { } impl Default for CompassAppBuilder { + /// Builds the default builder. + /// All components present in the routee-compass library are injected here + /// into a builder instance with their expected `type` keys. + /// + /// # Returns + /// + /// * an instance of a CompassAppBuilder that can be used to build a CompassApp fn default() -> Self { - CompassAppBuilder::default() + // Traversal model builders + let dist: Rc = Rc::new(DistanceTraversalBuilder {}); + let speed: Rc = Rc::new(SpeedLookupBuilder {}); + let energy: Rc = Rc::new(EnergyModelBuilder::new( + HashMap::from([(String::from("speed_table"), speed.clone())]), + )); + let tm_builders: HashMap> = HashMap::from([ + (String::from("distance"), dist), + (String::from("speed_table"), speed), + (String::from("energy_model"), energy), + ]); + + // Access model builders + let no_access_model: Rc = Rc::new(NoAccessModel {}); + let turn_delay: Rc = Rc::new(TurnDelayAccessModelBuilder {}); + let combined_am: Rc = Rc::new(CombinedAccessModelBuilder { + builders: HashMap::from([ + (String::from("no_access_model"), no_access_model.clone()), + (String::from("turn_delay"), turn_delay.clone()), + ]), + }); + let am_builders: HashMap> = HashMap::from([ + (String::from("no_access_model"), no_access_model), + (String::from("turn_delay"), turn_delay), + (String::from("combined"), combined_am), + ]); + + // Frontier model builders + let no_restriction: Rc = Rc::new(NoRestrictionBuilder {}); + let road_class: Rc = Rc::new(RoadClassBuilder {}); + let turn_restriction: Rc = Rc::new(TurnRestrictionBuilder {}); + let vehicle_restriction: Rc = + Rc::new(VehicleRestrictionBuilder {}); + let base_frontier_builders: HashMap> = + HashMap::from([ + (String::from("no_restriction"), no_restriction), + (String::from("road_class"), road_class), + (String::from("turn_restriction"), turn_restriction), + (String::from("vehicle_restriction"), vehicle_restriction), + ]); + let combined = Rc::new(CombinedBuilder { + builders: base_frontier_builders.clone(), + }); + let mut all_frontier_builders = base_frontier_builders.clone(); + all_frontier_builders.insert(String::from("combined"), combined); + + // Input plugin builders + let grid_search: Rc = Rc::new(GridSearchBuilder {}); + let load_balancer: Rc = Rc::new(LoadBalancerBuilder {}); + let inject: Rc = Rc::new(InjectPluginBuilder {}); + let debug: Rc = Rc::new(DebugInputPluginBuilder {}); + let input_plugin_builders = HashMap::from([ + (String::from("grid_search"), grid_search), + (String::from("load_balancer"), load_balancer), + (String::from("inject"), inject), + (String::from("debug"), debug), + ]); + + // Output plugin builders + let traversal: Rc = Rc::new(TraversalPluginBuilder {}); + let summary: Rc = Rc::new(SummaryOutputPluginBuilder {}); + let uuid: Rc = Rc::new(UUIDOutputPluginBuilder {}); + let output_plugin_builders = HashMap::from([ + (String::from("traversal"), traversal), + (String::from("summary"), summary), + (String::from("uuid"), uuid), + ]); + + CompassAppBuilder { + traversal_model_builders: tm_builders, + access_model_builders: am_builders, + frontier_builders: all_frontier_builders, + input_plugin_builders, + output_plugin_builders, + } } } diff --git a/rust/routee-compass/src/app/compass/config/compass_configuration_field.rs b/rust/routee-compass/src/app/compass/config/compass_configuration_field.rs index aa38b953..c6d2ae79 100644 --- a/rust/routee-compass/src/app/compass/config/compass_configuration_field.rs +++ b/rust/routee-compass/src/app/compass/config/compass_configuration_field.rs @@ -11,6 +11,7 @@ pub enum CompassConfigurationField { Cost, Algorithm, Plugins, + MapModel, InputPlugins, OutputPlugins, Parallelism, @@ -18,7 +19,6 @@ pub enum CompassConfigurationField { IncludeTree, ChargeDepleting, ChargeSustaining, - SearchOrientation, ResponsePersistencePolicy, ResponseOutputPolicy, } @@ -38,11 +38,11 @@ impl CompassConfigurationField { CompassConfigurationField::QueryTimeoutMs => "query_timeout_ms", CompassConfigurationField::IncludeTree => "include_tree", CompassConfigurationField::Plugins => "plugin", + CompassConfigurationField::MapModel => "mapping", CompassConfigurationField::InputPlugins => "input_plugins", CompassConfigurationField::OutputPlugins => "output_plugins", CompassConfigurationField::ChargeDepleting => "charge_depleting", CompassConfigurationField::ChargeSustaining => "charge_sustaining", - CompassConfigurationField::SearchOrientation => "search_orientation", CompassConfigurationField::ResponsePersistencePolicy => "response_persistence_policy", CompassConfigurationField::ResponseOutputPolicy => "response_output_policy", } diff --git a/rust/routee-compass/src/app/compass/config/frontier_model/combined/combined_model.rs b/rust/routee-compass/src/app/compass/config/frontier_model/combined/combined_model.rs index 75f5154d..b11614af 100644 --- a/rust/routee-compass/src/app/compass/config/frontier_model/combined/combined_model.rs +++ b/rust/routee-compass/src/app/compass/config/frontier_model/combined/combined_model.rs @@ -15,13 +15,28 @@ impl FrontierModel for CombinedFrontierModel { &self, edge: &Edge, state: &[StateVar], - previous_edge: Option<&Edge>, + tree: &std::collections::HashMap< + routee_compass_core::model::network::VertexId, + routee_compass_core::algorithm::search::search_tree_branch::SearchTreeBranch, + >, + direction: &routee_compass_core::algorithm::search::direction::Direction, state_model: &StateModel, ) -> Result { // If any of the inner models return an invalid frontier, it invalidates the whole set and we // return an early false. We only return true if all the frontiers are valid. for frontier_model in self.inner_models.iter() { - if !frontier_model.valid_frontier(edge, state, previous_edge, state_model)? { + if !frontier_model.valid_frontier(edge, state, tree, direction, state_model)? { + return Ok(false); + } + } + Ok(true) + } + + fn valid_edge(&self, edge: &Edge) -> Result { + // If any of the inner models return an invalid frontier, it invalidates the whole set and we + // return an early false. We only return true if all the frontiers are valid. + for frontier_model in self.inner_models.iter() { + if !frontier_model.valid_edge(edge)? { return Ok(false); } } diff --git a/rust/routee-compass/src/app/compass/config/frontier_model/road_class/road_class_model.rs b/rust/routee-compass/src/app/compass/config/frontier_model/road_class/road_class_model.rs index abcf7a89..61e6c781 100644 --- a/rust/routee-compass/src/app/compass/config/frontier_model/road_class/road_class_model.rs +++ b/rust/routee-compass/src/app/compass/config/frontier_model/road_class/road_class_model.rs @@ -1,11 +1,17 @@ use super::road_class_service::RoadClassFrontierService; -use routee_compass_core::model::{ - frontier::{frontier_model::FrontierModel, frontier_model_error::FrontierModelError}, - network::Edge, - state::state_model::StateModel, - traversal::state::state_variable::StateVar, +use routee_compass_core::{ + algorithm::search::search_tree_branch::SearchTreeBranch, + model::{ + frontier::{frontier_model::FrontierModel, frontier_model_error::FrontierModelError}, + network::{Edge, VertexId}, + state::state_model::StateModel, + traversal::state::state_variable::StateVar, + }, +}; +use std::{ + collections::{HashMap, HashSet}, + sync::Arc, }; -use std::{collections::HashSet, sync::Arc}; pub struct RoadClassFrontierModel { pub service: Arc, @@ -17,9 +23,14 @@ impl FrontierModel for RoadClassFrontierModel { &self, edge: &Edge, _state: &[StateVar], - _previous_edge: Option<&Edge>, + _tree: &HashMap, + _direction: &routee_compass_core::algorithm::search::direction::Direction, _state_model: &StateModel, ) -> Result { + self.valid_edge(edge) + } + + fn valid_edge(&self, edge: &Edge) -> Result { match &self.road_classes { None => Ok(true), Some(road_classes) => self diff --git a/rust/routee-compass/src/app/compass/config/frontier_model/turn_restrictions/turn_restriction_model.rs b/rust/routee-compass/src/app/compass/config/frontier_model/turn_restrictions/turn_restriction_model.rs index fbd489da..37f2da27 100644 --- a/rust/routee-compass/src/app/compass/config/frontier_model/turn_restrictions/turn_restriction_model.rs +++ b/rust/routee-compass/src/app/compass/config/frontier_model/turn_restrictions/turn_restriction_model.rs @@ -1,10 +1,13 @@ -use routee_compass_core::model::{ - frontier::{frontier_model::FrontierModel, frontier_model_error::FrontierModelError}, - network::Edge, - state::state_model::StateModel, - traversal::state::state_variable::StateVar, +use routee_compass_core::{ + algorithm::search::{direction::Direction, search_tree_branch::SearchTreeBranch}, + model::{ + frontier::{frontier_model::FrontierModel, frontier_model_error::FrontierModelError}, + network::{Edge, VertexId}, + state::state_model::StateModel, + traversal::state::state_variable::StateVar, + }, }; -use std::sync::Arc; +use std::{collections::HashMap, sync::Arc}; use super::turn_restriction_service::{RestrictedEdgePair, TurnRestrictionFrontierService}; @@ -17,14 +20,19 @@ impl FrontierModel for TurnRestrictionFrontierModel { &self, edge: &Edge, _state: &[StateVar], - previous_edge: Option<&Edge>, + tree: &HashMap, + direction: &Direction, _state_model: &StateModel, ) -> Result { + let previous_edge = match direction { + Direction::Forward => tree.get(&edge.src_vertex_id), + Direction::Reverse => tree.get(&edge.dst_vertex_id), + }; match previous_edge { None => Ok(true), Some(previous_edge) => { let edge_pair = RestrictedEdgePair { - prev_edge_id: previous_edge.edge_id, + prev_edge_id: previous_edge.edge_traversal.edge_id, next_edge_id: edge.edge_id, }; if self.service.restricted_edge_pairs.contains(&edge_pair) { @@ -34,4 +42,8 @@ impl FrontierModel for TurnRestrictionFrontierModel { } } } + + fn valid_edge(&self, _edge: &Edge) -> Result { + Ok(true) + } } diff --git a/rust/routee-compass/src/app/compass/config/frontier_model/vehicle_restrictions/vehicle_restriction_model.rs b/rust/routee-compass/src/app/compass/config/frontier_model/vehicle_restrictions/vehicle_restriction_model.rs index 77a6a43f..8b9ae55a 100644 --- a/rust/routee-compass/src/app/compass/config/frontier_model/vehicle_restrictions/vehicle_restriction_model.rs +++ b/rust/routee-compass/src/app/compass/config/frontier_model/vehicle_restrictions/vehicle_restriction_model.rs @@ -20,9 +20,17 @@ impl FrontierModel for VehicleRestrictionFrontierModel { &self, edge: &Edge, _state: &[StateVar], - _previous_edge: Option<&Edge>, + _tree: &std::collections::HashMap< + routee_compass_core::model::network::VertexId, + routee_compass_core::algorithm::search::search_tree_branch::SearchTreeBranch, + >, + _direction: &routee_compass_core::algorithm::search::direction::Direction, _state_model: &StateModel, ) -> Result { + self.valid_edge(edge) + } + + fn valid_edge(&self, edge: &Edge) -> Result { match self.service.vehicle_restriction_lookup.get(&edge.edge_id) { None => Ok(true), Some(vehicle_restrictions) => { diff --git a/rust/routee-compass/src/app/compass/config/test/conf.toml b/rust/routee-compass/src/app/compass/config/test/conf.toml index 4bc9c2df..6650614b 100644 --- a/rust/routee-compass/src/app/compass/config/test/conf.toml +++ b/rust/routee-compass/src/app/compass/config/test/conf.toml @@ -14,9 +14,7 @@ bidirectional = false type = "distance" [plugin] -input_plugins = [ - { type = "vertex_rtree", vertices_input_file = "vertices-compass.csv.gz" }, -] +input_plugins = [] output_plugins = [ { type = "summary" }, { type = "geometry", edge_input_file = "edges-geometries-enumerated.txt.gz" }, diff --git a/rust/routee-compass/src/app/compass/mod.rs b/rust/routee-compass/src/app/compass/mod.rs index c2f4d7f3..c7223aa7 100644 --- a/rust/routee-compass/src/app/compass/mod.rs +++ b/rust/routee-compass/src/app/compass/mod.rs @@ -1,8 +1,8 @@ pub mod compass_app; +pub mod compass_app_configuration; pub mod compass_app_error; pub mod compass_app_ops; pub mod compass_input_field; pub mod compass_json_extensions; pub mod config; pub mod response; -pub mod search_orientation; diff --git a/rust/routee-compass/src/app/compass/search_orientation.rs b/rust/routee-compass/src/app/compass/search_orientation.rs deleted file mode 100644 index a0643037..00000000 --- a/rust/routee-compass/src/app/compass/search_orientation.rs +++ /dev/null @@ -1,8 +0,0 @@ -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Serialize, Deserialize, Clone)] -#[serde(rename_all = "snake_case")] -pub enum SearchOrientation { - Vertex, - Edge, -} diff --git a/rust/routee-compass/src/app/compass/test/speeds_test/speeds_debug.toml b/rust/routee-compass/src/app/compass/test/speeds_test/speeds_debug.toml index 382df414..93172ad1 100644 --- a/rust/routee-compass/src/app/compass/test/speeds_test/speeds_debug.toml +++ b/rust/routee-compass/src/app/compass/test/speeds_test/speeds_debug.toml @@ -3,6 +3,13 @@ edge_list_input_file = "routee-compass/src/app/compass/test/speeds_test/test_edg vertex_list_input_file = "routee-compass/src/app/compass/test/speeds_test/test_vertices.csv" verbose = true +# [mapping] +# type = "vertex" +# # tolerance.distance = 30.0 +# # tolerance.unit = "meters" +# # queries_without_destinations = false +# # matching_type = ["vertex"] + [traversal] type = "speed_table" speed_table_input_file = "routee-compass/src/app/compass/test/speeds_test/test_edge_speeds.csv" @@ -26,5 +33,5 @@ type = "raw" input_plugins = [] output_plugins = [ { type = "summary" }, - { type = "traversal", route = "edge_id", geometry_input_file = "routee-compass/src/app/compass/test/speeds_test/edge_geometries.txt" }, + { type = "traversal", route = "edge_id" }, ] diff --git a/rust/routee-compass/src/app/compass/test/speeds_test/speeds_test.toml b/rust/routee-compass/src/app/compass/test/speeds_test/speeds_test.toml index 44013dad..efcc27f9 100644 --- a/rust/routee-compass/src/app/compass/test/speeds_test/speeds_test.toml +++ b/rust/routee-compass/src/app/compass/test/speeds_test/speeds_test.toml @@ -3,6 +3,13 @@ edge_list_input_file = "src/app/compass/test/speeds_test/test_edges.csv" vertex_list_input_file = "src/app/compass/test/speeds_test/test_vertices.csv" verbose = true +# [mapping] +# type = "vertex" +# # tolerance.distance = 15.0 +tolerance.unit = "meters" +# queries_without_destinations = false +# # matching_type = ["point", "vertex_id", "edge_id"] + [traversal] type = "speed_table" speed_table_input_file = "src/app/compass/test/speeds_test/test_edge_speeds.csv" @@ -26,5 +33,5 @@ type = "raw" input_plugins = [] output_plugins = [ { type = "summary" }, - { type = "traversal", route = "edge_id", geometry_input_file = "src/app/compass/test/speeds_test/edge_geometries.txt" }, + { type = "traversal", route = "edge_id" }, ] diff --git a/rust/routee-compass/src/app/mapping/mapping_app.rs b/rust/routee-compass/src/app/mapping/mapping_app.rs new file mode 100644 index 00000000..25de7b76 --- /dev/null +++ b/rust/routee-compass/src/app/mapping/mapping_app.rs @@ -0,0 +1,25 @@ +use super::mapping_app_error::MappingAppError; +use geo::LineString; +use routee_compass_core::model::{map::map_model::MapModel, network::EdgeId}; + +/// stub for a binary centered on map matching +pub struct MappingApp { + pub map_model: MapModel, +} + +impl MappingApp { + // pub fn append_graph_ids(&self, query: &mut serde_json::Value) -> Result<(), MappingAppError> { + // self.map_model + // .map_match(query) + // .map_err(MappingAppError::MapError) + // } + + pub fn get_edge_linestring( + &self, + edge_id: EdgeId, + ) -> Result<&LineString, MappingAppError> { + self.map_model + .get(&edge_id) + .map_err(MappingAppError::MapError) + } +} diff --git a/rust/routee-compass/src/app/mapping/mapping_app_error.rs b/rust/routee-compass/src/app/mapping/mapping_app_error.rs new file mode 100644 index 00000000..dabc1494 --- /dev/null +++ b/rust/routee-compass/src/app/mapping/mapping_app_error.rs @@ -0,0 +1,9 @@ +use routee_compass_core::model::{map::map_error::MapError, network::EdgeId}; + +#[derive(thiserror::Error, Debug)] +pub enum MappingAppError { + #[error(transparent)] + MapError(#[from] MapError), + #[error("expecting edge id {0} not found")] + InvalidEdgeId(EdgeId), +} diff --git a/rust/routee-compass/src/app/mapping/mod.rs b/rust/routee-compass/src/app/mapping/mod.rs new file mode 100644 index 00000000..10bd5601 --- /dev/null +++ b/rust/routee-compass/src/app/mapping/mod.rs @@ -0,0 +1,2 @@ +pub mod mapping_app; +pub mod mapping_app_error; diff --git a/rust/routee-compass/src/app/mod.rs b/rust/routee-compass/src/app/mod.rs index 3313b28b..4f25f401 100644 --- a/rust/routee-compass/src/app/mod.rs +++ b/rust/routee-compass/src/app/mod.rs @@ -2,4 +2,5 @@ pub mod bindings; pub mod cli; pub mod compass; pub mod geom; +pub mod mapping; pub mod search; diff --git a/rust/routee-compass/src/app/search/search_app.rs b/rust/routee-compass/src/app/search/search_app.rs index 5e99f621..65c531f5 100644 --- a/rust/routee-compass/src/app/search/search_app.rs +++ b/rust/routee-compass/src/app/search/search_app.rs @@ -3,21 +3,20 @@ use crate::{ app::compass::{ compass_app_error::CompassAppError, config::cost_model::cost_model_service::CostModelService, - search_orientation::SearchOrientation, }, plugin::{input::input_json_extensions::InputJsonExtensions, plugin_error::PluginError}, }; use chrono::Local; use routee_compass_core::{ algorithm::search::{ - direction::Direction, search_algorithm::SearchAlgorithm, - search_algorithm_result::SearchAlgorithmResult, search_error::SearchError, + direction::Direction, search_algorithm::SearchAlgorithm, search_error::SearchError, search_instance::SearchInstance, }, model::{ access::access_model_service::AccessModelService, - frontier::frontier_model_service::FrontierModelService, network::graph::Graph, - state::state_model::StateModel, termination::termination_model::TerminationModel, + frontier::frontier_model_service::FrontierModelService, map::map_model::MapModel, + network::graph::Graph, state::state_model::StateModel, + termination::termination_model::TerminationModel, traversal::traversal_model_service::TraversalModelService, }, }; @@ -27,7 +26,8 @@ use std::time; /// a configured and loaded application to execute searches. pub struct SearchApp { pub search_algorithm: SearchAlgorithm, - pub directed_graph: Arc, + pub graph: Arc, + pub map_model: Arc, pub state_model: Arc, pub traversal_model_service: Arc, pub access_model_service: Arc, @@ -42,7 +42,8 @@ impl SearchApp { #[allow(clippy::too_many_arguments)] pub fn new( search_algorithm: SearchAlgorithm, - graph: Graph, + graph: Arc, + map_model: Arc, state_model: Arc, traversal_model_service: Arc, access_model_service: Arc, @@ -52,7 +53,8 @@ impl SearchApp { ) -> Self { SearchApp { search_algorithm, - directed_graph: Arc::new(graph), + graph, + map_model, state_model, traversal_model_service, access_model_service, @@ -62,29 +64,50 @@ impl SearchApp { } } - /// main interface for running search. takes a user query and some configured - /// search orientation. builds the instance of the search assets and then executes - /// a search. if a destination is set on the query, then the route is computed. - /// if the algorithm produces more than one route, then the result contains each route. - /// the SearchAlgorithm determines the order and number of routes and trees in the result. + /// main interface for running search. takes a user query and builds the instance of the + /// search assets and then executes a search. if a destination is set on the query, then the + /// route is computed. if the algorithm produces more than one route, then the result contains + /// each route. the SearchAlgorithm determines the order and number of routes and trees in the result. /// /// # Arguments /// /// * `query` - a JSON search query provided by the user - /// * `search_orientation` - whether to orient by vertex or edge /// /// # Results /// /// The complete set of trees, routes, and search assets for this run. pub fn run( &self, - query: &serde_json::Value, - search_orientation: &SearchOrientation, + query: &mut serde_json::Value, ) -> Result<(SearchAppResult, SearchInstance), CompassAppError> { let search_start_time = Local::now(); - let (results, si) = match search_orientation { - SearchOrientation::Vertex => self.run_vertex_oriented(query), - SearchOrientation::Edge => self.run_edge_oriented(query), + let si = self.build_search_instance(query)?; + self.map_model.map_match(query, &si)?; + + // depending on the presence of an origin edge or origin vertex, we run each type of query + let results = if query.get_origin_edge().is_ok() { + let o = query.get_origin_edge().map_err(|e| { + CompassAppError::PluginError(PluginError::InputPluginFailed { source: e }) + })?; + let d_opt = query.get_destination_edge().map_err(|e| { + CompassAppError::PluginError(PluginError::InputPluginFailed { source: e }) + })?; + self.search_algorithm + .run_edge_oriented(o, d_opt, query, &Direction::Forward, &si) + .map_err(CompassAppError::SearchFailure) + } else if query.get_origin_vertex().is_ok() { + let o = query.get_origin_vertex().map_err(|e| { + CompassAppError::PluginError(PluginError::InputPluginFailed { source: e }) + })?; + let d = query.get_destination_vertex().map_err(|e| { + CompassAppError::PluginError(PluginError::InputPluginFailed { source: e }) + })?; + + self.search_algorithm + .run_vertex_oriented(o, d, query, &Direction::Forward, &si) + .map_err(CompassAppError::SearchFailure) + } else { + Err(CompassAppError::CompassFailure(String::from("SearchApp.run called with query that lacks origin_edge and origin_vertex, at least one required"))) }?; let search_end_time = Local::now(); @@ -108,41 +131,6 @@ impl SearchApp { Ok((result, si)) } - pub fn run_vertex_oriented( - &self, - query: &serde_json::Value, - ) -> Result<(SearchAlgorithmResult, SearchInstance), CompassAppError> { - let o = query.get_origin_vertex().map_err(|e| { - CompassAppError::PluginError(PluginError::InputPluginFailed { source: e }) - })?; - let d = query.get_destination_vertex().map_err(|e| { - CompassAppError::PluginError(PluginError::InputPluginFailed { source: e }) - })?; - - let search_instance = self.build_search_instance(query)?; - self.search_algorithm - .run_vertex_oriented(o, d, query, &Direction::Forward, &search_instance) - .map(|search_result| (search_result, search_instance)) - .map_err(CompassAppError::SearchFailure) - } - - pub fn run_edge_oriented( - &self, - query: &serde_json::Value, - ) -> Result<(SearchAlgorithmResult, SearchInstance), CompassAppError> { - let o = query.get_origin_edge().map_err(|e| { - CompassAppError::PluginError(PluginError::InputPluginFailed { source: e }) - })?; - let d_opt = query.get_destination_edge().map_err(|e| { - CompassAppError::PluginError(PluginError::InputPluginFailed { source: e }) - })?; - let search_instance = self.build_search_instance(query)?; - self.search_algorithm - .run_edge_oriented(o, d_opt, query, &Direction::Forward, &search_instance) - .map(|search_result| (search_result, search_instance)) - .map_err(CompassAppError::SearchFailure) - } - /// builds the assets that will run the search for this query instance. /// /// # Arguments @@ -173,7 +161,8 @@ impl SearchApp { .build(query, state_model.clone())?; let search_assets = SearchInstance { - directed_graph: self.directed_graph.clone(), + graph: self.graph.clone(), + map_model: self.map_model.clone(), state_model, traversal_model, access_model, diff --git a/rust/routee-compass/src/app/search/search_app_graph_ops.rs b/rust/routee-compass/src/app/search/search_app_graph_ops.rs index 0d0802a1..6076f765 100644 --- a/rust/routee-compass/src/app/search/search_app_graph_ops.rs +++ b/rust/routee-compass/src/app/search/search_app_graph_ops.rs @@ -19,12 +19,12 @@ pub trait SearchAppGraphOps { impl SearchAppGraphOps for SearchApp { fn get_edge_origin(&self, edge_id: &EdgeId) -> Result { - let edge = self.directed_graph.get_edge(edge_id)?; + let edge = self.graph.get_edge(edge_id)?; Ok(edge.src_vertex_id) } fn get_edge_destination(&self, edge_id: &EdgeId) -> Result { - let edge = self.directed_graph.get_edge(edge_id)?; + let edge = self.graph.get_edge(edge_id)?; Ok(edge.dst_vertex_id) } @@ -33,7 +33,7 @@ impl SearchAppGraphOps for SearchApp { edge_id: &EdgeId, distance_unit: Option, ) -> Result { - let edge = self.directed_graph.get_edge(edge_id)?; + let edge = self.graph.get_edge(edge_id)?; let result_base = edge.distance; let result = match distance_unit { Some(du) => DistanceUnit::Meters.convert(&result_base, &du), @@ -43,6 +43,6 @@ impl SearchAppGraphOps for SearchApp { } fn get_incident_edge_ids(&self, vertex_id: &VertexId, direction: &Direction) -> Vec { - self.directed_graph.incident_edges(vertex_id, direction) + self.graph.incident_edges(vertex_id, direction) } } diff --git a/rust/routee-compass/src/plugin/input/default/debug/debug_plugin.rs b/rust/routee-compass/src/plugin/input/default/debug/debug_plugin.rs index dbfd5daf..a4236d70 100644 --- a/rust/routee-compass/src/plugin/input/default/debug/debug_plugin.rs +++ b/rust/routee-compass/src/plugin/input/default/debug/debug_plugin.rs @@ -1,12 +1,21 @@ -use crate::plugin::input::{input_plugin::InputPlugin, InputPluginError}; +use crate::{ + app::search::search_app::SearchApp, + plugin::input::{input_plugin::InputPlugin, InputPluginError}, +}; +use log; +use std::sync::Arc; pub struct DebugInputPlugin {} impl InputPlugin for DebugInputPlugin { - fn process(&self, input: &mut serde_json::Value) -> Result<(), InputPluginError> { + fn process( + &self, + input: &mut serde_json::Value, + _search_app: Arc, + ) -> Result<(), InputPluginError> { let string = serde_json::to_string_pretty(input) .map_err(|e| InputPluginError::JsonError { source: e })?; - println!("{}", string); + log::debug!("{}", string); Ok(()) } } diff --git a/rust/routee-compass/src/plugin/input/default/edge_rtree/edge_rtree_input_plugin.rs b/rust/routee-compass/src/plugin/input/default/edge_rtree/edge_rtree_input_plugin.rs deleted file mode 100644 index 286e52c9..00000000 --- a/rust/routee-compass/src/plugin/input/default/edge_rtree/edge_rtree_input_plugin.rs +++ /dev/null @@ -1,252 +0,0 @@ -use super::edge_rtree_record::EdgeRtreeRecord; -use crate::{ - app::compass::config::{ - compass_configuration_error::CompassConfigurationError, - frontier_model::{ - road_class::road_class_parser::RoadClassParser, - vehicle_restrictions::{ - vehicle_parameters::VehicleParameters, vehicle_restriction::VehicleRestriction, - vehicle_restriction_builder::vehicle_restriction_lookup_from_file, - }, - }, - }, - plugin::input::{ - input_json_extensions::InputJsonExtensions, input_plugin::InputPlugin, InputPluginError, - }, -}; -use geo_types::Coord; -use routee_compass_core::{ - model::network::edge_id::EdgeId, - model::unit::{as_f64::AsF64, Distance, DistanceUnit, BASE_DISTANCE_UNIT}, - util::{ - fs::{read_decoders, read_utils}, - geo::geo_io_utils::read_linestring_text_file, - }, -}; -use rstar::RTree; -use std::{ - collections::{HashMap, HashSet}, - path::PathBuf, -}; - -pub struct EdgeRtreeInputPlugin { - pub rtree: RTree, - pub tolerance: Option<(Distance, DistanceUnit)>, - - // TODO: instead of having to load the road classes and the truck restrictions - // it would be cleaner to bring in the FrontierModel into scope so we can just - // validate an edge based on the whatever the frontier model is. - - // Road class lookup table in case some road classes are restricted - pub road_class_lookup: Option>, - pub road_class_parser: RoadClassParser, - - // Vehicle restrictions - pub vehicle_restrictions: Option>>, -} - -impl InputPlugin for EdgeRtreeInputPlugin { - /// finds the nearest edge ids to the user-provided origin and destination coordinates. - /// optionally restricts the search to a subset of road classes tagged by the user. - fn process(&self, query: &mut serde_json::Value) -> Result<(), InputPluginError> { - let road_classes = self.road_class_parser.read_query(query).map_err(|e| { - InputPluginError::InputPluginFailed(format!( - "Unable to apply EdgeRtree Input Plugin due to:\n\n{}", - e - )) - })?; - let vehicle_parameters = VehicleParameters::from_query(query).ok(); - - let src_coord = query.get_origin_coordinate()?; - let dst_coord_option = query.get_destination_coordinate()?; - - let source_edge_id = search( - src_coord, - &self.rtree, - self.tolerance, - &self.road_class_lookup, - &road_classes, - &self.vehicle_restrictions, - &vehicle_parameters, - )? - .ok_or_else(|| matching_error(&src_coord, self.tolerance))?; - let destination_edge_id_option = match dst_coord_option { - None => Ok(None), - Some(dst_coord) => search( - dst_coord, - &self.rtree, - self.tolerance, - &self.road_class_lookup, - &road_classes, - &self.vehicle_restrictions, - &vehicle_parameters, - )? - .map(Some) - .ok_or_else(|| matching_error(&dst_coord, self.tolerance)), - }?; - - query.add_origin_edge(source_edge_id)?; - match destination_edge_id_option { - None => {} - Some(destination_edge_id) => { - query.add_destination_edge(destination_edge_id)?; - } - } - - Ok(()) - } -} - -impl EdgeRtreeInputPlugin { - pub fn new( - road_class_file: Option, - vehicle_restriction_file: Option, - linestring_file: String, - tolerance_distance: Option, - distance_unit: Option, - road_class_parser: RoadClassParser, - ) -> Result { - let road_class_lookup: Option> = match road_class_file { - None => Ok(None), - Some(file) => read_utils::read_raw_file(file, read_decoders::u8, None) - .map(|r| Some(r.into_vec())) - .map_err(CompassConfigurationError::IoError), - }?; - let vehicle_restrictions: Option>> = - match vehicle_restriction_file { - None => None, - Some(file) => { - let path = PathBuf::from(file); - let trs = vehicle_restriction_lookup_from_file(&path)?; - Some(trs) - } - }; - - let geometries = read_linestring_text_file(linestring_file) - .map_err(CompassConfigurationError::IoError)? - .into_vec(); - - let rcl_len_opt = road_class_lookup.as_ref().map(|l| l.len()); - let geo_len = geometries.len(); - if let Some(rcl_len) = rcl_len_opt { - if rcl_len != geo_len { - let msg = format!( - "edge_rtree: road class file and geometries file have different lengths ({} != {})", - rcl_len, geo_len - ); - return Err(CompassConfigurationError::UserConfigurationError(msg)); - } - } - - let records: Vec = geometries - .into_iter() - .enumerate() - .map(|(idx, geom)| EdgeRtreeRecord::new(EdgeId(idx), geom)) - .collect(); - - let rtree = RTree::bulk_load(records); - - let tolerance = match (tolerance_distance, distance_unit) { - (None, None) => None, - (None, Some(_)) => None, - (Some(t), None) => Some((t, BASE_DISTANCE_UNIT)), - (Some(t), Some(u)) => Some((t, u)), - }; - - Ok(EdgeRtreeInputPlugin { - rtree, - road_class_lookup, - tolerance, - road_class_parser, - vehicle_restrictions, - }) - } -} - -/// finds the nearest edge to some coordinate, optionally within some distance tolerance -/// -/// # Arguments -/// -/// * `coord` - coordinate from which to find a nearest edge -/// * `rtree` - search tree containing all road network edges -/// * `tolerance` - distance tolerance argument. if provided, result edge must be within this -/// distance/distance unit of the coord provided. -/// * `road_class_lookup` - optional lookup table for road classes -/// * `road_classes` - optional set of road classes to restrict search to -/// * `vehicle_restrictions` - optional lookup table for truck restrictions -/// * `vehicle_parameters` - truck parameters to validate against truck restrictions -/// -/// # Result -/// -/// the EdgeId of the nearest edge that meets the tolerance requirement, if provided -fn search( - coord: Coord, - rtree: &RTree, - tolerance: Option<(Distance, DistanceUnit)>, - road_class_lookup: &Option>, - road_classes: &Option>, - vehicle_restrictions: &Option>>, - vehicle_parameters: &Option, -) -> Result, InputPluginError> { - let point = geo::Point(coord); - for (record, distance_meters) in rtree.nearest_neighbor_iter_with_distance_2(&point) { - if !within_tolerance(tolerance, &distance_meters) { - return Ok(None); - } - let valid_class = match (road_classes, road_class_lookup) { - (Some(valid_classes), Some(lookup)) => { - let this_class = lookup.get(record.edge_id.0).ok_or_else(|| { - InputPluginError::InputPluginFailed(format!( - "edge rtree road class file missing edge {}", - record.edge_id - )) - })?; - valid_classes.contains(this_class) - } - _ => true, - }; - let valid_truck = match (vehicle_restrictions, vehicle_parameters) { - (Some(vehicle_restrictions), Some(vehicle_parameters)) => { - let restrictions = vehicle_restrictions.get(&record.edge_id); - if let Some(restrictions) = restrictions { - restrictions - .iter() - .all(|restriction| restriction.valid(vehicle_parameters)) - } else { - true - } - } - _ => true, - }; - if valid_class && valid_truck { - return Ok(Some(record.edge_id)); - } - } - Ok(None) -} - -/// helper to build a matching error response -fn matching_error( - coord: &Coord, - tolerance: Option<(Distance, DistanceUnit)>, -) -> InputPluginError { - let mut message = format!("unable to match coordinate {:?} to network edge", coord); - if let Some((dist, unit)) = tolerance { - message.push_str(&format!(" within tolerance of {} {}", dist, unit)) - }; - InputPluginError::InputPluginFailed(message) -} - -/// helper to test if some distance in meters is within the optionally-provided tolerance -fn within_tolerance(tolerance: Option<(Distance, DistanceUnit)>, distance_meters: &f32) -> bool { - match tolerance { - None => true, - Some((tolerance, distance_unit)) => { - let tolerance_meters = distance_unit - .convert(&tolerance, &DistanceUnit::Meters) - .as_f64() as f32; - - distance_meters <= &tolerance_meters - } - } -} diff --git a/rust/routee-compass/src/plugin/input/default/edge_rtree/edge_rtree_input_plugin_builder.rs b/rust/routee-compass/src/plugin/input/default/edge_rtree/edge_rtree_input_plugin_builder.rs deleted file mode 100644 index a479c1a0..00000000 --- a/rust/routee-compass/src/plugin/input/default/edge_rtree/edge_rtree_input_plugin_builder.rs +++ /dev/null @@ -1,49 +0,0 @@ -use std::sync::Arc; - -use super::edge_rtree_input_plugin::EdgeRtreeInputPlugin; -use crate::{ - app::compass::config::{ - builders::InputPluginBuilder, compass_configuration_error::CompassConfigurationError, - config_json_extension::ConfigJsonExtensions, - frontier_model::road_class::road_class_parser::RoadClassParser, - }, - plugin::input::input_plugin::InputPlugin, -}; -use routee_compass_core::model::unit::{Distance, DistanceUnit}; - -pub struct EdgeRtreeInputPluginBuilder {} - -impl InputPluginBuilder for EdgeRtreeInputPluginBuilder { - fn build( - &self, - parameters: &serde_json::Value, - ) -> Result, CompassConfigurationError> { - let parent_key = String::from("edge_rtree"); - let linestring_file = parameters.get_config_string(&"geometry_input_file", &parent_key)?; - let road_class_file = parameters.get_config_string_optional(&"road_class_input_file")?; - let vehicle_restriction_file = - parameters.get_config_string_optional(&"vehicle_restriction_input_file")?; - - let distance_tolerance_option = - parameters.get_config_serde_optional::(&"distance_tolerance", &parent_key)?; - let distance_unit_option = - parameters.get_config_serde_optional::(&"distance_unit", &parent_key)?; - - let road_class_parser = parameters - .get_config_serde_optional::( - &"road_class_parser", - &"RoadClassFrontierModel", - )? - .unwrap_or_default(); - - let plugin = EdgeRtreeInputPlugin::new( - road_class_file, - vehicle_restriction_file, - linestring_file, - distance_tolerance_option, - distance_unit_option, - road_class_parser, - )?; - Ok(Arc::new(plugin)) - } -} diff --git a/rust/routee-compass/src/plugin/input/default/edge_rtree/edge_rtree_record.rs b/rust/routee-compass/src/plugin/input/default/edge_rtree/edge_rtree_record.rs deleted file mode 100644 index f0c67c62..00000000 --- a/rust/routee-compass/src/plugin/input/default/edge_rtree/edge_rtree_record.rs +++ /dev/null @@ -1,50 +0,0 @@ -use geo::{Centroid, LineString, Point}; -use routee_compass_core::model::network::edge_id::EdgeId; -use rstar::{PointDistance, RTreeObject, AABB}; - -pub struct EdgeRtreeRecord { - pub edge_id: EdgeId, - pub geometry: LineString, -} - -impl EdgeRtreeRecord { - pub fn new(edge_id: EdgeId, geometry: LineString) -> EdgeRtreeRecord { - EdgeRtreeRecord { edge_id, geometry } - } -} - -impl RTreeObject for EdgeRtreeRecord { - type Envelope = AABB>; - fn envelope(&self) -> Self::Envelope { - self.geometry.envelope() - } -} - -impl PointDistance for EdgeRtreeRecord { - /// compares query nearness via the "centroid" of this LineString, - /// the midpoint of the bounding box of the line. - /// - /// # Arguments - /// - /// * `point` - point query of a nearest neighbors search - /// - /// # Returns - /// - /// * distance in meters (assumes points are in WGS84) - fn distance_2(&self, point: &Point) -> f32 { - let this_point = self - .geometry - .centroid() - .unwrap_or_else(|| panic!("empty linestring in geometry file")); - // as noted in the comments for PointDistance, this should return the squared distance. - // haversine *should* work but squared haversine in meters is giving weird results for - // the vertex rtree plugin, so, i'm reverting this to euclidean for now. -rjf 2023-12-01 - // let distance = haversine::coord_distance_meters(this_point.0, point.0) - // .unwrap_or(Distance::new(f64::MAX)) - // .as_f64(); - // distance * distance - let dx = this_point.x() - point.x(); - let dy = this_point.y() - point.y(); - dx * dx + dy * dy - } -} diff --git a/rust/routee-compass/src/plugin/input/default/edge_rtree/mod.rs b/rust/routee-compass/src/plugin/input/default/edge_rtree/mod.rs deleted file mode 100644 index 6dbab067..00000000 --- a/rust/routee-compass/src/plugin/input/default/edge_rtree/mod.rs +++ /dev/null @@ -1,3 +0,0 @@ -pub mod edge_rtree_input_plugin; -pub mod edge_rtree_input_plugin_builder; -pub mod edge_rtree_record; diff --git a/rust/routee-compass/src/plugin/input/default/grid_search/plugin.rs b/rust/routee-compass/src/plugin/input/default/grid_search/plugin.rs index fb62246b..3020610c 100644 --- a/rust/routee-compass/src/plugin/input/default/grid_search/plugin.rs +++ b/rust/routee-compass/src/plugin/input/default/grid_search/plugin.rs @@ -1,3 +1,6 @@ +use std::sync::Arc; + +use crate::app::search::search_app::SearchApp; use crate::plugin::input::input_field::InputField; use crate::plugin::input::input_json_extensions::InputJsonExtensions; use crate::plugin::input::input_plugin::InputPlugin; @@ -9,69 +12,15 @@ use routee_compass_core::util::multiset::MultiSet; pub struct GridSearchPlugin {} impl InputPlugin for GridSearchPlugin { - fn process(&self, input: &mut serde_json::Value) -> Result<(), InputPluginError> { - match input.get_grid_search() { + fn process( + &self, + input: &mut serde_json::Value, + _search_app: Arc, + ) -> Result<(), InputPluginError> { + match process_grid_search(input)? { None => Ok(()), - Some(grid_search_input) => { - // prevent recursion due to nested grid search keys - let recurses = serde_json::to_string(grid_search_input) - .map_err(|e| InputPluginError::JsonError { source: e })? - .contains("grid_search"); - if recurses { - return Err(InputPluginError::InputPluginFailed(String::from( - "grid search section cannot contain the string 'grid_search'", - ))); - } - - let map = grid_search_input.as_object().ok_or_else(|| { - InputPluginError::UnexpectedQueryStructure(format!("{:?}", input)) - })?; - let mut keys: Vec = vec![]; - let mut multiset_input: Vec> = vec![]; - let mut multiset_indices: Vec> = vec![]; - for (k, v) in map { - if let Some(v) = v.as_array() { - keys.push(k.to_string()); - multiset_input.push(v.to_vec()); - let indices = (0..v.len()).collect(); - multiset_indices.push(indices); - } - } - // for each combination, copy the grid search values into a fresh - // copy of the source (minus the "grid_search" key) - // let remove_key = InputField::GridSearch.to_str(); - let mut initial_map = input - .as_object() - .ok_or_else(|| { - InputPluginError::UnexpectedQueryStructure(format!("{:?}", input)) - })? - .clone(); - initial_map.remove(InputField::GridSearch.to_str()); - let initial = serde_json::json!(initial_map); - let multiset = MultiSet::from(&multiset_indices); - let result: Vec = multiset - .into_iter() - .map(|combination| { - let mut instance = initial.clone(); - let it = keys.iter().zip(combination.iter()).enumerate(); - for (set_idx, (key, val_idx)) in it { - let value = multiset_input[set_idx][*val_idx].clone(); - match value { - serde_json::Value::Object(o) => { - for (k, v) in o.into_iter() { - instance[k] = v.clone(); - } - } - _ => { - instance[key] = multiset_input[set_idx][*val_idx].clone(); - } - } - } - instance - }) - .collect(); - - let mut replacement = serde_json::json![result]; + Some(grid_expansion) => { + let mut replacement = serde_json::json![grid_expansion]; std::mem::swap(&mut replacement, input); Ok(()) } @@ -79,22 +28,93 @@ impl InputPlugin for GridSearchPlugin { } } +fn process_grid_search( + input: &serde_json::Value, +) -> Result>, InputPluginError> { + let grid_search_input = match input.get_grid_search() { + Some(gsi) => gsi, + None => return Ok(None), + }; + + // prevent recursion due to nested grid search keys + let recurses = serde_json::to_string(grid_search_input) + .map_err(|e| InputPluginError::JsonError { source: e })? + .contains("grid_search"); + if recurses { + return Err(InputPluginError::InputPluginFailed(String::from( + "grid search section cannot contain the string 'grid_search'", + ))); + } + + let map = grid_search_input + .as_object() + .ok_or_else(|| InputPluginError::UnexpectedQueryStructure(format!("{:?}", input)))?; + let mut keys: Vec = vec![]; + let mut multiset_input: Vec> = vec![]; + let mut multiset_indices: Vec> = vec![]; + for (k, v) in map { + if let Some(v) = v.as_array() { + keys.push(k.to_string()); + multiset_input.push(v.to_vec()); + let indices = (0..v.len()).collect(); + multiset_indices.push(indices); + } + } + // for each combination, copy the grid search values into a fresh + // copy of the source (minus the "grid_search" key) + // let remove_key = InputField::GridSearch.to_str(); + let mut initial_map = input + .as_object() + .ok_or_else(|| InputPluginError::UnexpectedQueryStructure(format!("{:?}", input)))? + .clone(); + initial_map.remove(InputField::GridSearch.to_str()); + let initial = serde_json::json!(initial_map); + let multiset = MultiSet::from(&multiset_indices); + let result: Vec = multiset + .into_iter() + .map(|combination| { + let mut instance = initial.clone(); + let it = keys.iter().zip(combination.iter()).enumerate(); + for (set_idx, (key, val_idx)) in it { + let value = multiset_input[set_idx][*val_idx].clone(); + match value { + serde_json::Value::Object(o) => { + for (k, v) in o.into_iter() { + instance[k] = v.clone(); + } + } + _ => { + instance[key] = multiset_input[set_idx][*val_idx].clone(); + } + } + } + instance + }) + .collect(); + + Ok(Some(result)) +} + #[cfg(test)] mod test { - use super::GridSearchPlugin; - use crate::plugin::input::input_plugin::InputPlugin; + use super::*; + use serde_json::json; #[test] fn test_grid_search_empty_parent_object() { - let mut input = serde_json::json!({ + let input = serde_json::json!({ "grid_search": { "bar": ["a", "b", "c"], "foo": [1.2, 3.4] } }); - let plugin = GridSearchPlugin {}; - plugin.process(&mut input).unwrap(); + + let result = match process_grid_search(&input) { + Ok(Some(rows)) => rows, + Ok(None) => panic!("process_grid_search returned no expansions"), + Err(e) => panic!("{}", e), + }; let expected = vec![ json![{"bar":"a","foo":1.2}], json![{"bar":"b","foo":1.2}], @@ -103,23 +123,24 @@ mod test { json![{"bar":"b","foo":3.4}], json![{"bar":"c","foo":3.4}], ]; - match input { - serde_json::Value::Array(result) => assert_eq!(result, expected), - other => panic!("expected array result, found {}", other), - } + assert_eq!(result, expected) } #[test] fn test_grid_search_persisted_parent_keys() { - let mut input = serde_json::json!({ + let input = serde_json::json!({ "ignored_key": "ignored_value", "grid_search": { "bar": ["a", "b", "c"], "foo": [1.2, 3.4] } }); - let plugin = GridSearchPlugin {}; - plugin.process(&mut input).unwrap(); + + let result = match process_grid_search(&input) { + Ok(Some(rows)) => rows, + Ok(None) => panic!("process_grid_search returned no expansions"), + Err(e) => panic!("{}", e), + }; let expected = vec![ json![{"bar":"a","foo":1.2,"ignored_key": "ignored_value"}], @@ -129,15 +150,13 @@ mod test { json![{"bar":"b","foo":3.4,"ignored_key": "ignored_value"}], json![{"bar":"c","foo":3.4,"ignored_key": "ignored_value"}], ]; - match input { - serde_json::Value::Array(result) => assert_eq!(result, expected), - other => panic!("expected array result, found {}", other), - } + + assert_eq!(result, expected) } #[test] fn test_grid_search_using_objects() { - let mut input = serde_json::json!({ + let input = serde_json::json!({ "ignored_key": "ignored_value", "grid_search": { "a": [1, 2], @@ -147,24 +166,26 @@ mod test { ], } }); - let plugin = GridSearchPlugin {}; - plugin.process(&mut input).unwrap(); + + let result = match process_grid_search(&input) { + Ok(Some(rows)) => rows, + Ok(None) => panic!("process_grid_search returned no expansions"), + Err(e) => panic!("{}", e), + }; + let expected = vec![ json![{"a":1,"ignored_key":"ignored_value","x":0,"y":0}], json![{"a":2,"ignored_key":"ignored_value","x":0,"y":0}], json![{"a":1,"ignored_key":"ignored_value","x":1,"y":1}], json![ {"a":2,"ignored_key":"ignored_value","x":1,"y":1}], ]; - // assert_eq!(result, expected); - match input { - serde_json::Value::Array(result) => assert_eq!(result, expected), - other => panic!("expected array result, found {}", other), - } + + assert_eq!(result, expected) } #[test] fn test_nested() { - let mut input = serde_json::json!({ + let input = serde_json::json!({ "abc": 123, "grid_search":{ "model_name": ["2016_TOYOTA_Camry_4cyl_2WD","2017_CHEVROLET_Bolt"], @@ -175,8 +196,13 @@ mod test { ] } }); - let plugin = GridSearchPlugin {}; - plugin.process(&mut input).unwrap(); + + let result = match process_grid_search(&input) { + Ok(Some(rows)) => rows, + Ok(None) => panic!("process_grid_search returned no expansions"), + Err(e) => panic!("{}", e), + }; + let expected = vec![ json![{"abc":123,"model_name":"2016_TOYOTA_Camry_4cyl_2WD","name":"d1","weights":{"distance":1,"time":0,"energy_electric":0}}], json![{"abc":123,"model_name":"2017_CHEVROLET_Bolt","name":"d1","weights":{"distance":1,"time":0,"energy_electric":0}}], @@ -185,15 +211,13 @@ mod test { json![{"abc":123,"model_name":"2016_TOYOTA_Camry_4cyl_2WD","name":"e1","weights":{"distance":0,"time":0,"energy_electric":1}}], json![{"abc":123,"model_name":"2017_CHEVROLET_Bolt","name":"e1","weights":{"distance":0,"time":0,"energy_electric":1}}], ]; - match input { - serde_json::Value::Array(result) => assert_eq!(result, expected), - other => panic!("expected array result, found {}", other), - } + + assert_eq!(result, expected) } #[test] pub fn test_handle_recursion() { - let mut input = serde_json::json!({ + let input = serde_json::json!({ "abc": 123, "grid_search":{ "grid_search": { @@ -201,8 +225,11 @@ mod test { } } }); - let plugin = GridSearchPlugin {}; - let result = plugin.process(&mut input); - assert!(result.is_err()); + + match process_grid_search(&input) { + Ok(Some(rows)) => panic!("process_grid_search should return an error"), + Ok(None) => panic!("process_grid_search returned no error"), + Err(e) => {} + }; } } diff --git a/rust/routee-compass/src/plugin/input/default/inject/inject_plugin.rs b/rust/routee-compass/src/plugin/input/default/inject/inject_plugin.rs index 596b3a58..017a18e5 100644 --- a/rust/routee-compass/src/plugin/input/default/inject/inject_plugin.rs +++ b/rust/routee-compass/src/plugin/input/default/inject/inject_plugin.rs @@ -1,4 +1,9 @@ -use crate::plugin::input::{input_plugin::InputPlugin, InputPluginError}; +use std::sync::Arc; + +use crate::{ + app::search::search_app::SearchApp, + plugin::input::{input_plugin::InputPlugin, InputPluginError}, +}; pub struct InjectInputPlugin { key: String, @@ -21,7 +26,11 @@ impl InjectInputPlugin { } impl InputPlugin for InjectInputPlugin { - fn process(&self, input: &mut serde_json::Value) -> Result<(), InputPluginError> { + fn process( + &self, + input: &mut serde_json::Value, + _search_app: Arc, + ) -> Result<(), InputPluginError> { if !self.overwrite { if let Some(obj) = input.as_object() { if obj.contains_key(&self.key) { diff --git a/rust/routee-compass/src/plugin/input/default/load_balancer/plugin.rs b/rust/routee-compass/src/plugin/input/default/load_balancer/plugin.rs index 56c3ae4d..0631869a 100644 --- a/rust/routee-compass/src/plugin/input/default/load_balancer/plugin.rs +++ b/rust/routee-compass/src/plugin/input/default/load_balancer/plugin.rs @@ -1,4 +1,7 @@ +use std::sync::Arc; + use super::weight_heuristic::WeightHeuristic; +use crate::app::search::search_app::SearchApp; use crate::plugin::input::input_json_extensions::InputJsonExtensions; use crate::plugin::input::input_plugin::InputPlugin; use crate::plugin::input::InputPluginError; @@ -8,7 +11,11 @@ pub struct LoadBalancerPlugin { } impl InputPlugin for LoadBalancerPlugin { - fn process(&self, query: &mut serde_json::Value) -> Result<(), InputPluginError> { + fn process( + &self, + query: &mut serde_json::Value, + _search_app: Arc, + ) -> Result<(), InputPluginError> { let w = self.heuristic.estimate_weight(query)?; let _updated = query.clone(); query.add_query_weight_estimate(w)?; diff --git a/rust/routee-compass/src/plugin/input/default/mod.rs b/rust/routee-compass/src/plugin/input/default/mod.rs index a6d22176..698b2d97 100644 --- a/rust/routee-compass/src/plugin/input/default/mod.rs +++ b/rust/routee-compass/src/plugin/input/default/mod.rs @@ -1,6 +1,4 @@ pub mod debug; -pub mod edge_rtree; pub mod grid_search; pub mod inject; pub mod load_balancer; -pub mod vertex_rtree; diff --git a/rust/routee-compass/src/plugin/input/default/vertex_rtree/builder.rs b/rust/routee-compass/src/plugin/input/default/vertex_rtree/builder.rs deleted file mode 100644 index 59197945..00000000 --- a/rust/routee-compass/src/plugin/input/default/vertex_rtree/builder.rs +++ /dev/null @@ -1,33 +0,0 @@ -use std::sync::Arc; - -use routee_compass_core::model::unit::{Distance, DistanceUnit}; - -use crate::{ - app::compass::config::{ - builders::InputPluginBuilder, compass_configuration_error::CompassConfigurationError, - config_json_extension::ConfigJsonExtensions, - }, - plugin::input::input_plugin::InputPlugin, -}; - -use super::plugin::RTreePlugin; - -pub struct VertexRTreeBuilder {} - -impl InputPluginBuilder for VertexRTreeBuilder { - fn build( - &self, - parameters: &serde_json::Value, - ) -> Result, CompassConfigurationError> { - let parent_key = String::from("Vertex RTree Input Plugin"); - let vertex_path = parameters.get_config_path(&"vertices_input_file", &parent_key)?; - let tolerance_distance = - parameters.get_config_serde_optional::(&"distance_tolerance", &parent_key)?; - let distance_unit = - parameters.get_config_serde_optional::(&"distance_unit", &parent_key)?; - let rtree = RTreePlugin::new(&vertex_path, tolerance_distance, distance_unit) - .map_err(CompassConfigurationError::PluginError)?; - let m: Arc = Arc::new(rtree); - Ok(m) - } -} diff --git a/rust/routee-compass/src/plugin/input/default/vertex_rtree/mod.rs b/rust/routee-compass/src/plugin/input/default/vertex_rtree/mod.rs deleted file mode 100644 index dc15aad0..00000000 --- a/rust/routee-compass/src/plugin/input/default/vertex_rtree/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub mod builder; -pub mod plugin; diff --git a/rust/routee-compass/src/plugin/input/default/vertex_rtree/plugin.rs b/rust/routee-compass/src/plugin/input/default/vertex_rtree/plugin.rs deleted file mode 100644 index 68c94535..00000000 --- a/rust/routee-compass/src/plugin/input/default/vertex_rtree/plugin.rs +++ /dev/null @@ -1,272 +0,0 @@ -use std::path::Path; - -use crate::plugin::input::input_plugin::InputPlugin; -use crate::plugin::input::{input_json_extensions::InputJsonExtensions, InputPluginError}; -use crate::plugin::plugin_error::PluginError; -use geo::{coord, Coord}; -use routee_compass_core::{ - model::unit::{Distance, DistanceUnit, BASE_DISTANCE_UNIT}, - model::{network::graph::Graph, network::Vertex}, - util::{fs::read_utils, geo::haversine}, -}; -use rstar::{PointDistance, RTree, RTreeObject, AABB}; - -pub struct RTreeVertex { - vertex: Vertex, -} - -impl RTreeVertex { - pub fn new(vertex: Vertex) -> Self { - Self { vertex } - } - pub fn x(&self) -> f32 { - self.vertex.x() - } - pub fn y(&self) -> f32 { - self.vertex.y() - } -} - -pub struct VertexRTree { - rtree: RTree, -} - -impl VertexRTree { - pub fn new(vertices: Vec) -> Self { - let rtree_vertices: Vec = vertices.into_iter().map(RTreeVertex::new).collect(); - let rtree = RTree::bulk_load(rtree_vertices); - Self { rtree } - } - - pub fn from_directed_graph(graph: &Graph) -> Self { - let vertices = graph.vertices.to_vec(); - Self::new(vertices) - } - - pub fn nearest_vertex(&self, point: Coord) -> Option<&Vertex> { - match self.rtree.nearest_neighbor(&point) { - Some(rtree_vertex) => Some(&rtree_vertex.vertex), - None => None, - } - } - - pub fn nearest_vertices(&self, point: Coord, n: usize) -> Vec<&Vertex> { - self.rtree - .nearest_neighbor_iter(&point) - .take(n) - .map(|rtv| &rtv.vertex) - .collect() - } -} - -impl RTreeObject for RTreeVertex { - type Envelope = AABB>; - - fn envelope(&self) -> Self::Envelope { - AABB::from_corners( - coord! {x: self.x(), y: self.y()}, - coord! {x: self.x(), y: self.y()}, - ) - } -} - -impl PointDistance for RTreeVertex { - fn distance_2(&self, point: &Coord) -> f32 { - let dx = self.x() - point.x; - let dy = self.y() - point.y; - dx * dx + dy * dy - } -} - -/// Builds an input plugin that uses an RTree to find the nearest vertex to the origin and destination coordinates. -/// -/// # Arguments -/// -/// * `vertices` - The vertices to build the RTree from. -/// -/// # Returns -/// -/// * An input plugin that uses an RTree to find the nearest vertex to the origin and destination coordinates. -pub struct RTreePlugin { - vertex_rtree: VertexRTree, - tolerance: Option<(Distance, DistanceUnit)>, -} - -impl RTreePlugin { - /// creates a new R Tree input plugin instance. - /// - /// # Arguments - /// - /// * `vertex_file` - file containing vertices - /// * `tolerance_distance` - optional max distance to nearest vertex (assumed infinity if not included) - /// * `distance_unit` - distance unit for tolerance, assumed BASE_DISTANCE_UNIT if not provided - /// - /// # Returns - /// - /// * a plugin instance or an error from file loading - pub fn new( - vertex_file: &Path, - tolerance_distance: Option, - distance_unit: Option, - ) -> Result { - let vertices: Box<[Vertex]> = - read_utils::from_csv(&vertex_file, true, None).map_err(|e| { - InputPluginError::BuildFailed(format!("failure reading vertex file: {}", e)) - })?; - let vertex_rtree = VertexRTree::new(vertices.to_vec()); - let tolerance = match (tolerance_distance, distance_unit) { - (None, None) => None, - (None, Some(_)) => None, - (Some(t), None) => Some((t, BASE_DISTANCE_UNIT)), - (Some(t), Some(u)) => Some((t, u)), - }; - Ok(RTreePlugin { - vertex_rtree, - tolerance, - }) - } -} - -impl InputPlugin for RTreePlugin { - /// finds the nearest graph vertex to the user-provided origin (and optionally, destination) coordinates. - /// - /// # Arguments - /// - /// * `query` - search query assumed to have at least an origin coordinate entry - /// - /// # Returns - /// - /// * either vertex ids for the nearest coordinates to the the origin (and optionally destination), - /// or, an error if not found or not within tolerance - fn process(&self, query: &mut serde_json::Value) -> Result<(), InputPluginError> { - let src_coord = query.get_origin_coordinate()?; - let dst_coord_option = query.get_destination_coordinate()?; - - let src_vertex = self.vertex_rtree.nearest_vertex(src_coord).ok_or_else(|| { - InputPluginError::InputPluginFailed(format!( - "nearest vertex not found for origin coordinate {:?}", - src_coord - )) - })?; - - validate_tolerance(&src_coord, &src_vertex.coordinate, &self.tolerance)?; - query.add_origin_vertex(src_vertex.vertex_id)?; - - match dst_coord_option { - None => {} - Some(dst_coord) => { - let dst_vertex = self.vertex_rtree.nearest_vertex(dst_coord).ok_or_else(|| { - InputPluginError::InputPluginFailed(format!( - "nearest vertex not found for destination coordinate {:?}", - dst_coord - )) - })?; - validate_tolerance(&dst_coord, &dst_vertex.coordinate, &self.tolerance)?; - query.add_destination_vertex(dst_vertex.vertex_id)?; - } - } - - Ok(()) - } -} - -/// confirms that two coordinates are within some stated distance tolerance. -/// if no tolerance is provided, the dst coordinate is assumed to be a valid distance. -/// -/// # Arguments -/// -/// * `src` - source coordinate -/// * `dst` - destination coordinate that may or may not be within some distance -/// tolerance of the src coordinate -/// * `tolerance` - tolerance parameters set by user for the rtree plugin. if this is None, -/// all coordinate pairs are assumed to be within distance tolerance, but this -/// may lead to unexpected behavior where far away coordinates are considered "matched". -/// -/// # Returns -/// -/// * nothing, or an error if the coordinates are not within tolerance -fn validate_tolerance( - src: &Coord, - dst: &Coord, - tolerance: &Option<(Distance, DistanceUnit)>, -) -> Result<(), InputPluginError> { - match tolerance { - Some((tolerance_distance, tolerance_distance_unit)) => { - let distance_meters = haversine::coord_distance_meters(src, dst) - .map_err(InputPluginError::InputPluginFailed)?; - let distance = DistanceUnit::Meters.convert(&distance_meters, tolerance_distance_unit); - if &distance >= tolerance_distance { - Err(InputPluginError::InputPluginFailed( - format!( - "coord {:?} nearest vertex coord is {:?} which is {} {} away, exceeding the distance tolerance of {} {}", - src, - dst, - distance, - tolerance_distance_unit, - tolerance_distance, - tolerance_distance_unit, - ) - )) - } else { - Ok(()) - } - } - None => Ok(()), - } -} - -#[cfg(test)] -mod test { - use std::{ - fs::{self}, - path::PathBuf, - }; - - use super::*; - use crate::plugin::input::input_field::InputField; - use serde_json::json; - - #[test] - fn test_rtree_plugin() { - let vertices_filepath = PathBuf::from(env!("CARGO_MANIFEST_DIR")) - .join("src") - .join("plugin") - .join("input") - .join("default") - .join("vertex_rtree") - .join("test") - .join("rtree_vertices.csv"); - - let query_filepath = PathBuf::from(env!("CARGO_MANIFEST_DIR")) - .join("src") - .join("plugin") - .join("input") - .join("default") - .join("vertex_rtree") - .join("test") - .join("rtree_query.json"); - let query_str = fs::read_to_string(query_filepath).unwrap(); - let rtree_plugin = RTreePlugin::new(&vertices_filepath, None, None).unwrap(); - let mut query: serde_json::Value = serde_json::from_str(&query_str).unwrap(); - rtree_plugin.process(&mut query).unwrap(); - - match query { - serde_json::Value::Object(obj) => { - assert_eq!( - json![obj], - json!( - { - InputField::OriginX.to_str(): 0.1, - InputField::OriginY.to_str(): 0.1, - InputField::DestinationX.to_str(): 1.9, - InputField::DestinationY.to_str(): 2.1, - InputField::OriginVertex.to_str(): 0, - InputField::DestinationVertex.to_str(): 2, - } - ) - ); - } - other => panic!("expected object result, found {}", other), - } - } -} diff --git a/rust/routee-compass/src/plugin/input/input_plugin.rs b/rust/routee-compass/src/plugin/input/input_plugin.rs index 401b9dd9..94d51b5a 100644 --- a/rust/routee-compass/src/plugin/input/input_plugin.rs +++ b/rust/routee-compass/src/plugin/input/input_plugin.rs @@ -1,3 +1,7 @@ +use std::sync::Arc; + +use crate::app::search::search_app::SearchApp; + use super::InputPluginError; /// Performs some kind of pre-processing on a user query input. The input JSON is available @@ -10,11 +14,16 @@ use super::InputPluginError; /// /// The following default set of input plugin builders are found in the [`super::default`] module: /// -/// * [rtree] - map matches x and y coordinates to vertex ids in the network +/// * [debug] - logs the (current) status of each query to the logging system /// * [grid search] - duplicates a query based on a list of user-defined values +/// * [inject] - mechanism to inject values into the queries +/// * [load balancer] - uses weighting heuristics to balance query loads across threads /// -/// [rtree]: super::default::rtree::builder::VertexRTreeBuilder +/// [debug]: super::default::debug::debug_builder::DebugInputPluginBuilder /// [grid search]: super::default::grid_search::builder::GridSearchBuilder +/// [inject]: super::default::inject::inject_builder::InjectPluginBuilder +/// [load balancer]: super::default::load_balancer::builder::LoadBalancerBuilder +/// pub trait InputPlugin: Send + Sync { /// Applies this [`InputPlugin`] to a user query input, passing along a `Vec` of input /// queries as a result which will replace the input. @@ -22,9 +31,14 @@ pub trait InputPlugin: Send + Sync { /// # Arguments /// /// * `input` - the user query input passed to this plugin + /// * `search_app` - a reference to the search app with all loaded assets /// /// # Returns /// /// A `Vec` of JSON values to replace the input JSON, or an error - fn process(&self, input: &mut serde_json::Value) -> Result<(), InputPluginError>; + fn process( + &self, + input: &mut serde_json::Value, + search_app: Arc, + ) -> Result<(), InputPluginError>; } diff --git a/rust/routee-compass/src/plugin/output/default/traversal/builder.rs b/rust/routee-compass/src/plugin/output/default/traversal/builder.rs index a5036d1a..788b850c 100644 --- a/rust/routee-compass/src/plugin/output/default/traversal/builder.rs +++ b/rust/routee-compass/src/plugin/output/default/traversal/builder.rs @@ -43,13 +43,13 @@ impl OutputPluginBuilder for TraversalPluginBuilder { ) -> Result, CompassConfigurationError> { let parent_key = String::from("traversal"); - let geometry_filename = parameters.get_config_path(&"geometry_input_file", &parent_key)?; + // let geometry_filename = parameters.get_config_path(&"geometry_input_file", &parent_key)?; let route: Option = parameters.get_config_serde_optional(&"route", &parent_key)?; let tree: Option = parameters.get_config_serde_optional(&"tree", &parent_key)?; - let geom_plugin = TraversalPlugin::from_file(&geometry_filename, route, tree) + let geom_plugin = TraversalPlugin::new(route, tree) .map_err(|e| PluginError::OutputPluginFailed { source: e })?; Ok(Arc::new(geom_plugin)) } diff --git a/rust/routee-compass/src/plugin/output/default/traversal/plugin.rs b/rust/routee-compass/src/plugin/output/default/traversal/plugin.rs index 45529bc1..c3e5264b 100644 --- a/rust/routee-compass/src/plugin/output/default/traversal/plugin.rs +++ b/rust/routee-compass/src/plugin/output/default/traversal/plugin.rs @@ -4,19 +4,11 @@ use crate::app::compass::compass_app_error::CompassAppError; use crate::app::search::search_app_result::SearchAppResult; use crate::plugin::output::output_plugin::OutputPlugin; use crate::plugin::output::OutputPluginError; -use geo::LineString; -use kdam::Bar; -use kdam::BarExt; use routee_compass_core::algorithm::search::edge_traversal::EdgeTraversal; use routee_compass_core::algorithm::search::search_instance::SearchInstance; -use routee_compass_core::util::fs::fs_utils; -use routee_compass_core::util::fs::read_utils::read_raw_file; -use routee_compass_core::util::geo::geo_io_utils; use serde_json::json; -use std::path::Path; pub struct TraversalPlugin { - geoms: Box<[LineString]>, route: Option, tree: Option, route_key: String, @@ -24,43 +16,13 @@ pub struct TraversalPlugin { } impl TraversalPlugin { - pub fn from_file>( - filename: &P, + pub fn new( route: Option, tree: Option, ) -> Result { - let count = fs_utils::line_count(filename, fs_utils::is_gzip(filename)).map_err(|e| { - OutputPluginError::BuildFailed(format!( - "failure reading line count for file {}: {}", - filename.as_ref().to_str().unwrap_or_default(), - e - )) - })?; - - let mut pb = Bar::builder() - .total(count) - .animation("fillup") - .desc("geometry file") - .build() - .map_err(OutputPluginError::InternalError)?; - - let cb = Box::new(|| { - let _ = pb.update(1); - }); - let geoms = - read_raw_file(filename, geo_io_utils::parse_wkt_linestring, Some(cb)).map_err(|e| { - OutputPluginError::BuildFailed(format!( - "failure reading geometry file {}: {}", - filename.as_ref().to_str().unwrap_or_default(), - e - )) - })?; - eprintln!(); - let route_key = TraversalJsonField::RouteOutput.to_string(); let tree_key = TraversalJsonField::TreeOutput.to_string(); Ok(TraversalPlugin { - geoms, route, tree, route_key, @@ -85,7 +47,8 @@ impl OutputPlugin for TraversalPlugin { .routes .iter() .map(|route| { - construct_route_output(route, si, &route_args, &self.geoms) + // construct_route_output(route, si, &route_args, &self.geoms) + construct_route_output(route, si, &route_args) }) .collect::, _>>() .map_err(OutputPluginError::OutputPluginFailed)?; @@ -108,7 +71,10 @@ impl OutputPlugin for TraversalPlugin { let trees_serialized = result .trees .iter() - .map(|tree| tree_args.generate_tree_output(tree, &self.geoms)) + .map(|tree| { + // tree_args.generate_tree_output(tree, &self.geoms) + tree_args.generate_tree_output(tree, si.map_model.clone()) + }) .collect::, _>>()?; let trees_json = match trees_serialized.as_slice() { [] => serde_json::Value::Null, @@ -130,13 +96,12 @@ fn construct_route_output( route: &Vec, si: &SearchInstance, output_format: &TraversalOutputFormat, - geoms: &[LineString], ) -> Result { let last_edge = route .last() .ok_or_else(|| String::from("cannot find result route state when route is empty"))?; let path_json = output_format - .generate_route_output(route, geoms) + .generate_route_output(route, si.map_model.clone()) .map_err(|e| e.to_string())?; let traversal_summary = si.state_model.serialize_state(&last_edge.result_state); let state_model = si.state_model.serialize_state_model(); @@ -157,80 +122,3 @@ fn construct_route_output( }]; Ok(result) } - -#[cfg(test)] -mod tests { - - use routee_compass_core::util::{ - fs::read_utils::read_raw_file, geo::geo_io_utils::parse_wkt_linestring, - }; - - use std::path::PathBuf; - - fn mock_geometry_file() -> PathBuf { - PathBuf::from(env!("CARGO_MANIFEST_DIR")) - .join("src") - .join("plugin") - .join("output") - .join("default") - .join("test") - .join("geometry.txt") - } - - #[test] - fn test_geometry_deserialization() { - let result = read_raw_file(mock_geometry_file(), parse_wkt_linestring, None).unwrap(); - assert_eq!(result.len(), 3); - } - - // TODO: - // the API for OutputPlugin now expects a SearchInstance which is non-trivial to instantiate. - // the logic for adding geometries should be refactored into a separate function and this test - // should be moved to the file where that function exists. - - // #[test] - // fn test_add_geometry() { - // let expected_geometry = String::from("LINESTRING(0 0,1 1,2 2,3 3,4 4,5 5,6 6,7 7,8 8)"); - // let mut output_result = serde_json::json!({}); - // let route = vec![ - // EdgeTraversal { - // edge_id: EdgeId(0), - // access_cost: Cost::from(0.0), - // traversal_cost: Cost::from(0.0), - // result_state: vec![StateVar(0.0)], - // }, - // EdgeTraversal { - // edge_id: EdgeId(1), - // access_cost: Cost::from(0.0), - // traversal_cost: Cost::from(0.0), - // result_state: vec![StateVar(0.0)], - // }, - // EdgeTraversal { - // edge_id: EdgeId(2), - // access_cost: Cost::from(0.0), - // traversal_cost: Cost::from(0.0), - // result_state: vec![StateVar(0.0)], - // }, - // ]; - // let search_result = SearchAppResult { - // route, - // tree: HashMap::new(), - // search_executed_time: Local::now().to_rfc3339(), - // algorithm_runtime: Duration::ZERO, - // route_runtime: Duration::ZERO, - // search_app_runtime: Duration::ZERO, - // iterations: 0, - // }; - // let filename = mock_geometry_file(); - // let _route_geometry = true; - // let _tree_geometry = false; - // let geom_plugin = - // TraversalPlugin::from_file(&filename, Some(TraversalOutputFormat::Wkt), None).unwrap(); - - // geom_plugin - // .process(&mut output_result, &Ok(search_result)) - // .unwrap(); - // let geometry_wkt = output_result.get_route_geometry_wkt().unwrap(); - // assert_eq!(geometry_wkt, expected_geometry); - // } -} diff --git a/rust/routee-compass/src/plugin/output/default/traversal/traversal_ops.rs b/rust/routee-compass/src/plugin/output/default/traversal/traversal_ops.rs index 9d904090..009242ee 100644 --- a/rust/routee-compass/src/plugin/output/default/traversal/traversal_ops.rs +++ b/rust/routee-compass/src/plugin/output/default/traversal/traversal_ops.rs @@ -5,24 +5,26 @@ use geojson::feature::Id; use geojson::{Feature, FeatureCollection}; use routee_compass_core::algorithm::search::edge_traversal::EdgeTraversal; use routee_compass_core::algorithm::search::search_tree_branch::SearchTreeBranch; +use routee_compass_core::model::map::map_model::MapModel; use routee_compass_core::model::network::vertex_id::VertexId; use routee_compass_core::util::geo::geo_io_utils; use std::collections::HashMap; +use std::sync::Arc; pub fn create_tree_geojson( tree: &HashMap, - geoms: &[LineString], + map_model: Arc, ) -> Result { let features = tree .values() .map(|t| { - let row_result = geoms - .get(t.edge_traversal.edge_id.0) + let row_result = map_model + .get(&t.edge_traversal.edge_id) .cloned() - .ok_or_else(|| { + .map_err(|e| { OutputPluginError::OutputPluginFailed(format!( - "geometry table missing edge id {}", - t.edge_traversal.edge_id + "failure creating tree GeoJSON: {}", + e )) }) .and_then(|g| create_geojson_feature(&t.edge_traversal, g)); @@ -42,18 +44,18 @@ pub fn create_tree_geojson( pub fn create_route_geojson( route: &[EdgeTraversal], - geoms: &[LineString], + map_model: Arc, ) -> Result { let features = route .iter() .map(|t| { - let row_result = geoms - .get(t.edge_id.0) + let row_result = map_model + .get(&t.edge_id) .cloned() - .ok_or_else(|| { + .map_err(|e| { OutputPluginError::OutputPluginFailed(format!( - "geometry table missing edge id {}", - t.edge_id + "failure building route geojson: {}", + e )) }) .and_then(|g| create_geojson_feature(t, g)); @@ -117,7 +119,7 @@ pub fn create_branch_geometry( pub fn create_route_linestring( route: &[EdgeTraversal], - geoms: &[LineString], + map_model: Arc, ) -> Result, OutputPluginError> { let edge_ids = route .iter() @@ -127,10 +129,10 @@ pub fn create_route_linestring( let edge_linestrings = edge_ids .iter() .map(|eid| { - let geom = geoms.get(eid.0).ok_or_else(|| { + let geom = map_model.get(eid).map_err(|e| { OutputPluginError::OutputPluginFailed(format!( - "geometry table missing edge id {}", - *eid + "failure building route linestring: {}", + e )) }); geom @@ -142,7 +144,8 @@ pub fn create_route_linestring( pub fn create_tree_multilinestring( tree: &HashMap, - geoms: &[LineString], + // geoms: &[LineString], + map_model: Arc, ) -> Result, OutputPluginError> { let edge_ids = tree .values() @@ -152,11 +155,8 @@ pub fn create_tree_multilinestring( let tree_linestrings = edge_ids .iter() .map(|eid| { - let geom = geoms.get(eid.0).ok_or_else(|| { - OutputPluginError::OutputPluginFailed(format!( - "geometry table missing edge id {}", - *eid - )) + let geom = map_model.get(eid).map_err(|e| { + OutputPluginError::OutputPluginFailed(format!("failure building tree WKT: {}", e)) }); geom.cloned() }) diff --git a/rust/routee-compass/src/plugin/output/default/traversal/traversal_output_format.rs b/rust/routee-compass/src/plugin/output/default/traversal/traversal_output_format.rs index 3be5b340..8450142d 100644 --- a/rust/routee-compass/src/plugin/output/default/traversal/traversal_output_format.rs +++ b/rust/routee-compass/src/plugin/output/default/traversal/traversal_output_format.rs @@ -1,11 +1,11 @@ -use std::collections::HashMap; +use std::{collections::HashMap, sync::Arc}; use super::traversal_ops as ops; use crate::plugin::output::OutputPluginError; -use geo::{CoordFloat, Geometry, LineString}; +use geo::{CoordFloat, Geometry}; use routee_compass_core::{ algorithm::search::{edge_traversal::EdgeTraversal, search_tree_branch::SearchTreeBranch}, - model::network::vertex_id::VertexId, + model::{map::map_model::MapModel, network::vertex_id::VertexId}, }; use serde::{Deserialize, Serialize}; use wkt::ToWkt; @@ -29,16 +29,16 @@ impl TraversalOutputFormat { pub fn generate_route_output( &self, route: &Vec, - geoms: &[LineString], + map_model: Arc, ) -> Result { match self { TraversalOutputFormat::Wkt => { - let route_geometry = ops::create_route_linestring(route, geoms)?; + let route_geometry = ops::create_route_linestring(route, map_model.clone())?; let route_wkt = route_geometry.wkt_string(); Ok(serde_json::Value::String(route_wkt)) } TraversalOutputFormat::Wkb => { - let linestring = ops::create_route_linestring(route, geoms)?; + let linestring = ops::create_route_linestring(route, map_model.clone())?; let geometry = geo::Geometry::LineString(linestring); let wkb_str = geometry_to_wkb_string(&geometry)?; Ok(serde_json::Value::String(wkb_str)) @@ -48,7 +48,7 @@ impl TraversalOutputFormat { Ok(result) } TraversalOutputFormat::GeoJson => { - let result = ops::create_route_geojson(route, geoms)?; + let result = ops::create_route_geojson(route, map_model.clone())?; Ok(result) } TraversalOutputFormat::EdgeId => { @@ -63,16 +63,16 @@ impl TraversalOutputFormat { pub fn generate_tree_output( &self, tree: &HashMap, - geoms: &[LineString], + map_model: Arc, ) -> Result { match self { TraversalOutputFormat::Wkt => { - let route_geometry = ops::create_tree_multilinestring(tree, geoms)?; + let route_geometry = ops::create_tree_multilinestring(tree, map_model)?; let route_wkt = route_geometry.wkt_string(); Ok(serde_json::Value::String(route_wkt)) } TraversalOutputFormat::Wkb => { - let route_geometry = ops::create_tree_multilinestring(tree, geoms)?; + let route_geometry = ops::create_tree_multilinestring(tree, map_model)?; let geometry = geo::Geometry::MultiLineString(route_geometry); let wkb_str = geometry_to_wkb_string(&geometry)?; Ok(serde_json::Value::String(wkb_str)) @@ -82,7 +82,7 @@ impl TraversalOutputFormat { Ok(result) } TraversalOutputFormat::GeoJson => { - let result = ops::create_tree_geojson(tree, geoms)?; + let result = ops::create_tree_geojson(tree, map_model)?; Ok(result) } TraversalOutputFormat::EdgeId => { @@ -116,7 +116,7 @@ fn geometry_to_wkb_string>( #[cfg(test)] mod test { - use super::*; + use crate::app::search::search_app_result::SearchAppResult; use chrono::Local; use geo::{coord, LineString}; @@ -126,8 +126,8 @@ mod test { }; use std::time::Duration; - #[test] - fn test() { + #[ignore = "needs mocked graph for map model integration in test"] + fn test_e2e() { let route = vec![ EdgeTraversal { edge_id: EdgeId(0), @@ -167,29 +167,31 @@ mod test { ] .into_boxed_slice(); - println!( - "{:?}", - TraversalOutputFormat::Wkt - .generate_route_output(&result.routes[0], &geoms) - .map(|r| serde_json::to_string_pretty(&r)) - ); - println!( - "{:?}", - TraversalOutputFormat::Json - .generate_route_output(&result.routes[0], &geoms) - .map(|r| serde_json::to_string_pretty(&r)) - ); - println!( - "{:?}", - TraversalOutputFormat::GeoJson - .generate_route_output(&result.routes[0], &geoms) - .map(|r| serde_json::to_string_pretty(&r)) - ); - println!( - "{:?}", - TraversalOutputFormat::EdgeId - .generate_route_output(&result.routes[0], &geoms) - .map(|r| serde_json::to_string_pretty(&r)) - ); + // let map_model = MapModel::new(graph, config) + + // println!( + // "{:?}", + // TraversalOutputFormat::Wkt + // .generate_route_output(&result.routes[0], &geoms) + // .map(|r| serde_json::to_string_pretty(&r)) + // ); + // println!( + // "{:?}", + // TraversalOutputFormat::Json + // .generate_route_output(&result.routes[0], &geoms) + // .map(|r| serde_json::to_string_pretty(&r)) + // ); + // println!( + // "{:?}", + // TraversalOutputFormat::GeoJson + // .generate_route_output(&result.routes[0], &geoms) + // .map(|r| serde_json::to_string_pretty(&r)) + // ); + // println!( + // "{:?}", + // TraversalOutputFormat::EdgeId + // .generate_route_output(&result.routes[0], &geoms) + // .map(|r| serde_json::to_string_pretty(&r)) + // ); } }