Skip to content

Instantly share code, notes, and snippets.

@creade
Forked from veltman/README.md
Last active June 2, 2016 01:07
Show Gist options
  • Save creade/3ef77b8ddd507ddf952ff65725996016 to your computer and use it in GitHub Desktop.
Save creade/3ef77b8ddd507ddf952ff65725996016 to your computer and use it in GitHub Desktop.
Strip map with labels

A version of this strip map with some labeled features.

Labels are a bit trickier than background features because you don't want to clip them to the zones, but you can't just create one copy per zone of each, or you'll get a bunch of identical labels approximately on top of each other and it will look weird. This uses a point-in-polygon test to assign each labeled point to its proper zone at the start. Once that assignment is done, you could put the labels in their own top layer if you had to worry about other features overlapping (not really an issue in this case).

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<style>
path {
fill: none;
stroke-width: 2px;
stroke-linejoin: round;
}
text {
font: 14px Helvetica, Arial, sans-serif;
text-anchor: end;
}
.state {
stroke: #999;
stroke-width: 1px;
fill: papayawhip;
}
.simplified {
stroke: #de1e3d;
stroke-width: 2px;
stroke-dasharray: 8,8;
}
.zone {
stroke: #0eb8ba;
}
.hidden {
display: none;
}
</style>
</head>
<body>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.17/d3.min.js"></script>
<script src="warper.js"></script>
<script src="simplify.js"></script>
<script>
var stripWidth = 80;
var points = [
{ name: "New Buffalo", coordinates: [ -86.752233, 41.798442] },
{ name: "Muskegon", coordinates: [-86.259203,43.236337] },
{ name: "Traverse City", coordinates: [-85.620889,44.765192] },
{ name: "Mackinaw City", coordinates: [-84.730492, 45.788204] },
{ name: "Alpena", coordinates: [-83.428751,45.059565] },
{ name: "Bay City", coordinates: [-83.859883,43.646888] },
{ name: "Detroit", coordinates: [-83.041049,42.327537] }
];
var projection = d3.geo.conicConformal()
.parallels([42, 45])
.rotate([84, -35 - 20 / 60])
.scale(3433)
.translate([355, 798]);
var line = d3.svg.line();
// Top point
var origin = [50, 100];
d3.json("mi.geojson",function(err,mi){
// Preproject to screen coords
mi.coordinates[0] = mi.coordinates[0].map(projection);
points.forEach(function(point){
point.coordinates = projection(point.coordinates);
});
// Get coastline
var ls = mi.coordinates[0].slice(102, 1700);
// Get simplified vertices
var simplified = simplify(ls, 675);
var zones = d3.select("body").append("svg")
.attr("width", 960)
.attr("height", 720)
.selectAll("g")
.data(getZones(simplified))
.enter()
.append("g");
zones.append("defs")
.append("clipPath")
.attr("id",function(d, i){
return "clip" + i;
})
.append("path");
var inner = zones.append("g")
.attr("class",function(d, i) {
return i ? "hidden" : null;
});
inner.append("path")
.attr("class", "state");
inner.append("line")
.attr("class", "simplified fade hidden");
// Put boundary outside so it isn't clipped
zones.append("path")
.attr("class", "zone fade hidden");
// Only put cities in zones they actually fall in
var cities = zones.selectAll(".city")
.data(function(d, i){
return points.filter(function(point){
if (pip(point.coordinates, d.boundary)) {
return point.zone = d;
}
});
})
.enter()
.append("g")
.attr("class", "city");
cities.append("circle")
.attr("r", 3);
cities.append("text")
.text(function(d){
return d.name;
})
.attr("dx", "-0.5em")
.attr("dy", "0.35em");
zones.call(update);
// // Step-by-step for demo purposes
d3.select("body")
.transition()
.duration(1000)
.each("end", clipState)
.transition()
.each("end", showLine)
.transition()
.each("end", showZones)
.transition()
.each("end", move);
// 1. Clip out the rest of CA
function clipState() {
inner.classed("hidden", false)
.attr("clip-path",function(d, i){
return "url(#clip" + i + ")";
});
}
// 2. Show the simplified line
function showLine() {
inner.select(".simplified")
.classed("hidden", false);
}
// 3. Show the zone boundaries
function showZones() {
zones.select(".zone")
.classed("hidden", false);
}
// 4. Rotate/translate all the zones
function move() {
warpZones(zones.data());
// Flip text orientation
d3.selectAll("text").transition()
.duration(1000)
.each("end",function(){
d3.select(this).style("text-anchor", "middle")
.attr("dx", 0)
.attr("dy", "1.5em");
});
zones.transition()
.duration(2000)
.each("end",align)
.call(update);
}
// 5. Warp the zones to rectangles
function align(z) {
z.project = function(d){
return z.warp(z.translate(d));
};
z.boundary = z.corners;
d3.select(this)
.transition()
.duration(750)
.call(update)
.each("end",fade);
}
// 6. Fade out
function fade() {
d3.select(this).selectAll(".fade")
.transition()
.duration(500)
.style("opacity", 0);
}
// Redraw
function update(sel) {
sel.select(".zone")
.attr("d",function(d){
return line(d.boundary.slice(0,4)) + "Z";
});
sel.select(".state")
.attr("d",function(d){
return d.path(mi);
});
sel.select(".simplified")
.attr("x1",function(d){
return d.ends[0][0];
})
.attr("x2",function(d){
return d.ends[1][0];
})
.attr("y1",function(d){
return d.ends[0][1];
})
.attr("y2",function(d){
return d.ends[1][1];
});
sel.select("clipPath path")
.attr("d",function(d){
return line(d.boundary.slice(0,4)) + "Z";
});
sel.selectAll(".city")
.attr("transform",function(d){
return "translate(" + d.zone.project(d.coordinates) + ")";
});
}
});
// Turn a simplified LineString into one group per segment
function getZones(simp) {
return simp.slice(1).map(function(p, i){
return {
boundary: getBoundary(simp[i - 1], simp[i], p, simp[i + 2]),
ends: [simp[i], p],
project: id,
path: d3.geo.path().projection(null)
};
});
}
function warpZones(zones) {
zones.forEach(function(z,i){
var angle = getAngle(z.ends[0], z.ends[1]),
anchor = i ? zones[i - 1].ends[1] : origin;
// Anchor points to end of prev segment
var translate = [
anchor[0] - z.ends[0][0],
anchor[1] - z.ends[0][1]
];
// Get translation/rotation function
z.translate = translateAndRotate(translate, z.ends[0], angle);
// Warp the boundary line and the simplified segment
z.ends = z.ends.map(z.translate);
z.boundary = z.boundary.map(z.translate);
var top = bisect(null, z.ends[0], z.ends[1]),
bottom = bisect(z.ends[0], z.ends[1], null);
z.corners = [top[0], top[1], bottom[1], bottom[0], top[0]];
z.corners.push(z.corners[0]);
// See: http://bl.ocks.org/veltman/8f5a157276b1dc18ce2fba1bc06dfb48
z.warp = warper(z.boundary, z.corners);
z.project = function(d){
return z.translate(d);
};
z.path.projection(d3.geo.transform({
point: function(x, y) {
var p = z.project([x, y]);
this.stream.point(p[0], p[1]);
}
}));
});
}
function getBoundary(prev, first, second, next) {
// if prev is undefined, top is perpendicular through first
// otherwise top bisects the prev-first-second angle
// if next is undefined, bottom is perpendicular through second
// otherwise bottom bisects the first-second-next angle
var top = bisect(prev, first, second),
bottom = bisect(first, second, next);
return [top[0], top[1], bottom[1], bottom[0], top[0]];
}
function getAngle(a, b) {
return Math.atan2(b[1] - a[1], b[0] - a[0]);
}
// Given an anchor point, initial translate, and angle rotation
// Return a function to translate+rotate a point
function translateAndRotate(translate, anchor, angle) {
var cos = Math.cos(angle),
sin = Math.sin(angle);
return function(point) {
return [
translate[0] + anchor[0] + ( cos * (point[0] - anchor[0]) + sin * (point[1] - anchor[1])),
translate[1] + anchor[1] + ( -sin * (point[0] - anchor[0]) + cos * (point[1] - anchor[1]))
];
};
}
// Hacky angle bisector
function bisect(start, vertex, end) {
var at,
bt,
adjusted,
right,
left;
if (start) {
at = getAngle(start, vertex);
}
if (end) {
bt = getAngle(vertex, end);
}
if (!start) {
at = bt;
}
if (!end) {
bt = at;
}
adjusted = bt - at;
if (adjusted <= -Math.PI) {
adjusted = 2 * Math.PI + adjusted;
} else if (adjusted > Math.PI) {
adjusted = adjusted - 2 * Math.PI;
}
right = (adjusted - Math.PI) / 2;
left = Math.PI + right;
left += at;
right += at;
return [
[vertex[0] + stripWidth * Math.cos(left) / 2, vertex[1] + stripWidth * Math.sin(left) / 2],
[vertex[0] + stripWidth * Math.cos(right) / 2, vertex[1] + stripWidth * Math.sin(right) / 2]
];
}
// https://github.com/substack/point-in-polygon
// based on http://www.ecse.rpi.edu/Homepages/wrf/Research/Short_Notes/pnpoly.html
function pip(point, vs) {
var x = point[0],
y = point[1],
inside = false;
for (var i = 0, j = vs.length - 1; i < vs.length; j = i++) {
var xi = vs[i][0], yi = vs[i][1];
var xj = vs[j][0], yj = vs[j][1];
var intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
if (intersect) {
inside = !inside;
}
}
return inside;
}
function id(d) {
return d;
}
d3.select(self.frameElement).style("height", "720px");
</script>
</body>
</html>
Display the source blob
Display the rendered blob
Raw
{"type": "Polygon",
"coordinates": [
[
[
-83.880387,
41.720089
],
[
-83.880539,
41.720081
],
[
-83.899764,
41.719961
],
[
-83.998849,
41.716822
],
[
-84.019373,
41.716668
],
[
-84.134417,
41.712931
],
[
-84.360416,
41.706625
],
[
-84.360546,
41.706621
],
[
-84.396547,
41.705935
],
[
-84.399547,
41.70586
],
[
-84.438067,
41.704903
],
[
-84.749955,
41.698245
],
[
-84.806082,
41.696089
],
[
-84.806018,
41.707485
],
[
-84.806042,
41.720544
],
[
-84.806065,
41.732909
],
[
-84.806074,
41.737603
],
[
-84.806134,
41.743115
],
[
-84.805883,
41.760216
],
[
-84.818873,
41.760059
],
[
-84.82513,
41.759991
],
[
-84.825196,
41.75999
],
[
-84.932484,
41.759691
],
[
-84.96086,
41.759438
],
[
-84.961562,
41.759552
],
[
-84.971551,
41.759527
],
[
-84.972803,
41.759366
],
[
-85.037817,
41.759801
],
[
-85.039436,
41.759985
],
[
-85.117267,
41.7597
],
[
-85.123102,
41.759743
],
[
-85.17223,
41.759618
],
[
-85.196637,
41.759735
],
[
-85.196774,
41.759735
],
[
-85.232835,
41.759839
],
[
-85.272216,
41.759999
],
[
-85.272951,
41.759911
],
[
-85.273713,
41.75977
],
[
-85.292099,
41.759962
],
[
-85.292178,
41.759963
],
[
-85.298365,
41.760028
],
[
-85.30814,
41.760097
],
[
-85.318129,
41.759983
],
[
-85.330623,
41.759982
],
[
-85.350174,
41.759908
],
[
-85.379133,
41.759875
],
[
-85.427553,
41.759706
],
[
-85.432471,
41.759684
],
[
-85.515959,
41.759352
],
[
-85.518251,
41.759513
],
[
-85.607548,
41.759079
],
[
-85.608312,
41.759193
],
[
-85.622608,
41.759049
],
[
-85.624987,
41.759093
],
[
-85.632714,
41.759164
],
[
-85.647683,
41.759125
],
[
-85.650738,
41.759103
],
[
-85.65975,
41.759101
],
[
-85.724534,
41.759085
],
[
-85.749992,
41.759091
],
[
-85.750469,
41.75909
],
[
-85.775039,
41.759147
],
[
-85.791335,
41.759051
],
[
-85.791363,
41.759051
],
[
-85.872041,
41.759365
],
[
-85.874997,
41.759341
],
[
-85.888825,
41.759422
],
[
-85.974901,
41.759849
],
[
-85.97498,
41.759849
],
[
-85.991302,
41.759949
],
[
-86.003678,
41.760089
],
[
-86.041027,
41.760512
],
[
-86.062575,
41.760528
],
[
-86.12506,
41.760576
],
[
-86.12546,
41.76056
],
[
-86.127844,
41.760592
],
[
-86.21759,
41.760016
],
[
-86.22607,
41.760016
],
[
-86.226097,
41.760016
],
[
-86.265496,
41.760207
],
[
-86.501773,
41.759553
],
[
-86.519318,
41.759447
],
[
-86.524223,
41.759456
],
[
-86.640044,
41.759671
],
[
-86.641186,
41.759633
],
[
-86.746521,
41.759982
],
[
-86.748096,
41.759967
],
[
-86.800611,
41.760251
],
[
-86.800707,
41.76024
],
[
-86.801578,
41.76024
],
[
-86.804427,
41.76024
],
[
-86.823628,
41.76024
],
[
-86.824828,
41.76024
],
[
-86.82355,
41.760898
],
[
-86.802065,
41.771956
],
[
-86.801772,
41.772107
],
[
-86.794712,
41.77574
],
[
-86.794632,
41.775782
],
[
-86.79351,
41.776359
],
[
-86.777943,
41.784371
],
[
-86.777227,
41.78474
],
[
-86.77608,
41.785399
],
[
-86.774798,
41.786137
],
[
-86.751292,
41.799652
],
[
-86.735207,
41.808901
],
[
-86.717037,
41.819349
],
[
-86.715578,
41.820334
],
[
-86.697541,
41.832513
],
[
-86.679672,
41.844579
],
[
-86.679355,
41.844793
],
[
-86.648971,
41.869659
],
[
-86.6476,
41.870782
],
[
-86.645296,
41.872668
],
[
-86.644048,
41.873689
],
[
-86.643965,
41.873757
],
[
-86.629867,
41.885295
],
[
-86.629344,
41.885723
],
[
-86.623837,
41.89023
],
[
-86.623774,
41.890282
],
[
-86.621259,
41.89234
],
[
-86.619442,
41.893827
],
[
-86.616978,
41.896625
],
[
-86.616886,
41.89673
],
[
-86.616029,
41.897703
],
[
-86.612251,
41.901993
],
[
-86.61208,
41.902188
],
[
-86.611511,
41.902833
],
[
-86.610896,
41.903532
],
[
-86.600524,
41.91531
],
[
-86.597899,
41.918291
],
[
-86.596802,
41.919964
],
[
-86.588662,
41.93238
],
[
-86.587827,
41.933653
],
[
-86.587763,
41.933752
],
[
-86.586721,
41.935341
],
[
-86.585696,
41.936904
],
[
-86.585264,
41.937562
],
[
-86.582894,
41.941179
],
[
-86.582197,
41.942241
],
[
-86.581518,
41.943765
],
[
-86.564722,
41.981427
],
[
-86.564276,
41.982427
],
[
-86.564077,
41.982874
],
[
-86.563904,
41.983262
],
[
-86.563598,
41.983948
],
[
-86.561542,
41.988559
],
[
-86.556537,
41.999782
],
[
-86.556421,
42.000042
],
[
-86.549328,
42.01092
],
[
-86.549237,
42.011059
],
[
-86.545288,
42.017115
],
[
-86.544867,
42.017761
],
[
-86.541718,
42.02259
],
[
-86.541089,
42.023555
],
[
-86.536063,
42.031262
],
[
-86.533855,
42.034648
],
[
-86.532934,
42.036061
],
[
-86.53264,
42.036512
],
[
-86.532161,
42.037246
],
[
-86.508856,
42.072986
],
[
-86.501322,
42.08454
],
[
-86.490122,
42.105139
],
[
-86.485223,
42.118239
],
[
-86.479031,
42.123519
],
[
-86.466576,
42.134138
],
[
-86.466262,
42.134406
],
[
-86.464913,
42.135752
],
[
-86.464897,
42.135767
],
[
-86.464356,
42.136308
],
[
-86.463967,
42.136696
],
[
-86.463685,
42.136977
],
[
-86.440762,
42.159847
],
[
-86.439416,
42.16119
],
[
-86.437909,
42.162694
],
[
-86.437148,
42.163453
],
[
-86.404146,
42.196379
],
[
-86.402183,
42.198542
],
[
-86.398915,
42.202143
],
[
-86.398536,
42.202561
],
[
-86.397692,
42.203491
],
[
-86.394997,
42.20646
],
[
-86.394183,
42.207357
],
[
-86.393565,
42.208039
],
[
-86.393518,
42.20809
],
[
-86.386591,
42.215723
],
[
-86.385179,
42.217279
],
[
-86.383665,
42.219207
],
[
-86.383585,
42.21931
],
[
-86.381434,
42.222048
],
[
-86.380407,
42.223357
],
[
-86.380035,
42.22383
],
[
-86.36488,
42.243133
],
[
-86.356218,
42.254166
],
[
-86.321803,
42.310743
],
[
-86.297168,
42.358207
],
[
-86.284448,
42.394563
],
[
-86.284969,
42.401814
],
[
-86.276878,
42.413317
],
[
-86.273893,
42.41928
],
[
-86.261573,
42.443894
],
[
-86.24971,
42.480212
],
[
-86.241446,
42.534697
],
[
-86.240642,
42.54
],
[
-86.23528,
42.564958
],
[
-86.235254,
42.565023
],
[
-86.234755,
42.566302
],
[
-86.234594,
42.566715
],
[
-86.23119,
42.575435
],
[
-86.228082,
42.583397
],
[
-86.226037,
42.592811
],
[
-86.225978,
42.593084
],
[
-86.225613,
42.594765
],
[
-86.22905,
42.637693
],
[
-86.226638,
42.644922
],
[
-86.21602,
42.664413
],
[
-86.208654,
42.69209
],
[
-86.206834,
42.719424
],
[
-86.208309,
42.762789
],
[
-86.208886,
42.76754
],
[
-86.210863,
42.783832
],
[
-86.211815,
42.833236
],
[
-86.210737,
42.859128
],
[
-86.214138,
42.883555
],
[
-86.216209,
42.919007
],
[
-86.226305,
42.988284
],
[
-86.232707,
43.015762
],
[
-86.244277,
43.049681
],
[
-86.250069,
43.057489
],
[
-86.250517,
43.066993
],
[
-86.254646,
43.083409
],
[
-86.271996,
43.118365
],
[
-86.280756,
43.136015
],
[
-86.299048,
43.166465
],
[
-86.311336,
43.18692
],
[
-86.311887,
43.187837
],
[
-86.316259,
43.195114
],
[
-86.329836,
43.2158
],
[
-86.344643,
43.23836
],
[
-86.348647,
43.244459
],
[
-86.34891,
43.24486
],
[
-86.349801,
43.246217
],
[
-86.350027,
43.246562
],
[
-86.352192,
43.24986
],
[
-86.352314,
43.250047
],
[
-86.354505,
43.253385
],
[
-86.357996,
43.258703
],
[
-86.382882,
43.29662
],
[
-86.383821,
43.298051
],
[
-86.386096,
43.301516
],
[
-86.386374,
43.301941
],
[
-86.388493,
43.305168
],
[
-86.38941,
43.306565
],
[
-86.392124,
43.310701
],
[
-86.393385,
43.312622
],
[
-86.39575,
43.316225
],
[
-86.401684,
43.327135
],
[
-86.40301,
43.329572
],
[
-86.403541,
43.330548
],
[
-86.404831,
43.33292
],
[
-86.407832,
43.338436
],
[
-86.411941,
43.347209
],
[
-86.427585,
43.380607
],
[
-86.434757,
43.395919
],
[
-86.434842,
43.3961
],
[
-86.435124,
43.396702
],
[
-86.435271,
43.397083
],
[
-86.437896,
43.40389
],
[
-86.438028,
43.404231
],
[
-86.438267,
43.404851
],
[
-86.438875,
43.406427
],
[
-86.448479,
43.431329
],
[
-86.448743,
43.432013
],
[
-86.45457,
43.449475
],
[
-86.456083,
43.45401
],
[
-86.456845,
43.456294
],
[
-86.457561,
43.458441
],
[
-86.462195,
43.472328
],
[
-86.468747,
43.491963
],
[
-86.468754,
43.491979
],
[
-86.468919,
43.492344
],
[
-86.476956,
43.510184
],
[
-86.477424,
43.511223
],
[
-86.478716,
43.514091
],
[
-86.479276,
43.515335
],
[
-86.479552,
43.51575
],
[
-86.481158,
43.518158
],
[
-86.48165,
43.518896
],
[
-86.48187,
43.519225
],
[
-86.482255,
43.519803
],
[
-86.483043,
43.520984
],
[
-86.483083,
43.521045
],
[
-86.505799,
43.555112
],
[
-86.509205,
43.560221
],
[
-86.509339,
43.560421
],
[
-86.512317,
43.564887
],
[
-86.514168,
43.567664
],
[
-86.515108,
43.569074
],
[
-86.515838,
43.570169
],
[
-86.516295,
43.570854
],
[
-86.516725,
43.571499
],
[
-86.517493,
43.572651
],
[
-86.518698,
43.574458
],
[
-86.519912,
43.576278
],
[
-86.520205,
43.576718
],
[
-86.520248,
43.576796
],
[
-86.529507,
43.593462
],
[
-86.537923,
43.615965
],
[
-86.538497,
43.617501
],
[
-86.538876,
43.619957
],
[
-86.538921,
43.620244
],
[
-86.539103,
43.621424
],
[
-86.539291,
43.622642
],
[
-86.539303,
43.62272
],
[
-86.540916,
43.633158
],
[
-86.540906,
43.634047
],
[
-86.540896,
43.634969
],
[
-86.54081,
43.642516
],
[
-86.540787,
43.644593
],
[
-86.54064,
43.645499
],
[
-86.538763,
43.657061
],
[
-86.538482,
43.658795
],
[
-86.538186,
43.659403
],
[
-86.529686,
43.676849
],
[
-86.529179,
43.677889
],
[
-86.527667,
43.679552
],
[
-86.526863,
43.680435
],
[
-86.517867,
43.690326
],
[
-86.516152,
43.692212
],
[
-86.514371,
43.69417
],
[
-86.511008,
43.697867
],
[
-86.510319,
43.698625
],
[
-86.50762,
43.701138
],
[
-86.50669,
43.702004
],
[
-86.504679,
43.703878
],
[
-86.503192,
43.705263
],
[
-86.502989,
43.705452
],
[
-86.501899,
43.706467
],
[
-86.496187,
43.711787
],
[
-86.488381,
43.719056
],
[
-86.486983,
43.720358
],
[
-86.481854,
43.725135
],
[
-86.480655,
43.726407
],
[
-86.480628,
43.726436
],
[
-86.480267,
43.726819
],
[
-86.463436,
43.744687
],
[
-86.461554,
43.746685
],
[
-86.460444,
43.748366
],
[
-86.445532,
43.770945
],
[
-86.445123,
43.771564
],
[
-86.444903,
43.772069
],
[
-86.442786,
43.776934
],
[
-86.437722,
43.788573
],
[
-86.437391,
43.789334
],
[
-86.43114,
43.815569
],
[
-86.431043,
43.815975
],
[
-86.431063,
43.819178
],
[
-86.431064,
43.819406
],
[
-86.431172,
43.836638
],
[
-86.431176,
43.837177
],
[
-86.431182,
43.838119
],
[
-86.431198,
43.84072
],
[
-86.431238,
43.840941
],
[
-86.432894,
43.850013
],
[
-86.433471,
43.853176
],
[
-86.433915,
43.855608
],
[
-86.434078,
43.85609
],
[
-86.434258,
43.856623
],
[
-86.434985,
43.858771
],
[
-86.445455,
43.889726
],
[
-86.44573,
43.892897
],
[
-86.445938,
43.89529
],
[
-86.446463,
43.901349
],
[
-86.447915,
43.918089
],
[
-86.448009,
43.918416
],
[
-86.448147,
43.918897
],
[
-86.44955,
43.92377
],
[
-86.451275,
43.929763
],
[
-86.454401,
43.940624
],
[
-86.462756,
43.969655
],
[
-86.463087,
43.970807
],
[
-86.463136,
43.970976
],
[
-86.46322,
43.971101
],
[
-86.481606,
43.998599
],
[
-86.483331,
44.001179
],
[
-86.484399,
44.002382
],
[
-86.501738,
44.021912
],
[
-86.502998,
44.023839
],
[
-86.504133,
44.025575
],
[
-86.50444,
44.026044
],
[
-86.508827,
44.032755
],
[
-86.514742,
44.04792
],
[
-86.514704,
44.057672
],
[
-86.514702,
44.058119
],
[
-86.514573,
44.05833
],
[
-86.509052,
44.067408
],
[
-86.508764,
44.067881
],
[
-86.508415,
44.068206
],
[
-86.501243,
44.074873
],
[
-86.500453,
44.075607
],
[
-86.497937,
44.077033
],
[
-86.469295,
44.093267
],
[
-86.454895,
44.101429
],
[
-86.447678,
44.105519
],
[
-86.447126,
44.105832
],
[
-86.446883,
44.10597
],
[
-86.446609,
44.106193
],
[
-86.429871,
44.119782
],
[
-86.426873,
44.123099
],
[
-86.425876,
44.124203
],
[
-86.425162,
44.124993
],
[
-86.421576,
44.128962
],
[
-86.421108,
44.12948
],
[
-86.400645,
44.156848
],
[
-86.397874,
44.161239
],
[
-86.397023,
44.162589
],
[
-86.3965,
44.163418
],
[
-86.386867,
44.178685
],
[
-86.380188,
44.189272
],
[
-86.380062,
44.189472
],
[
-86.362847,
44.208113
],
[
-86.354592,
44.223811
],
[
-86.354313,
44.224342
],
[
-86.351638,
44.229429
],
[
-86.349294,
44.235459
],
[
-86.343793,
44.249608
],
[
-86.327287,
44.263057
],
[
-86.326902,
44.263781
],
[
-86.319063,
44.278503
],
[
-86.318328,
44.279884
],
[
-86.316651,
44.283034
],
[
-86.316513,
44.283293
],
[
-86.316025,
44.28421
],
[
-86.313612,
44.287882
],
[
-86.312774,
44.289158
],
[
-86.311943,
44.290422
],
[
-86.304691,
44.301459
],
[
-86.304433,
44.301852
],
[
-86.300264,
44.308197
],
[
-86.26871,
44.345324
],
[
-86.251926,
44.400984
],
[
-86.248083,
44.420946
],
[
-86.24832,
44.434758
],
[
-86.251843,
44.451632
],
[
-86.251605,
44.465443
],
[
-86.248914,
44.483004
],
[
-86.248897,
44.483024
],
[
-86.248816,
44.483116
],
[
-86.243745,
44.488929
],
[
-86.238743,
44.501682
],
[
-86.233503,
44.518278
],
[
-86.223788,
44.549043
],
[
-86.220697,
44.566742
],
[
-86.22545,
44.59459
],
[
-86.231828,
44.609107
],
[
-86.25395,
44.64808
],
[
-86.259029,
44.663654
],
[
-86.256796,
44.686769
],
[
-86.254996,
44.691935
],
[
-86.248474,
44.699046
],
[
-86.232482,
44.70605
],
[
-86.172201,
44.720623
],
[
-86.169323,
44.722448
],
[
-86.160585,
44.727988
],
[
-86.160268,
44.728189
],
[
-86.122946,
44.727982
],
[
-86.122466,
44.727979
],
[
-86.121125,
44.727972
],
[
-86.120759,
44.728048
],
[
-86.108303,
44.730646
],
[
-86.106182,
44.731088
],
[
-86.105473,
44.731522
],
[
-86.09074,
44.740544
],
[
-86.089186,
44.741496
],
[
-86.077933,
44.758234
],
[
-86.077068,
44.760494
],
[
-86.076811,
44.761167
],
[
-86.076719,
44.761407
],
[
-86.074658,
44.766792
],
[
-86.073506,
44.769803
],
[
-86.073073,
44.778393
],
[
-86.071746,
44.804717
],
[
-86.065966,
44.821522
],
[
-86.066031,
44.834852
],
[
-86.071112,
44.86542
],
[
-86.072468,
44.884788
],
[
-86.07099,
44.895876
],
[
-86.066745,
44.905685
],
[
-86.058862,
44.911012
],
[
-86.038332,
44.915696
],
[
-86.031194,
44.907349
],
[
-86.021513,
44.902774
],
[
-86.009355,
44.899454
],
[
-85.992535,
44.900026
],
[
-85.980219,
44.906136
],
[
-85.972824,
44.914781
],
[
-85.967169,
44.929484
],
[
-85.961603,
44.935567
],
[
-85.952721,
44.940758
],
[
-85.942099,
44.954317
],
[
-85.938589,
44.964559
],
[
-85.9316,
44.968788
],
[
-85.915851,
44.968307
],
[
-85.897626,
44.962014
],
[
-85.891543,
44.957783
],
[
-85.879934,
44.943305
],
[
-85.869852,
44.939031
],
[
-85.854304,
44.938147
],
[
-85.83615,
44.940256
],
[
-85.815451,
44.945631
],
[
-85.807403,
44.949814
],
[
-85.780439,
44.977932
],
[
-85.778278,
44.983075
],
[
-85.776207,
45.000574
],
[
-85.771395,
45.015181
],
[
-85.761943,
45.023454
],
[
-85.746444,
45.051229
],
[
-85.740836,
45.055575
],
[
-85.712262,
45.065622
],
[
-85.695715,
45.076461
],
[
-85.681096,
45.092693
],
[
-85.675671,
45.10554
],
[
-85.674861,
45.116216
],
[
-85.656024,
45.145788
],
[
-85.618639,
45.186771
],
[
-85.613174,
45.184624
],
[
-85.611684,
45.181104
],
[
-85.606963,
45.178477
],
[
-85.593064,
45.178527
],
[
-85.585986,
45.180381
],
[
-85.564654,
45.192546
],
[
-85.561809,
45.200524
],
[
-85.551072,
45.210742
],
[
-85.540497,
45.210169
],
[
-85.526734,
45.189316
],
[
-85.531461,
45.177247
],
[
-85.536892,
45.173385
],
[
-85.552179,
45.167352
],
[
-85.56168,
45.15894
],
[
-85.562104,
45.156954
],
[
-85.563102,
45.155358
],
[
-85.5639,
45.154361
],
[
-85.564897,
45.153962
],
[
-85.566493,
45.153762
],
[
-85.568489,
45.153762
],
[
-85.570178,
45.155145
],
[
-85.573893,
45.155488
],
[
-85.590434,
45.153175
],
[
-85.599801,
45.149286
],
[
-85.614319,
45.127562
],
[
-85.609266,
45.11351
],
[
-85.583198,
45.071304
],
[
-85.573353,
45.068382
],
[
-85.566066,
45.059201
],
[
-85.56613,
45.043633
],
[
-85.57016,
45.041278
],
[
-85.573976,
45.043361
],
[
-85.597181,
45.040547
],
[
-85.599652,
45.021749
],
[
-85.609123,
45.013103
],
[
-85.621878,
45.004529
],
[
-85.606588,
44.990662
],
[
-85.604301,
44.990983
],
[
-85.602356,
44.974272
],
[
-85.602034,
44.926743
],
[
-85.621403,
44.923123
],
[
-85.625497,
44.921107
],
[
-85.639842,
44.890255
],
[
-85.645456,
44.883645
],
[
-85.648932,
44.87401
],
[
-85.652355,
44.849092
],
[
-85.651435,
44.831624
],
[
-85.641652,
44.810816
],
[
-85.637,
44.790078
],
[
-85.640781,
44.775561
],
[
-85.640216,
44.775051
],
[
-85.636097,
44.771329
],
[
-85.627982,
44.767508
],
[
-85.624541,
44.767038
],
[
-85.623607,
44.766911
],
[
-85.620551,
44.766494
],
[
-85.619648,
44.766371
],
[
-85.610776,
44.76516
],
[
-85.607701,
44.765363
],
[
-85.605586,
44.765502
],
[
-85.599874,
44.765878
],
[
-85.599256,
44.765919
],
[
-85.599103,
44.765996
],
[
-85.593833,
44.768651
],
[
-85.593571,
44.768783
],
[
-85.593474,
44.769348
],
[
-85.593449,
44.769499
],
[
-85.591852,
44.778839
],
[
-85.591145,
44.782981
],
[
-85.591124,
44.7831
],
[
-85.590985,
44.783914
],
[
-85.581717,
44.807784
],
[
-85.581392,
44.808294
],
[
-85.545891,
44.864024
],
[
-85.539042,
44.868868
],
[
-85.532931,
44.87319
],
[
-85.530729,
44.889182
],
[
-85.530711,
44.889314
],
[
-85.530649,
44.889763
],
[
-85.553348,
44.890916
],
[
-85.553509,
44.890924
],
[
-85.559524,
44.888113
],
[
-85.564509,
44.895246
],
[
-85.562936,
44.896612
],
[
-85.562503,
44.896987
],
[
-85.557257,
44.901541
],
[
-85.556647,
44.90207
],
[
-85.556471,
44.902223
],
[
-85.551567,
44.906481
],
[
-85.539703,
44.916779
],
[
-85.538945,
44.917885
],
[
-85.538288,
44.918845
],
[
-85.533553,
44.925762
],
[
-85.530477,
44.933732
],
[
-85.529233,
44.936955
],
[
-85.520205,
44.960347
],
[
-85.520443,
44.961149
],
[
-85.520698,
44.962008
],
[
-85.5221,
44.966727
],
[
-85.521896,
44.967446
],
[
-85.520789,
44.971338
],
[
-85.520034,
44.973996
],
[
-85.518875,
44.974665
],
[
-85.4926,
44.989834
],
[
-85.492386,
44.989849
],
[
-85.475204,
44.991053
],
[
-85.472676,
44.985558
],
[
-85.471708,
44.983453
],
[
-85.470462,
44.980745
],
[
-85.470215,
44.979864
],
[
-85.468293,
44.973008
],
[
-85.46802,
44.972035
],
[
-85.466848,
44.967853
],
[
-85.464944,
44.961062
],
[
-85.46665,
44.958844
],
[
-85.470688,
44.959238
],
[
-85.471261,
44.959294
],
[
-85.471646,
44.959331
],
[
-85.472258,
44.959391
],
[
-85.474274,
44.958529
],
[
-85.48574,
44.953626
],
[
-85.489049,
44.938087
],
[
-85.489895,
44.934118
],
[
-85.490713,
44.930274
],
[
-85.491215,
44.927918
],
[
-85.491239,
44.927804
],
[
-85.491286,
44.927585
],
[
-85.491393,
44.925868
],
[
-85.491403,
44.925695
],
[
-85.491414,
44.925531
],
[
-85.491471,
44.92461
],
[
-85.491496,
44.924205
],
[
-85.492397,
44.909719
],
[
-85.49249,
44.90822
],
[
-85.489477,
44.903145
],
[
-85.488927,
44.902217
],
[
-85.488624,
44.901707
],
[
-85.489704,
44.897533
],
[
-85.489921,
44.896694
],
[
-85.498007,
44.865451
],
[
-85.500872,
44.85883
],
[
-85.502182,
44.855802
],
[
-85.502386,
44.855551
],
[
-85.508227,
44.848352
],
[
-85.508617,
44.847872
],
[
-85.511751,
44.847114
],
[
-85.513575,
44.846674
],
[
-85.516997,
44.845846
],
[
-85.518845,
44.8454
],
[
-85.519096,
44.845339
],
[
-85.527181,
44.841002
],
[
-85.533434,
44.837648
],
[
-85.538522,
44.834918
],
[
-85.539924,
44.834166
],
[
-85.542706,
44.831395
],
[
-85.546021,
44.828092
],
[
-85.547119,
44.826998
],
[
-85.551797,
44.822338
],
[
-85.55285,
44.821288
],
[
-85.553844,
44.820298
],
[
-85.555894,
44.818256
],
[
-85.557952,
44.814372
],
[
-85.560231,
44.810072
],
[
-85.560232,
44.809974
],
[
-85.560253,
44.808359
],
[
-85.560348,
44.800772
],
[
-85.560352,
44.800454
],
[
-85.5604,
44.796655
],
[
-85.560409,
44.79595
],
[
-85.560424,
44.794772
],
[
-85.560488,
44.78969
],
[
-85.560488,
44.789679
],
[
-85.568781,
44.774477
],
[
-85.571018,
44.770377
],
[
-85.57517,
44.762766
],
[
-85.576239,
44.760807
],
[
-85.576566,
44.760208
],
[
-85.575916,
44.759602
],
[
-85.571301,
44.755293
],
[
-85.554774,
44.748917
],
[
-85.554326,
44.748744
],
[
-85.554083,
44.748715
],
[
-85.538285,
44.746821
],
[
-85.527216,
44.748235
],
[
-85.523296,
44.751702
],
[
-85.509432,
44.763964
],
[
-85.504775,
44.768082
],
[
-85.504772,
44.768102
],
[
-85.5047,
44.768518
],
[
-85.503935,
44.772951
],
[
-85.504079,
44.773901
],
[
-85.504787,
44.778577
],
[
-85.505244,
44.781594
],
[
-85.507113,
44.784271
],
[
-85.509251,
44.787334
],
[
-85.508462,
44.788682
],
[
-85.507473,
44.790372
],
[
-85.499591,
44.803838
],
[
-85.496314,
44.805308
],
[
-85.484668,
44.810531
],
[
-85.481972,
44.81174
],
[
-85.477423,
44.813781
],
[
-85.475748,
44.814532
],
[
-85.475114,
44.814816
],
[
-85.474796,
44.814959
],
[
-85.474622,
44.815107
],
[
-85.462943,
44.825044
],
[
-85.462916,
44.825067
],
[
-85.462906,
44.82511
],
[
-85.462622,
44.826327
],
[
-85.460445,
44.835667
],
[
-85.457475,
44.839609
],
[
-85.457472,
44.839613
],
[
-85.457328,
44.839804
],
[
-85.456007,
44.841558
],
[
-85.455336,
44.842448
],
[
-85.452683,
44.845969
],
[
-85.44225,
44.859817
],
[
-85.425804,
44.881646
],
[
-85.423003,
44.895019
],
[
-85.406173,
44.911773
],
[
-85.3958,
44.931018
],
[
-85.378286,
44.998587
],
[
-85.381654,
45.018407
],
[
-85.380659,
45.046319
],
[
-85.377586,
45.055713
],
[
-85.366412,
45.069023
],
[
-85.366908,
45.116938
],
[
-85.372571,
45.126241
],
[
-85.376948,
45.142881
],
[
-85.380464,
45.180876
],
[
-85.386726,
45.189497
],
[
-85.387463,
45.207565
],
[
-85.388593,
45.23524
],
[
-85.371593,
45.270834
],
[
-85.355478,
45.282774
],
[
-85.335016,
45.294027
],
[
-85.323941,
45.303355
],
[
-85.307646,
45.31314
],
[
-85.294848,
45.316408
],
[
-85.289568,
45.314052
],
[
-85.273789,
45.315443
],
[
-85.262996,
45.319507
],
[
-85.25505,
45.325675
],
[
-85.252193,
45.330863
],
[
-85.235629,
45.339374
],
[
-85.209673,
45.356937
],
[
-85.196704,
45.360641
],
[
-85.182471,
45.360824
],
[
-85.143651,
45.370369
],
[
-85.095985,
45.367001
],
[
-85.073617,
45.36542
],
[
-85.066969,
45.364951
],
[
-85.06425,
45.364758
],
[
-85.063459,
45.364703
],
[
-85.060905,
45.364522
],
[
-85.054805,
45.364091
],
[
-85.046635,
45.362287
],
[
-85.045526,
45.362041
],
[
-85.043721,
45.361643
],
[
-85.043446,
45.361582
],
[
-85.043101,
45.361506
],
[
-85.032813,
45.361251
],
[
-85.022234,
45.366701
],
[
-84.998603,
45.370173
],
[
-84.975357,
45.373587
],
[
-84.959119,
45.375973
],
[
-84.91585,
45.393115
],
[
-84.912537,
45.402828
],
[
-84.912956,
45.409776
],
[
-84.916165,
45.417639
],
[
-84.922006,
45.421914
],
[
-84.97637,
45.428801
],
[
-84.976623,
45.428833
],
[
-84.978969,
45.429131
],
[
-84.980467,
45.42932
],
[
-84.980953,
45.429382
],
[
-84.981192,
45.429336
],
[
-84.990041,
45.427618
],
[
-84.990785,
45.425264
],
[
-84.989224,
45.424253
],
[
-84.987416,
45.423082
],
[
-84.987143,
45.422906
],
[
-84.984928,
45.421471
],
[
-84.983836,
45.420764
],
[
-84.978373,
45.420171
],
[
-84.977116,
45.420035
],
[
-84.978608,
45.418663
],
[
-84.994191,
45.423173
],
[
-85.034856,
45.434941
],
[
-85.037741,
45.435776
],
[
-85.040272,
45.436509
],
[
-85.040936,
45.436701
],
[
-85.046943,
45.441429
],
[
-85.050234,
45.444019
],
[
-85.050747,
45.444423
],
[
-85.052994,
45.446191
],
[
-85.069573,
45.459239
],
[
-85.070485,
45.460096
],
[
-85.087756,
45.476335
],
[
-85.088386,
45.476928
],
[
-85.097142,
45.495684
],
[
-85.103943,
45.510252
],
[
-85.109252,
45.521626
],
[
-85.109353,
45.521915
],
[
-85.110884,
45.526285
],
[
-85.110955,
45.526488
],
[
-85.115479,
45.539406
],
[
-85.115785,
45.541533
],
[
-85.11587,
45.542125
],
[
-85.117406,
45.552811
],
[
-85.117656,
45.55455
],
[
-85.119494,
45.567338
],
[
-85.119675,
45.568597
],
[
-85.119721,
45.568915
],
[
-85.119737,
45.569026
],
[
-85.119026,
45.573002
],
[
-85.118825,
45.574123
],
[
-85.118637,
45.575175
],
[
-85.118353,
45.575625
],
[
-85.117812,
45.576482
],
[
-85.11243,
45.585004
],
[
-85.112406,
45.585042
],
[
-85.111909,
45.585829
],
[
-85.111737,
45.585962
],
[
-85.107744,
45.589067
],
[
-85.106909,
45.589716
],
[
-85.106246,
45.590231
],
[
-85.105458,
45.590844
],
[
-85.103521,
45.59235
],
[
-85.103077,
45.592695
],
[
-85.102917,
45.59282
],
[
-85.102221,
45.59336
],
[
-85.101977,
45.59355
],
[
-85.096798,
45.597576
],
[
-85.095531,
45.598562
],
[
-85.093525,
45.600121
],
[
-85.079528,
45.617083
],
[
-85.07937,
45.617355
],
[
-85.076284,
45.62266
],
[
-85.075686,
45.623688
],
[
-85.075678,
45.623742
],
[
-85.075461,
45.625295
],
[
-85.07491,
45.629242
],
[
-85.074243,
45.629752
],
[
-85.071381,
45.63194
],
[
-85.065716,
45.636272
],
[
-85.063974,
45.637604
],
[
-85.061488,
45.639505
],
[
-85.061006,
45.639631
],
[
-85.044872,
45.643847
],
[
-85.041037,
45.644849
],
[
-85.03559,
45.646273
],
[
-85.020107,
45.650319
],
[
-85.019374,
45.65051
],
[
-85.015341,
45.651564
],
[
-85.014352,
45.652134
],
[
-85.013218,
45.652789
],
[
-85.007026,
45.65636
],
[
-85.005645,
45.657504
],
[
-85.002344,
45.660239
],
[
-85.001154,
45.661225
],
[
-84.997431,
45.667762
],
[
-84.996336,
45.669685
],
[
-84.996067,
45.669861
],
[
-84.974237,
45.684178
],
[
-84.97095,
45.686334
],
[
-84.970213,
45.686984
],
[
-84.94565,
45.708621
],
[
-84.943756,
45.71029
],
[
-84.942636,
45.714292
],
[
-84.941073,
45.719879
],
[
-84.940526,
45.721832
],
[
-84.942098,
45.728349
],
[
-84.942125,
45.72846
],
[
-84.942543,
45.728865
],
[
-84.943982,
45.730257
],
[
-84.945958,
45.732169
],
[
-84.947266,
45.733435
],
[
-84.950226,
45.736299
],
[
-84.95084,
45.736893
],
[
-84.951745,
45.737326
],
[
-84.954275,
45.738537
],
[
-84.955394,
45.739072
],
[
-84.95813,
45.740381
],
[
-84.968309,
45.745252
],
[
-84.982328,
45.75196
],
[
-84.982973,
45.752022
],
[
-84.983316,
45.752055
],
[
-84.983829,
45.752104
],
[
-84.983933,
45.752114
],
[
-84.984568,
45.752175
],
[
-84.985318,
45.752247
],
[
-84.996755,
45.753347
],
[
-85.001656,
45.753819
],
[
-85.002914,
45.75394
],
[
-85.011433,
45.757962
],
[
-85.014509,
45.760329
],
[
-85.009173,
45.762463
],
[
-85.00741,
45.763168
],
[
-84.995105,
45.759855
],
[
-84.938312,
45.759892
],
[
-84.93779,
45.759777
],
[
-84.931463,
45.758389
],
[
-84.926802,
45.757366
],
[
-84.92523,
45.757021
],
[
-84.924664,
45.756897
],
[
-84.922478,
45.755842
],
[
-84.920691,
45.754979
],
[
-84.919996,
45.754643
],
[
-84.910398,
45.75001
],
[
-84.866976,
45.752066
],
[
-84.840981,
45.744751
],
[
-84.810953,
45.745993
],
[
-84.810411,
45.746015
],
[
-84.808285,
45.746103
],
[
-84.806642,
45.746171
],
[
-84.805114,
45.746378
],
[
-84.800664,
45.74698
],
[
-84.799558,
45.74713
],
[
-84.792474,
45.75053
],
[
-84.78958,
45.751919
],
[
-84.788893,
45.752248
],
[
-84.788821,
45.752283
],
[
-84.788808,
45.752298
],
[
-84.781995,
45.760345
],
[
-84.781373,
45.76108
],
[
-84.7798,
45.76965
],
[
-84.787228,
45.774892
],
[
-84.79229,
45.778464
],
[
-84.792337,
45.778497
],
[
-84.793153,
45.780463
],
[
-84.780313,
45.787224
],
[
-84.774156,
45.788918
],
[
-84.774014,
45.788957
],
[
-84.772765,
45.789301
],
[
-84.751571,
45.782733
],
[
-84.742,
45.784134
],
[
-84.734065,
45.788205
],
[
-84.732388,
45.787928
],
[
-84.726192,
45.786905
],
[
-84.718904,
45.777599
],
[
-84.715996,
45.766174
],
[
-84.681967,
45.756197
],
[
-84.679546,
45.749095
],
[
-84.644822,
45.73999
],
[
-84.604712,
45.721668
],
[
-84.573631,
45.710381
],
[
-84.555496,
45.702268
],
[
-84.553311,
45.698566
],
[
-84.539167,
45.69048
],
[
-84.539165,
45.690478
],
[
-84.538998,
45.690383
],
[
-84.46168,
45.652404
],
[
-84.442348,
45.654771
],
[
-84.435415,
45.664106
],
[
-84.427495,
45.669201
],
[
-84.413642,
45.669427
],
[
-84.400283,
45.663345
],
[
-84.376403,
45.655565
],
[
-84.329537,
45.66438
],
[
-84.289685,
45.653296
],
[
-84.270238,
45.64479
],
[
-84.215268,
45.634767
],
[
-84.204218,
45.627116
],
[
-84.196043,
45.621456
],
[
-84.180514,
45.604639
],
[
-84.157121,
45.585305
],
[
-84.139462,
45.573714
],
[
-84.128867,
45.562284
],
[
-84.126532,
45.556616
],
[
-84.126971,
45.542428
],
[
-84.122309,
45.523788
],
[
-84.116687,
45.51305
],
[
-84.109238,
45.505171
],
[
-84.095905,
45.497298
],
[
-84.075792,
45.490537
],
[
-84.056138,
45.489349
],
[
-84.039958,
45.493733
],
[
-84.036286,
45.496245
],
[
-84.028813,
45.497225
],
[
-84.009582,
45.495069
],
[
-83.99835,
45.491158
],
[
-83.978017,
45.494138
],
[
-83.939261,
45.493189
],
[
-83.909472,
45.485784
],
[
-83.881813,
45.467907
],
[
-83.85856,
45.446865
],
[
-83.841543,
45.435287
],
[
-83.806622,
45.419159
],
[
-83.788777,
45.416415
],
[
-83.773171,
45.417302
],
[
-83.755569,
45.411034
],
[
-83.737321,
45.410943
],
[
-83.721815,
45.413304
],
[
-83.697316,
45.396239
],
[
-83.667934,
45.384675
],
[
-83.64379,
45.37171
],
[
-83.599273,
45.352561
],
[
-83.570361,
45.347198
],
[
-83.550268,
45.350832
],
[
-83.546799,
45.352637
],
[
-83.545729,
45.358397
],
[
-83.538306,
45.358167
],
[
-83.520258,
45.347239
],
[
-83.514717,
45.34646
],
[
-83.496704,
45.357536
],
[
-83.488826,
45.355872
],
[
-83.477794,
45.341891
],
[
-83.477728,
45.341827
],
[
-83.468099,
45.33245
],
[
-83.445672,
45.310612
],
[
-83.43304,
45.303688
],
[
-83.42514,
45.296808
],
[
-83.423178,
45.292506
],
[
-83.422486,
45.290989
],
[
-83.422389,
45.290775
],
[
-83.422272,
45.290713
],
[
-83.42051,
45.289787
],
[
-83.401091,
45.279572
],
[
-83.40088,
45.279528
],
[
-83.400753,
45.279502
],
[
-83.400261,
45.2794
],
[
-83.398845,
45.279107
],
[
-83.388274,
45.276916
],
[
-83.385104,
45.274195
],
[
-83.381743,
45.268983
],
[
-83.388034,
45.254976
],
[
-83.412569,
45.245807
],
[
-83.41241,
45.238905
],
[
-83.405914,
45.227157
],
[
-83.387587,
45.207107
],
[
-83.384265,
45.203472
],
[
-83.381647,
45.203357
],
[
-83.368896,
45.182168
],
[
-83.368046,
45.172478
],
[
-83.363678,
45.166469
],
[
-83.359895,
45.16302
],
[
-83.348684,
45.161516
],
[
-83.337822,
45.14712
],
[
-83.316118,
45.141958
],
[
-83.315924,
45.139992
],
[
-83.319315,
45.137684
],
[
-83.318442,
45.12893
],
[
-83.30788,
45.099093
],
[
-83.298275,
45.090483
],
[
-83.290827,
45.069157
],
[
-83.291346,
45.062597
],
[
-83.280272,
45.045962
],
[
-83.277037,
45.044767
],
[
-83.271464,
45.038114
],
[
-83.265896,
45.026844
],
[
-83.271506,
45.023417
],
[
-83.287974,
45.026462
],
[
-83.302153,
45.032315
],
[
-83.340257,
45.041545
],
[
-83.357609,
45.050613
],
[
-83.36747,
45.062268
],
[
-83.399255,
45.070364
],
[
-83.433798,
45.057616
],
[
-83.442052,
45.051056
],
[
-83.453363,
45.035331
],
[
-83.454168,
45.03188
],
[
-83.446342,
45.016655
],
[
-83.435249,
45.011883
],
[
-83.431254,
45.007998
],
[
-83.435822,
45.000012
],
[
-83.438948,
45.000011
],
[
-83.450013,
44.990219
],
[
-83.443718,
44.952247
],
[
-83.438856,
44.940843
],
[
-83.433032,
44.93289
],
[
-83.425311,
44.926741
],
[
-83.404596,
44.918761
],
[
-83.398879,
44.906417
],
[
-83.39396,
44.903056
],
[
-83.352815,
44.886164
],
[
-83.320503,
44.880571
],
[
-83.321093,
44.858494
],
[
-83.321237,
44.853102
],
[
-83.321241,
44.852962
],
[
-83.321089,
44.852723
],
[
-83.318373,
44.84844
],
[
-83.314429,
44.84222
],
[
-83.31433,
44.842131
],
[
-83.31294,
44.840882
],
[
-83.312831,
44.840783
],
[
-83.312478,
44.840466
],
[
-83.308578,
44.83696
],
[
-83.306854,
44.83541
],
[
-83.300648,
44.829831
],
[
-83.299737,
44.823362
],
[
-83.298618,
44.815416
],
[
-83.29553,
44.793486
],
[
-83.295518,
44.793397
],
[
-83.29565,
44.790237
],
[
-83.295696,
44.789112
],
[
-83.296125,
44.778828
],
[
-83.296969,
44.758543
],
[
-83.296971,
44.758495
],
[
-83.298021,
44.755632
],
[
-83.298287,
44.754907
],
[
-83.298237,
44.754465
],
[
-83.297797,
44.750547
],
[
-83.297526,
44.74814
],
[
-83.29742,
44.747203
],
[
-83.2973,
44.746134
],
[
-83.296265,
44.743502
],
[
-83.290944,
44.729974
],
[
-83.290665,
44.729265
],
[
-83.288214,
44.726453
],
[
-83.284724,
44.72245
],
[
-83.284128,
44.721766
],
[
-83.283098,
44.721011
],
[
-83.277213,
44.7167
],
[
-83.274747,
44.714893
],
[
-83.274103,
44.714421
],
[
-83.273393,
44.713901
],
[
-83.274674,
44.70477
],
[
-83.275078,
44.701891
],
[
-83.275281,
44.700441
],
[
-83.275318,
44.700177
],
[
-83.2755,
44.698882
],
[
-83.275543,
44.698574
],
[
-83.275601,
44.698161
],
[
-83.276137,
44.69434
],
[
-83.276836,
44.689354
],
[
-83.277476,
44.687507
],
[
-83.279129,
44.682735
],
[
-83.279288,
44.682278
],
[
-83.285992,
44.662927
],
[
-83.286874,
44.66038
],
[
-83.287211,
44.659409
],
[
-83.287585,
44.658328
],
[
-83.287802,
44.657703
],
[
-83.289442,
44.652968
],
[
-83.295377,
44.64536
],
[
-83.307116,
44.630313
],
[
-83.307504,
44.629816
],
[
-83.309222,
44.62465
],
[
-83.309802,
44.622906
],
[
-83.309869,
44.622703
],
[
-83.31445,
44.608926
],
[
-83.314517,
44.608725
],
[
-83.314534,
44.608512
],
[
-83.315037,
44.60219
],
[
-83.31504,
44.602152
],
[
-83.315277,
44.599178
],
[
-83.315435,
44.597193
],
[
-83.315603,
44.595079
],
[
-83.315503,
44.593514
],
[
-83.314127,
44.572043
],
[
-83.314098,
44.571592
],
[
-83.314013,
44.570266
],
[
-83.313925,
44.568888
],
[
-83.313893,
44.568395
],
[
-83.313813,
44.567148
],
[
-83.313792,
44.566822
],
[
-83.313744,
44.566076
],
[
-83.313649,
44.564588
],
[
-83.313623,
44.564498
],
[
-83.309234,
44.549444
],
[
-83.309117,
44.549043
],
[
-83.308918,
44.54836
],
[
-83.308906,
44.54814
],
[
-83.308471,
44.539902
],
[
-83.309385,
44.537528
],
[
-83.310185,
44.535448
],
[
-83.310376,
44.534952
],
[
-83.311245,
44.532693
],
[
-83.311529,
44.531956
],
[
-83.318104,
44.514871
],
[
-83.318279,
44.514416
],
[
-83.318276,
44.514294
],
[
-83.318216,
44.511734
],
[
-83.31761,
44.486058
],
[
-83.326824,
44.444411
],
[
-83.327171,
44.429234
],
[
-83.324616,
44.415039
],
[
-83.321553,
44.409119
],
[
-83.321648,
44.404502
],
[
-83.333757,
44.372486
],
[
-83.335248,
44.357995
],
[
-83.332533,
44.340464
],
[
-83.336988,
44.332919
],
[
-83.343738,
44.329763
],
[
-83.352115,
44.332366
],
[
-83.364312,
44.33259
],
[
-83.373607,
44.327784
],
[
-83.401822,
44.301831
],
[
-83.414301,
44.294543
],
[
-83.419236,
44.2878
],
[
-83.425762,
44.272487
],
[
-83.429689,
44.269708
],
[
-83.442731,
44.265361
],
[
-83.445805,
44.273378
],
[
-83.447742,
44.273991
],
[
-83.460958,
44.278176
],
[
-83.463049,
44.278838
],
[
-83.479531,
44.28009
],
[
-83.500392,
44.27661
],
[
-83.508839,
44.273711
],
[
-83.524817,
44.261558
],
[
-83.53771,
44.248171
],
[
-83.549096,
44.227282
],
[
-83.552872,
44.210718
],
[
-83.553834,
44.197956
],
[
-83.565225,
44.163517
],
[
-83.565257,
44.163418
],
[
-83.565984,
44.161219
],
[
-83.566366,
44.160066
],
[
-83.567744,
44.155899
],
[
-83.567941,
44.150983
],
[
-83.5682,
44.144542
],
[
-83.568238,
44.143587
],
[
-83.568243,
44.143475
],
[
-83.568803,
44.129513
],
[
-83.568831,
44.128819
],
[
-83.568915,
44.126734
],
[
-83.568509,
44.124343
],
[
-83.567978,
44.121207
],
[
-83.567714,
44.119652
],
[
-83.573071,
44.101298
],
[
-83.588004,
44.086758
],
[
-83.591361,
44.079237
],
[
-83.590437,
44.069569
],
[
-83.58409,
44.056748
],
[
-83.601173,
44.054686
],
[
-83.621078,
44.056186
],
[
-83.650116,
44.052404
],
[
-83.679654,
44.036365
],
[
-83.687892,
44.020709
],
[
-83.680108,
43.994196
],
[
-83.708741,
43.992997
],
[
-83.743806,
43.991529
],
[
-83.746779,
43.988807
],
[
-83.757063,
43.986599
],
[
-83.76283,
43.985361
],
[
-83.763015,
43.985321
],
[
-83.763345,
43.98525
],
[
-83.763774,
43.985158
],
[
-83.779086,
43.985235
],
[
-83.787863,
43.985279
],
[
-83.82808,
43.989003
],
[
-83.828398,
43.989032
],
[
-83.829077,
43.989095
],
[
-83.829102,
43.989085
],
[
-83.829123,
43.989077
],
[
-83.848276,
43.981594
],
[
-83.851496,
43.979403
],
[
-83.85175,
43.979231
],
[
-83.851884,
43.97914
],
[
-83.853582,
43.977984
],
[
-83.85493,
43.977067
],
[
-83.855219,
43.975997
],
[
-83.855516,
43.974899
],
[
-83.855572,
43.974691
],
[
-83.855602,
43.974581
],
[
-83.855653,
43.974391
],
[
-83.856077,
43.972822
],
[
-83.856128,
43.972632
],
[
-83.856371,
43.972414
],
[
-83.858373,
43.970618
],
[
-83.858528,
43.970479
],
[
-83.859114,
43.969953
],
[
-83.859305,
43.969782
],
[
-83.859459,
43.969643
],
[
-83.859615,
43.969504
],
[
-83.859743,
43.969389
],
[
-83.869406,
43.960719
],
[
-83.869614,
43.960682
],
[
-83.877047,
43.959351
],
[
-83.877694,
43.959235
],
[
-83.880011,
43.955428
],
[
-83.880113,
43.955261
],
[
-83.885328,
43.946691
],
[
-83.885526,
43.946197
],
[
-83.885543,
43.946154
],
[
-83.890145,
43.934672
],
[
-83.890912,
43.923314
],
[
-83.907388,
43.918062
],
[
-83.911128,
43.91052
],
[
-83.916815,
43.89905
],
[
-83.917875,
43.856509
],
[
-83.926345,
43.787398
],
[
-83.929375,
43.777091
],
[
-83.945426,
43.759946
],
[
-83.954792,
43.760932
],
[
-83.956021,
43.759286
],
[
-83.954347,
43.750647
],
[
-83.939297,
43.715369
],
[
-83.929462,
43.701269
],
[
-83.909479,
43.672622
],
[
-83.897078,
43.664022
],
[
-83.852076,
43.644922
],
[
-83.814674,
43.643022
],
[
-83.806774,
43.641221
],
[
-83.778919,
43.630056
],
[
-83.770693,
43.628691
],
[
-83.769886,
43.634924
],
[
-83.725793,
43.618691
],
[
-83.703446,
43.597646
],
[
-83.699253,
43.596792
],
[
-83.669795,
43.59079
],
[
-83.666052,
43.591292
],
[
-83.654192,
43.59929
],
[
-83.618602,
43.628891
],
[
-83.595579,
43.650249
],
[
-83.563157,
43.684564
],
[
-83.553707,
43.685432
],
[
-83.549044,
43.693798
],
[
-83.55147,
43.699901
],
[
-83.540187,
43.708746
],
[
-83.524837,
43.716948
],
[
-83.515853,
43.718157
],
[
-83.513461,
43.714607
],
[
-83.506657,
43.710907
],
[
-83.48007,
43.714636
],
[
-83.470053,
43.723418
],
[
-83.467429,
43.72892
],
[
-83.46508,
43.733843
],
[
-83.459628,
43.740931
],
[
-83.440171,
43.761694
],
[
-83.438878,
43.767135
],
[
-83.441591,
43.770175
],
[
-83.446752,
43.77186
],
[
-83.438311,
43.786846
],
[
-83.426068,
43.799915
],
[
-83.416378,
43.801034
],
[
-83.411453,
43.805033
],
[
-83.410663,
43.80773
],
[
-83.412456,
43.817569
],
[
-83.410853,
43.825585
],
[
-83.407647,
43.831998
],
[
-83.390344,
43.839132
],
[
-83.389017,
43.840457
],
[
-83.389424,
43.844229
],
[
-83.358869,
43.857395
],
[
-83.33227,
43.880522
],
[
-83.331788,
43.893901
],
[
-83.333532,
43.89852
],
[
-83.340976,
43.904541
],
[
-83.348007,
43.906388
],
[
-83.348648,
43.909915
],
[
-83.347365,
43.91216
],
[
-83.338067,
43.915687
],
[
-83.318656,
43.91762
],
[
-83.30569,
43.922489
],
[
-83.28231,
43.938031
],
[
-83.26898,
43.956132
],
[
-83.26185,
43.969021
],
[
-83.26153,
43.973525
],
[
-83.227093,
43.981003
],
[
-83.195688,
43.983137
],
[
-83.180618,
43.982109
],
[
-83.145407,
43.989441
],
[
-83.134881,
43.993147
],
[
-83.120659,
44.00095
],
[
-83.10782,
44.003245
],
[
-83.079297,
44.001079
],
[
-83.066026,
44.003366
],
[
-83.058741,
44.006224
],
[
-83.046577,
44.01571
],
[
-83.029868,
44.041175
],
[
-83.024604,
44.045174
],
[
-82.999283,
44.04651
],
[
-82.990728,
44.048846
],
[
-82.967439,
44.066138
],
[
-82.958688,
44.065774
],
[
-82.956658,
44.063306
],
[
-82.947368,
44.062187
],
[
-82.928884,
44.069389
],
[
-82.915976,
44.070503
],
[
-82.889831,
44.050952
],
[
-82.875889,
44.045046
],
[
-82.833103,
44.036851
],
[
-82.793205,
44.023247
],
[
-82.788298,
44.013712
],
[
-82.783198,
44.009366
],
[
-82.765018,
44.006845
],
[
-82.746255,
43.996037
],
[
-82.738992,
43.989506
],
[
-82.728528,
43.972615
],
[
-82.712235,
43.94961
],
[
-82.709839,
43.948226
],
[
-82.693505,
43.91798
],
[
-82.678642,
43.88373
],
[
-82.65545,
43.867883
],
[
-82.643166,
43.852468
],
[
-82.642899,
43.846419
],
[
-82.647467,
43.84449
],
[
-82.647784,
43.842684
],
[
-82.644345,
43.837539
],
[
-82.633641,
43.831224
],
[
-82.617955,
43.768596
],
[
-82.619079,
43.756088
],
[
-82.617213,
43.746788
],
[
-82.612224,
43.739771
],
[
-82.606233,
43.690437
],
[
-82.60483,
43.678884
],
[
-82.605783,
43.669489
],
[
-82.6005,
43.602935
],
[
-82.597911,
43.590016
],
[
-82.593785,
43.581467
],
[
-82.585654,
43.543969
],
[
-82.565691,
43.502904
],
[
-82.565505,
43.497063
],
[
-82.55354,
43.464111
],
[
-82.539517,
43.437539
],
[
-82.538578,
43.431594
],
[
-82.53993,
43.422378
],
[
-82.535627,
43.368062
],
[
-82.536794,
43.34851
],
[
-82.530128,
43.333805
],
[
-82.529416,
43.316243
],
[
-82.532396,
43.30577
],
[
-82.523086,
43.225361
],
[
-82.519123,
43.212737
],
[
-82.508881,
43.196748
],
[
-82.503157,
43.168946
],
[
-82.50299,
43.168137
],
[
-82.501656,
43.161656
],
[
-82.501529,
43.161351
],
[
-82.500061,
43.157827
],
[
-82.495685,
43.147316
],
[
-82.494194,
43.143736
],
[
-82.494072,
43.142864
],
[
-82.494052,
43.142722
],
[
-82.494014,
43.142453
],
[
-82.493977,
43.142186
],
[
-82.493347,
43.137685
],
[
-82.493021,
43.135363
],
[
-82.490979,
43.120782
],
[
-82.490634,
43.118314
],
[
-82.490614,
43.118172
],
[
-82.490494,
43.117759
],
[
-82.486684,
43.104688
],
[
-82.486042,
43.102486
],
[
-82.471053,
43.087581
],
[
-82.457319,
43.06147
],
[
-82.457221,
43.061285
],
[
-82.450724,
43.051229
],
[
-82.443433,
43.039942
],
[
-82.422768,
43.007956
],
[
-82.415937,
43.005555
],
[
-82.422586,
43.000029
],
[
-82.424206,
42.996938
],
[
-82.42455,
42.993393
],
[
-82.423086,
42.988728
],
[
-82.420346,
42.984451
],
[
-82.412965,
42.977041
],
[
-82.416737,
42.966613
],
[
-82.428603,
42.952001
],
[
-82.447142,
42.937752
],
[
-82.455027,
42.926866
],
[
-82.46404,
42.901456
],
[
-82.469912,
42.887459
],
[
-82.470032,
42.881421
],
[
-82.46822,
42.859107
],
[
-82.468961,
42.852314
],
[
-82.472681,
42.836784
],
[
-82.47864,
42.825187
],
[
-82.482045,
42.808629
],
[
-82.481576,
42.805519
],
[
-82.480394,
42.802272
],
[
-82.471159,
42.784002
],
[
-82.467394,
42.769298
],
[
-82.467483,
42.76191
],
[
-82.483604,
42.733624
],
[
-82.48387,
42.71798
],
[
-82.494491,
42.700823
],
[
-82.510533,
42.665172
],
[
-82.509935,
42.637294
],
[
-82.518782,
42.613888
],
[
-82.523337,
42.607486
],
[
-82.548169,
42.591848
],
[
-82.549717,
42.590338
],
[
-82.554236,
42.583981
],
[
-82.555938,
42.582425
],
[
-82.569801,
42.573551
],
[
-82.57738,
42.567078
],
[
-82.579205,
42.56534
],
[
-82.583996,
42.554041
],
[
-82.589779,
42.550678
],
[
-82.604686,
42.548592
],
[
-82.607068,
42.548843
],
[
-82.611059,
42.550419
],
[
-82.616848,
42.554601
],
[
-82.624907,
42.557229
],
[
-82.633491,
42.557051
],
[
-82.640916,
42.554973
],
[
-82.64268,
42.554333
],
[
-82.648776,
42.550401
],
[
-82.661677,
42.541875
],
[
-82.666596,
42.535084
],
[
-82.679059,
42.52221
],
[
-82.686417,
42.518597
],
[
-82.685397,
42.528659
],
[
-82.679522,
42.53552
],
[
-82.670956,
42.537989
],
[
-82.664335,
42.546244
],
[
-82.680758,
42.557909
],
[
-82.681036,
42.574695
],
[
-82.688061,
42.588417
],
[
-82.701152,
42.585991
],
[
-82.711151,
42.590884
],
[
-82.713042,
42.597904
],
[
-82.700818,
42.606687
],
[
-82.683482,
42.609433
],
[
-82.681593,
42.618672
],
[
-82.690124,
42.625033
],
[
-82.689836,
42.627148
],
[
-82.669103,
42.637225
],
[
-82.645715,
42.631145
],
[
-82.630922,
42.64211
],
[
-82.626396,
42.647385
],
[
-82.623043,
42.655951
],
[
-82.623797,
42.665395
],
[
-82.630851,
42.673341
],
[
-82.635262,
42.675552
],
[
-82.659781,
42.678618
],
[
-82.674287,
42.687049
],
[
-82.6855,
42.690036
],
[
-82.700964,
42.689548
],
[
-82.706135,
42.683578
],
[
-82.707841,
42.68351
],
[
-82.726366,
42.682768
],
[
-82.753317,
42.669732
],
[
-82.765583,
42.655725
],
[
-82.780817,
42.652232
],
[
-82.792418,
42.655132
],
[
-82.797318,
42.654032
],
[
-82.813518,
42.640833
],
[
-82.820118,
42.626333
],
[
-82.819017,
42.616333
],
[
-82.811017,
42.610933
],
[
-82.789017,
42.603434
],
[
-82.787573,
42.5983
],
[
-82.788977,
42.592661
],
[
-82.788116,
42.582835
],
[
-82.781514,
42.571634
],
[
-82.782414,
42.564834
],
[
-82.784514,
42.563634
],
[
-82.789114,
42.568434
],
[
-82.796715,
42.571034
],
[
-82.821016,
42.570734
],
[
-82.834216,
42.567849
],
[
-82.845916,
42.560634
],
[
-82.849316,
42.555734
],
[
-82.851016,
42.548935
],
[
-82.859316,
42.541935
],
[
-82.860213,
42.540842
],
[
-82.874416,
42.523535
],
[
-82.882316,
42.501035
],
[
-82.883915,
42.471836
],
[
-82.870572,
42.451235
],
[
-82.870347,
42.450888
],
[
-82.886113,
42.408137
],
[
-82.888413,
42.398237
],
[
-82.894013,
42.389437
],
[
-82.898413,
42.385437
],
[
-82.915114,
42.378137
],
[
-82.919114,
42.374437
],
[
-82.928815,
42.359437
],
[
-82.92397,
42.352068
],
[
-82.945415,
42.347337
],
[
-82.959416,
42.339638
],
[
-82.988619,
42.332439
],
[
-83.01832,
42.329739
],
[
-83.064121,
42.317738
],
[
-83.079721,
42.308638
],
[
-83.096521,
42.290138
],
[
-83.110922,
42.260638
],
[
-83.128022,
42.238839
],
[
-83.131343,
42.20276
],
[
-83.133923,
42.17474
],
[
-83.121323,
42.125742
],
[
-83.133511,
42.088143
],
[
-83.157624,
42.085542
],
[
-83.168759,
42.073601
],
[
-83.170589,
42.07294
],
[
-83.188598,
42.066431
],
[
-83.189115,
42.061853
],
[
-83.186877,
42.061206
],
[
-83.185526,
42.052243
],
[
-83.18824,
42.031329
],
[
-83.185858,
42.029451
],
[
-83.185822,
42.029367
],
[
-83.181475,
42.019301
],
[
-83.187246,
42.007573
],
[
-83.190535,
42.006172
],
[
-83.208647,
42.00504
],
[
-83.209379,
41.995736
],
[
-83.216835,
41.98862
],
[
-83.216897,
41.988561
],
[
-83.223354,
41.989191
],
[
-83.223369,
41.989185
],
[
-83.224947,
41.988603
],
[
-83.227744,
41.987571
],
[
-83.22841,
41.987325
],
[
-83.228502,
41.987291
],
[
-83.228607,
41.987216
],
[
-83.22929,
41.986725
],
[
-83.248741,
41.972735
],
[
-83.249204,
41.972402
],
[
-83.249828,
41.971386
],
[
-83.255123,
41.962759
],
[
-83.256803,
41.960021
],
[
-83.257009,
41.959686
],
[
-83.257043,
41.958615
],
[
-83.257143,
41.955438
],
[
-83.257199,
41.95367
],
[
-83.257292,
41.950745
],
[
-83.269521,
41.939042
],
[
-83.270491,
41.939337
],
[
-83.28713,
41.944397
],
[
-83.292761,
41.944616
],
[
-83.293015,
41.944626
],
[
-83.295982,
41.944742
],
[
-83.29823,
41.9442
],
[
-83.299467,
41.943902
],
[
-83.302904,
41.943073
],
[
-83.303465,
41.942762
],
[
-83.305639,
41.941557
],
[
-83.315859,
41.935893
],
[
-83.326007,
41.924979
],
[
-83.326024,
41.924961
],
[
-83.326029,
41.924948
],
[
-83.32706,
41.922554
],
[
-83.330498,
41.914565
],
[
-83.332998,
41.908757
],
[
-83.333642,
41.907261
],
[
-83.334173,
41.903247
],
[
-83.334346,
41.901939
],
[
-83.335103,
41.896209
],
[
-83.335132,
41.895992
],
[
-83.335658,
41.892009
],
[
-83.335961,
41.889721
],
[
-83.341557,
41.879956
],
[
-83.359467,
41.867849
],
[
-83.366187,
41.865505
],
[
-83.372198,
41.874122
],
[
-83.372445,
41.874477
],
[
-83.379705,
41.871729
],
[
-83.381955,
41.870877
],
[
-83.389289,
41.861668
],
[
-83.393822,
41.855976
],
[
-83.39622,
41.852965
],
[
-83.40822,
41.832654
],
[
-83.409596,
41.830325
],
[
-83.422316,
41.822278
],
[
-83.422391,
41.822255
],
[
-83.425393,
41.821316
],
[
-83.426321,
41.821026
],
[
-83.431183,
41.819506
],
[
-83.434204,
41.818562
],
[
-83.435946,
41.816823
],
[
-83.436298,
41.816471
],
[
-83.439612,
41.813162
],
[
-83.441668,
41.808646
],
[
-83.442316,
41.80119
],
[
-83.442521,
41.79883
],
[
-83.442843,
41.795121
],
[
-83.443364,
41.789118
],
[
-83.437935,
41.771086
],
[
-83.437516,
41.769694
],
[
-83.437231,
41.76915
],
[
-83.437197,
41.769085
],
[
-83.435571,
41.765983
],
[
-83.434238,
41.763439
],
[
-83.432973,
41.761025
],
[
-83.432832,
41.760756
],
[
-83.432078,
41.759316
],
[
-83.431951,
41.759074
],
[
-83.431103,
41.757457
],
[
-83.427377,
41.750346
],
[
-83.427336,
41.750267
],
[
-83.427308,
41.750214
],
[
-83.42643,
41.747639
],
[
-83.42418,
41.741042
],
[
-83.424076,
41.740738
],
[
-83.424155,
41.74071
],
[
-83.43436,
41.737058
],
[
-83.451897,
41.734486
],
[
-83.453832,
41.732647
],
[
-83.497733,
41.731847
],
[
-83.499733,
41.731647
],
[
-83.503433,
41.731547
],
[
-83.504334,
41.731547
],
[
-83.585235,
41.729348
],
[
-83.593835,
41.729148
],
[
-83.595235,
41.729148
],
[
-83.636636,
41.727849
],
[
-83.639636,
41.727749
],
[
-83.665937,
41.726949
],
[
-83.685337,
41.726449
],
[
-83.708937,
41.72515
],
[
-83.763038,
41.72355
],
[
-83.76315,
41.723547
],
[
-83.859541,
41.72125
],
[
-83.880387,
41.720089
]
]
]
}
// Rough Visvalingam simplification
// Better: https://bost.ocks.org/mike/simplify/
function simplify(points, threshold) {
var heap = binaryHeap(function(a, b){
return a.area < b.area;
}),
last = 0,
check;
points.forEach(function(point, i){
point[2] = i;
point.prev = points[i - 1];
point.next = points[i + 1];
point.area = getArea(point.prev, point, point.next);
heap.insert(point);
});
while (check = heap.pop()) {
check.area = last = Math.max(check.area, last);
if (check.prev) {
check.prev.next = check.next;
recalc(check.prev);
}
if (check.next) {
check.next.prev = check.prev;
recalc(check.next);
}
}
return points.filter(function(p){
return p.area > threshold;
});
function recalc(point) {
point.area = getArea(point.prev, point, point.next);
heap.update(point);
}
function getArea(a,b,c) {
if (!a || !c) {
return Infinity;
}
return Math.abs(a[0] * b[1] - a[0] * c[1] + b[0] * c[1] - b[0] * a[1] + c[0] * a[1] - c[0] * b[1]) / 2;
}
}
function binaryHeap(comparator) {
var heap = {},
nodes = [];
heap.remove = function(val) {
var len = nodes.length,
end;
for (var i = 0; i < len; i++) {
if (nodes[i] === val) {
end = nodes.pop();
if (i < len - 1) {
nodes[i] = end;
this.sink(i);
}
break;
}
}
return this;
};
heap.pop = function() {
var top = nodes.shift();
if (nodes.length) {
nodes.unshift(nodes.pop());
this.sink(0);
}
return top;
};
heap.bubble = function(i) {
var pi = Math.floor((i + 1) / 2) - 1;
if (i > 0 && this.compare(i, pi)) {
this.swap(i, pi);
this.bubble(pi);
}
return this;
};
heap.sink = function(i) {
var len = nodes.length,
ci = 2 * i + 1;
if (ci < len - 1 && this.compare(ci + 1, ci)) {
ci++;
}
if (ci < len && this.compare(ci, i)) {
this.swap(i, ci);
this.sink(ci);
}
return this;
};
heap.compare = function(i, j) {
return comparator(nodes[i], nodes[j]);
};
heap.insert = function(d) {
this.bubble(nodes.push(d) - 1);
};
heap.size = function() {
return nodes.length;
}
heap.swap = function(i, j) {
var swap = nodes[i];
nodes[i] = nodes[j];
nodes[j] = swap;
};
heap.update = function(d) {
this.remove(d);
this.insert(d);
// bubble / sink instead?
}
heap.nodes = nodes;
return heap;
}
function warper(start,end) {
var u0 = start[0][0],
v0 = start[0][1],
u1 = start[1][0],
v1 = start[1][1],
u2 = start[2][0],
v2 = start[2][1],
u3 = start[3][0],
v3 = start[3][1],
x0 = end[0][0],
y0 = end[0][1],
x1 = end[1][0],
y1 = end[1][1],
x2 = end[2][0],
y2 = end[2][1],
x3 = end[3][0],
y3 = end[3][1];
var square = [
[1,u0,v0,u0 * v0,0,0,0,0],
[1,u1,v1,u1 * v1,0,0,0,0],
[1,u2,v2,u2 * v2,0,0,0,0],
[1,u3,v3,u3 * v3,0,0,0,0],
[0,0,0,0,1,u0,v0,u0 * v0],
[0,0,0,0,1,u1,v1,u1 * v1],
[0,0,0,0,1,u2,v2,u2 * v2],
[0,0,0,0,1,u3,v3,u3 * v3]
];
// Prevent float precision problems in FF/Safari
square.forEach(function(row){
row.forEach(function(cell, i){
row[i] = cell.toFixed(6);
});
});
var inverted = invert(square);
var s = multiply(inverted,[x0,x1,x2,x3,y0,y1,y2,y3]);
return function(p) {
return [
s[0] + s[1] * p[0] + s[2] * p[1] + s[3] * p[0] * p[1],
s[4] + s[5] * p[0] + s[6] * p[1] + s[7] * p[0] * p[1],
];
};
}
function multiply(matrix,vector) {
return matrix.map(function(row){
var sum = 0;
row.forEach(function(c,i){
sum += c * vector[i];
});
return sum;
});
}
function invert(matrix) {
var size = matrix.length,
base,
swap,
augmented;
// Augment w/ identity matrix
augmented = matrix.map(function(row,i){
return row.slice(0).concat(row.slice(0).map(function(d,j){
return j === i ? 1 : 0;
}));
});
// Process each row
for (var r = 0; r < size; r++) {
base = augmented[r][r];
// Zero on diagonal, swap with a lower row
if (!base) {
for (var rr = r + 1; rr < size; rr++) {
if (augmented[rr][r]) {
// swap
swap = augmented[rr];
augmented[rr] = augmented[r];
augmented[r] = swap;
base = augmented[r][r];
break;
}
}
if (!base) {
throw new Error("Not invertable :(");
}
}
// 1 on the diagonal
for (var c = 0; c < size * 2; c++) {
augmented[r][c] = augmented[r][c] / base;
}
// Zeroes elsewhere
for (var q = 0; q < size; q++) {
if (q !== r) {
base = augmented[q][r];
for (var p = 0; p < size * 2; p++) {
augmented[q][p] -= base * augmented[r][p];
}
}
}
}
return augmented.map(function(row){
return row.slice(size);
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment