Skip to content

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also .

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also .
...
  • 16 commits
  • 46 files changed
  • 0 commit comments
  • 3 contributors
Commits on Nov 26, 2010
@mbostock mbostock Add `repeat` property to po.url.
True by default. Can be set to false to disable column wrap-around.
1754c96
Commits on Nov 27, 2010
@jasondavies jasondavies Treat null `url` for `po.image` as empty tiles.
Instead of setting the image URL to `about:blank`, no image URL is set
when `null` URLs are detected.  This appears to be slightly faster than
using `about:blank`, at least in Firefox.  I've updated `po.image`'s
`repeat` accordingly.
5aa2717
@mbostock mbostock Use lenient equality operator (undefined == null). 41e4780
Commits on Jan 19, 2011
@mbostock mbostock Fix bug in compass zoom positioning. 7c33ade
@mbostock mbostock Merge branch 'master' of github.com:simplegeo/polymaps
Conflicts:
	polymaps.js
	polymaps.min.js
	src/start.js
bebaf97
Commits on Feb 12, 2011
@mbostock mbostock Add example of zoom-to-feature. efd26da
@mbostock mbostock Merge branch 'master' of github.com:mbostock/polymaps 6820f14
Commits on Apr 07, 2011
@mbostock mbostock Add html doctype. b756f5a
@mbostock mbostock Touch support!
This adds basic touch support, including single touch (pan) and double touch
(pan and zoom). In a future change, I'd also like to support rotation for double
touch, and double-tap to snap to the nearest integer zoom level. This commit
also includes a simple example that shows how to specify 2x resolution tiles for
the iPhone 4's retina display.
2035dac
Commits on Apr 08, 2011
@mbostock mbostock Fix preventDefault for touch events. 4defaf6
@mbostock mbostock Add double-tap & rotation support.
Rotation isn't enabled by default, since it's kinda crazy! And unfortunately,
the JavaScript touch API doesn't support `tapCount`, so we have to detect
double-tap events manually by checking for a 300ms delay between single touches.
acca777
@mbostock mbostock Use touch event's scale and rotation fields.
Thanks to @natevw, I see there are `scale` and `rotation` fields on the touch
event that we can use to compute the zoom and angle offsets more easily. Also,
this commit updates the example to auto-detect retina displays using the
devicePixelRatio field of the current window.
f4c3ff1
@mbostock mbostock A different hack for reliable mousewheel.
Wheel events are utterly broken. Even though WebKit's mousewheel precision bug
has been fixed, Chrome and Safari still differ in terms of mousewheel
acceleration. Safari and Firefox report the correct value (the number of pixels
that would be scrolled), but Chrome does not. I've not tested Opera or IE9.

Fortunately, we can determine exactly the number of pixels that would be
scrolled by dispatching the mousewheel event to a scrollable area, and then
observing the change in scrollTop. However, dispatching the received event is
not strictly allowed, so ignore this error and hope for the best.
4518c22
@mbostock mbostock Enable repeat. cac36b1
@mbostock mbostock Resize on load.
This fixes a bug with Opera where the map size was empty.
c682b2a
Commits on Apr 11, 2011
@mbostock mbostock Merge branch 'mbostock-master' aa653ba
Showing with 540 additions and 137 deletions.
  1. +1 −0 Makefile
  2. +1 −0 examples/bing/map.html
  3. +26 −0 examples/bounds/bounds.html
  4. +67 −0 examples/bounds/bounds.js
  5. +1 −0 examples/bounds/district.json
  6. +1 −0 examples/breakout/breakout.html
  7. +1 −0 examples/canvas/cell.html
  8. +1 −0 examples/canvas/mandelbrot.html
  9. +1 −0 examples/cloudmade/midnight-commander.html
  10. +1 −0 examples/cloudmade/pale-dawn.html
  11. +1 −0 examples/cluster/cluster.html
  12. +1 −0 examples/features/features.html
  13. +1 −0 examples/grid/grid.html
  14. +1 −0 examples/grid/tiles.html
  15. +1 −0 examples/hilbert/hilbert.html
  16. +1 −0 examples/invert/invert.html
  17. +21 −0 examples/iphone4/iphone4.html
  18. +19 −0 examples/iphone4/iphone4.js
  19. +1 −0 examples/kml/kml.html
  20. +1 −0 examples/loupe/loupe.html
  21. +1 −0 examples/marker/marker.html
  22. +1 −0 examples/nasa/blue-marble.html
  23. +1 −0 examples/overlay/overlay.html
  24. +1 −0 examples/population/population.html
  25. +1 −0 examples/shadow/shadow.html
  26. +1 −0 examples/small/small.html
  27. +1 −0 examples/small/static.html
  28. +1 −0 examples/statehood/statehood.html
  29. +1 −0 examples/streets/streets.html
  30. +1 −0 examples/tilestache/flickr.html
  31. +1 −0 examples/transform/transform-inverse.html
  32. +1 −0 examples/transform/transform.html
  33. +1 −0 examples/transition/transition.html
  34. +1 −0 examples/unemployment/unemployment.html
  35. +1 −0 examples/world/world.html
  36. +158 −40 polymaps.js
  37. +64 −61 polymaps.min.js
  38. +2 −3 src/Compass.js
  39. +12 −6 src/Image.js
  40. +2 −0 src/Interact.js
  41. +2 −1 src/Map.js
  42. +81 −0 src/Touch.js
  43. +1 −1 src/Transform.js
  44. +15 −3 src/Url.js
  45. +38 −21 src/Wheel.js
  46. +1 −1 src/start.js
View
1 Makefile
@@ -17,6 +17,7 @@ JS_FILES = \
src/Wheel.js \
src/Arrow.js \
src/Hash.js \
+ src/Touch.js \
src/Interact.js \
src/Compass.js \
src/Grid.js \
View
1 examples/bing/map.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../../lib/jquery/jquery.min.js"></script>
View
26 examples/bounds/bounds.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script type="text/javascript" src="../../polymaps.js"></script>
+ <style type="text/css">
+
+@import url("../example.css");
+
+#district path {
+ fill: lightsteelblue;
+ fill-opacity: .5;
+ stroke: steelblue;
+}
+
+ </style>
+ </head>
+ <body id="map">
+ <script type="text/javascript" src="bounds.js"></script>
+ <span id="copy">
+ &copy; 2010
+ <a href="http://www.cloudmade.com/">CloudMade</a>,
+ <a href="http://www.openstreetmap.org/">OpenStreetMap</a> contributors,
+ <a href="http://creativecommons.org/licenses/by-sa/2.0/">CCBYSA</a>.
+ </span>
+ </body>
+</html>
View
67 examples/bounds/bounds.js
@@ -0,0 +1,67 @@
+var po = org.polymaps;
+
+var map = po.map()
+ .container(document.getElementById("map").appendChild(po.svg("svg")))
+ .add(po.interact());
+
+map.add(po.image()
+ .url(po.url("http://{S}tile.cloudmade.com"
+ + "/1a1b06b230af4efdbb989ea99e9841af" // http://cloudmade.com/register
+ + "/998/256/{Z}/{X}/{Y}.png")
+ .hosts(["a.", "b.", "c.", ""])));
+
+map.add(po.geoJson()
+ .url("district.json")
+ .id("district")
+ .on("load", load));
+
+map.add(po.compass()
+ .pan("none"));
+
+function load(e) {
+ map.extent(bounds(e.features)).zoomBy(-.5);
+}
+
+function bounds(features) {
+ var i = -1,
+ n = features.length,
+ geometry,
+ bounds = [{lon: Infinity, lat: Infinity}, {lon: -Infinity, lat: -Infinity}];
+ while (++i < n) {
+ geometry = features[i].data.geometry;
+ boundGeometry[geometry.type](bounds, geometry.coordinates);
+ }
+ return bounds;
+}
+
+function boundPoint(bounds, coordinate) {
+ var x = coordinate[0], y = coordinate[1];
+ if (x < bounds[0].lon) bounds[0].lon = x;
+ if (x > bounds[1].lon) bounds[1].lon = x;
+ if (y < bounds[0].lat) bounds[0].lat = y;
+ if (y > bounds[1].lat) bounds[1].lat = y;
+}
+
+function boundPoints(bounds, coordinates) {
+ var i = -1, n = coordinates.length;
+ while (++i < n) boundPoint(bounds, coordinates[i]);
+}
+
+function boundMultiPoints(bounds, coordinates) {
+ var i = -1, n = coordinates.length;
+ while (++i < n) boundPoints(bounds, coordinates[i]);
+}
+
+var boundGeometry = {
+ Point: boundPoint,
+ MultiPoint: boundPoints,
+ LineString: boundPoints,
+ MultiLineString: boundMultiPoints,
+ Polygon: function(bounds, coordinates) {
+ boundPoints(bounds, coordinates[0]); // exterior ring
+ },
+ MultiPolygon: function(bounds, coordinates) {
+ var i = -1, n = coordinates.length;
+ while (++i < n) boundPoints(bounds, coordinates[i][0]);
+ }
+};
View
1 examples/bounds/district.json
@@ -0,0 +1 @@
+{"geometry": {"type": "Polygon", "coordinates": [[[-95.8420,41.1767], [-95.8419,41.1763], [-95.8419,41.1762], [-95.8418,41.1759], [-95.8417,41.1758], [-95.8416,41.1754], [-95.8416,41.1748], [-95.8416,41.1739], [-95.8416,41.1731], [-95.8417,41.1723], [-95.8420,41.1716], [-95.8420,41.1713], [-95.8426,41.1703], [-95.8427,41.1700], [-95.8434,41.1690], [-95.8438,41.1687], [-95.8443,41.1682], [-95.8454,41.1674], [-95.8469,41.1666], [-95.8479,41.1662], [-95.8488,41.1660], [-95.8493,41.1659], [-95.8498,41.1658], [-95.8508,41.1656], [-95.8534,41.1655], [-95.8562,41.1658], [-95.8568,41.1659], [-95.8576,41.1661], [-95.8592,41.1665], [-95.8603,41.1666], [-95.8609,41.1669], [-95.8623,41.1672], [-95.8632,41.1674], [-95.8643,41.1678], [-95.8648,41.1679], [-95.8659,41.1681], [-95.8673,41.1681], [-95.8691,41.1680], [-95.8705,41.1677], [-95.8711,41.1676], [-95.8720,41.1673], [-95.8727,41.1670], [-95.8736,41.1666], [-95.8743,41.1662], [-95.8753,41.1655], [-95.8757,41.1652], [-95.8773,41.1639], [-95.8791,41.1619], [-95.8796,41.1612], [-95.8799,41.1609], [-95.8805,41.1598], [-95.8810,41.1588], [-95.8814,41.1583], [-95.8819,41.1569], [-95.8821,41.1564], [-95.8823,41.1561], [-95.8825,41.1558], [-95.8826,41.1552], [-95.8826,41.1551], [-95.8826,41.1550], [-95.8829,41.1545], [-95.8829,41.1536], [-95.8831,41.1532], [-95.8832,41.1526], [-95.8830,41.1518], [-95.8832,41.1514], [-95.8833,41.1510], [-95.8830,41.1493], [-95.8831,41.1488], [-95.8831,41.1481], [-95.8829,41.1478], [-95.8828,41.1472], [-95.8827,41.1468], [-95.8828,41.1466], [-95.8828,41.1464], [-95.8827,41.1460], [-95.8825,41.1457], [-95.8823,41.1447], [-95.8821,41.1440], [-95.8821,41.1439], [-95.8820,41.1435], [-95.8813,41.1421], [-95.8812,41.1416], [-95.8808,41.1408], [-95.8806,41.1406], [-95.8801,41.1399], [-95.8800,41.1395], [-95.8796,41.1389], [-95.8793,41.1386], [-95.8793,41.1385], [-95.8793,41.1385], [-95.8786,41.1376], [-95.8783,41.1369], [-95.8780,41.1366], [-95.8776,41.1361], [-95.877476, 41.136], [-95.8773,41.1358], [-95.8770,41.1353], [-95.8763,41.1346], [-95.8760,41.1341], [-95.8758,41.1340], [-95.8756,41.1337], [-95.8747,41.1328], [-95.8745,41.1324], [-95.8739,41.1317], [-95.8734,41.1313], [-95.8731,41.1307], [-95.8729,41.1305], [-95.8726,41.1302], [-95.8724,41.1299], [-95.8720,41.1297], [-95.8711,41.1287], [-95.8707,41.1280], [-95.8701,41.1271], [-95.8700,41.1270], [-95.8700,41.1268], [-95.8696,41.1262], [-95.8694,41.1260], [-95.8690,41.1255], [-95.8689,41.1251], [-95.8686,41.1246], [-95.8685,41.1241], [-95.8683,41.1238], [-95.8675,41.1220], [-95.8672,41.1214], [-95.8670,41.1206], [-95.8666,41.1192], [-95.8664,41.1178], [-95.8664,41.1174], [-95.8663,41.1151], [-95.8663,41.1143], [-95.8668,41.1110], [-95.8668,41.1109], [-95.8670,41.1095], [-95.8671,41.1091], [-95.8669,41.1087], [-95.8670,41.1083], [-95.8666,41.1049], [-95.8662,41.1034], [-95.8661,41.1032], [-95.8661,41.1032], [-95.8659,41.1021], [-95.8658,41.1018], [-95.8657,41.1012], [-95.8657,41.1012], [-95.8652,41.0999], [-95.8650,41.0989], [-95.8648,41.0984], [-95.8643,41.0971], [-95.8636,41.0953], [-95.8632,41.0944], [-95.8633,41.0941], [-95.8631,41.0937], [-95.8631,41.0937], [-95.8631,41.0936], [-95.8631,41.0936], [-95.8631,41.0936], [-95.8630,41.0936], [-95.8630,41.0931], [-95.8627,41.0925], [-95.8625,41.0918], [-95.8625,41.0911], [-95.8625,41.0905], [-95.8624,41.0896], [-95.8629,41.0861], [-95.8633,41.0849], [-95.8638,41.0834], [-95.8645,41.0821], [-95.8647,41.0816], [-95.8658,41.0800], [-95.8669,41.0788], [-95.8703,41.0758], [-95.8714,41.0750], [-95.8715,41.0749], [-95.8725,41.0740], [-95.8737,41.0732], [-95.8737,41.0732], [-95.8737,41.0732], [-95.8737,41.0732], [-95.8737,41.0732], [-95.8737,41.0732], [-95.8737,41.0732], [-95.8738,41.0731], [-95.8739,41.0730], [-95.8749,41.0722], [-95.8774,41.0703], [-95.8793,41.0685], [-95.8802,41.0674], [-95.8810,41.0663], [-95.8814,41.0653], [-95.8817,41.0645], [-95.8822,41.0635], [-95.8824,41.0613], [-95.8823,41.0604], [-95.8823,41.0594], [-95.8821,41.0583], [-95.8819,41.0579], [-95.8818,41.0575], [-95.8813,41.0564], [-95.8811,41.0559], [-95.8815,41.0543], [-95.8815,41.0543], [-95.8808,41.0540], [-95.8799,41.0536], [-95.8797,41.0535], [-95.8794,41.0534], [-95.8794,41.0533], [-95.8794,41.0532], [-95.8799,41.0535], [-95.8804,41.0536], [-95.8811,41.0539], [-95.8814,41.0541], [-95.8816,41.0542], [-95.8836,41.0553], [-95.8844,41.0558], [-95.8846,41.0558], [-95.8848,41.0559], [-95.8854,41.0563], [-95.8859,41.0565], [-95.8860,41.0567], [-95.8862,41.0568], [-95.8866,41.0570], [-95.8877,41.0575], [-95.8890,41.0583], [-95.8892,41.0584], [-95.8894,41.0585], [-95.8895,41.0585], [-95.8905,41.0587], [-95.8912,41.0588], [-95.8926,41.0590], [-95.8940,41.0591], [-95.8951,41.0592], [-95.8966,41.0594], [-95.8984,41.0593], [-95.9002,41.0591], [-95.9005,41.0590], [-95.9006,41.0590], [-95.9008,41.0590], [-95.9017,41.0590], [-95.9026,41.0589], [-95.903, 41.058842999999996], [-95.9050,41.0587], [-95.9070,41.0586], [-95.9079,41.0585], [-95.9084,41.0585], [-95.9097,41.0585], [-95.9112,41.0589], [-95.9121,41.0592], [-95.9125,41.0593], [-95.9145,41.0597], [-95.9164,41.0599], [-95.9180,41.0598], [-95.9199,41.0593], [-95.9200,41.0593], [-95.9201,41.0593], [-95.9203,41.0592], [-95.9218,41.0589], [-95.9233,41.0588], [-95.9252,41.0587], [-95.9268,41.0588], [-95.9276,41.0588], [-95.9276,41.0587], [-95.9279,41.0588], [-95.9279,41.0591], [-95.9279,41.0606], [-95.9280,41.0614], [-95.9280,41.0633], [-95.9280,41.0657], [-95.9281,41.0677], [-95.9281,41.0687], [-95.9281,41.0690], [-95.9281,41.0693], [-95.9281,41.0698], [-95.9281,41.0721], [-95.9282,41.0732], [-95.9282,41.0742], [-95.9282,41.0755], [-95.9282,41.0769], [-95.9282,41.0782], [-95.9282,41.0787], [-95.9282,41.0796], [-95.9282,41.0806], [-95.9282,41.0808], [-95.9282,41.0827], [-95.9282,41.0834], [-95.9282,41.0841], [-95.9282,41.0853], [-95.9282,41.0859], [-95.9282,41.0892], [-95.9282,41.0899], [-95.9282,41.0914], [-95.9282,41.0928], [-95.9282,41.0944], [-95.9281,41.0957], [-95.9281,41.0960], [-95.9282,41.0962], [-95.9284,41.0962], [-95.9405,41.0962], [-95.9519,41.0962], [-95.9519,41.0953], [-95.9520,41.0945], [-95.9520,41.0944], [-95.9520,41.0936], [-95.9520,41.0922], [-95.9520,41.0917], [-95.9520,41.0911], [-95.9520,41.0900], [-95.952, 41.089134], [-95.9665,41.0891], [-95.9672,41.0891], [-95.9675,41.0892], [-95.9679,41.0893], [-95.9688,41.0894], [-95.9689,41.0894], [-95.9692,41.0895], [-95.9697,41.0897], [-95.9700,41.0898], [-95.9705,41.0901], [-95.9721,41.0911], [-95.9727,41.0914], [-95.9737,41.0921], [-95.9743,41.0924], [-95.9748,41.0925], [-95.9751,41.0926], [-95.9753,41.0926], [-95.9754,41.0927], [-95.9758,41.0927], [-95.9761,41.0927], [-95.9762,41.0927], [-95.9766,41.0927], [-95.9786,41.0927], [-95.9812,41.0927], [-95.9822,41.0927], [-95.9839,41.0927], [-95.9844,41.0927], [-95.9852,41.0927], [-95.9865,41.0927], [-95.9874,41.0926], [-95.9884,41.0926], [-95.9895,41.0926], [-95.9903,41.0925], [-95.9911,41.0925], [-95.9913,41.0925], [-95.9918,41.0925], [-95.9949,41.0927], [-95.9958,41.0927], [-95.9973,41.0927], [-95.9975,41.0927], [-95.9984,41.0927], [-95.9995,41.0927], [-96.0002,41.0927], [-96.0008,41.0927], [-96.0017,41.0927], [-96.0038,41.0927], [-96.0039,41.0927], [-96.0042,41.0995], [-96.0043,41.0999], [-96.0043,41.1005], [-96.0044,41.1037], [-96.0044,41.1037], [-96.0044,41.1040], [-96.0044,41.1045], [-96.0044,41.1051], [-96.0044,41.1062], [-96.0044,41.1063], [-96.0044,41.1124], [-96.0044,41.1130], [-96.0044,41.1135], [-96.0044,41.1147], [-96.0044,41.1174], [-96.0044,41.1178], [-96.0044,41.1181], [-96.0096,41.1181], [-96.0101,41.1180], [-96.0129,41.1180], [-96.0140,41.1180], [-96.0151,41.1180], [-96.0180,41.1180], [-96.0202,41.1180], [-96.0225,41.1180], [-96.0236,41.1180], [-96.0236,41.1215], [-96.0236,41.1217], [-96.0236,41.1222], [-96.0236,41.1234], [-96.0236,41.1247], [-96.0236,41.1251], [-96.0236,41.1261], [-96.0236,41.1281], [-96.0236,41.1319], [-96.0236,41.1321], [-96.0236,41.1323], [-96.0236,41.1332], [-96.0236,41.1339], [-96.0236,41.1341], [-96.0236,41.1343], [-96.0236,41.1344], [-96.0236,41.1354], [-96.0236,41.1361], [-96.0236,41.1363], [-96.0236,41.1368], [-96.0236,41.1371], [-96.0236,41.1372], [-96.0253,41.1376], [-96.0277,41.1383], [-96.0288,41.1386], [-96.0299,41.1389], [-96.0305,41.1390], [-96.0307,41.1389], [-96.0309,41.1388], [-96.0317,41.1382], [-96.0324,41.1376], [-96.0334,41.1364], [-96.0336,41.1361], [-96.0339,41.1354], [-96.0342,41.1348], [-96.0348,41.1351], [-96.0350,41.1352], [-96.0357,41.1355], [-96.0360,41.1357], [-96.0362,41.1358], [-96.0364,41.1359], [-96.0371,41.1363], [-96.0371,41.1360], [-96.0371,41.1358], [-96.0371,41.1354], [-96.0371,41.1354], [-96.0371,41.1347], [-96.0372,41.1344], [-96.0372,41.1339], [-96.0427,41.1339], [-96.0427,41.1325], [-96.0429,41.1325], [-96.0429,41.1324], [-96.0429,41.1323], [-96.0429,41.1323], [-96.0476,41.1322], [-96.0501,41.1322], [-96.0508,41.1322], [-96.0508,41.1322], [-96.0508,41.1324], [-96.0508,41.1326], [-96.0524,41.1326], [-96.0525,41.1326], [-96.0527,41.1326], [-96.0532,41.1326], [-96.0561,41.1326], [-96.0586,41.1326], [-96.0618,41.1326], [-96.0621,41.1326], [-96.0640,41.1326], [-96.0653,41.1326], [-96.0666,41.1326], [-96.0668,41.1326], [-96.0673,41.1326], [-96.0674,41.1326], [-96.0678,41.1326], [-96.0680,41.1326], [-96.0701,41.1326], [-96.0712,41.1326], [-96.0714,41.1326], [-96.0723,41.1326], [-96.0732,41.1326], [-96.0743,41.1326], [-96.0745,41.1326], [-96.0750,41.1326], [-96.0752,41.1326], [-96.0768,41.1326], [-96.0788,41.1326], [-96.0810,41.1326], [-96.0812,41.1326], [-96.0815,41.1326], [-96.0819,41.1326], [-96.0844,41.1326], [-96.0881,41.1326], [-96.0908,41.1326], [-96.0908,41.1289], [-96.0907,41.1272], [-96.0907,41.1266], [-96.1007,41.1269], [-96.1007,41.1326], [-96.1035,41.1325], [-96.1070,41.1325], [-96.1142,41.1325], [-96.1157,41.1325], [-96.1161,41.1325], [-96.1180,41.1325], [-96.1180,41.1326], [-96.1160,41.1433], [-96.1159,41.1441], [-96.1149,41.1441], [-96.1100,41.1441], [-96.1100,41.1455], [-96.1100,41.1468], [-96.1100,41.1472], [-96.1111,41.1472], [-96.1127,41.1472], [-96.1148,41.1472], [-96.1156,41.1472], [-96.1160,41.1472], [-96.1170,41.1472], [-96.1195,41.1472], [-96.1195,41.1474], [-96.1195,41.1480], [-96.1195,41.1493], [-96.1195,41.1494], [-96.1195,41.1514], [-96.1195,41.1524], [-96.1195,41.1538], [-96.1195,41.1588], [-96.1195,41.1612], [-96.1195,41.1615], [-96.1195,41.1619], [-96.1195,41.1650], [-96.1196,41.1670], [-96.1196,41.1682], [-96.1196,41.1693], [-96.1196,41.1695], [-96.1196,41.1708], [-96.1196,41.1723], [-96.1196,41.1739], [-96.1196,41.1740], [-96.1196,41.1740], [-96.1196,41.1742], [-96.1196,41.1752], [-96.1196,41.1753], [-96.1200,41.1754], [-96.1207,41.1757], [-96.1211,41.1759], [-96.1213,41.1760], [-96.1215,41.1761], [-96.1217,41.1761], [-96.1228,41.1761], [-96.1238,41.1761], [-96.1242,41.1761], [-96.1250,41.1761], [-96.1265,41.1761], [-96.1272,41.1761], [-96.1288,41.1761], [-96.1289,41.1761], [-96.1320,41.1762], [-96.1323,41.1762], [-96.1334,41.1762], [-96.1370,41.1762], [-96.1374,41.1762], [-96.1381,41.1762], [-96.1389,41.1762], [-96.1396,41.1762], [-96.1457,41.1762], [-96.1472,41.1762], [-96.1481,41.1762], [-96.1484,41.1762], [-96.1492,41.1762], [-96.1500,41.1762], [-96.1518,41.1762], [-96.1557,41.1762], [-96.1583,41.1762], [-96.1583,41.1768], [-96.1583,41.1769], [-96.1583,41.1780], [-96.1583,41.1790], [-96.1583,41.1792], [-96.1583,41.1803], [-96.1583,41.1818], [-96.1583,41.1833], [-96.1583,41.1839], [-96.1583,41.1845], [-96.1583,41.1854], [-96.1583,41.1857], [-96.1583,41.1857], [-96.1583,41.1859], [-96.1583,41.1861], [-96.1583,41.1869], [-96.1583,41.1874], [-96.1583,41.1876], [-96.1583,41.1882], [-96.1583,41.1885], [-96.1583,41.1887], [-96.1583,41.1900], [-96.1583,41.1903], [-96.1583,41.1907], [-96.1588,41.1907], [-96.1592,41.1907], [-96.1594,41.1907], [-96.1596,41.1907], [-96.1604,41.1907], [-96.1604,41.1907], [-96.1605,41.1907], [-96.1609,41.1907], [-96.1612,41.1907], [-96.1621,41.1907], [-96.1629,41.1907], [-96.1630,41.1907], [-96.1634,41.1907], [-96.1640,41.1907], [-96.1645,41.1907], [-96.1651,41.1907], [-96.1652,41.1907], [-96.1654,41.1907], [-96.1669,41.1907], [-96.1669,41.1907], [-96.1673,41.1907], [-96.1682,41.1906], [-96.1689,41.1906], [-96.1689,41.1906], [-96.1693,41.1906], [-96.1697,41.1906], [-96.1697,41.1906], [-96.1714,41.1906], [-96.1725,41.1906], [-96.1743,41.1906], [-96.1750,41.1906], [-96.1751,41.1906], [-96.1752,41.1906], [-96.1754,41.1906], [-96.1754,41.1906], [-96.1755,41.1906], [-96.1758,41.1906], [-96.1765,41.1906], [-96.1775,41.1906], [-96.1775,41.1906], [-96.1780,41.1906], [-96.1786,41.1906], [-96.1798,41.1906], [-96.1799,41.1906], [-96.1831,41.1906], [-96.1839,41.1906], [-96.1840,41.1906], [-96.1845,41.1906], [-96.1845,41.1906], [-96.1852,41.1906], [-96.1854,41.1906], [-96.1866,41.1906], [-96.1873,41.1906], [-96.1875,41.1906], [-96.1883,41.1906], [-96.1886,41.1906], [-96.1893,41.1906], [-96.1909,41.1906], [-96.1914,41.1906], [-96.1914,41.1906], [-96.1915,41.1906], [-96.1931,41.1906], [-96.1935,41.1906], [-96.1945,41.1906], [-96.1945,41.1906], [-96.1957,41.1906], [-96.1966,41.1906], [-96.1966,41.1906], [-96.1966,41.1906], [-96.1967,41.1906], [-96.1967,41.1906], [-96.1967,41.1906], [-96.1967,41.1906], [-96.1967,41.1906], [-96.1967,41.1906], [-96.1967,41.1906], [-96.1967,41.1906], [-96.1967,41.1906], [-96.2001,41.1906], [-96.2010,41.1906], [-96.2010,41.1906], [-96.2041,41.1905], [-96.2042,41.1905], [-96.2043,41.1905], [-96.2061,41.1905], [-96.2061,41.1905], [-96.2074,41.1905], [-96.2098,41.1905], [-96.2098,41.1905], [-96.2099,41.1905], [-96.2111,41.1905], [-96.2116,41.1905], [-96.2117,41.1905], [-96.2129,41.1905], [-96.2157,41.1905], [-96.2157,41.1905], [-96.2162,41.1904], [-96.2162,41.1904], [-96.2162,41.1904], [-96.2162,41.1904], [-96.2162,41.1904], [-96.2162,41.1904], [-96.2162,41.1904], [-96.2164,41.1904], [-96.2165,41.1904], [-96.2188,41.1904], [-96.2203,41.1904], [-96.2226,41.1904], [-96.2226,41.1904], [-96.2232,41.1904], [-96.2251,41.1904], [-96.2252,41.1904], [-96.2252,41.1904], [-96.2252,41.1904], [-96.2252,41.1904], [-96.2252,41.1904], [-96.2252,41.1904], [-96.2252,41.1904], [-96.2271,41.1904], [-96.2284,41.1903], [-96.2284,41.1903], [-96.2311,41.1903], [-96.2342,41.1903], [-96.2342,41.1903], [-96.2348,41.1903], [-96.2359,41.1903], [-96.2365,41.1903], [-96.2365,41.1903], [-96.2379,41.1903], [-96.2407,41.1903], [-96.2424,41.1903], [-96.2427,41.1903], [-96.2429,41.1903], [-96.2431,41.1903], [-96.2534,41.1903], [-96.2534,41.1903], [-96.2575,41.1903], [-96.2583,41.1903], [-96.2586,41.1903], [-96.2595,41.1903], [-96.2616,41.1903], [-96.2630,41.1903], [-96.2631,41.1903], [-96.2654,41.1903], [-96.2679,41.1903], [-96.2679,41.1903], [-96.2714,41.1903], [-96.2731,41.1903], [-96.2741,41.1903], [-96.2741,41.1903], [-96.2757,41.1903], [-96.2769,41.1903], [-96.2778,41.1903], [-96.2796,41.1903], [-96.2803,41.1903], [-96.2807,41.1903], [-96.2833,41.1903], [-96.2835,41.1903], [-96.2844,41.1903], [-96.2844,41.1903], [-96.2846,41.1903], [-96.2851,41.1903], [-96.2855,41.1903], [-96.2855,41.1903], [-96.2855,41.1903], [-96.2855,41.1903], [-96.2855,41.1903], [-96.2855,41.1903], [-96.2855,41.1903], [-96.2868,41.1903], [-96.2868,41.1903], [-96.2868,41.1903], [-96.2871,41.1903], [-96.2871,41.1903], [-96.2884,41.1903], [-96.2884,41.1903], [-96.2970,41.1902], [-96.2970,41.1902], [-96.3011,41.1901], [-96.3045,41.1900], [-96.3086,41.1900], [-96.3088,41.1900], [-96.3095,41.1901], [-96.3095,41.1901], [-96.3102,41.1901], [-96.3104,41.1901], [-96.3112,41.1901], [-96.3112,41.1901], [-96.3114,41.1901], [-96.3117,41.1901], [-96.3126,41.1901], [-96.3126,41.1901], [-96.3150,41.1901], [-96.3152,41.1901], [-96.3152,41.1902], [-96.3152,41.1902], [-96.3153,41.1902], [-96.3153,41.1902], [-96.3175,41.1901], [-96.3198,41.1900], [-96.3198,41.1900], [-96.3199,41.1900], [-96.3200,41.1900], [-96.3200,41.1900], [-96.3200,41.1900], [-96.3200,41.1900], [-96.3200,41.1900], [-96.3200,41.1900], [-96.3200,41.1900], [-96.3200,41.1900], [-96.3200,41.1900], [-96.3200,41.1900], [-96.3200,41.1900], [-96.3200,41.1900], [-96.3202,41.1900], [-96.3204,41.1900], [-96.3204,41.1900], [-96.3207,41.1900], [-96.3208,41.1900], [-96.3208,41.1900], [-96.3210,41.1900], [-96.3212,41.1900], [-96.3221,41.1900], [-96.3221,41.1900], [-96.3222,41.1900], [-96.3222,41.1900], [-96.3222,41.1900], [-96.3222,41.1900], [-96.3222,41.1900], [-96.3222,41.1900], [-96.3222,41.1900], [-96.3222,41.1900], [-96.3222,41.1900], [-96.3226,41.1900], [-96.3226,41.1900], [-96.3233,41.1900], [-96.3233,41.1900], [-96.3237,41.1900], [-96.3244,41.1900], [-96.3245,41.1900], [-96.3245,41.1900], [-96.3246,41.1900], [-96.3257,41.1900], [-96.32709, 41.19], [-96.327097, 41.19], [-96.327244, 41.19], [-96.3273,41.1899], [-96.3282,41.1908], [-96.3291,41.1918], [-96.3298,41.1927], [-96.3310,41.1938], [-96.3316,41.1946], [-96.3318,41.1948], [-96.3318,41.1948], [-96.3325,41.1955], [-96.3329,41.1958], [-96.3330,41.1958], [-96.3334,41.1961], [-96.3346,41.1967], [-96.3355,41.1974], [-96.3365,41.1979], [-96.3377,41.1984], [-96.3388,41.1988], [-96.3395,41.1990], [-96.3401,41.1993], [-96.3413,41.1997], [-96.3425,41.2002], [-96.3437,41.2008], [-96.3448,41.2013], [-96.3461,41.2018], [-96.3472,41.2023], [-96.3481,41.2028], [-96.3494,41.2036], [-96.3506,41.2041], [-96.3517,41.2049], [-96.3525,41.2056], [-96.3533,41.2064], [-96.3536,41.2067], [-96.3543,41.2074], [-96.3548,41.2082], [-96.3558,41.2102], [-96.3559,41.2105], [-96.3559,41.2105], [-96.3562,41.2112], [-96.3563,41.2112], [-96.3563,41.2112], [-96.3563,41.2112], [-96.3568,41.2121], [-96.3576,41.2133], [-96.3577,41.2134], [-96.3588,41.2150], [-96.3589,41.2153], [-96.3593,41.2158], [-96.3596,41.2165], [-96.3603,41.2175], [-96.3610,41.2186], [-96.3611,41.2188], [-96.3613,41.2192], [-96.3615,41.2195], [-96.3618,41.2206], [-96.3618,41.2210], [-96.3618,41.2216], [-96.3622,41.2223], [-96.3623,41.2226], [-96.3627,41.2245], [-96.3629,41.2253], [-96.3630,41.2265], [-96.3634,41.2274], [-96.3640,41.2294], [-96.3641,41.2300], [-96.3644,41.2304], [-96.3645,41.2309], [-96.3649,41.2320], [-96.3650,41.2320], [-96.3650,41.2321], [-96.3652,41.2333], [-96.3654,41.2338], [-96.3654,41.2338], [-96.3654,41.2338], [-96.3655,41.2341], [-96.3655,41.2342], [-96.3655,41.2349], [-96.3655,41.2353], [-96.3655,41.2353], [-96.3654,41.2354], [-96.3654,41.2355], [-96.3654,41.2355], [-96.3654,41.2355], [-96.3653,41.2357], [-96.3653,41.2358], [-96.3651,41.2362], [-96.3647,41.2366], [-96.3642,41.2373], [-96.3637,41.2381], [-96.3637,41.2385], [-96.3632,41.2395], [-96.3625,41.2408], [-96.3614,41.2423], [-96.3606,41.2431], [-96.3606,41.2432], [-96.3603,41.2434], [-96.3592,41.2451], [-96.3589,41.2459], [-96.3584,41.2469], [-96.3571,41.2489], [-96.3548,41.2515], [-96.3524,41.2543], [-96.3522,41.2545], [-96.3521,41.2546], [-96.3520,41.2547], [-96.3511,41.2558], [-96.3510,41.2560], [-96.3508,41.2562], [-96.3504,41.2571], [-96.3500,41.2582], [-96.3500,41.2592], [-96.3500,41.2605], [-96.3499,41.2610], [-96.3498,41.2613], [-96.3496,41.2621], [-96.3500,41.2630], [-96.3502,41.2634], [-96.3505,41.2651], [-96.3560,41.2735], [-96.3560,41.2735], [-96.3560,41.2735], [-96.3560,41.2735], [-96.3560,41.2735], [-96.3566,41.2745], [-96.3585,41.2774], [-96.3605,41.2804], [-96.3635,41.2842], [-96.3644,41.2852], [-96.3654,41.2865], [-96.3665,41.2877], [-96.3671,41.2885], [-96.3683,41.2896], [-96.3693,41.2906], [-96.3703,41.2915], [-96.3703,41.2915], [-96.3704,41.2915], [-96.3713,41.2924], [-96.3722,41.2932], [-96.3723,41.2932], [-96.3724,41.2934], [-96.3729,41.2937], [-96.3731,41.2939], [-96.3737,41.2945], [-96.3737,41.2945], [-96.3737,41.2945], [-96.3737,41.2945], [-96.3737,41.2945], [-96.3738,41.2945], [-96.3738,41.2945], [-96.3749,41.2954], [-96.3751,41.2956], [-96.3751,41.2956], [-96.3751,41.2957], [-96.3752,41.2958], [-96.3752,41.2958], [-96.3755,41.2966], [-96.3779,41.2982], [-96.3779,41.2983], [-96.3790,41.2988], [-96.3790,41.2988], [-96.3791,41.2989], [-96.3795,41.2990], [-96.3797,41.2991], [-96.3807,41.2997], [-96.3808,41.2998], [-96.3809,41.2999], [-96.3815,41.3002], [-96.3817,41.3003], [-96.3819,41.3005], [-96.3823,41.3006], [-96.3831,41.3008], [-96.3833,41.3008], [-96.3842,41.3012], [-96.3852,41.3015], [-96.3861,41.3015], [-96.3868,41.3017], [-96.3881,41.3019], [-96.3888,41.3022], [-96.3892,41.3025], [-96.3905,41.3031], [-96.3924,41.3044], [-96.3943,41.3057], [-96.3948,41.3061], [-96.3948,41.3061], [-96.3959,41.3069], [-96.3969,41.3077], [-96.3980,41.3085], [-96.3980,41.3085], [-96.3980,41.3085], [-96.3980,41.3085], [-96.3981,41.3086], [-96.3983,41.3088], [-96.3985,41.3090], [-96.3986,41.3090], [-96.4003,41.3094], [-96.4004,41.3094], [-96.4025,41.3107], [-96.4032,41.3111], [-96.4032,41.3111], [-96.4033,41.3111], [-96.4042,41.3116], [-96.4049,41.3122], [-96.4057,41.3130], [-96.4076,41.3146], [-96.4080,41.3152], [-96.4081,41.3154], [-96.4086,41.3160], [-96.4088,41.3165], [-96.4092,41.3173], [-96.4095,41.3183], [-96.4095,41.3183], [-96.4095,41.3183], [-96.4096,41.3189], [-96.4097,41.3197], [-96.4096,41.3201], [-96.4091,41.3206], [-96.4091,41.3206], [-96.4086,41.3212], [-96.4079,41.3217], [-96.4079,41.3222], [-96.4079,41.3224], [-96.4077,41.3229], [-96.4072,41.3249], [-96.4072,41.3250], [-96.4072,41.3251], [-96.4070,41.3262], [-96.4069,41.3274], [-96.4069,41.3277], [-96.4069,41.3278], [-96.4069,41.3278], [-96.4069,41.3278], [-96.4068,41.3285], [-96.4068,41.3286], [-96.4068,41.3287], [-96.4068,41.3287], [-96.4068,41.3287], [-96.4068,41.3287], [-96.4068,41.3287], [-96.4068,41.3287], [-96.4068,41.3291], [-96.4069,41.3299], [-96.4069,41.3317], [-96.4069,41.3339], [-96.4069,41.3343], [-96.4073,41.3361], [-96.4074,41.3366], [-96.4078,41.3378], [-96.4082,41.3391], [-96.4085,41.3400], [-96.4086,41.3403], [-96.4088,41.3411], [-96.4091,41.3418], [-96.4099,41.3437], [-96.4103,41.3445], [-96.4105,41.3448], [-96.4106,41.3451], [-96.4110,41.3461], [-96.4114,41.3470], [-96.4119,41.3478], [-96.4121,41.3483], [-96.4125,41.3491], [-96.4129,41.3500], [-96.4129,41.3501], [-96.4129,41.3503], [-96.4129,41.3503], [-96.4129,41.3503], [-96.4129,41.3503], [-96.4129,41.3504], [-96.4130,41.3505], [-96.4130,41.3505], [-96.4130,41.3506], [-96.4131,41.3513], [-96.4131,41.3517], [-96.4135,41.3528], [-96.4138,41.3536], [-96.4144,41.3549], [-96.4151,41.3561], [-96.4156,41.3565], [-96.4158,41.3567], [-96.4159,41.3569], [-96.4161,41.3571], [-96.4162,41.3574], [-96.4165,41.3578], [-96.4167,41.3581], [-96.4175,41.3592], [-96.4182,41.3601], [-96.4187,41.3607], [-96.4194,41.3618], [-96.4198,41.3623], [-96.4203,41.3630], [-96.4208,41.3635], [-96.4208,41.3635], [-96.4210,41.3637], [-96.4210,41.3637], [-96.4210,41.3637], [-96.4214,41.3641], [-96.4214,41.3641], [-96.4214,41.3641], [-96.4218,41.3644], [-96.4221,41.3647], [-96.4229,41.3653], [-96.4233,41.3655], [-96.4237,41.3657], [-96.4244,41.3661], [-96.4255,41.3665], [-96.4258,41.3665], [-96.4259,41.3665], [-96.4260,41.3665], [-96.4274,41.3668], [-96.4296,41.3673], [-96.4300,41.3674], [-96.4315,41.3679], [-96.4326,41.3683], [-96.4347,41.3689], [-96.4350,41.3690], [-96.4352,41.3690], [-96.4353,41.3690], [-96.4367,41.3693], [-96.4384,41.3698], [-96.4396,41.3701], [-96.4396,41.3701], [-96.4417,41.3711], [-96.4434,41.3721], [-96.4449,41.3728], [-96.4454,41.3731], [-96.4455,41.3731], [-96.4467,41.3737], [-96.4489,41.3745], [-96.4497,41.3749], [-96.4503,41.3751], [-96.4521,41.3762], [-96.4522,41.3763], [-96.4532,41.3768], [-96.4538,41.3772], [-96.4550,41.3779], [-96.4554,41.3781], [-96.4564,41.3786], [-96.4574,41.3790], [-96.4576,41.3791], [-96.4583,41.3794], [-96.4593,41.3801], [-96.4593,41.3801], [-96.4595,41.3803], [-96.4597,41.3807], [-96.4604,41.3815], [-96.4609,41.3821], [-96.4614,41.3827], [-96.4621,41.3832], [-96.4629,41.3838], [-96.4632,41.3842], [-96.4636,41.3845], [-96.4642,41.3852], [-96.4645,41.3855], [-96.4649,41.3862], [-96.4661,41.3878], [-96.4661,41.3878], [-96.4662,41.3879], [-96.4663,41.3881], [-96.4669,41.3887], [-96.4670,41.3887], [-96.4677,41.3895], [-96.4684,41.3904], [-96.4686,41.3906], [-96.4691,41.3911], [-96.4692,41.3911], [-96.4694,41.3914], [-96.4695,41.3915], [-96.4696,41.3917], [-96.4696,41.3917], [-96.4701,41.3923], [-96.4707,41.3932], [-96.4707,41.3932], [-96.4707,41.3932], [-96.4707,41.3932], [-96.4705,41.3932], [-96.4703,41.3932], [-96.4701,41.3932], [-96.4700,41.3932], [-96.4699,41.3932], [-96.4699,41.3932], [-96.4672,41.3932], [-96.4672,41.3932], [-96.4672,41.3932], [-96.4672,41.3932], [-96.4672,41.3932], [-96.4672,41.3932], [-96.4672,41.3932], [-96.4672,41.3932], [-96.4671,41.3932], [-96.4657,41.3932], [-96.4648,41.3933], [-96.4648,41.3933], [-96.4647,41.3933], [-96.4641,41.3933], [-96.4640,41.3933], [-96.4638,41.3933], [-96.4577,41.3933], [-96.4554,41.3932], [-96.4552,41.3933], [-96.4547,41.3933], [-96.4538,41.3933], [-96.4535,41.3935], [-96.4522,41.3934], [-96.4515,41.3934], [-96.4496,41.3934], [-96.4496,41.3933], [-96.4496,41.3933], [-96.4462,41.3932], [-96.4461,41.3932], [-96.4459,41.3932], [-96.4457,41.3932], [-96.4454,41.3933], [-96.4451,41.3933], [-96.4451,41.3933], [-96.4448,41.3933], [-96.4448,41.3933], [-96.4448,41.3933], [-96.4444,41.3933], [-96.4444,41.3933], [-96.4444,41.3933], [-96.4443,41.3932], [-96.4436,41.3932], [-96.4427,41.3932], [-96.4425,41.3932], [-96.4424,41.3932], [-96.4424,41.3932], [-96.4423,41.3932], [-96.4419,41.3932], [-96.4415,41.3932], [-96.4402,41.3931], [-96.4343,41.3932], [-96.4253,41.3931], [-96.4253,41.3931], [-96.4237,41.3931], [-96.4236,41.3931], [-96.4236,41.3931], [-96.4120,41.3931], [-96.4120,41.3931], [-96.4102,41.3931], [-96.4101,41.3931], [-96.4096,41.3931], [-96.4095,41.3931], [-96.4090,41.3931], [-96.4085,41.3931], [-96.4062,41.3931], [-96.4061,41.3931], [-96.3976,41.3931], [-96.3953,41.3931], [-96.3953,41.3931], [-96.3935,41.3931], [-96.3931,41.3931], [-96.3931,41.3931], [-96.3879,41.3931], [-96.3874,41.3931], [-96.3871,41.3931], [-96.3870,41.3931], [-96.3867,41.3931], [-96.3867,41.3931], [-96.3827,41.3931], [-96.3752,41.3931], [-96.3752,41.3931], [-96.3684,41.3931], [-96.3679,41.3931], [-96.3678,41.3931], [-96.3674,41.3931], [-96.3674,41.3931], [-96.3673,41.3931], [-96.3654,41.3931], [-96.3602,41.3931], [-96.3583,41.3931], [-96.3582,41.3931], [-96.3573,41.3931], [-96.3573,41.3931], [-96.3551,41.3931], [-96.3543,41.3931], [-96.3540,41.3931], [-96.3538,41.3931], [-96.3534,41.3931], [-96.3532,41.3931], [-96.3482,41.3931], [-96.3482,41.3931], [-96.3334,41.3931], [-96.3334,41.3931], [-96.3332,41.3931], [-96.3324,41.3931], [-96.3324,41.3931], [-96.3323,41.3931], [-96.3322,41.3931], [-96.3322,41.3931], [-96.3322,41.3931], [-96.3322,41.3931], [-96.3322,41.3931], [-96.3322,41.3931], [-96.3322,41.3931], [-96.3307,41.3931], [-96.3306,41.3931], [-96.3304,41.3931], [-96.3304,41.3931], [-96.3304,41.3931], [-96.3304,41.3931], [-96.3304,41.3931], [-96.3304,41.3931], [-96.3304,41.3931], [-96.3290,41.3931], [-96.3290,41.3931], [-96.3290,41.3931], [-96.3267,41.3931], [-96.3263,41.3931], [-96.3263,41.3931], [-96.3238,41.3931], [-96.3211,41.3931], [-96.3211,41.3931], [-96.3203,41.3931], [-96.3201,41.3931], [-96.3200,41.3931], [-96.3193,41.3931], [-96.3192,41.3931], [-96.3186,41.3931], [-96.3184,41.3932], [-96.3184,41.3932], [-96.3183,41.3932], [-96.3114,41.3932], [-96.3109,41.3932], [-96.3107,41.3932], [-96.3106,41.3931], [-96.3104,41.3931], [-96.3102,41.3931], [-96.3099,41.3931], [-96.3097,41.3931], [-96.3096,41.3931], [-96.3064,41.3931], [-96.3052,41.3931], [-96.3013,41.3931], [-96.3013,41.3931], [-96.2970,41.3931], [-96.2969,41.3931], [-96.2969,41.3931], [-96.2969,41.3931], [-96.2968,41.3931], [-96.2912,41.3931], [-96.2911,41.3931], [-96.2910,41.3931], [-96.2910,41.3931], [-96.2910,41.3931], [-96.2842,41.3931], [-96.2823,41.3930], [-96.2821,41.3930], [-96.2815,41.3930], [-96.2805,41.3930], [-96.2792,41.3930], [-96.2791,41.3930], [-96.2791,41.3930], [-96.2790,41.3930], [-96.2784,41.3930], [-96.2780,41.3930], [-96.2778,41.3930], [-96.2777,41.3931], [-96.2776,41.3931], [-96.2767,41.3931], [-96.2761,41.3931], [-96.2761,41.3931], [-96.2752,41.3931], [-96.2750,41.3931], [-96.2735,41.3931], [-96.2732,41.3931], [-96.2732,41.3931], [-96.2719,41.3931], [-96.2710,41.3931], [-96.2695,41.3931], [-96.2691,41.3931], [-96.2686,41.3931], [-96.2678,41.3931], [-96.2678,41.3931], [-96.2672,41.3931], [-96.2668,41.3931], [-96.2660,41.3931], [-96.2613,41.3931], [-96.2613,41.3931], [-96.2571,41.3931], [-96.2550,41.3931], [-96.2538,41.3931], [-96.2535,41.3931], [-96.2533,41.3931], [-96.2532,41.3931], [-96.2521,41.3931], [-96.2519,41.3931], [-96.2508,41.3931], [-96.2502,41.3931], [-96.2502,41.3931], [-96.25, 41.393097], [-96.2479,41.3931], [-96.2466,41.3931], [-96.2459,41.3931], [-96.2447,41.3931], [-96.2438,41.3931], [-96.2438,41.3931], [-96.2432,41.3931], [-96.2420,41.3931], [-96.2420,41.3931], [-96.2416,41.3931], [-96.2407,41.3931], [-96.2406,41.3931], [-96.2398,41.3931], [-96.2397,41.3931], [-96.2393,41.3931], [-96.2393,41.3931], [-96.2391,41.3931], [-96.2385,41.3931], [-96.2383,41.3931], [-96.2369,41.3931], [-96.2365,41.3931], [-96.2327,41.3931], [-96.2309,41.3931], [-96.2270,41.3931], [-96.2269,41.3931], [-96.2267,41.3931], [-96.2263,41.3931], [-96.2262,41.3931], [-96.2256,41.3931], [-96.2254,41.3931], [-96.2231,41.3931], [-96.2209,41.3931], [-96.2207,41.3931], [-96.2200,41.3931], [-96.2182,41.3931], [-96.2178,41.3931], [-96.2165,41.3930], [-96.2162,41.3930], [-96.2161,41.3930], [-96.2158,41.3930], [-96.2153,41.3930], [-96.2151,41.3930], [-96.2150,41.3930], [-96.2150,41.3930], [-96.2149,41.3930], [-96.2147,41.3930], [-96.2145,41.3930], [-96.2145,41.3930], [-96.2145,41.3930], [-96.2137,41.3930], [-96.2127,41.3930], [-96.2126,41.3931], [-96.2123,41.3931], [-96.2117,41.3931], [-96.2106,41.3931], [-96.2079,41.3931], [-96.2042,41.3931], [-96.2039,41.3931], [-96.2023,41.3931], [-96.2020,41.3931], [-96.2003,41.3931], [-96.1986,41.3931], [-96.1972,41.3931], [-96.1971,41.3931], [-96.1970,41.3931], [-96.1970,41.3931], [-96.1969,41.3931], [-96.1969,41.3931], [-96.1966,41.3931], [-96.1948,41.3931], [-96.1940,41.3931], [-96.1937,41.3931], [-96.1936,41.3931], [-96.1934,41.3931], [-96.1933,41.3931], [-96.1927,41.3931], [-96.1921,41.3931], [-96.1905,41.3931], [-96.1903,41.3931], [-96.1903,41.3931], [-96.1901,41.3931], [-96.1899,41.3931], [-96.1898,41.3931], [-96.1889,41.3931], [-96.1889,41.3931], [-96.1880,41.3931], [-96.1875,41.3931], [-96.1855,41.3931], [-96.1849,41.3931], [-96.1843,41.3931], [-96.1837,41.3931], [-96.1816,41.3931], [-96.1800,41.3931], [-96.1797,41.3931], [-96.1778,41.3931], [-96.1777,41.3931], [-96.1777,41.3931], [-96.1761,41.3931], [-96.1759,41.3931], [-96.1756,41.3931], [-96.1754,41.3931], [-96.1749,41.3931], [-96.1741,41.3931], [-96.1727,41.3931], [-96.1715,41.3931], [-96.1712,41.3931], [-96.1704,41.3931], [-96.1697,41.3931], [-96.1697,41.3931], [-96.1695,41.3931], [-96.1681,41.3931], [-96.1665,41.3931], [-96.1661,41.3931], [-96.1648,41.3931], [-96.1627,41.3931], [-96.1621,41.3931], [-96.1587,41.3931], [-96.1584,41.3931], [-96.1584,41.3931], [-96.1561,41.3931], [-96.1558,41.3931], [-96.1543,41.3931], [-96.1541,41.3931], [-96.1541,41.3931], [-96.1533,41.3931], [-96.1516,41.3931], [-96.1509,41.3931], [-96.1476,41.3931], [-96.1447,41.3931], [-96.1442,41.3931], [-96.1430,41.3931], [-96.1428,41.3931], [-96.1426,41.3931], [-96.1402,41.3931], [-96.1394,41.3931], [-96.1389,41.3931], [-96.1389,41.3931], [-96.1388,41.3931], [-96.1387,41.3931], [-96.1379,41.3931], [-96.1378,41.3931], [-96.1377,41.3931], [-96.1368,41.3931], [-96.1365,41.3931], [-96.1330,41.3931], [-96.1323,41.3931], [-96.1315,41.3931], [-96.1298,41.3931], [-96.1295,41.3931], [-96.1295,41.3931], [-96.1290,41.3931], [-96.1284,41.3931], [-96.1284,41.3931], [-96.1284,41.3931], [-96.1270,41.3931], [-96.1270,41.3931], [-96.1264,41.3931], [-96.1248,41.3931], [-96.1248,41.3931], [-96.1236,41.3931], [-96.1213,41.3931], [-96.1204,41.3931], [-96.1199,41.3931], [-96.1199,41.3931], [-96.1192,41.3931], [-96.1188,41.3931], [-96.1184,41.3931], [-96.1177,41.3931], [-96.1174,41.3931], [-96.1136,41.3931], [-96.1124,41.3931], [-96.1116,41.3931], [-96.1105,41.3931], [-96.1093,41.3931], [-96.1079,41.3931], [-96.1069,41.3931], [-96.1054,41.3931], [-96.1053,41.3931], [-96.1053,41.3931], [-96.1011,41.3931], [-96.1010,41.3931], [-96.1006,41.3931], [-96.0983,41.3931], [-96.0983,41.3931], [-96.0978,41.3931], [-96.0968,41.3931], [-96.0951,41.3931], [-96.0911,41.3931], [-96.0892,41.3931], [-96.0888,41.3931], [-96.0886,41.3931], [-96.0885,41.3931], [-96.0882,41.3931], [-96.0852,41.3931], [-96.0836,41.3931], [-96.0815,41.3931], [-96.0815,41.3931], [-96.0791,41.3931], [-96.0790,41.3931], [-96.0780,41.3931], [-96.0779,41.3931], [-96.0776,41.3931], [-96.0754,41.3931], [-96.0739,41.3931], [-96.0725,41.3931], [-96.0707,41.3931], [-96.0694,41.3931], [-96.0651,41.3931], [-96.0637,41.3931], [-96.0635,41.3931], [-96.0635,41.3931], [-96.0623,41.3931], [-96.0623,41.3931], [-96.0619,41.3931], [-96.0609,41.3931], [-96.0600,41.3931], [-96.0597,41.3931], [-96.0591,41.3931], [-96.0580,41.3931], [-96.0573,41.3931], [-96.0571,41.3931], [-96.0568,41.3931], [-96.0553,41.3931], [-96.0552,41.3931], [-96.0552,41.3931], [-96.0550,41.3931], [-96.0544,41.3931], [-96.0537,41.3931], [-96.0528,41.3931], [-96.0525,41.3931], [-96.0520,41.3931], [-96.0502,41.3931], [-96.0502,41.3931], [-96.0499,41.3931], [-96.0484,41.3931], [-96.0472,41.3931], [-96.0468,41.3931], [-96.0468,41.3931], [-96.0462,41.3931], [-96.0435,41.3931], [-96.0431,41.3931], [-96.0430,41.3931], [-96.0412,41.3931], [-96.0398,41.3931], [-96.0377,41.3931], [-96.0367,41.3931], [-96.0367,41.3931], [-96.0356,41.3931], [-96.0335,41.3931], [-96.0321,41.3931], [-96.0309,41.3931], [-96.0299,41.3931], [-96.0298,41.3931], [-96.0291,41.3931], [-96.0277,41.3931], [-96.0277,41.3931], [-96.0264,41.3931], [-96.0251,41.3931], [-96.0248,41.3931], [-96.0238,41.3931], [-96.0233,41.3931], [-96.0230,41.3931], [-96.0230,41.3931], [-96.0227,41.3931], [-96.0222,41.3931], [-96.0220,41.3931], [-96.0213,41.3931], [-96.0211,41.3931], [-96.0204,41.3931], [-96.0197,41.3931], [-96.0191,41.3931], [-96.0177,41.3931], [-96.0165,41.3931], [-96.0165,41.3931], [-96.0159,41.3931], [-96.0157,41.3931], [-96.0146,41.3931], [-96.0142,41.3931], [-96.0141,41.3931], [-96.0139,41.3931], [-96.0112,41.3931], [-96.0090,41.3931], [-96.0086,41.3930], [-96.0084,41.3930], [-96.0084,41.3930], [-96.0080,41.3930], [-96.0078,41.3930], [-96.0077,41.3930], [-96.0077,41.3930], [-96.0076,41.3930], [-96.0067,41.3930], [-96.0064,41.3930], [-96.0047,41.3930], [-96.0020,41.3930], [-96.0018,41.3930], [-96.0002,41.3930], [-95.9970,41.3931], [-95.9968,41.3931], [-95.9966,41.3931], [-95.9964,41.3931], [-95.9960,41.3931], [-95.9941,41.3931], [-95.9940,41.3931], [-95.9930,41.3931], [-95.9929,41.3931], [-95.9893,41.3931], [-95.9831,41.3930], [-95.9757,41.3930], [-95.9744,41.3930], [-95.9661,41.3930], [-95.9660,41.3930], [-95.9659,41.3930], [-95.9550,41.3930], [-95.9450,41.3930], [-95.9440,41.3930], [-95.9440,41.3930], [-95.9393,41.3931], [-95.9386,41.3931], [-95.9383,41.3923], [-95.9382,41.3920], [-95.9382,41.3920], [-95.9382,41.3920], [-95.9382,41.3920], [-95.9382,41.3920], [-95.9382,41.3919], [-95.9381,41.3917], [-95.9380,41.3913], [-95.9379,41.3913], [-95.9379,41.3913], [-95.9378,41.3909], [-95.9377,41.3907], [-95.9374,41.3895], [-95.9372,41.3883], [-95.9369,41.3878], [-95.9367,41.3872], [-95.9366,41.3865], [-95.9364,41.3858], [-95.9360,41.3852], [-95.9354,41.3840], [-95.9352,41.3838], [-95.9348,41.3831], [-95.9338,41.3817], [-95.9331,41.3808], [-95.9324,41.3799], [-95.9322,41.3798], [-95.9305,41.3776], [-95.9303,41.3773], [-95.9302,41.3769], [-95.9297,41.3762], [-95.9297,41.3758], [-95.9294,41.3753], [-95.9294,41.3751], [-95.9292,41.3743], [-95.9291,41.3738], [-95.9290,41.3731], [-95.9289,41.3724], [-95.9287,41.3716], [-95.9288,41.3705], [-95.9287,41.3700], [-95.9296,41.3670], [-95.9302,41.3658], [-95.9302,41.3658], [-95.9307,41.3650], [-95.9309,41.3644], [-95.9310,41.3644], [-95.9313,41.3641], [-95.9314,41.3640], [-95.9317,41.3636], [-95.9321,41.3629], [-95.9331,41.3621], [-95.9333,41.3618], [-95.9336,41.3615], [-95.9350,41.3605], [-95.9354,41.3601], [-95.9362,41.3597], [-95.9365,41.3594], [-95.9369,41.3592], [-95.9382,41.3587], [-95.9390,41.3583], [-95.9397,41.3582], [-95.9400,41.3581], [-95.9405,41.3579], [-95.9408,41.3578], [-95.9413,41.3576], [-95.9430,41.3571], [-95.9433,41.3570], [-95.9451,41.3568], [-95.9456,41.3568], [-95.9469,41.3566], [-95.9482,41.3562], [-95.9485,41.3561], [-95.9493,41.3559], [-95.9498,41.3557], [-95.9504,41.3556], [-95.9509,41.3554], [-95.9523,41.3548], [-95.9534,41.3540], [-95.9539,41.3537], [-95.9541,41.3535], [-95.9542,41.3535], [-95.9548,41.3528], [-95.9556,41.3519], [-95.9562,41.3510], [-95.9566,41.3507], [-95.9571,41.3495], [-95.9572,41.3488], [-95.9573,41.3473], [-95.9571,41.3459], [-95.9570,41.3457], [-95.9570,41.3456], [-95.9570,41.3455], [-95.9569,41.3455], [-95.9566,41.3447], [-95.9560,41.3430], [-95.9557,41.3426], [-95.9552,41.3418], [-95.9534,41.3394], [-95.9526,41.3386], [-95.9516,41.3375], [-95.9512,41.3371], [-95.9501,41.3362], [-95.9482,41.3346], [-95.9476,41.3341], [-95.9476,41.3340], [-95.9465,41.3331], [-95.9448,41.3320], [-95.9440,41.3315], [-95.9436,41.3312], [-95.9436,41.3312], [-95.9429,41.3307], [-95.9417,41.3300], [-95.9417,41.3300], [-95.9406,41.3293], [-95.9401,41.3288], [-95.9396,41.3286], [-95.9395,41.3285], [-95.9393,41.3285], [-95.9390,41.3284], [-95.9378,41.3278], [-95.9363,41.3269], [-95.9357,41.3264], [-95.9349,41.3261], [-95.9344,41.3259], [-95.9328,41.3250], [-95.9321,41.3247], [-95.9321,41.3247], [-95.9317,41.3246], [-95.9310,41.3242], [-95.9293,41.3231], [-95.9277,41.3225], [-95.9274,41.3223], [-95.9272,41.3222], [-95.9258,41.3215], [-95.9251,41.3213], [-95.9227,41.3208], [-95.9213,41.3204], [-95.9186,41.3200], [-95.9181,41.3200], [-95.9177,41.3201], [-95.9164,41.3201], [-95.9155,41.3199], [-95.9150,41.3199], [-95.9146,41.3199], [-95.9141,41.3200], [-95.9127,41.3200], [-95.9123,41.3200], [-95.9123,41.3200], [-95.9114,41.3201], [-95.9105,41.3202], [-95.9097,41.3203], [-95.9088,41.3204], [-95.9079,41.3206], [-95.9077,41.3206], [-95.9076,41.3206], [-95.9076,41.3206], [-95.9051,41.3211], [-95.9041,41.3212], [-95.9025,41.3213], [-95.9017,41.3214], [-95.9008,41.3213], [-95.8999,41.3214], [-95.8987,41.3212], [-95.8972,41.3212], [-95.8968,41.3211], [-95.8960,41.3209], [-95.8952,41.3209], [-95.8948,41.3209], [-95.8944,41.3208], [-95.8938,41.3206], [-95.8934,41.3205], [-95.8920,41.3203], [-95.8915,41.3202], [-95.8909,41.3199], [-95.8899,41.3196], [-95.8892,41.3194], [-95.8889,41.3193], [-95.8886,41.3192], [-95.8884,41.3191], [-95.8884,41.3191], [-95.8884,41.3191], [-95.8882,41.3190], [-95.8882,41.3190], [-95.8881,41.3189], [-95.8878,41.3188], [-95.8878,41.3188], [-95.8873,41.3186], [-95.8872,41.3186], [-95.8869,41.3185], [-95.8863,41.3184], [-95.8855,41.3180], [-95.8845,41.3174], [-95.8837,41.3170], [-95.8833,41.3168], [-95.8829,41.3166], [-95.8822,41.3161], [-95.8818,41.3156], [-95.8806,41.3148], [-95.8802,41.3146], [-95.8798,41.3143], [-95.8791,41.3135], [-95.8786,41.3133], [-95.8782,41.3130], [-95.8773,41.3120], [-95.8767,41.3115], [-95.8764,41.3110], [-95.8757,41.3102], [-95.8755,41.3098], [-95.8751,41.3094], [-95.8745,41.3084], [-95.8743,41.3081], [-95.8741,41.3079], [-95.8740,41.3074], [-95.8736,41.3062], [-95.8734,41.3058], [-95.8730,41.3048], [-95.8727,41.3042], [-95.8724,41.3034], [-95.8722,41.3030], [-95.8718,41.3018], [-95.8718,41.3013], [-95.8716,41.3009], [-95.8716,41.3000], [-95.8713,41.2994], [-95.8713,41.2985], [-95.8712,41.2980], [-95.8713,41.2972], [-95.8711,41.2966], [-95.8711,41.2960], [-95.8713,41.2950], [-95.8713,41.2950], [-95.8713,41.2942], [-95.8714,41.2940], [-95.8714,41.2934], [-95.8715,41.2927], [-95.8718,41.2923], [-95.8721,41.2911], [-95.8725,41.2903], [-95.8726,41.2900], [-95.8726,41.2900], [-95.8726,41.2899], [-95.8728,41.2897], [-95.8728,41.2897], [-95.8728,41.2897], [-95.8728,41.2897], [-95.8728,41.2896], [-95.8728,41.2896], [-95.8728,41.2896], [-95.8728,41.2895], [-95.8728,41.2895], [-95.8729,41.2895], [-95.8729,41.2895], [-95.8732,41.2890], [-95.8733,41.2889], [-95.8733,41.2888], [-95.8736,41.2883], [-95.8737,41.2882], [-95.8740,41.2879], [-95.8741,41.2876], [-95.8743,41.2873], [-95.8747,41.2870], [-95.8753,41.2866], [-95.8755,41.2861], [-95.8760,41.2857], [-95.8768,41.2851], [-95.8771,41.2848], [-95.8771,41.2848], [-95.8774,41.2846], [-95.8774,41.2845], [-95.8784,41.2840], [-95.8788,41.2836], [-95.8796,41.2832], [-95.8804,41.2827], [-95.8805,41.2827], [-95.8806,41.2826], [-95.8814,41.2821], [-95.8833,41.2813], [-95.8844,41.2806], [-95.8876,41.2793], [-95.891, 41.27804], [-95.8910,41.2780], [-95.8910,41.2780], [-95.8910,41.2780], [-95.8911,41.2780], [-95.8911,41.2779], [-95.8911,41.2779], [-95.8911,41.2779], [-95.8911,41.2779], [-95.8912,41.2779], [-95.8912,41.2779], [-95.8912,41.2779], [-95.8912,41.2779], [-95.8914,41.2778], [-95.8918,41.2777], [-95.8918,41.2777], [-95.8918,41.2777], [-95.8918,41.2777], [-95.8918,41.2777], [-95.8918,41.2777], [-95.8923,41.2775], [-95.8924,41.2775], [-95.8924,41.2775], [-95.8924,41.2775], [-95.8924,41.2775], [-95.8924,41.2775], [-95.8924,41.2775], [-95.8924,41.2775], [-95.8924,41.2775], [-95.8924,41.2775], [-95.8925,41.2775], [-95.8931,41.2773], [-95.8954,41.2766], [-95.896, 41.27637], [-95.8960,41.2763], [-95.8960,41.2763], [-95.8960,41.2763], [-95.8960,41.2763], [-95.8960,41.2763], [-95.8961,41.2763], [-95.8961,41.2763], [-95.8968,41.2761], [-95.8976,41.2759], [-95.8980,41.2757], [-95.8984,41.2755], [-95.8998,41.2752], [-95.9015,41.2746], [-95.9019,41.2744], [-95.9022,41.2744], [-95.9024,41.2744], [-95.9025,41.2744], [-95.9025,41.2744], [-95.9026,41.2744], [-95.9026,41.2744], [-95.9026,41.2744], [-95.9026,41.2744], [-95.9027,41.2743], [-95.9027,41.2743], [-95.9028,41.2743], [-95.9028,41.2743], [-95.9029,41.2743], [-95.9038,41.2746], [-95.9047,41.2749], [-95.9049,41.2749], [-95.9049,41.2749], [-95.90504999999999, 41.275], [-95.9051,41.2750], [-95.9057,41.2753], [-95.9059,41.2755], [-95.9059,41.2755], [-95.9059,41.2755], [-95.9064,41.2758], [-95.9065,41.2759], [-95.9065,41.2759], [-95.9066,41.2759], [-95.9066,41.2759], [-95.9066,41.2760], [-95.9067,41.2760], [-95.9067,41.2760], [-95.9068,41.2760], [-95.9068,41.2761], [-95.9069,41.2761], [-95.9071,41.2762], [-95.9079,41.2767], [-95.9081,41.2768], [-95.9086,41.2771], [-95.9098,41.2779], [-95.9125,41.2795], [-95.9125,41.2795], [-95.9109,41.2811], [-95.9107,41.2813], [-95.9105,41.2815], [-95.9095,41.2825], [-95.9090,41.2830], [-95.9082,41.2839], [-95.9080,41.2840], [-95.9077,41.2843], [-95.9077,41.2843], [-95.9077,41.2844], [-95.9076,41.2845], [-95.9074,41.2847], [-95.9071,41.2849], [-95.9071,41.2849], [-95.9071,41.2850], [-95.9071,41.2850], [-95.9071,41.2850], [-95.9071,41.2850], [-95.9071,41.2850], [-95.9069,41.2855], [-95.9069,41.2855], [-95.9069,41.2855], [-95.9069,41.2855], [-95.9068,41.2857], [-95.9067,41.2859], [-95.9066,41.2861], [-95.9066,41.2861], [-95.9066,41.2861], [-95.9061,41.2873], [-95.9061,41.2874], [-95.9059,41.2884], [-95.9059,41.2884], [-95.9059,41.2884], [-95.9059,41.2884], [-95.9059,41.2884], [-95.9059,41.2885], [-95.9059,41.2885], [-95.9059,41.2885], [-95.9059,41.2885], [-95.9054,41.2912], [-95.9053,41.2912], [-95.9053,41.2912], [-95.9051,41.2913], [-95.9052,41.2916], [-95.9047,41.2925], [-95.9047,41.2928], [-95.9047,41.2929], [-95.9053,41.2930], [-95.9054,41.2931], [-95.9051,41.2933], [-95.9048,41.2932], [-95.9045,41.2932], [-95.9045,41.2935], [-95.9045,41.2939], [-95.9045,41.2939], [-95.9045,41.2940], [-95.9045,41.2940], [-95.9045,41.2941], [-95.9044,41.2944], [-95.9044,41.2947], [-95.9044,41.2948], [-95.9044,41.2948], [-95.9044,41.2948], [-95.9044,41.2948], [-95.9044,41.2948], [-95.9044,41.2948], [-95.9044,41.2948], [-95.9044,41.2950], [-95.9044,41.2951], [-95.9044,41.2952], [-95.9044,41.2953], [-95.9043,41.2955], [-95.9043,41.2955], [-95.9043,41.2956], [-95.9043,41.2956], [-95.9043,41.2956], [-95.9042,41.2970], [-95.9042,41.2970], [-95.9042,41.2971], [-95.9042,41.2973], [-95.9042,41.2974], [-95.9042,41.2974], [-95.9042,41.2975], [-95.9042,41.2977], [-95.9043,41.2982], [-95.9043,41.2985], [-95.9043,41.2988], [-95.9044,41.2988], [-95.9044,41.2989], [-95.9045,41.2990], [-95.9046,41.2993], [-95.9046,41.2994], [-95.9048,41.2997], [-95.9058,41.3010], [-95.9059,41.3010], [-95.9059,41.3010], [-95.9059,41.3010], [-95.9059,41.3010], [-95.9059,41.3010], [-95.9059,41.3010], [-95.9059,41.3010], [-95.9060,41.3010], [-95.9071,41.3010], [-95.9072,41.3010], [-95.9073,41.3010], [-95.9073,41.3010], [-95.9074,41.3010], [-95.9075,41.3010], [-95.9080,41.3010], [-95.9081,41.3010], [-95.9081,41.3010], [-95.9081,41.3010], [-95.9082,41.3010], [-95.9083,41.3011], [-95.9085,41.3011], [-95.9089,41.3011], [-95.9093,41.3011], [-95.9093,41.3011], [-95.9094,41.3011], [-95.9094,41.3011], [-95.9094,41.3011], [-95.9094,41.3011], [-95.9094,41.3011], [-95.9094,41.3011], [-95.9094,41.3011], [-95.9094,41.3011], [-95.9094,41.3011], [-95.9094,41.3011], [-95.9095,41.3011], [-95.9095,41.3011], [-95.9095,41.3011], [-95.9095,41.3011], [-95.9095,41.3011], [-95.9095,41.3011], [-95.9095,41.3011], [-95.9097,41.3011], [-95.9099,41.3011], [-95.9107,41.3012], [-95.9107,41.3012], [-95.9108,41.3012], [-95.9112,41.3012], [-95.9112,41.3012], [-95.9112,41.3012], [-95.9113,41.3012], [-95.9114,41.3012], [-95.9117,41.3012], [-95.9120,41.3012], [-95.9135,41.3013], [-95.9137,41.3013], [-95.9202,41.3011], [-95.9223,41.3003], [-95.9246,41.2995], [-95.9263,41.2988], [-95.9276,41.2984], [-95.9279,41.2976], [-95.9279,41.2974], [-95.9279,41.2974], [-95.9279,41.2974], [-95.9279,41.2974], [-95.9279,41.2974], [-95.9280,41.2972], [-95.9281,41.2969], [-95.9282,41.2965], [-95.9282,41.2964], [-95.9282,41.2964], [-95.9282,41.2964], [-95.9283,41.2963], [-95.9283,41.2962], [-95.9288,41.2948], [-95.9289,41.2944], [-95.9289,41.2944], [-95.9289,41.2944], [-95.9289,41.2943], [-95.9289,41.2943], [-95.9289,41.2943], [-95.9289,41.2943], [-95.9289,41.2943], [-95.9290,41.2940], [-95.9292,41.2935], [-95.9296,41.2922], [-95.9296,41.2906], [-95.9296,41.2904], [-95.9296,41.2850], [-95.9286,41.2813], [-95.9277,41.2807], [-95.9275,41.2806], [-95.9275,41.2805], [-95.9275,41.2805], [-95.9274,41.2805], [-95.9274,41.2805], [-95.9274,41.2805], [-95.9274,41.2805], [-95.9274,41.2805], [-95.9273,41.2804], [-95.9271,41.2803], [-95.9270,41.2803], [-95.9270,41.2803], [-95.9260,41.2796], [-95.9259,41.2795], [-95.9258,41.2795], [-95.9248,41.2787], [-95.9248,41.2787], [-95.9188,41.2747], [-95.9185,41.2745], [-95.9181,41.2743], [-95.9180,41.2742], [-95.9179,41.2741], [-95.9178,41.2740], [-95.9167,41.2733], [-95.9160,41.2728], [-95.9159,41.2727], [-95.9158,41.2727], [-95.9157,41.2726], [-95.9149,41.2725], [-95.9140,41.2724], [-95.9146,41.2721], [-95.9148,41.2720], [-95.9150,41.2720], [-95.9151,41.2720], [-95.9151,41.2720], [-95.9153,41.2719], [-95.9157,41.2718], [-95.9163,41.2714], [-95.9166,41.2712], [-95.9174,41.2709], [-95.9176,41.2707], [-95.9177,41.2707], [-95.9179,41.2705], [-95.9187,41.2698], [-95.9197,41.2693], [-95.9198,41.2692], [-95.9200,41.2691], [-95.9201,41.2690], [-95.9205,41.2685], [-95.9214,41.2676], [-95.9216,41.2672], [-95.9217,41.2668], [-95.9223,41.2654], [-95.9224,41.2646], [-95.9223,41.2638], [-95.9223,41.2630], [-95.9220,41.2620], [-95.9221,41.2617], [-95.9221,41.2613], [-95.9217,41.2603], [-95.9216,41.2598], [-95.9216,41.2597], [-95.9216,41.2596], [-95.9216,41.2596], [-95.9216,41.2595], [-95.9216,41.2594], [-95.9216,41.2594], [-95.9216,41.2594], [-95.9216,41.2594], [-95.9216,41.2594], [-95.9216,41.2594], [-95.9216,41.2592], [-95.9214,41.2584], [-95.9214,41.2584], [-95.9214,41.2584], [-95.9214,41.2584], [-95.9213,41.2581], [-95.9213,41.2581], [-95.9213,41.2581], [-95.9207,41.2567], [-95.9204,41.2557], [-95.9202,41.2553], [-95.9202,41.2552], [-95.9196,41.2541], [-95.9195,41.2539], [-95.9195,41.2539], [-95.9195,41.2538], [-95.9195,41.2538], [-95.9195,41.2537], [-95.9190,41.2526], [-95.9185,41.2519], [-95.9185,41.2518], [-95.9185,41.2518], [-95.9185,41.2518], [-95.9183,41.2515], [-95.9176,41.2501], [-95.9174,41.2498], [-95.9174,41.2498], [-95.9174,41.2498], [-95.9174,41.2498], [-95.9174,41.2498], [-95.9174,41.2497], [-95.9174,41.2497], [-95.9174,41.2497], [-95.9174,41.2497], [-95.9174,41.2497], [-95.9173,41.2496], [-95.9168,41.2488], [-95.9167,41.2483], [-95.9165,41.2482], [-95.9164,41.2480], [-95.9164,41.2480], [-95.9162,41.2477], [-95.9160,41.2472], [-95.9157,41.2469], [-95.9154,41.2466], [-95.9154,41.2466], [-95.9153,41.2466], [-95.9151,41.2460], [-95.9144,41.2453], [-95.9141,41.2450], [-95.9139,41.2444], [-95.9135,41.2439], [-95.9133,41.2437], [-95.9133,41.2437], [-95.9133,41.2437], [-95.9133,41.2437], [-95.9133,41.2436], [-95.9132,41.2436], [-95.9132,41.2436], [-95.9131,41.2435], [-95.9131,41.2432], [-95.9130,41.2430], [-95.9129,41.2429], [-95.9124,41.2422], [-95.9122,41.2415], [-95.9118,41.2410], [-95.9116,41.2399], [-95.9112,41.2394], [-95.9111,41.2384], [-95.9109,41.2380], [-95.9109,41.2377], [-95.9107,41.2362], [-95.9107,41.2350], [-95.9106,41.2345], [-95.9107,41.2342], [-95.9107,41.2340], [-95.9107,41.2339], [-95.9107,41.2336], [-95.9106,41.2332], [-95.9107,41.2326], [-95.9106,41.2321], [-95.9108,41.2316], [-95.9109,41.2315], [-95.9109,41.2315], [-95.9110,41.2308], [-95.9110,41.2304], [-95.9113,41.2297], [-95.9114,41.2289], [-95.9117,41.2284], [-95.9118,41.2283], [-95.9123,41.2273], [-95.9126,41.2267], [-95.9127,41.2265], [-95.9127,41.2262], [-95.9129,41.2258], [-95.9136,41.2249], [-95.9138,41.2245], [-95.9142,41.2238], [-95.9155,41.2225], [-95.9155,41.2225], [-95.9158,41.2221], [-95.9170,41.2210], [-95.9173,41.2206], [-95.9184,41.2196], [-95.9185,41.2196], [-95.9190,41.2192], [-95.9190,41.2192], [-95.9192,41.2190], [-95.9193,41.2189], [-95.9200,41.2184], [-95.9205,41.2180], [-95.9209,41.2176], [-95.9218,41.2169], [-95.9221,41.2166], [-95.9222,41.2165], [-95.9222,41.2164], [-95.9222,41.2164], [-95.9222,41.2164], [-95.9222,41.2164], [-95.9222,41.2164], [-95.9222,41.2164], [-95.9222,41.2164], [-95.9223,41.2163], [-95.9224,41.2162], [-95.9224,41.2162], [-95.9227,41.2160], [-95.9230,41.2158], [-95.9234,41.2153], [-95.9236,41.2148], [-95.9241,41.2141], [-95.9241,41.2141], [-95.9244,41.2137], [-95.9245,41.2136], [-95.9245,41.2136], [-95.9245,41.2136], [-95.9246,41.2136], [-95.9246,41.2135], [-95.9250,41.2132], [-95.9254,41.2126], [-95.9256,41.2122], [-95.9256,41.2121], [-95.9259,41.2119], [-95.9261,41.2116], [-95.9262,41.2110], [-95.9262,41.2110], [-95.9263,41.2108], [-95.9265,41.2106], [-95.9267,41.2103], [-95.9267,41.2102], [-95.9268,41.2099], [-95.9268,41.2096], [-95.9268,41.2095], [-95.9269,41.2094], [-95.9271,41.2089], [-95.9272,41.2085], [-95.9274,41.2070], [-95.9274,41.2069], [-95.9274,41.2069], [-95.9274,41.2069], [-95.9275,41.2063], [-95.9275,41.2063], [-95.9278,41.2058], [-95.9279,41.2053], [-95.9280,41.2048], [-95.9279,41.2032], [-95.9280,41.2028], [-95.9280,41.2025], [-95.9280,41.2022], [-95.9279,41.2020], [-95.9279,41.2017], [-95.9277,41.2011], [-95.9277,41.2010], [-95.9277,41.2008], [-95.9277,41.2008], [-95.9279,41.2004], [-95.9279,41.2000], [-95.9279,41.1997], [-95.9277,41.1994], [-95.9276,41.1990], [-95.9272,41.1978], [-95.9272,41.1974], [-95.9272,41.1970], [-95.9267,41.1961], [-95.9266,41.1956], [-95.9263,41.1952], [-95.9260,41.1946], [-95.9259,41.1941], [-95.9253,41.1933], [-95.9252,41.1930], [-95.9250,41.1927], [-95.9244,41.1920], [-95.9241,41.1914], [-95.9235,41.1908], [-95.9233,41.1905], [-95.9232,41.1902], [-95.9225,41.1896], [-95.9223,41.1893], [-95.9221,41.1890], [-95.9214,41.1885], [-95.9207,41.1880], [-95.9201,41.1876], [-95.9199,41.1872], [-95.9195,41.1869], [-95.9189,41.1865], [-95.9172,41.1859], [-95.9166,41.1855], [-95.9161,41.1852], [-95.9154,41.1851], [-95.9146,41.1851], [-95.9142,41.1850], [-95.9136,41.1848], [-95.9131,41.1846], [-95.9125,41.1846], [-95.9119,41.1846], [-95.9113,41.1846], [-95.9107,41.1844], [-95.9102,41.1844], [-95.9086,41.1844], [-95.9075,41.1843], [-95.9055,41.1845], [-95.9047,41.1844], [-95.9041,41.1845], [-95.9018,41.1846], [-95.9013,41.1847], [-95.9008,41.1846], [-95.9005,41.1846], [-95.8998,41.1846], [-95.8989,41.1847], [-95.8981,41.1847], [-95.8941,41.1853], [-95.8911,41.1857], [-95.8896,41.1859], [-95.8889,41.1861], [-95.8878,41.1862], [-95.8867,41.1864], [-95.8861,41.1865], [-95.8855,41.1867], [-95.8806,41.1876], [-95.8800,41.1876], [-95.8795,41.1877], [-95.8786,41.1878], [-95.8781,41.1879], [-95.8771,41.1879], [-95.8765,41.1880], [-95.8757,41.1880], [-95.8745,41.1880], [-95.8738,41.1881], [-95.8736,41.1882], [-95.8720,41.1882], [-95.8712,41.1883], [-95.8701,41.1882], [-95.8695,41.1883], [-95.8683,41.1883], [-95.8676,41.1884], [-95.8663,41.1882], [-95.8657,41.1882], [-95.8645,41.1882], [-95.8637,41.1882], [-95.8625,41.1879], [-95.8620,41.1880], [-95.8616,41.1879], [-95.8609,41.1878], [-95.8604,41.1876], [-95.8592,41.1875], [-95.8587,41.1873], [-95.8580,41.1873], [-95.8568,41.1869], [-95.8561,41.1869], [-95.8552,41.1866], [-95.8548,41.1865], [-95.8541,41.1864], [-95.8530,41.1859], [-95.8523,41.1858], [-95.8512,41.1853], [-95.8511,41.1853], [-95.8507,41.1852], [-95.8503,41.1850], [-95.8498,41.1847], [-95.8493,41.1845], [-95.8487,41.1842], [-95.8472,41.1833], [-95.8462,41.1825], [-95.8454,41.1819], [-95.8451,41.1816], [-95.8448,41.1811], [-95.8445,41.1807], [-95.8441,41.1804], [-95.8436,41.1800], [-95.8433,41.1796], [-95.8427,41.1781], [-95.8424,41.1777], [-95.8421,41.1774], [-95.8420,41.1767]]]}, "type": "Feature", "id": "SG_0CZMRlG8UxKI2ZeGwkI0ta", "properties": {"handle": "SG_0CZMRlG8UxKI2ZeGwkI0ta_41.265946_-96.119994", "name": "Congressional District 2", "license": "http://creativecommons.org/publicdomain/mark/1.0/", "private": false, "href": "http://api.simplegeo.com/1.0/features/SG_0CZMRlG8UxKI2ZeGwkI0ta_41.265946_-96.119994.json", "abbr": null, "classifiers": [{"category": "Legislative District", "type": "Region", "subcategory": "National"}]}}
View
1 examples/breakout/breakout.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../../polymaps.js"></script>
View
1 examples/canvas/cell.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../../polymaps.js"></script>
View
1 examples/canvas/mandelbrot.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../../polymaps.js"></script>
View
1 examples/cloudmade/midnight-commander.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../../polymaps.js"></script>
View
1 examples/cloudmade/pale-dawn.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../../polymaps.js"></script>
View
1 examples/cluster/cluster.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../../polymaps.js"></script>
View
1 examples/features/features.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../../polymaps.js"></script>
View
1 examples/grid/grid.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../../polymaps.js"></script>
View
1 examples/grid/tiles.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../../polymaps.js"></script>
View
1 examples/hilbert/hilbert.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../../polymaps.js"></script>
View
1 examples/invert/invert.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../../polymaps.js"></script>
View
21 examples/iphone4/iphone4.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <meta name="viewport" content="initial-scale=1,maximum-scale=1"/>
+ <script type="text/javascript" src="../../polymaps.js"></script>
+ <style type="text/css">
+
+@import url("../example.css");
+
+ </style>
+ </head>
+ <body id="map">
+ <script type="text/javascript" src="iphone4.js"></script>
+ <span id="copy">
+ &copy; 2011
+ <a href="http://www.cloudmade.com/">CloudMade</a>,
+ <a href="http://www.openstreetmap.org/">OpenStreetMap</a> contributors,
+ <a href="http://creativecommons.org/licenses/by-sa/2.0/">CCBYSA</a>.
+ </span>
+ </body>
+</html>
View
19 examples/iphone4/iphone4.js
@@ -0,0 +1,19 @@
+var po = org.polymaps;
+
+// Note: po.interact has built-in touch support!
+var map = po.map()
+ .container(document.getElementById("map").appendChild(po.svg("svg")))
+ .add(po.interact());
+
+// Compute zoom offset for retina display.
+var dz = Math.log(window.devicePixelRatio || 1) / Math.LN2;
+
+// CloudMade image tiles, hooray!
+map.add(po.image()
+ .url(po.url("http://{S}tile.cloudmade.com"
+ + "/1a1b06b230af4efdbb989ea99e9841af" // http://cloudmade.com/register
+ + "/998/256/{Z}/{X}/{Y}.png")
+ .hosts(["a.", "b.", "c.", ""]))
+ .zoom(function(z) { return z + dz; }));
+
+// no compass! pinch-to-zoom ftw
View
1 examples/kml/kml.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<title>KML</title>
View
1 examples/loupe/loupe.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../../polymaps.js"></script>
View
1 examples/marker/marker.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../../polymaps.js"></script>
View
1 examples/nasa/blue-marble.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../../polymaps.js"></script>
View
1 examples/overlay/overlay.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../../polymaps.js"></script>
View
1 examples/population/population.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<title>Population Density</title>
View
1 examples/shadow/shadow.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../../polymaps.js"></script>
View
1 examples/small/small.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../../polymaps.js"></script>
View
1 examples/small/static.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../../polymaps.js"></script>
View
1 examples/statehood/statehood.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<title>U.S. Statehood by Date</title>
View
1 examples/streets/streets.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<title>San Francisco Street Pavement</title>
View
1 examples/tilestache/flickr.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../../polymaps.js"></script>
View
1 examples/transform/transform-inverse.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../../polymaps.js"></script>
View
1 examples/transform/transform.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../../polymaps.js"></script>
View
1 examples/transition/transition.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../../polymaps.js"></script>
View
1 examples/unemployment/unemployment.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<title>Unemployment</title>
View
1 examples/world/world.html
@@ -1,3 +1,4 @@
+<!DOCTYPE html>
<html>
<head>
<title>Internet Users</title>
View
198 polymaps.js
@@ -2,7 +2,7 @@ if (!org) var org = {};
if (!org.polymaps) org.polymaps = {};
(function(po){
- po.version = "2.4.0"; // semver.org
+ po.version = "2.5.0"; // semver.org
var zero = {x: 0, y: 0};
po.ns = {
@@ -40,7 +40,7 @@ po.transform = function(a, b, c, d, e, f) {
transform.zoomFraction = function(x) {
if (!arguments.length) return zoomFraction;
zoomFraction = x;
- zoomDelta = Math.floor(zoomFraction + Math.log(Math.sqrt(a * a + b * b + c * c + d * d)) / Math.log(2));
+ zoomDelta = Math.floor(zoomFraction + Math.log(Math.sqrt(a * a + b * b + c * c + d * d)) / Math.LN2);
k = Math.pow(2, -zoomDelta);
return transform;
};
@@ -182,12 +182,18 @@ po.cache = function(load, unload) {
return cache;
};
po.url = function(template) {
- var hosts = [];
+ var hosts = [],
+ repeat = true;
function format(c) {
var max = c.zoom < 0 ? 1 : 1 << c.zoom,
- column = c.column % max;
- if (column < 0) column += max;
+ column = c.column;
+ if (repeat) {
+ column = c.column % max;
+ if (column < 0) column += max;
+ } else if ((column < 0) || (column >= max)) {
+ return null;
+ }
return template.replace(/{(.)}/g, function(s, v) {
switch (v) {
case "S": return hosts[(Math.abs(c.zoom) + c.row + column) % hosts.length];
@@ -220,6 +226,12 @@ po.url = function(template) {
return format;
};
+ format.repeat = function(x) {
+ if (!arguments.length) return repeat;
+ repeat = x;
+ return format;
+ };
+
return format;
};
po.dispatch = function(that) {
@@ -613,7 +625,7 @@ po.map = function() {
l = map.pointLocation({x: (bl.x + tr.x) / 2, y: (bl.y + tr.y) / 2});
// update the zoom level
- zoom = zoom + zoomFraction - Math.log(k) / Math.log(2);
+ zoom = zoom + zoomFraction - Math.log(k) / Math.LN2;
rezoom();
// set the new center
@@ -673,6 +685,7 @@ resizer.remove = function(map) {
// Note: assumes single window (no frames, iframes, etc.)!
window.addEventListener("resize", resizer, false);
+window.addEventListener("load", resizer, false);
// See http://wiki.openstreetmap.org/wiki/Mercator
@@ -1098,16 +1111,22 @@ po.image = function() {
if (typeof url == "function") {
element.setAttribute("opacity", 0);
- tile.request = po.queue.image(element, url(tile), function(img) {
- delete tile.request;
+ var tileUrl = url(tile);
+ if (tileUrl != null) {
+ tile.request = po.queue.image(element, tileUrl, function(img) {
+ delete tile.request;
+ tile.ready = true;
+ tile.img = img;
+ element.removeAttribute("opacity");
+ image.dispatch({type: "load", tile: tile});
+ });
+ } else {
tile.ready = true;
- tile.img = img;
- element.removeAttribute("opacity");
image.dispatch({type: "load", tile: tile});
- });
+ }
} else {
tile.ready = true;
- if (url) element.setAttributeNS(po.ns.xlink, "href", url);
+ if (url != null) element.setAttributeNS(po.ns.xlink, "href", url);
image.dispatch({type: "load", tile: tile});
}
}
@@ -1557,26 +1576,46 @@ po.wheel = function() {
location = null;
}
+ // mousewheel events are totally broken!
+ // https://bugs.webkit.org/show_bug.cgi?id=40441
+ // not only that, but Chrome and Safari differ in re. to acceleration!
+ var inner = document.createElement("div"),
+ outer = document.createElement("div");
+ outer.style.visibility = "hidden";
+ outer.style.top = "0px";
+ outer.style.height = "0px";
+ outer.style.width = "0px";
+ outer.style.overflowY = "scroll";
+ inner.style.height = "2000px";
+ outer.appendChild(inner);
+ document.body.appendChild(outer);
+
function mousewheel(e) {
- var delta = (e.wheelDelta / 120 || -e.detail) * .1,
+ var delta = e.wheelDelta || -e.detail,
point;
- /* Detect fast & large wheel events on WebKit. */
- if (bug40441 < 0) {
- var now = Date.now(), since = now - last;
- if ((since > 9) && (Math.abs(e.wheelDelta) / since >= 50)) bug40441 = 1;
- last = now;
- }
- if (bug40441 == 1) delta *= .03;
+ /* Detect the pixels that would be scrolled by this wheel event. */
+ if (delta) {
+ if (smooth) {
+ try {
+ outer.scrollTop = 1000;
+ outer.dispatchEvent(e);
+ delta = 1000 - outer.scrollTop;
+ } catch (error) {
+ // Derp! Hope for the best?
+ }
+ delta *= .005;
+ }
- /* If smooth zooming is disabled, batch events into unit steps. */
- if (!smooth && delta) {
- var timeNow = Date.now();
- if (timeNow - timePrev > 200) {
- delta = delta > 0 ? +1 : -1;
- timePrev = timeNow;
- } else {
- delta = 0;
+ /* If smooth zooming is disabled, batch events into unit steps. */
+ else {
+ var timeNow = Date.now();
+ if (timeNow - timePrev > 200) {
+ delta = delta > 0 ? +1 : -1;
+ timePrev = timeNow;
+ } else {
+ delta = 0;
+ }
}
}
@@ -1625,7 +1664,7 @@ po.wheel = function() {
if (map) {
container.removeEventListener("mousemove", move, false);
container.removeEventListener("mousewheel", mousewheel, false);
- container.removeEventListener("DOMMouseScroll", mousewheel, false);
+ container.removeEventListener("MozMousePixelScroll", mousewheel, false);
container = null;
map.off("move", move);
}
@@ -1634,16 +1673,13 @@ po.wheel = function() {
container = map.container();
container.addEventListener("mousemove", move, false);
container.addEventListener("mousewheel", mousewheel, false);
- container.addEventListener("DOMMouseScroll", mousewheel, false);
+ container.addEventListener("MozMousePixelScroll", mousewheel, false);
}
return wheel;
};
return wheel;
};
-
-// https://bugs.webkit.org/show_bug.cgi?id=40441
-var bug40441 = /WebKit\/533/.test(navigator.userAgent) ? -1 : 0;
po.arrow = function() {
var arrow = {},
key = {left: 0, right: 0, up: 0, down: 0},
@@ -1763,10 +1799,9 @@ po.hash = function() {
lat = 90 - 1e-8, // allowable latitude range
map;
- var parser = function(s) {
+ var parser = function(map, s) {
var args = s.split("/").map(Number);
- if (args.length < 3 || args.some(isNaN))
- move(); // replace bogus hash
+ if (args.length < 3 || args.some(isNaN)) return true; // replace bogus hash
else {
var size = map.size();
map.zoomBy(args[0] - map.zoom(),
@@ -1791,7 +1826,8 @@ po.hash = function() {
function hashchange() {
if (location.hash === s0) return; // ignore spurious hashchange events
- parser((s0 = location.hash).substring(1));
+ if (parser(map, (s0 = location.hash).substring(1)))
+ move(); // replace bogus hash
}
hash.map = function(x) {
@@ -1822,18 +1858,101 @@ po.hash = function() {
return hash;
};
+po.touch = function() {
+ var touch = {},
+ map,
+ container,
+ rotate = false,
+ last = 0,
+ zoom,
+ angle,
+ locations = {}; // touch identifier -> location
+
+ window.addEventListener("touchmove", touchmove, false);
+
+ function touchstart(e) {
+ var i = -1,
+ n = e.touches.length,
+ t = Date.now();
+
+ // doubletap detection
+ if ((n == 1) && (t - last < 300)) {
+ var z = map.zoom();
+ map.zoomBy(1 - z + Math.floor(z), map.mouse(e.touches[0]));
+ e.preventDefault();
+ }
+ last = t;
+
+ // store original zoom & touch locations
+ zoom = map.zoom();
+ angle = map.angle();
+ while (++i < n) {
+ t = e.touches[i];
+ locations[t.identifier] = map.pointLocation(map.mouse(t));
+ }
+ }
+
+ function touchmove(e) {
+ switch (e.touches.length) {
+ case 1: { // single-touch pan
+ var t0 = e.touches[0];
+ map.zoomBy(0, map.mouse(t0), locations[t0.identifier]);
+ e.preventDefault();
+ break;
+ }
+ case 2: { // double-touch pan + zoom + rotate
+ var t0 = e.touches[0],
+ t1 = e.touches[1],
+ p0 = map.mouse(t0),
+ p1 = map.mouse(t1),
+ p2 = {x: (p0.x + p1.x) / 2, y: (p0.y + p1.y) / 2}, // center point
+ c0 = po.map.locationCoordinate(locations[t0.identifier]),
+ c1 = po.map.locationCoordinate(locations[t1.identifier]),
+ c2 = {row: (c0.row + c1.row) / 2, column: (c0.column + c1.column) / 2, zoom: 0},
+ l2 = po.map.coordinateLocation(c2); // center location
+ map.zoomBy(Math.log(e.scale) / Math.LN2 + zoom - map.zoom(), p2, l2);
+ if (rotate) map.angle(e.rotation / 180 * Math.PI + angle);
+ e.preventDefault();
+ break;
+ }
+ }
+ }
+
+ touch.rotate = function(x) {
+ if (!arguments.length) return rotate;
+ rotate = x;
+ return touch;
+ };
+
+ touch.map = function(x) {
+ if (!arguments.length) return map;
+ if (map) {
+ container.removeEventListener("touchstart", touchstart, false);
+ container = null;
+ }
+ if (map = x) {
+ container = map.container();
+ container.addEventListener("touchstart", touchstart, false);
+ }
+ return touch;
+ };
+
+ return touch;
+};
// Default map controls.
po.interact = function() {
var interact = {},
drag = po.drag(),
wheel = po.wheel(),
dblclick = po.dblclick(),
+ touch = po.touch(),
arrow = po.arrow();
interact.map = function(x) {
drag.map(x);
wheel.map(x);
dblclick.map(x);
+ touch.map(x);
arrow.map(x);
return interact;
};
@@ -2031,9 +2150,8 @@ po.compass = function() {
case "bottom-left": y = size.y - y; break;
case "bottom-right": x = size.x - x; y = size.y - y; break;
}
- var tx = "translate(" + x + "," + y + ")";
- if (panContainer) panContainer.setAttribute("transform", tx);
- if (zoomContainer) zoomContainer.setAttribute("transform", tx);
+ g.setAttribute("transform", "translate(" + x + "," + y + ")");
+ dragRect.setAttribute("transform", "translate(" + -x + "," + -y + ")");
for (var i in ticks) {
i == map.zoom()
? ticks[i].setAttribute("class", "active")
View
125 polymaps.min.js
@@ -1,62 +1,65 @@
if(!org)var org={};if(!org.polymaps)org.polymaps={};
-(function(s){function fa(e){var f=e.indexOf(":");return f<0?e:{space:s.ns[e.substring(0,f)],local:e.substring(f+1)}}function S(){for(var e=0;e<S.maps.length;e++)S.maps[e].resize()}function V(e){return 360/Math.PI*Math.atan(Math.exp(e*Math.PI/180))-90}function W(e){return 180/Math.PI*Math.log(Math.tan(Math.PI/4+e*Math.PI/360))}function Z(e,f){if(e.row>f.row){var c=e;e=f;f=c}return{x0:e.column,y0:e.row,x1:f.column,y1:f.row,dx:f.column-e.column,dy:f.row-e.row}}function ca(e,f,c,k,h){c=Math.max(c,Math.floor(f.y0));
-k=Math.min(k,Math.ceil(f.y1));if(e.x0==f.x0&&e.y0==f.y0?e.x0+f.dy/e.dy*e.dx<f.x1:e.x1-f.dy/e.dy*e.dx<f.x0){var a=e;e=f;f=a}a=e.dx/e.dy;var g=f.dx/f.dy,l=e.dx>0,o=f.dx<0;for(c=c;c<k;c++){var t=a*Math.max(0,Math.min(e.dy,c+l-e.y0))+e.x0;h(Math.floor(g*Math.max(0,Math.min(f.dy,c+o-f.y0))+f.x0),Math.ceil(t),c)}}function da(e,f,c,k,h,a){var g=Z(e,f);f=Z(f,c);e=Z(c,e);if(g.dy>f.dy){c=g;g=f;f=c}if(g.dy>e.dy){c=g;g=e;e=c}if(f.dy>e.dy){c=f;f=e;e=c}g.dy&&ca(e,g,k,h,a);f.dy&&ca(e,f,k,h,a)}s.version="2.4.0";
-var Y={x:0,y:0};s.ns={svg:"http://www.w3.org/2000/svg",xlink:"http://www.w3.org/1999/xlink"};s.id=function(){var e=0;return function(){return++e}}();s.svg=function(e){return document.createElementNS(s.ns.svg,e)};s.transform=function(e,f,c,k,h,a){var g={},l,o,t;if(!arguments.length){e=1;f=h=c=0;k=1;a=0}g.zoomFraction=function(m){if(!arguments.length)return o;o=m;l=Math.floor(o+Math.log(Math.sqrt(e*e+f*f+c*c+k*k))/Math.log(2));t=Math.pow(2,-l);return g};g.apply=function(m){var j=Math.pow(2,-m.zoom),
-u=Math.pow(2,m.zoom-l);return{column:(e*m.column*j+c*m.row*j+h)*u,row:(f*m.column*j+k*m.row*j+a)*u,zoom:m.zoom-l}};g.unapply=function(m){var j=Math.pow(2,-m.zoom),u=Math.pow(2,m.zoom+l);return{column:(m.column*j*k-m.row*j*c-h*k+a*c)/(e*k-f*c)*u,row:(m.column*j*f-m.row*j*e-h*f+a*e)/(c*f-k*e)*u,zoom:m.zoom+l}};g.toString=function(){return"matrix("+[e*t,f*t,c*t,k*t].join(" ")+" 0 0)"};return g.zoomFraction(0)};s.cache=function(e,f){function c(j){m--;f&&f(j);delete g[j.key];if(j.next)j.next.prev=j.prev;
-else if(o=j.prev)o.next=null;if(j.prev)j.prev.next=j.next;else if(l=j.next)l.prev=null}function k(){for(var j=o;m>t;j=j.prev){if(!j)break;j.lock||c(j)}}var h={},a={},g={},l=null,o=null,t=64,m=0;h.peek=function(j){return g[[j.zoom,j.column,j.row].join("/")]};h.load=function(j,u){var y=[j.zoom,j.column,j.row].join("/"),A=g[y];if(A){if(A.prev){if(A.prev.next=A.next)A.next.prev=A.prev;else o=A.prev;A.prev=null;A.next=l;l=l.prev=A}A.lock=1;return a[y]=A}A={key:y,column:j.column,row:j.row,zoom:j.zoom,next:l,
-prev:null,lock:1};e.call(null,A,u);a[y]=g[y]=A;if(l)l.prev=A;else o=A;l=A;m++;return A};h.unload=function(j){if(!(j in a))return false;var u=a[j];u.lock=0;delete a[j];u.request&&u.request.abort(false)&&c(u);return u};h.locks=function(){return a};h.size=function(j){if(!arguments.length)return t;t=j;k();return h};h.flush=function(){k();return h};h.clear=function(){for(var j in g){var u=g[j];u.request&&u.request.abort(false);f&&f(g[j]);if(u.lock){u.lock=0;u.element.parentNode.removeChild(u.element)}}a=
-{};g={};l=o=null;m=0;return h};return h};s.url=function(e){function f(k){var h=k.zoom<0?1:1<<k.zoom,a=k.column%h;if(a<0)a+=h;return e.replace(/{(.)}/g,function(g,l){switch(l){case "S":return c[(Math.abs(k.zoom)+k.row+a)%c.length];case "Z":return k.zoom;case "X":return a;case "Y":return k.row;case "B":var o=s.map.coordinateLocation({row:k.row,column:a,zoom:k.zoom}),t=s.map.coordinateLocation({row:k.row+1,column:a+1,zoom:k.zoom}),m=Math.ceil(Math.log(k.zoom)/Math.LN2);return t.lat.toFixed(m)+","+o.lon.toFixed(m)+
-","+o.lat.toFixed(m)+","+t.lon.toFixed(m)}return l})}var c=[];f.template=function(k){if(!arguments.length)return e;e=k;return f};f.hosts=function(k){if(!arguments.length)return c;c=k;return f};return f};s.dispatch=function(e){var f={};e.on=function(c,k){for(var h=f[c]||(f[c]=[]),a=0;a<h.length;a++)if(h[a].handler==k)return e;h.push({handler:k,on:true});return e};e.off=function(c,k){var h=f[c];if(h)for(var a=0;a<h.length;a++){var g=h[a];if(g.handler==k){g.on=false;h.splice(a,1);break}}return e};return function(c){var k=
-f[c.type];if(k){k=k.slice();for(var h=0;h<k.length;h++){var a=k[h];a.on&&a.handler.call(e,c)}}}};s.queue=function(){function e(){if(!(h>=a||!k.length)){h++;k.pop()()}}function f(g){for(var l=0;l<k.length;l++)if(k[l]==g){k.splice(l,1);return true}return false}function c(g,l,o){function t(){m=new XMLHttpRequest;o&&m.overrideMimeType(o);m.open("GET",g,true);m.onreadystatechange=function(){if(m.readyState==4){h--;m.status<300&&l(m);e()}};m.send(null)}var m;k.push(t);e();return{abort:function(j){if(f(t))return true;
-if(j&&m){m.abort();return true}return false}}}var k=[],h=0,a=6;return{text:function(g,l,o){return c(g,function(t){t.responseText&&l(t.responseText)},o)},xml:function(g,l){return c(g,function(o){o.responseXML&&l(o.responseXML)},"application/xml")},json:function(g,l){return c(g,function(o){o.responseText&&l(JSON.parse(o.responseText))},"application/json")},image:function(g,l,o){function t(){m=document.createElement("img");m.onerror=function(){h--;e()};m.onload=function(){h--;o(m);e()};m.src=l;g.setAttributeNS(s.ns.xlink,
-"href",l)}var m;k.push(t);e();return{abort:function(j){if(f(t))return true;if(j&&m){m.src="about:";return true}return false}}}}}();s.map=function(){function e(){if(u)if(t<u[0])t=u[0];else if(t>u[1])t=u[1];m=t-(t=Math.round(t));j=Math.pow(2,m)}function f(){if(n){var d=45/Math.pow(2,t+m-3),r=Math.max(Math.abs(C*g.x+A*g.y),Math.abs(B*g.x+E*g.y)),q=V(K-r*d/l.y);r=V(i+r*d/l.y);o.lat=Math.max(q,Math.min(r,o.lat));q=Math.max(Math.abs(C*g.y+A*g.x),Math.abs(B*g.y+E*g.x));o.lon=Math.max(n[0].lon-q*d/l.x,Math.min(n[1].lon+
-q*d/l.x,o.lon))}}var c={},k,h,a=Y,g=Y,l={x:256,y:256},o={lat:37.76487,lon:-122.41948},t=12,m=0,j=1,u=[1,18],y=0,A=1,C=0,E=1,B=0,K=-180,i=180,n=[{lat:V(K),lon:-Infinity},{lat:V(i),lon:Infinity}];c.locationCoordinate=function(d){d=s.map.locationCoordinate(d);var r=Math.pow(2,t);d.column*=r;d.row*=r;d.zoom+=t;return d};c.coordinateLocation=s.map.coordinateLocation;c.coordinatePoint=function(d,r){var q=Math.pow(2,t-r.zoom),z=Math.pow(2,t-d.zoom),v=(r.column*q-d.column*z)*l.x*j;q=(r.row*q-d.row*z)*l.y*
-j;return{x:g.x+A*v-C*q,y:g.y+C*v+A*q}};c.pointCoordinate=function(d,r){var q=Math.pow(2,t-d.zoom),z=(r.x-g.x)/j,v=(r.y-g.y)/j;return{column:d.column*q+(E*z-B*v)/l.x,row:d.row*q+(B*z+E*v)/l.y,zoom:t}};c.locationPoint=function(d){var r=Math.pow(2,t+m-3)/45,q=(d.lon-o.lon)*r*l.x;d=(W(o.lat)-W(d.lat))*r*l.y;return{x:g.x+A*q-C*d,y:g.y+C*q+A*d}};c.pointLocation=function(d){var r=45/Math.pow(2,t+m-3),q=(d.x-g.x)*r;d=(d.y-g.y)*r;return{lon:o.lon+(E*q-B*d)/l.x,lat:V(W(o.lat)-(B*q+E*d)/l.y)}};var w=s.svg("rect");
-w.setAttribute("visibility","hidden");w.setAttribute("pointer-events","all");c.container=function(d){if(!arguments.length)return k;k=d;k.setAttribute("class","map");k.appendChild(w);return c.resize()};c.focusableParent=function(){for(var d=k;d;d=d.parentNode)if(d.tabIndex>=0)return d;return window};c.mouse=function(d){var r=(k.ownerSVGElement||k).createSVGPoint();if($<0&&(window.scrollX||window.scrollY)){var q=document.body.appendChild(s.svg("svg"));q.style.position="absolute";q.style.top=q.style.left=
-"0px";var z=q.getScreenCTM();$=!(z.f||z.e);document.body.removeChild(q)}if($){r.x=d.pageX;r.y=d.pageY}else{r.x=d.clientX;r.y=d.clientY}return r.matrixTransform(k.getScreenCTM().inverse())};c.size=function(d){if(!arguments.length)return a;h=d;return c.resize()};c.resize=function(){if(h){a=h;S.remove(c)}else{w.setAttribute("width","100%");w.setAttribute("height","100%");b=w.getBBox();a={x:b.width,y:b.height};S.add(c)}w.setAttribute("width",a.x);w.setAttribute("height",a.y);g={x:a.x/2,y:a.y/2};f();c.dispatch({type:"resize"});
-return c};c.tileSize=function(d){if(!arguments.length)return l;l=d;c.dispatch({type:"move"});return c};c.center=function(d){if(!arguments.length)return o;o=d;f();c.dispatch({type:"move"});return c};c.panBy=function(d){var r=45/Math.pow(2,t+m-3),q=d.x*r;d=d.y*r;return c.center({lon:o.lon+(B*d-E*q)/l.x,lat:V(W(o.lat)+(B*q+E*d)/l.y)})};c.centerRange=function(d){if(!arguments.length)return n;if(n=d){K=n[0].lat>-90?W(n[0].lat):-Infinity;i=n[0].lat<90?W(n[1].lat):Infinity}else{K=-Infinity;i=Infinity}f();
-c.dispatch({type:"move"});return c};c.zoom=function(d){if(!arguments.length)return t+m;t=d;e();return c.center(o)};c.zoomBy=function(d,r,q){if(arguments.length<2)return c.zoom(t+m+d);if(arguments.length<3)q=c.pointLocation(r);t=t+m+d;e();var z=c.locationPoint(q);return c.panBy({x:r.x-z.x,y:r.y-z.y})};c.zoomRange=function(d){if(!arguments.length)return u;u=d;return c.zoom(t+m)};c.extent=function(d){if(!arguments.length)return[c.pointLocation({x:0,y:a.y}),c.pointLocation({x:a.x,y:0})];var r=c.locationPoint(d[0]),
-q=c.locationPoint(d[1]),z=Math.max((q.x-r.x)/a.x,(r.y-q.y)/a.y);r=c.pointLocation({x:(r.x+q.x)/2,y:(r.y+q.y)/2});t=t+m-Math.log(z)/Math.log(2);e();return c.center(r)};c.angle=function(d){if(!arguments.length)return y;y=d;A=Math.cos(y);C=Math.sin(y);E=Math.cos(-y);B=Math.sin(-y);f();c.dispatch({type:"move"});return c};c.add=function(d){d.map(c);return c};c.remove=function(d){d.map(null);return c};c.dispatch=s.dispatch(c);return c};S.maps=[];S.add=function(e){for(var f=0;f<S.maps.length;f++)if(S.maps[f]==
-e)return;S.maps.push(e)};S.remove=function(e){for(var f=0;f<S.maps.length;f++)if(S.maps[f]==e){S.maps.splice(f,1);return}};window.addEventListener("resize",S,false);s.map.locationCoordinate=function(e){var f=1/360;return{column:(e.lon+180)*f,row:(180-W(e.lat))*f,zoom:0}};s.map.coordinateLocation=function(e){var f=45/Math.pow(2,e.zoom-3);return{lon:f*e.column-180,lat:V(180-f*e.row)}};var $=/WebKit/.test(navigator.userAgent)?-1:0;s.layer=function(e,f){function c(B){for(var K=C[0].nextSibling;A<B;A++){u.insertBefore(C[-4],
-K);u.insertBefore(C[2],K);u.insertBefore(C[1],K);for(var i=C[-4],n=-4;n<2;)C[n]=C[++n];C[n]=i}}function k(B){for(var K=C[0].nextSibling;A>B;A--){u.insertBefore(C[-1],K);u.insertBefore(C[2],C[-4]);for(var i=C[2],n=2;n>-4;)C[n]=C[--n];C[n]=i}}function h(){function B(O){var H=O.zoom,T=H<0?1:1<<H,U=O.column%T,x=O.row;if(U<0)U+=T;return{locationPoint:function(D){D=s.map.locationCoordinate(D);var G=Math.pow(2,H-D.zoom);return{x:q.x*(G*D.column-U),y:q.y*(G*D.row-x)}}}}function K(O,H,T){var U=I.zoom,x=2-
-R,D=4+R;for(O=O;O<H;O++){var G=g.load({column:O,row:T,zoom:U},B);if(!G.ready&&!(G.key in M)){G.proxyRefs={};for(var J,N,P,Q=1;Q<=x;Q++){N=true;for(var X=0,ea=1<<Q;X<=ea;X++)for(var aa=0;aa<=ea;aa++)if((P=g.peek(J={column:(O<<Q)+aa,row:(T<<Q)+X,zoom:U+Q}))&&P.ready){M[P.key]=g.load(J);P.proxyCount++;G.proxyRefs[P.key]=P}else N=false;if(N)break}if(!N)for(Q=1;Q<=D;Q++)if((P=g.peek(J={column:O>>Q,row:T>>Q,zoom:U-Q}))&&P.ready){M[P.key]=g.load(J);P.proxyCount++;G.proxyRefs[P.key]=P;break}}M[G.key]=G}}
-var i=a.map(),n=i.zoom(),w=n-(n=Math.round(n)),d=i.size(),r=i.angle(),q=i.tileSize(),z=i.locationCoordinate(i.center());if(A!=n){if(A<n)c(n);else if(A>n)k(n);else A=n;for(var v=-4;v<=2;v++){var L=C[v];L.setAttribute("class","zoom"+(v<0?"":"+")+v+" zoom"+(n+v));L.setAttribute("transform","scale("+Math.pow(2,-v)+")")}}u.setAttribute("transform","translate("+d.x/2+","+d.y/2+")"+(r?"rotate("+r/Math.PI*180+")":"")+(w?"scale("+Math.pow(2,w)+")":"")+(y?y.zoomFraction(w):""));var I=i.pointCoordinate(z,Y);
-v=i.pointCoordinate(z,{x:d.x,y:0});n=i.pointCoordinate(z,d);i=i.pointCoordinate(z,{x:0,y:d.y});if(!w&&!r&&!y){z.column=(Math.round(q.x*z.column)+(d.x&1)/2)/q.x;z.row=(Math.round(q.y*z.row)+(d.y&1)/2)/q.y}if(y){I=y.unapply(I);v=y.unapply(v);n=y.unapply(n);i=y.unapply(i);z=y.unapply(z)}var R=t?t(I.zoom)-I.zoom:0;if(R){d=Math.pow(2,R);I.column*=d;I.row*=d;v.column*=d;v.row*=d;n.column*=d;n.row*=d;i.column*=d;i.row*=d;I.zoom=v.zoom=n.zoom=i.zoom+=R}w=g.locks();var M={};for(var F in w)w[F].proxyCount=
-0;if(o&&R>-5&&R<3){r=I.zoom<0?1:1<<I.zoom;if(l){da(I,v,n,0,r,K);da(n,i,I,0,r,K)}else{d=Math.floor((I.column+n.column)/2);r=Math.max(0,Math.min(r-1,Math.floor((v.row+i.row)/2)));v=Math.min(4,I.zoom);d=d>>v<<v;r=r>>v<<v;K(d,d+1,r)}}for(F in M){v=M[F];d=Math.pow(2,v.level=v.zoom-z.zoom);v.element.setAttribute("transform","translate("+(v.x=q.x*(v.column-z.column*d))+","+(v.y=q.y*(v.row-z.row*d))+")")}for(F in w)if(!(F in M)){v=g.unload(F);v.element.parentNode.removeChild(v.element);delete v.proxyRefs}for(F in M){v=
-M[F];if(v.element.parentNode!=C[v.level]){C[v.level].appendChild(v.element);a.show&&a.show(v)}}g.flush();a.dispatch({type:"move"})}var a={},g=a.cache=s.cache(e,f).size(512),l=true,o=true,t,m,j,u=s.svg("g"),y,A,C={};u.setAttribute("class","layer");for(var E=-4;E<=-1;E++)C[E]=u.appendChild(s.svg("g"));for(E=2;E>=1;E--)C[E]=u.appendChild(s.svg("g"));C[0]=u.appendChild(s.svg("g"));a.map=function(B){if(!arguments.length)return j;if(j){if(j==B){u.parentNode.appendChild(u);return a}j.off("move",h).off("resize",
-h);u.parentNode.removeChild(u)}if(j=B){j.container().appendChild(u);a.init&&a.init(u);j.on("move",h).on("resize",h);h()}return a};a.container=function(){return u};a.levels=function(){return C};a.id=function(B){if(!arguments.length)return m;m=B;u.setAttribute("id",B);return a};a.visible=function(B){if(!arguments.length)return o;(o=B)?u.removeAttribute("visibility"):u.setAttribute("visibility","hidden");j&&h();return a};a.transform=function(B){if(!arguments.length)return y;y=B;j&&h();return a};a.zoom=
-function(B){if(!arguments.length)return t;t=typeof B=="function"||B==null?B:function(){return B};j&&h();return a};a.tile=function(B){if(!arguments.length)return l;l=B;j&&h();return a};a.reload=function(){g.clear();j&&h();return a};a.dispatch=s.dispatch(a);a.on("load",function(B){if(B.tile.proxyRefs){for(var K in B.tile.proxyRefs){var i=B.tile.proxyRefs[K];--i.proxyCount<=0&&g.unload(K)&&i.element.parentNode.removeChild(i.element)}delete B.tile.proxyRefs}});return a};s.image=function(){var e=s.layer(function(c){var k=
-c.element=s.svg("image"),h=e.map().tileSize();k.setAttribute("preserveAspectRatio","none");k.setAttribute("width",h.x);k.setAttribute("height",h.y);if(typeof f=="function"){k.setAttribute("opacity",0);c.request=s.queue.image(k,f(c),function(a){delete c.request;c.ready=true;c.img=a;k.removeAttribute("opacity");e.dispatch({type:"load",tile:c})})}else{c.ready=true;f&&k.setAttributeNS(s.ns.xlink,"href",f);e.dispatch({type:"load",tile:c})}},function(c){c.request&&c.request.abort(true)}),f;e.url=function(c){if(!arguments.length)return f;
-f=typeof c=="string"&&/{.}/.test(c)?s.url(c):c;return e.reload()};return e};s.geoJson=function(e){function f(i){var n={lat:0,lon:0};return function(w){n.lat=w[1];n.lon=w[0];var d=i(n);w.x=d.x;w.y=d.y;return d}}function c(i,n){return i&&i.type in C&&C[i.type](i,n)}function k(i,n,w){return i.type in E&&E[i.type](i,n,w)}function h(){var i=a.map().zoom(),n=a.cache.locks(),w,d,r,q,z,v,L;if(y=="fixed")for(w in n){if((d=n[w]).scale!=i){L="scale("+Math.pow(2,d.zoom-i)+")";q=-1;for(z=(r=d.features).length;++q<
-z;)k((v=r[q]).data.geometry,v.element,L);d.scale=i}}else for(w in n){q=-1;for(z=(r=(d=n[w]).features).length;++q<z;)k((v=r[q]).data.geometry,v.element,"");delete d.scale}}var a=s.layer(function(i,n){function w(r){var q=[];if(r.next)i.request=e(r.next.href,w);switch(r.type){case "FeatureCollection":for(var z=0;z<r.features.length;z++){var v=r.features[z],L=c(v.geometry,n);L&&q.push({element:d.appendChild(L),data:v})}break;case "Feature":(L=c(r.geometry,n))&&q.push({element:d.appendChild(L),data:r});
-break;default:(L=c(r,n))&&q.push({element:d.appendChild(L),data:{type:"Feature",geometry:r}});break}i.ready=true;q.push.apply(i.features,q);a.dispatch({type:"load",tile:i,features:q})}var d=i.element=s.svg("g");i.features=[];n=f(n(i).locationPoint);if(l!=null)i.request=e(typeof l=="function"?l(i):l,w);else w({type:"FeatureCollection",features:A||[]})},function(i){i.request&&i.request.abort(true)}),g=a.container(),l,o=true,t="org.polymaps."+s.id(),m="url(#"+t+")",j=g.insertBefore(s.svg("clipPath"),
-g.firstChild),u=j.appendChild(s.svg("rect")),y="auto",A;g.setAttribute("fill-rule","evenodd");j.setAttribute("id",t);if(!arguments.length)e=s.queue.json;var C={Point:function(i,n){var w=n(i.coordinates),d=s.svg("circle");d.setAttribute("r",4.5);d.setAttribute("transform","translate("+w.x+","+w.y+")");return d},MultiPoint:function(i,n){for(var w=s.svg("g"),d=i.coordinates,r,q,z=-1,v=d.length;++z<v;){q=w.appendChild(s.svg("circle"));q.setAttribute("r",4.5);q.setAttribute("transform","translate("+(r=
-n(d[z])).x+","+r.y+")")}return w},LineString:function(i,n){for(var w=s.svg("path"),d=["M"],r=i.coordinates,q,z=-1,v=r.length;++z<v;)d.push((q=n(r[z])).x,",",q.y,"L");d.pop();if(d.length){w.setAttribute("d",d.join(""));return w}},MultiLineString:function(i,n){for(var w=s.svg("path"),d=[],r=i.coordinates,q,z=-1,v,L=r.length,I;++z<L;){q=r[z];v=-1;I=q.length;for(d.push("M");++v<I;)d.push((p=n(q[v])).x,",",p.y,"L");d.pop()}if(d.length){w.setAttribute("d",d.join(""));return w}},Polygon:function(i,n){for(var w=
-s.svg("path"),d=[],r=i.coordinates,q,z=-1,v,L=r.length,I;++z<L;){q=r[z];v=-1;I=q.length-1;for(d.push("M");++v<I;)d.push((p=n(q[v])).x,",",p.y,"L");d[d.length-1]="Z"}if(d.length){w.setAttribute("d",d.join(""));return w}},MultiPolygon:function(i,n){for(var w=s.svg("path"),d=[],r=i.coordinates,q,z,v=-1,L,I,R=r.length,M,F;++v<R;){q=r[v];L=-1;for(M=q.length;++L<M;){z=q[L];I=-1;F=z.length-1;for(d.push("M");++I<F;)d.push((p=n(z[I])).x,",",p.y,"L");d[d.length-1]="Z"}}if(d.length){w.setAttribute("d",d.join(""));
-return w}},GeometryCollection:function(i,n){for(var w=s.svg("g"),d=-1,r=i.geometries,q=r.length,z;++d<q;)(z=c(r[d],n))&&w.appendChild(z);return w}},E={Point:function(i,n,w){i=i.coordinates;n.setAttribute("transform","translate("+i.x+","+i.y+")"+w)},MultiPoint:function(i,n,w){i=i.coordinates;var d=-1,r=q.length;n=n.firstChild;for(var q;++d<r;){q=i[d];n.setAttribute("transform","translate("+q.x+","+q.y+")"+w);n=n.nextSibling}}};a.url=function(i){if(!arguments.length)return l;l=typeof i=="string"&&/{.}/.test(i)?
-s.url(i):i;if(l!=null)A=null;typeof l=="string"&&a.tile(false);return a.reload()};a.features=function(i){if(!arguments.length)return A;if(A=i){l=null;a.tile(false)}return a.reload()};a.clip=function(i){if(!arguments.length)return o;o&&g.removeChild(j);if(o=i)g.insertBefore(j,g.firstChild);var n=a.cache.locks();for(var w in n)o?n[w].element.setAttribute("clip-path",m):n[w].element.removeAttribute("clip-path");return a};var B=a.tile;a.tile=function(i){arguments.length&&!i&&a.clip(i);return B.apply(a,
-arguments)};var K=a.map;a.map=function(i){if(i&&u){var n=i.tileSize();u.setAttribute("width",n.x);u.setAttribute("height",n.y)}return K.apply(a,arguments)};a.scale=function(i){if(!arguments.length)return y;(y=i)?a.on("move",h):a.off("move",h);a.map()&&h();return a};a.show=function(i){o?i.element.setAttribute("clip-path",m):i.element.removeAttribute("clip-path");a.dispatch({type:"show",tile:i,features:i.features});return a};a.reshow=function(){var i=a.cache.locks();for(var n in i)a.show(i[n]);return a};
-return a};s.dblclick=function(){function e(a){var g=k.zoom();g=a.shiftKey?Math.ceil(g)-g-1:1-g+Math.floor(g);c==="mouse"?k.zoomBy(g,k.mouse(a)):k.zoomBy(g)}var f={},c="mouse",k,h;f.zoom=function(a){if(!arguments.length)return c;c=a;return f};f.map=function(a){if(!arguments.length)return k;if(k){h.removeEventListener("dblclick",e,false);h=null}if(k=a){h=k.container();h.addEventListener("dblclick",e,false)}return f};return f};s.drag=function(){function e(g){if(!g.shiftKey){a={x:g.clientX,y:g.clientY};
-k.focusableParent().focus();g.preventDefault();document.body.style.setProperty("cursor","move",null)}}function f(g){if(a){k.panBy({x:g.clientX-a.x,y:g.clientY-a.y});a.x=g.clientX;a.y=g.clientY}}var c={},k,h,a;c.map=function(g){if(!arguments.length)return k;if(k){h.removeEventListener("mousedown",e,false);h=null}if(k=g){h=k.container();h.addEventListener("mousedown",e,false)}return c};window.addEventListener("mousemove",f,false);window.addEventListener("mouseup",function(g){if(a){f(g);a=null;document.body.style.removeProperty("cursor")}},
-false);return c};s.wheel=function(){function e(){l=null}function f(m){var j=(m.wheelDelta/120||-m.detail)*0.1,u;if(ba<0){u=Date.now();var y=u-h;if(y>9&&Math.abs(m.wheelDelta)/y>=50)ba=1;h=u}if(ba==1)j*=0.03;if(!a&&j){u=Date.now();if(u-k>200){j=j>0?+1:-1;k=u}else j=0}if(j)switch(g){case "mouse":u=o.mouse(m);l||(l=o.pointLocation(u));o.off("move",e).zoomBy(j,u,l).on("move",e);break;case "location":o.zoomBy(j,o.locationPoint(l),l);break;default:o.zoomBy(j);break}m.preventDefault();return false}var c=
-{},k=0,h=0,a=true,g="mouse",l,o,t;c.smooth=function(m){if(!arguments.length)return a;a=m;return c};c.zoom=function(m,j){if(!arguments.length)return g;g=m;l=j;if(o)g=="mouse"?o.on("move",e):o.off("move",e);return c};c.map=function(m){if(!arguments.length)return o;if(o){t.removeEventListener("mousemove",e,false);t.removeEventListener("mousewheel",f,false);t.removeEventListener("DOMMouseScroll",f,false);t=null;o.off("move",e)}if(o=m){g=="mouse"&&o.on("move",e);t=o.container();t.addEventListener("mousemove",
-e,false);t.addEventListener("mousewheel",f,false);t.addEventListener("DOMMouseScroll",f,false)}return c};return c};var ba=/WebKit\/533/.test(navigator.userAgent)?-1:0;s.arrow=function(){function e(y){if(!(y.ctrlKey||y.altKey||y.metaKey)){var A=Date.now(),C=0,E=0;switch(y.keyCode){case 37:if(!a.left){g=A;a.left=1;a.right||(C=m)}break;case 39:if(!a.right){g=A;a.right=1;a.left||(C=-m)}break;case 38:if(!a.up){g=A;a.up=1;a.down||(E=m)}break;case 40:if(!a.down){g=A;a.down=1;a.up||(E=-m)}break;default:return}if(C||
-E)j.panBy({x:C,y:E});if(!l&&a.left|a.right|a.up|a.down)l=setInterval(k,t);y.preventDefault()}}function f(y){g=Date.now();switch(y.keyCode){case 37:a.left=0;break;case 39:a.right=0;break;case 38:a.up=0;break;case 40:a.down=0;break;default:return}if(l&&!(a.left|a.right|a.up|a.down))l=clearInterval(l);y.preventDefault()}function c(y){switch(y.charCode){case 45:case 95:j.zoom(Math.ceil(j.zoom())-1);break;case 43:case 61:j.zoom(Math.floor(j.zoom())+1);break;default:return}y.preventDefault()}function k(){if(j)if(!(Date.now()<
-g+o)){var y=(a.left-a.right)*m,A=(a.up-a.down)*m;if(y||A)j.panBy({x:y,y:A})}}var h={},a={left:0,right:0,up:0,down:0},g=0,l,o=250,t=50,m=16,j,u;h.map=function(y){if(!arguments.length)return j;if(j){u.removeEventListener("keypress",c,false);u.removeEventListener("keydown",e,false);u.removeEventListener("keyup",f,false);u=null}if(j=y){u=j.focusableParent();u.addEventListener("keypress",c,false);u.addEventListener("keydown",e,false);u.addEventListener("keyup",f,false)}return h};h.speed=function(y){if(!arguments.length)return m;
-m=y;return h};return h};s.hash=function(){function e(){var l=g(h);if(k!==l)location.replace(k=l)}function f(){if(location.hash!==k)a((k=location.hash).substring(1))}var c={},k,h,a=function(l){l=l.split("/").map(Number);if(l.length<3||l.some(isNaN))e();else{var o=h.size();h.zoomBy(l[0]-h.zoom(),{x:o.x/2,y:o.y/2},{lat:Math.min(89.99999999,Math.max(-89.99999999,l[1])),lon:l[2]})}},g=function(l){var o=l.center();l=l.zoom();var t=Math.max(0,Math.ceil(Math.log(l)/Math.LN2));return"#"+l.toFixed(2)+"/"+o.lat.toFixed(t)+
-"/"+o.lon.toFixed(t)};c.map=function(l){if(!arguments.length)return h;if(h){h.off("move",e);window.removeEventListener("hashchange",f,false)}if(h=l){h.on("move",e);window.addEventListener("hashchange",f,false);location.hash?f():e()}return c};c.parser=function(l){if(!arguments.length)return a;a=l;return c};c.formatter=function(l){if(!arguments.length)return g;g=l;return c};return c};s.interact=function(){var e={},f=s.drag(),c=s.wheel(),k=s.dblclick(),h=s.arrow();e.map=function(a){f.map(a);c.map(a);
-k.map(a);h.map(a);return e};return e};s.compass=function(){function e(x){B.setAttribute("class","compass active");I||(I=setInterval(f,r));R&&H.panBy(R);w=Date.now();return m(x)}function f(){R&&Date.now()>w+d&&H.panBy(R)}function c(x){if(x.shiftKey){F={x0:H.mouse(x)};H.focusableParent().focus();return m(x)}}function k(x){if(F){F.x1=H.mouse(x);O.setAttribute("x",Math.min(F.x0.x,F.x1.x));O.setAttribute("y",Math.min(F.x0.y,F.x1.y));O.setAttribute("width",Math.abs(F.x0.x-F.x1.x));O.setAttribute("height",
-Math.abs(F.x0.y-F.x1.y));O.removeAttribute("display")}}function h(){B.setAttribute("class","compass");if(F){if(F.x1){H.extent([H.pointLocation({x:Math.min(F.x0.x,F.x1.x),y:Math.max(F.x0.y,F.x1.y)}),H.pointLocation({x:Math.max(F.x0.x,F.x1.x),y:Math.min(F.x0.y,F.x1.y)})]);O.setAttribute("display","none")}F=null}if(I){clearInterval(I);I=0}}function a(x){return function(){x?this.setAttribute("class","active"):this.removeAttribute("class");R=x}}function g(x){return function(D){B.setAttribute("class","compass active");
-var G=H.zoom();H.zoom(x<0?Math.ceil(G)-1:Math.floor(G)+1);return m(D)}}function l(x){return function(D){H.zoom(x);return m(D)}}function o(){this.setAttribute("class","active")}function t(){this.removeAttribute("class")}function m(x){x.stopPropagation();x.preventDefault();return false}function j(x){var D=Math.SQRT1_2*i,G=i*0.7,J=i*0.2,N=s.svg("g"),P=N.appendChild(s.svg("path")),Q=N.appendChild(s.svg("path"));P.setAttribute("class","direction");P.setAttribute("pointer-events","all");P.setAttribute("d",
-"M0,0L"+D+","+D+"A"+i+","+i+" 0 0,1 "+-D+","+D+"Z");Q.setAttribute("class","chevron");Q.setAttribute("d","M"+J+","+(G-J)+"L0,"+G+" "+-J+","+(G-J));Q.setAttribute("pointer-events","none");N.addEventListener("mousedown",e,false);N.addEventListener("mouseover",a(x),false);N.addEventListener("mouseout",a(null),false);N.addEventListener("dblclick",m,false);return N}function u(x){var D=i*0.4,G=D/2,J=s.svg("g"),N=J.appendChild(s.svg("path")),P=J.appendChild(s.svg("path")),Q=J.appendChild(s.svg("path")),
-X=J.appendChild(s.svg("path"));N.setAttribute("class","back");N.setAttribute("d","M"+-D+",0V"+-D+"A"+D+","+D+" 0 1,1 "+D+","+-D+"V0Z");P.setAttribute("class","direction");P.setAttribute("d",N.getAttribute("d"));Q.setAttribute("class","chevron");Q.setAttribute("d","M"+-G+","+-D+"H"+G+(x>0?"M0,"+(-D-G)+"V"+-G:""));X.setAttribute("class","fore");X.setAttribute("fill","none");X.setAttribute("d",N.getAttribute("d"));J.addEventListener("mousedown",g(x),false);J.addEventListener("mouseover",o,false);J.addEventListener("mouseout",
-t,false);J.addEventListener("dblclick",m,false);return J}function y(x){var D=i*0.2,G=i*0.4,J=s.svg("g"),N=J.appendChild(s.svg("rect")),P=J.appendChild(s.svg("path"));N.setAttribute("pointer-events","all");N.setAttribute("fill","none");N.setAttribute("x",-G);N.setAttribute("y",-0.75*G);N.setAttribute("width",2*G);N.setAttribute("height",1.5*G);P.setAttribute("class","chevron");P.setAttribute("d","M"+-D+",0H"+D);J.addEventListener("mousedown",l(x),false);J.addEventListener("dblclick",m,false);return J}
-function A(){var x=i+6,D=x,G=H.size();switch(q){case "top-left":break;case "top-right":x=G.x-x;break;case "bottom-left":D=G.y-D;break;case "bottom-right":x=G.x-x;D=G.y-D;break}x="translate("+x+","+D+")";M&&M.setAttribute("transform",x);v&&v.setAttribute("transform",x);for(var J in K)J==H.zoom()?K[J].setAttribute("class","active"):K[J].removeAttribute("class")}function C(){for(;B.lastChild;)B.removeChild(B.lastChild);B.appendChild(O);if(L!="none"){M=B.appendChild(s.svg("g"));M.setAttribute("class",
-"pan");var x=M.appendChild(s.svg("circle"));x.setAttribute("class","back");x.setAttribute("r",i);M.appendChild(j({x:0,y:-n})).setAttribute("transform","rotate(0)");M.appendChild(j({x:n,y:0})).setAttribute("transform","rotate(90)");M.appendChild(j({x:0,y:n})).setAttribute("transform","rotate(180)");M.appendChild(j({x:-n,y:0})).setAttribute("transform","rotate(270)");x=M.appendChild(s.svg("circle"));x.setAttribute("fill","none");x.setAttribute("class","fore");x.setAttribute("r",i)}else M=null;if(z!=
-"none"){v=B.appendChild(s.svg("g"));v.setAttribute("class","zoom");x=-0.5;if(z=="big"){K={};var D=H.zoomRange()[0];for(x=0;D<=H.zoomRange()[1];D++,x++)(K[D]=v.appendChild(y(D))).setAttribute("transform","translate(0,"+-(x+0.75)*i*0.4+")")}D=L=="none"?0.4:2;v.setAttribute("transform","translate(0,"+i*(/^top-/.test(q)?D+(x+0.5)*0.4:-D)+")");v.appendChild(u(+1)).setAttribute("transform","translate(0,"+-(x+0.5)*i*0.4+")");v.appendChild(u(-1)).setAttribute("transform","scale(-1)")}else v=null;A()}var E=
-{},B=s.svg("g"),K={},i=30,n=16,w=0,d=250,r=50,q="top-left",z="small",v,L="small",I,R,M,F,O=s.svg("rect"),H,T,U;B.setAttribute("class","compass");O.setAttribute("class","back fore");O.setAttribute("pointer-events","none");O.setAttribute("display","none");E.radius=function(x){if(!arguments.length)return i;i=x;H&&C();return E};E.speed=function(x){if(!arguments.length)return i;n=x;return E};E.position=function(x){if(!arguments.length)return q;q=x;H&&C();return E};E.pan=function(x){if(!arguments.length)return L;
-L=x;H&&C();return E};E.zoom=function(x){if(!arguments.length)return z;z=x;H&&C();return E};E.map=function(x){if(!arguments.length)return H;if(H){T.removeEventListener("mousedown",c,false);T.removeChild(B);T=null;U.removeEventListener("mousemove",k,false);U.removeEventListener("mouseup",h,false);U=null;H.off("move",A).off("resize",A)}if(H=x){T=H.container();T.appendChild(B);T.addEventListener("mousedown",c,false);U=T.ownerDocument.defaultView;U.addEventListener("mousemove",k,false);U.addEventListener("mouseup",
-h,false);H.on("move",A).on("resize",A);C()}return E};return E};s.grid=function(){function e(){var h=k.firstChild,a=c.size(),g=c.pointLocation(Y);c.pointLocation(a);var l=Math.pow(2,4-Math.round(c.zoom()));g.lat=Math.floor(g.lat/l)*l;g.lon=Math.ceil(g.lon/l)*l;for(var o;(o=c.locationPoint(g).x)<=a.x;g.lon+=l){h||(h=k.appendChild(s.svg("line")));h.setAttribute("x1",o);h.setAttribute("x2",o);h.setAttribute("y1",0);h.setAttribute("y2",a.y);h=h.nextSibling}for(;(o=c.locationPoint(g).y)<=a.y;g.lat-=l){h||
-(h=k.appendChild(s.svg("line")));h.setAttribute("y1",o);h.setAttribute("y2",o);h.setAttribute("x1",0);h.setAttribute("x2",a.x);h=h.nextSibling}for(;h;){a=h.nextSibling;k.removeChild(h);h=a}}var f={},c,k=s.svg("g");k.setAttribute("class","grid");f.map=function(h){if(!arguments.length)return c;if(c){k.parentNode.removeChild(k);c.off("move",e).off("resize",e)}if(c=h){c.on("move",e).on("resize",e);c.container().appendChild(k);c.dispatch({type:"move"})}return f};return f};s.stylist=function(){function e(h){var a=
-h.features.length,g=f.length,l=c.length,o,t,m,j,u,y;for(u=0;u<a;++u)if(t=(o=h.features[u]).element){o=o.data;for(y=0;y<g;++y){j=(m=f[y]).value;if(typeof j==="function")j=j.call(null,o);j==null?m.name.local?t.removeAttributeNS(m.name.space,m.name.local):t.removeAttribute(m.name):m.name.local?t.setAttributeNS(m.name.space,m.name.local,j):t.setAttribute(m.name,j)}for(y=0;y<l;++y){j=(m=c[y]).value;if(typeof j==="function")j=j.call(null,o);j==null?t.style.removeProperty(m.name):t.style.setProperty(m.name,
-j,m.priority)}if(j=k){if(typeof j==="function")j=j.call(null,o);for(;t.lastChild;)t.removeChild(t.lastChild);j!=null&&t.appendChild(s.svg("title")).appendChild(document.createTextNode(j))}}}var f=[],c=[],k;e.attr=function(h,a){f.push({name:fa(h),value:a});return e};e.style=function(h,a,g){c.push({name:h,value:a,priority:arguments.length<3?null:g});return e};e.title=function(h){k=h;return e};return e}})(org.polymaps);
+(function(r){function ea(d){var h=d.indexOf(":");return h<0?d:{space:r.ns[d.substring(0,h)],local:d.substring(h+1)}}function R(){for(var d=0;d<R.maps.length;d++)R.maps[d].resize()}function V(d){return 360/Math.PI*Math.atan(Math.exp(d*Math.PI/180))-90}function W(d){return 180/Math.PI*Math.log(Math.tan(Math.PI/4+d*Math.PI/360))}function Z(d,h){if(d.row>h.row){var a=d;d=h;h=a}return{x0:d.column,y0:d.row,x1:h.column,y1:h.row,dx:h.column-d.column,dy:h.row-d.row}}function ba(d,h,a,m,e){a=Math.max(a,Math.floor(h.y0));
+m=Math.min(m,Math.ceil(h.y1));if(d.x0==h.x0&&d.y0==h.y0?d.x0+h.dy/d.dy*d.dx<h.x1:d.x1-h.dy/d.dy*d.dx<h.x0){var c=d;d=h;h=c}c=d.dx/d.dy;var g=h.dx/h.dy,k=d.dx>0,t=h.dx<0;for(a=a;a<m;a++){var n=c*Math.max(0,Math.min(d.dy,a+k-d.y0))+d.x0;e(Math.floor(g*Math.max(0,Math.min(h.dy,a+t-h.y0))+h.x0),Math.ceil(n),a)}}function ca(d,h,a,m,e,c){var g=Z(d,h);h=Z(h,a);d=Z(a,d);if(g.dy>h.dy){a=g;g=h;h=a}if(g.dy>d.dy){a=g;g=d;d=a}if(h.dy>d.dy){a=h;h=d;d=a}g.dy&&ba(d,g,m,e,c);h.dy&&ba(d,h,m,e,c)}r.version="2.5.0";
+var Y={x:0,y:0};r.ns={svg:"http://www.w3.org/2000/svg",xlink:"http://www.w3.org/1999/xlink"};r.id=function(){var d=0;return function(){return++d}}();r.svg=function(d){return document.createElementNS(r.ns.svg,d)};r.transform=function(d,h,a,m,e,c){var g={},k,t,n;if(!arguments.length){d=1;h=e=a=0;m=1;c=0}g.zoomFraction=function(l){if(!arguments.length)return t;t=l;k=Math.floor(t+Math.log(Math.sqrt(d*d+h*h+a*a+m*m))/Math.LN2);n=Math.pow(2,-k);return g};g.apply=function(l){var i=Math.pow(2,-l.zoom),q=
+Math.pow(2,l.zoom-k);return{column:(d*l.column*i+a*l.row*i+e)*q,row:(h*l.column*i+m*l.row*i+c)*q,zoom:l.zoom-k}};g.unapply=function(l){var i=Math.pow(2,-l.zoom),q=Math.pow(2,l.zoom+k);return{column:(l.column*i*m-l.row*i*a-e*m+c*a)/(d*m-h*a)*q,row:(l.column*i*h-l.row*i*d-e*h+c*d)/(a*h-m*d)*q,zoom:l.zoom+k}};g.toString=function(){return"matrix("+[d*n,h*n,a*n,m*n].join(" ")+" 0 0)"};return g.zoomFraction(0)};r.cache=function(d,h){function a(i){l--;h&&h(i);delete g[i.key];if(i.next)i.next.prev=i.prev;
+else if(t=i.prev)t.next=null;if(i.prev)i.prev.next=i.next;else if(k=i.next)k.prev=null}function m(){for(var i=t;l>n;i=i.prev){if(!i)break;i.lock||a(i)}}var e={},c={},g={},k=null,t=null,n=64,l=0;e.peek=function(i){return g[[i.zoom,i.column,i.row].join("/")]};e.load=function(i,q){var w=[i.zoom,i.column,i.row].join("/"),A=g[w];if(A){if(A.prev){if(A.prev.next=A.next)A.next.prev=A.prev;else t=A.prev;A.prev=null;A.next=k;k=k.prev=A}A.lock=1;return c[w]=A}A={key:w,column:i.column,row:i.row,zoom:i.zoom,next:k,
+prev:null,lock:1};d.call(null,A,q);c[w]=g[w]=A;if(k)k.prev=A;else t=A;k=A;l++;return A};e.unload=function(i){if(!(i in c))return false;var q=c[i];q.lock=0;delete c[i];q.request&&q.request.abort(false)&&a(q);return q};e.locks=function(){return c};e.size=function(i){if(!arguments.length)return n;n=i;m();return e};e.flush=function(){m();return e};e.clear=function(){for(var i in g){var q=g[i];q.request&&q.request.abort(false);h&&h(g[i]);if(q.lock){q.lock=0;q.element.parentNode.removeChild(q.element)}}c=
+{};g={};k=t=null;l=0;return e};return e};r.url=function(d){function h(e){var c=e.zoom<0?1:1<<e.zoom,g=e.column;if(m){g=e.column%c;if(g<0)g+=c}else if(g<0||g>=c)return null;return d.replace(/{(.)}/g,function(k,t){switch(t){case "S":return a[(Math.abs(e.zoom)+e.row+g)%a.length];case "Z":return e.zoom;case "X":return g;case "Y":return e.row;case "B":var n=r.map.coordinateLocation({row:e.row,column:g,zoom:e.zoom}),l=r.map.coordinateLocation({row:e.row+1,column:g+1,zoom:e.zoom}),i=Math.ceil(Math.log(e.zoom)/
+Math.LN2);return l.lat.toFixed(i)+","+n.lon.toFixed(i)+","+n.lat.toFixed(i)+","+l.lon.toFixed(i)}return t})}var a=[],m=true;h.template=function(e){if(!arguments.length)return d;d=e;return h};h.hosts=function(e){if(!arguments.length)return a;a=e;return h};h.repeat=function(e){if(!arguments.length)return m;m=e;return h};return h};r.dispatch=function(d){var h={};d.on=function(a,m){for(var e=h[a]||(h[a]=[]),c=0;c<e.length;c++)if(e[c].handler==m)return d;e.push({handler:m,on:true});return d};d.off=function(a,
+m){var e=h[a];if(e)for(var c=0;c<e.length;c++){var g=e[c];if(g.handler==m){g.on=false;e.splice(c,1);break}}return d};return function(a){var m=h[a.type];if(m){m=m.slice();for(var e=0;e<m.length;e++){var c=m[e];c.on&&c.handler.call(d,a)}}}};r.queue=function(){function d(){if(!(e>=c||!m.length)){e++;m.pop()()}}function h(g){for(var k=0;k<m.length;k++)if(m[k]==g){m.splice(k,1);return true}return false}function a(g,k,t){function n(){l=new XMLHttpRequest;t&&l.overrideMimeType(t);l.open("GET",g,true);l.onreadystatechange=
+function(){if(l.readyState==4){e--;l.status<300&&k(l);d()}};l.send(null)}var l;m.push(n);d();return{abort:function(i){if(h(n))return true;if(i&&l){l.abort();return true}return false}}}var m=[],e=0,c=6;return{text:function(g,k,t){return a(g,function(n){n.responseText&&k(n.responseText)},t)},xml:function(g,k){return a(g,function(t){t.responseXML&&k(t.responseXML)},"application/xml")},json:function(g,k){return a(g,function(t){t.responseText&&k(JSON.parse(t.responseText))},"application/json")},image:function(g,
+k,t){function n(){l=document.createElement("img");l.onerror=function(){e--;d()};l.onload=function(){e--;t(l);d()};l.src=k;g.setAttributeNS(r.ns.xlink,"href",k)}var l;m.push(n);d();return{abort:function(i){if(h(n))return true;if(i&&l){l.src="about:";return true}return false}}}}}();r.map=function(){function d(){if(q)if(n<q[0])n=q[0];else if(n>q[1])n=q[1];l=n-(n=Math.round(n));i=Math.pow(2,l)}function h(){if(o){var f=45/Math.pow(2,n+l-3),u=Math.max(Math.abs(C*g.x+A*g.y),Math.abs(B*g.x+E*g.y)),s=V(K-
+u*f/k.y);u=V(j+u*f/k.y);t.lat=Math.max(s,Math.min(u,t.lat));s=Math.max(Math.abs(C*g.y+A*g.x),Math.abs(B*g.y+E*g.x));t.lon=Math.max(o[0].lon-s*f/k.x,Math.min(o[1].lon+s*f/k.x,t.lon))}}var a={},m,e,c=Y,g=Y,k={x:256,y:256},t={lat:37.76487,lon:-122.41948},n=12,l=0,i=1,q=[1,18],w=0,A=1,C=0,E=1,B=0,K=-180,j=180,o=[{lat:V(K),lon:-Infinity},{lat:V(j),lon:Infinity}];a.locationCoordinate=function(f){f=r.map.locationCoordinate(f);var u=Math.pow(2,n);f.column*=u;f.row*=u;f.zoom+=n;return f};a.coordinateLocation=
+r.map.coordinateLocation;a.coordinatePoint=function(f,u){var s=Math.pow(2,n-u.zoom),z=Math.pow(2,n-f.zoom),v=(u.column*s-f.column*z)*k.x*i;s=(u.row*s-f.row*z)*k.y*i;return{x:g.x+A*v-C*s,y:g.y+C*v+A*s}};a.pointCoordinate=function(f,u){var s=Math.pow(2,n-f.zoom),z=(u.x-g.x)/i,v=(u.y-g.y)/i;return{column:f.column*s+(E*z-B*v)/k.x,row:f.row*s+(B*z+E*v)/k.y,zoom:n}};a.locationPoint=function(f){var u=Math.pow(2,n+l-3)/45,s=(f.lon-t.lon)*u*k.x;f=(W(t.lat)-W(f.lat))*u*k.y;return{x:g.x+A*s-C*f,y:g.y+C*s+A*
+f}};a.pointLocation=function(f){var u=45/Math.pow(2,n+l-3),s=(f.x-g.x)*u;f=(f.y-g.y)*u;return{lon:t.lon+(E*s-B*f)/k.x,lat:V(W(t.lat)-(B*s+E*f)/k.y)}};var x=r.svg("rect");x.setAttribute("visibility","hidden");x.setAttribute("pointer-events","all");a.container=function(f){if(!arguments.length)return m;m=f;m.setAttribute("class","map");m.appendChild(x);return a.resize()};a.focusableParent=function(){for(var f=m;f;f=f.parentNode)if(f.tabIndex>=0)return f;return window};a.mouse=function(f){var u=(m.ownerSVGElement||
+m).createSVGPoint();if($<0&&(window.scrollX||window.scrollY)){var s=document.body.appendChild(r.svg("svg"));s.style.position="absolute";s.style.top=s.style.left="0px";var z=s.getScreenCTM();$=!(z.f||z.e);document.body.removeChild(s)}if($){u.x=f.pageX;u.y=f.pageY}else{u.x=f.clientX;u.y=f.clientY}return u.matrixTransform(m.getScreenCTM().inverse())};a.size=function(f){if(!arguments.length)return c;e=f;return a.resize()};a.resize=function(){if(e){c=e;R.remove(a)}else{x.setAttribute("width","100%");x.setAttribute("height",
+"100%");b=x.getBBox();c={x:b.width,y:b.height};R.add(a)}x.setAttribute("width",c.x);x.setAttribute("height",c.y);g={x:c.x/2,y:c.y/2};h();a.dispatch({type:"resize"});return a};a.tileSize=function(f){if(!arguments.length)return k;k=f;a.dispatch({type:"move"});return a};a.center=function(f){if(!arguments.length)return t;t=f;h();a.dispatch({type:"move"});return a};a.panBy=function(f){var u=45/Math.pow(2,n+l-3),s=f.x*u;f=f.y*u;return a.center({lon:t.lon+(B*f-E*s)/k.x,lat:V(W(t.lat)+(B*s+E*f)/k.y)})};a.centerRange=
+function(f){if(!arguments.length)return o;if(o=f){K=o[0].lat>-90?W(o[0].lat):-Infinity;j=o[0].lat<90?W(o[1].lat):Infinity}else{K=-Infinity;j=Infinity}h();a.dispatch({type:"move"});return a};a.zoom=function(f){if(!arguments.length)return n+l;n=f;d();return a.center(t)};a.zoomBy=function(f,u,s){if(arguments.length<2)return a.zoom(n+l+f);if(arguments.length<3)s=a.pointLocation(u);n=n+l+f;d();var z=a.locationPoint(s);return a.panBy({x:u.x-z.x,y:u.y-z.y})};a.zoomRange=function(f){if(!arguments.length)return q;
+q=f;return a.zoom(n+l)};a.extent=function(f){if(!arguments.length)return[a.pointLocation({x:0,y:c.y}),a.pointLocation({x:c.x,y:0})];var u=a.locationPoint(f[0]),s=a.locationPoint(f[1]),z=Math.max((s.x-u.x)/c.x,(u.y-s.y)/c.y);u=a.pointLocation({x:(u.x+s.x)/2,y:(u.y+s.y)/2});n=n+l-Math.log(z)/Math.LN2;d();return a.center(u)};a.angle=function(f){if(!arguments.length)return w;w=f;A=Math.cos(w);C=Math.sin(w);E=Math.cos(-w);B=Math.sin(-w);h();a.dispatch({type:"move"});return a};a.add=function(f){f.map(a);
+return a};a.remove=function(f){f.map(null);return a};a.dispatch=r.dispatch(a);return a};R.maps=[];R.add=function(d){for(var h=0;h<R.maps.length;h++)if(R.maps[h]==d)return;R.maps.push(d)};R.remove=function(d){for(var h=0;h<R.maps.length;h++)if(R.maps[h]==d){R.maps.splice(h,1);return}};window.addEventListener("resize",R,false);window.addEventListener("load",R,false);r.map.locationCoordinate=function(d){var h=1/360;return{column:(d.lon+180)*h,row:(180-W(d.lat))*h,zoom:0}};r.map.coordinateLocation=function(d){var h=
+45/Math.pow(2,d.zoom-3);return{lon:h*d.column-180,lat:V(180-h*d.row)}};var $=/WebKit/.test(navigator.userAgent)?-1:0;r.layer=function(d,h){function a(B){for(var K=C[0].nextSibling;A<B;A++){q.insertBefore(C[-4],K);q.insertBefore(C[2],K);q.insertBefore(C[1],K);for(var j=C[-4],o=-4;o<2;)C[o]=C[++o];C[o]=j}}function m(B){for(var K=C[0].nextSibling;A>B;A--){q.insertBefore(C[-1],K);q.insertBefore(C[2],C[-4]);for(var j=C[2],o=2;o>-4;)C[o]=C[--o];C[o]=j}}function e(){function B(N){var H=N.zoom,T=H<0?1:1<<
+H,U=N.column%T,y=N.row;if(U<0)U+=T;return{locationPoint:function(D){D=r.map.locationCoordinate(D);var G=Math.pow(2,H-D.zoom);return{x:s.x*(G*D.column-U),y:s.y*(G*D.row-y)}}}}function K(N,H,T){var U=I.zoom,y=2-S,D=4+S;for(N=N;N<H;N++){var G=g.load({column:N,row:T,zoom:U},B);if(!G.ready&&!(G.key in O)){G.proxyRefs={};for(var J,M,P,Q=1;Q<=y;Q++){M=true;for(var X=0,da=1<<Q;X<=da;X++)for(var aa=0;aa<=da;aa++)if((P=g.peek(J={column:(N<<Q)+aa,row:(T<<Q)+X,zoom:U+Q}))&&P.ready){O[P.key]=g.load(J);P.proxyCount++;
+G.proxyRefs[P.key]=P}else M=false;if(M)break}if(!M)for(Q=1;Q<=D;Q++)if((P=g.peek(J={column:N>>Q,row:T>>Q,zoom:U-Q}))&&P.ready){O[P.key]=g.load(J);P.proxyCount++;G.proxyRefs[P.key]=P;break}}O[G.key]=G}}var j=c.map(),o=j.zoom(),x=o-(o=Math.round(o)),f=j.size(),u=j.angle(),s=j.tileSize(),z=j.locationCoordinate(j.center());if(A!=o){if(A<o)a(o);else if(A>o)m(o);else A=o;for(var v=-4;v<=2;v++){var L=C[v];L.setAttribute("class","zoom"+(v<0?"":"+")+v+" zoom"+(o+v));L.setAttribute("transform","scale("+Math.pow(2,
+-v)+")")}}q.setAttribute("transform","translate("+f.x/2+","+f.y/2+")"+(u?"rotate("+u/Math.PI*180+")":"")+(x?"scale("+Math.pow(2,x)+")":"")+(w?w.zoomFraction(x):""));var I=j.pointCoordinate(z,Y);v=j.pointCoordinate(z,{x:f.x,y:0});o=j.pointCoordinate(z,f);j=j.pointCoordinate(z,{x:0,y:f.y});if(!x&&!u&&!w){z.column=(Math.round(s.x*z.column)+(f.x&1)/2)/s.x;z.row=(Math.round(s.y*z.row)+(f.y&1)/2)/s.y}if(w){I=w.unapply(I);v=w.unapply(v);o=w.unapply(o);j=w.unapply(j);z=w.unapply(z)}var S=n?n(I.zoom)-I.zoom:
+0;if(S){f=Math.pow(2,S);I.column*=f;I.row*=f;v.column*=f;v.row*=f;o.column*=f;o.row*=f;j.column*=f;j.