diff --git a/.vscode/settings.json b/.vscode/settings.json
index 0e3adf1..8b4a03a 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -10,6 +10,9 @@
"flvjs",
"indicatorsize",
"lambo",
+ "mapbox",
+ "maxzoom",
+ "minzoom",
"remuxer",
"stylelint",
"transmuxer",
diff --git a/docs/index.md b/docs/index.md
index 3255e9f..aa15139 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -1,40 +1,81 @@
---
hero:
title: lambo
- description: 致力于提升前端开发效率与规范
+ description: 致力于提升前端开发效率与规范(开发前请先阅读开发流程)
actions:
- text: 快速上手
link: /bizs
-features:
- - title: biz
- emoji: 🍑
- description: 业务库
- - title: hooks
- emoji: 💎
- description: hooks
- - title: func
- emoji: 🌈
- description: 常用函数库
- - title: meta
- emoji: ☀️
- description: 原子组件库
- - title: constants
- emoji: 🈶️
- description: 静态定义库
- - title: request
- emoji: 🥣
- description: 网络请求库
- - title: types
- emoji: 🈸
- description: typescript 声明库
- - title: material
- emoji: 🥱
- description: 物料库
- - title: cli
- emoji: 🐔
- description: 脚手架
+# features:
+# - title: biz
+# emoji: 🍑
+# description: 业务库
+# - title: hooks
+# emoji: 💎
+# description: hooks
+# - title: func
+# emoji: 🌈
+# description: 常用函数库
+# - title: meta
+# emoji: ☀️
+# description: 原子组件库
+# - title: constants
+# emoji: 🈶️
+# description: 静态定义库
+# - title: request
+# emoji: 🥣
+# description: 网络请求库
+# - title: types
+# emoji: 🈸
+# description: typescript 声明库
+# - title: material
+# emoji: 🥱
+# description: 物料库
+# - title: cli
+# emoji: 🐔
+# description: 脚手架
---
+## 开发流程
+
+### 1. 确定需求
+
+从 gitlab 上的 [issue](http://10.0.0.88/web-project/zhst-lambo/boards) 模块找到对应的需求。将 Assignee 负责人指派为自己(如果多人协同开发可以将需求拆分为多个需求,分别指派),然后将 Labels 标签改为 doing 状态。(截止日期选填)
+
+> issuse 命名规则:@zhst/{包名} - {模块名},然后在详情页描述对应需求。
+
+### 2. 创建 git 分支
+
+按照 git flow 规范从 [master](http://10.0.0.88/web-project/zhst-lambo) 上创建分支, 分支的命名规则参考:
+
+1. feat/XXX: 需求新增
+2. hotfix/XXX: bug 修复
+
+### 3. 开始开发
+
+进入项目文件夹,在 packages 下找到对应的 npm 包, 然后在 src 目录下按已有的格式进行开发,如果是功能变更就找到对应的页面进行修改
+
+### 4. 提交代码,并提交 mr 到 develop 分支
+
+完成开发后,给代码提交 commit,格式参考 ${行为}(${影响范围}): ${变更内容}, 例如:
+
+> feat(package.json): 修改版本号
+> fix(app.ts): 修改环境变量
+
+对应的变更会在最终的 npm 包版本号体现:a.b.c - a 对应重构(一般用不上) - b 对应 feat(功能新增) - c 对应 hotfix(一般是 bug 修复)
+
+push 完代码之后,在 gitlab 上提交一个 mr 到 develop 分支,指定给对应的人员审核(@江志雄),合并成功之后,将 [issue](http://10.0.0.88/web-project/zhst-lambo/boards) 对应的 Labels 状态改为 waittingPublish。
+
+### 5. 发布成功
+
+发布成功之后,会有两个行为:
+
+1. 在钉钉群通知发布成功。
+2. 生成线上预览[说明文档](http://10.0.0.204:30080)
+
+一旦触发了钉钉通知,则需要去到 [issue](http://10.0.0.88/web-project/zhst-lambo/boards) 板块将对应的需求 **close** 掉。
+
+这就是 npm 包整个开发链路。
+
## 目录结构
diff --git a/global.d.ts b/global.d.ts
index 1ea3960..b854b33 100644
--- a/global.d.ts
+++ b/global.d.ts
@@ -1 +1,4 @@
declare module '*.less';
+declare module '*.png';
+declare module '*.jpg';
+declare module '*.jpeg';
diff --git a/packages/map/CHANGELOG.md b/packages/map/CHANGELOG.md
index 7eaf889..de0e146 100644
--- a/packages/map/CHANGELOG.md
+++ b/packages/map/CHANGELOG.md
@@ -1,5 +1,16 @@
# @zhst/map
+## 0.3.0
+
+### Minor Changes
+
+- zhst/map:拓展地图 api,加入 tools 组件、cluster 组价、marker 组件、draw 组件、popup 组件;zhst/mata:添加 floatButton 组件
+
+### Patch Changes
+
+- Updated dependencies
+ - @zhst/meta@0.22.0
+
## 0.2.1
### Patch Changes
diff --git a/packages/map/README.md b/packages/map/README.md
index ffa1663..7d430c4 100644
--- a/packages/map/README.md
+++ b/packages/map/README.md
@@ -2,7 +2,9 @@
## 介绍
-地图库,基于map-box开发
+地图库,基于map-box开发,配合 @turf/turf 工具能达到地图交互体验感最大化。
+
+设计的初衷是将业务中常见的一些模块抽离成组件的形式。在不影响地图原有的api的情况下,进行增量定制化开发。
## 安装
diff --git a/packages/map/es/MapBox.js b/packages/map/es/MapBox.js
index 29e7f4b..244f3dd 100644
--- a/packages/map/es/MapBox.js
+++ b/packages/map/es/MapBox.js
@@ -1,52 +1,195 @@
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
-var _excluded = ["style", "children", "mapRef", "onLoad", "mapCenter", "mapConfig"];
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
+var _excluded = ["style", "children", "height", "width", "draw", "markerData", "sluterData", "popUpInfo", "showPopUp", "toolsBarOpen", "showMarker", "showCluster", "clusterProps", "interactiveLayerIds", "buttonList", "onMarkerClick", "onPopUpClose", "customMarkerRender", "onLoad", "onDrawCreate", "onDrawUpdate", "onDrawDelete", "onToolClick"];
+function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
+function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
+function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : String(i); }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
+function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
+function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
+function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
+function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
+function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
+function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
+function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
import 'mapbox-gl/dist/mapbox-gl.css';
+import '@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css';
+import React, { forwardRef, useImperativeHandle, useMemo, useRef, useState } from 'react';
import Map from 'react-map-gl';
+import classnames from 'classnames';
+import { merge } from '@zhst/func';
+import Tools from "./components/tools";
+import DrawControl from "./components/drawControl";
+import { defaultMapConfig } from "./utils/constants";
import "./index.less";
-import React from 'react';
-import { merge } from "./utils";
-import { MAP_CENTER, defaultMapConfig } from "./constants";
-var MapBox = function MapBox(props) {
+import mapboxDrawStyle from "./utils/drawStyle";
+import Marker from "./components/marker";
+import PopUp from "./components/popup";
+import Cluster from "./components/clusters/Clusters";
+import { clusterLayer } from "./components/clusters/layers";
+var componentName = 'zhst-map';
+var MapBox = /*#__PURE__*/forwardRef(function (props, ref) {
var _ref = props || {},
_ref$style = _ref.style,
style = _ref$style === void 0 ? {} : _ref$style,
children = _ref.children,
- mapRef = _ref.mapRef,
- _onLoad = _ref.onLoad,
- _ref$mapCenter = _ref.mapCenter,
- mapCenter = _ref$mapCenter === void 0 ? MAP_CENTER : _ref$mapCenter,
- _ref$mapConfig = _ref.mapConfig,
- mapConfig = _ref$mapConfig === void 0 ? {} : _ref$mapConfig,
+ _ref$height = _ref.height,
+ height = _ref$height === void 0 ? 600 : _ref$height,
+ _ref$width = _ref.width,
+ width = _ref$width === void 0 ? '100%' : _ref$width,
+ draw = _ref.draw,
+ _ref$markerData = _ref.markerData,
+ markerData = _ref$markerData === void 0 ? [] : _ref$markerData,
+ _ref$sluterData = _ref.sluterData,
+ sluterData = _ref$sluterData === void 0 ? [] : _ref$sluterData,
+ _ref$popUpInfo = _ref.popUpInfo,
+ popUpInfo = _ref$popUpInfo === void 0 ? {
+ longitude: 0,
+ latitude: 0
+ } : _ref$popUpInfo,
+ showPopUp = _ref.showPopUp,
+ toolsBarOpen = _ref.toolsBarOpen,
+ _ref$showMarker = _ref.showMarker,
+ showMarker = _ref$showMarker === void 0 ? true : _ref$showMarker,
+ _ref$showCluster = _ref.showCluster,
+ showCluster = _ref$showCluster === void 0 ? false : _ref$showCluster,
+ clusterProps = _ref.clusterProps,
+ _ref$interactiveLayer = _ref.interactiveLayerIds,
+ interactiveLayerIds = _ref$interactiveLayer === void 0 ? [] : _ref$interactiveLayer,
+ _ref$buttonList = _ref.buttonList,
+ buttonList = _ref$buttonList === void 0 ? [{
+ label: '圆形框选',
+ key: 'circle',
+ icon: 'icon-yuan',
+ onClick: function onClick() {
+ var _drawControlRef$curre, _drawControlRef$curre2;
+ return (_drawControlRef$curre = drawControlRef.current) === null || _drawControlRef$curre === void 0 || (_drawControlRef$curre = _drawControlRef$curre.drawer) === null || _drawControlRef$curre === void 0 || (_drawControlRef$curre2 = _drawControlRef$curre.changeMode) === null || _drawControlRef$curre2 === void 0 ? void 0 : _drawControlRef$curre2.call(_drawControlRef$curre, 'simple_select');
+ }
+ }, {
+ label: '矩形框选',
+ key: 'rect',
+ icon: 'icon-fang',
+ onClick: function onClick() {
+ var _drawControlRef$curre3, _drawControlRef$curre4;
+ return (_drawControlRef$curre3 = drawControlRef.current) === null || _drawControlRef$curre3 === void 0 || (_drawControlRef$curre3 = _drawControlRef$curre3.drawer) === null || _drawControlRef$curre3 === void 0 || (_drawControlRef$curre4 = _drawControlRef$curre3.changeMode) === null || _drawControlRef$curre4 === void 0 ? void 0 : _drawControlRef$curre4.call(_drawControlRef$curre3, 'draw_rect');
+ },
+ popoverProps: {
+ placement: 'bottom',
+ content: '自定义内容'
+ }
+ }, {
+ label: '多边形框选',
+ key: 'more',
+ icon: 'icon-duobianxing',
+ onClick: function onClick() {
+ var _drawControlRef$curre5, _drawControlRef$curre6;
+ return (_drawControlRef$curre5 = drawControlRef.current) === null || _drawControlRef$curre5 === void 0 || (_drawControlRef$curre5 = _drawControlRef$curre5.drawer) === null || _drawControlRef$curre5 === void 0 || (_drawControlRef$curre6 = _drawControlRef$curre5.changeMode) === null || _drawControlRef$curre6 === void 0 ? void 0 : _drawControlRef$curre6.call(_drawControlRef$curre5, 'draw_polygon');
+ }
+ }, {
+ label: '路径框选',
+ key: 'path',
+ icon: 'icon-lujingkuangxuannor',
+ onClick: function onClick() {
+ var _drawControlRef$curre7, _drawControlRef$curre8;
+ return (_drawControlRef$curre7 = drawControlRef.current) === null || _drawControlRef$curre7 === void 0 || (_drawControlRef$curre7 = _drawControlRef$curre7.drawer) === null || _drawControlRef$curre7 === void 0 || (_drawControlRef$curre8 = _drawControlRef$curre7.changeMode) === null || _drawControlRef$curre8 === void 0 ? void 0 : _drawControlRef$curre8.call(_drawControlRef$curre7, 'draw_line_string');
+ }
+ }, {
+ label: '测距',
+ key: 'path',
+ icon: 'icon-ceju',
+ onClick: function onClick() {
+ var _drawControlRef$curre9, _drawControlRef$curre10;
+ return (_drawControlRef$curre9 = drawControlRef.current) === null || _drawControlRef$curre9 === void 0 || (_drawControlRef$curre9 = _drawControlRef$curre9.drawer) === null || _drawControlRef$curre9 === void 0 || (_drawControlRef$curre10 = _drawControlRef$curre9.changeMode) === null || _drawControlRef$curre10 === void 0 ? void 0 : _drawControlRef$curre10.call(_drawControlRef$curre9, 'draw_line_string');
+ }
+ }, {
+ label: '清除',
+ key: 'clear',
+ icon: 'icon-gongjuxiangguanbi',
+ onClick: function onClick() {
+ var _drawControlRef$curre11;
+ return (_drawControlRef$curre11 = drawControlRef.current) === null || _drawControlRef$curre11 === void 0 || (_drawControlRef$curre11 = _drawControlRef$curre11.drawer) === null || _drawControlRef$curre11 === void 0 ? void 0 : _drawControlRef$curre11.deleteAll();
+ }
+ }] : _ref$buttonList,
+ onMarkerClick = _ref.onMarkerClick,
+ onPopUpClose = _ref.onPopUpClose,
+ customMarkerRender = _ref.customMarkerRender,
+ onLoad = _ref.onLoad,
+ onDrawCreate = _ref.onDrawCreate,
+ onDrawUpdate = _ref.onDrawUpdate,
+ onDrawDelete = _ref.onDrawDelete,
+ onToolClick = _ref.onToolClick,
others = _objectWithoutProperties(_ref, _excluded);
+ var mapRef = useRef(null);
+ var drawControlRef = useRef(null);
+
+ // 默认绘制配置
+ var _useState = useState({
+ displayControlsDefault: false,
+ position: 'top-left',
+ styles: mapboxDrawStyle,
+ // Select which mapbox-gl-draw control buttons to add to the map.
+ // @ts-ignore
+ controls: false,
+ // The user does not have to click the polygon control button first.
+ defaultMode: 'draw_polygon'
+ }),
+ _useState2 = _slicedToArray(_useState, 1),
+ drawConfig = _useState2[0];
+ var initMarker = useMemo(function () {
+ return markerData.map(function (_item) {
+ return /*#__PURE__*/React.createElement(Marker, _extends({
+ customMarkerRender: customMarkerRender,
+ onMarkerClick: onMarkerClick
+ }, _item));
+ });
+ }, [markerData]);
+ useImperativeHandle(ref, function () {
+ var _drawControlRef$curre12;
+ return {
+ mapRef: mapRef.current,
+ drawer: (_drawControlRef$curre12 = drawControlRef.current) === null || _drawControlRef$curre12 === void 0 ? void 0 : _drawControlRef$curre12.drawer
+ };
+ });
return (
/*#__PURE__*/
//@ts-ignore
- React.createElement(Map, _extends({
- ref: function ref(e) {
- if (mapRef) {
- mapRef.current = e;
- }
- },
- onLoad: function onLoad(e) {
- _onLoad && _onLoad(e);
- },
+ React.createElement("div", {
+ className: classnames("".concat(componentName))
+ }, /*#__PURE__*/React.createElement(Tools, {
+ open: toolsBarOpen,
+ buttonList: buttonList,
+ onToolClick: onToolClick
+ }), /*#__PURE__*/React.createElement(Map, _extends({
+ ref: mapRef,
+ onLoad: onLoad,
style: _objectSpread({
- width: '100%',
- height: 600
- }, style)
- }, merge(defaultMapConfig, mapConfig), {
- initialViewState: _objectSpread(_objectSpread({}, mapCenter), {}, {
- zoom: 10
- })
- }, others), children)
+ width: width,
+ height: height
+ }, style),
+ interactiveLayerIds: [clusterLayer.id].concat(_toConsumableArray(interactiveLayerIds))
+ }, merge(defaultMapConfig, others)), showMarker && initMarker, showPopUp && popUpInfo && /*#__PURE__*/React.createElement(PopUp, _extends({
+ onClose: onPopUpClose
+ }, popUpInfo)), showCluster && !showMarker && /*#__PURE__*/React.createElement(Cluster, _extends({
+ type: "geojson",
+ cluster: true,
+ clusterMaxZoom: 14,
+ clusterRadius: 50,
+ data: sluterData
+ }, clusterProps)), draw && /*#__PURE__*/React.createElement(DrawControl, _extends({
+ ref: drawControlRef,
+ onCreate: onDrawCreate,
+ onUpdate: onDrawUpdate,
+ onDelete: onDrawDelete,
+ onSelectionChange: function onSelectionChange(e) {
+ return console.log('e', e);
+ }
+ }, drawConfig)), children))
);
-};
+});
export default MapBox;
\ No newline at end of file
diff --git a/packages/map/es/constants.js b/packages/map/es/constants.js
deleted file mode 100644
index 13c186f..0000000
--- a/packages/map/es/constants.js
+++ /dev/null
@@ -1,47 +0,0 @@
-export var mapboxAccessToken = 'pk.eyJ1IjoiZGluZ2xpMTIzIiwiYSI6ImNra204ODhjczBobTgyeHJ6MmJpZHMxNWgifQ.NbKrXh_hb2gvjr5CEMDnyQ';
-export var MAP_CENTER = {
- longitude: 120.2667694313269,
- latitude: 30.180942826533766
-}; //地图中心
-var MapUrl = 'http://10.0.0.120:30003/map';
-export var defaultMapConfig = {
- mapboxAccessToken: mapboxAccessToken,
- maxZoom: 18,
- minZoom: 4,
- dragRotate: false,
- mapStyle: {
- version: 8,
- name: 'Mapbox Streets',
- // sprite: `${location.origin}/mapbox/sprite`, // 地图图标
- glyphs: 'mapbox://fonts/mapbox/{fontstack}/{range}.pbf',
- // 字体
- sources: {
- //数据源
- 'osm-tiles': {
- type: 'raster',
- //栅格切片。vector:矢量切片
- // Z-瓦片层级,一般支持0-18级,越大代表越清晰;
- // X-瓦片列号,从西向东(0->360),依次0,1,2,……;
- // Y-瓦片行号,从北向南(有些也可能是从南向北),依次0,1,2,……;
- tiles: ["".concat(MapUrl, "/api/tilesets/mapfile/{z}/{x}/{y}.png")],
- //在线地址,先写死120
- tileSize: 256 //切片的最小展示尺寸(可选,单位:像素,默认值为 512,即 1024/2
- }
- },
- layers: [
- // 图层。图层指定了如何渲染数据源提供的数据
- {
- id: 'zhstLayer',
- //唯一id
- type: 'raster',
- //类型 栅格。circle,symbol,line...
- source: 'osm-tiles',
- // 'source-layer': 'osmtiles',//数据源必须是type:vector
- minZoom: 4,
- //最小层级
- maxZoom: 17,
- //最大层级
- renderingMode: '2d'
- }]
- }
-};
\ No newline at end of file
diff --git a/packages/map/es/index.js b/packages/map/es/index.js
index 1662d0f..8d9edea 100644
--- a/packages/map/es/index.js
+++ b/packages/map/es/index.js
@@ -1 +1,2 @@
-export { default as MapBox } from "./MapBox";
\ No newline at end of file
+export { default as MapBox } from "./MapBox";
+export * from 'react-map-gl';
\ No newline at end of file
diff --git a/packages/map/es/index.less b/packages/map/es/index.less
index ac327e9..3369b02 100644
--- a/packages/map/es/index.less
+++ b/packages/map/es/index.less
@@ -1,3 +1,9 @@
-.mapboxgl-ctrl-attrib-button {
- display: none;
+.zhst-map {
+ position: relative;
+ width: auto;
+ height: auto;
+
+ .mapboxgl-ctrl-logo {
+ display: none;
+ }
}
diff --git a/packages/map/es/interface.js b/packages/map/es/interface.js
index 8cec2e9..e69de29 100644
--- a/packages/map/es/interface.js
+++ b/packages/map/es/interface.js
@@ -1 +0,0 @@
-export {};
\ No newline at end of file
diff --git a/packages/map/es/utils.js b/packages/map/es/utils.js
deleted file mode 100644
index 3e2ee23..0000000
--- a/packages/map/es/utils.js
+++ /dev/null
@@ -1,36 +0,0 @@
-var getRawType = function getRawType(val) {
- return Object.prototype.toString.call(val).slice(8, -1);
-};
-var isPlainObjectOrArray = function isPlainObjectOrArray(val) {
- return isPlainObject(val) || Array.isArray(val);
-};
-var isPlainObject = function isPlainObject(val) {
- return getRawType(val) === 'Object';
-};
-export var merge = function merge(object) {
- for (var _len = arguments.length, sources = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
- sources[_key - 1] = arguments[_key];
- }
- for (var _i = 0, _sources = sources; _i < _sources.length; _i++) {
- var source = _sources[_i];
- for (var key in source) {
- if (source[key] === undefined && key in object) {
- continue;
- }
- if (isPlainObjectOrArray(source[key])) {
- if (getRawType(object[key] === getRawType(source[key]))) {
- if (isPlainObject(object[key])) {
- merge(object[key], source[key]);
- } else {
- object[key] = object[key].concat(source[key]);
- }
- } else {
- object[key] = source[key];
- }
- } else {
- object[key] = source[key];
- }
- }
- }
- return object;
-};
\ No newline at end of file
diff --git a/packages/map/package.json b/packages/map/package.json
index 907a3cf..b029616 100644
--- a/packages/map/package.json
+++ b/packages/map/package.json
@@ -1,6 +1,6 @@
{
"name": "@zhst/map",
- "version": "0.2.1",
+ "version": "0.3.0",
"description": "地图库",
"keywords": [
"map",
@@ -37,7 +37,21 @@
"registry": "http://10.0.0.77:4874"
},
"dependencies": {
- "react-map-gl": "^7.1.7",
- "mapbox-gl": "^2.15.0"
+ "@mapbox/mapbox-gl-draw": "^1.4.3",
+ "@mapbox/mapbox-gl-draw-static-mode": "^1.0.1",
+ "@turf/turf": "^6.5.0",
+ "@zhst/hooks": "workspace:^0.13.1",
+ "@zhst/icon": "workspace:^0.5.0",
+ "@zhst/meta": "workspace:^",
+ "classnames": "^2.5.1",
+ "mapbox-gl": "^2.15.0",
+ "mapbox-gl-draw-circle": "^1.1.2",
+ "mapbox-gl-draw-geodesic": "^2.3.1",
+ "mapbox-gl-draw-rectangle-mode": "^1.0.4",
+ "react-map-gl": "^7.1.7"
+ },
+ "devDependencies": {
+ "@types/mapbox__mapbox-gl-draw": "^1.4.6",
+ "axios": "^1.7.2"
}
}
diff --git a/packages/map/src/MapBox.tsx b/packages/map/src/MapBox.tsx
index 4cd886a..2405c0f 100644
--- a/packages/map/src/MapBox.tsx
+++ b/packages/map/src/MapBox.tsx
@@ -1,40 +1,218 @@
import 'mapbox-gl/dist/mapbox-gl.css';
-import Map from 'react-map-gl';
+import '@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css';
+import React, { forwardRef, useImperativeHandle, useMemo, useRef, useState } from 'react';
+import Map, { PopupEvent } from 'react-map-gl';
+import { CSSProperties } from "react";
+import { MapRef, MapStyle, MapProps as MapBoxProps } from "react-map-gl";
+import classnames from 'classnames'
+import { merge } from '@zhst/func'
+import Tools, { ToolsProps } from './components/tools'
+import DrawControl, { DrawControlProps, DrawControlRefProps } from './components/drawControl';
+import { defaultMapConfig } from './utils/constants';
import './index.less';
-import React from 'react';
-import { MapProps } from './interface';
-import { merge } from './utils';
-import { MAP_CENTER, defaultMapConfig } from './constants';
+import mapboxDrawStyle from './utils/drawStyle';
+import Marker, { MarkerProps } from './components/marker';
+import PopUp, { PopUpProps } from './components/popup';
+import Cluster, { ClusterProps } from './components/clusters/Clusters';
+import { clusterLayer } from './components/clusters/layers';
-const MapBox: React.FC = (props) => {
+const componentName = 'zhst-map'
+
+export interface MapProps extends MapBoxProps {
+ mapboxAccessToken?: string //token
+ markerData?: MarkerProps[]
+ minZoom?: number //最小层级
+ maxZoom?: number //最大层级
+ mapStyle?: MapStyle //地图样式
+ height?: number | string
+ width?: string | number
+ mapRef?: MapRef
+ style?: CSSProperties
+ children?: JSX.Element | JSX.Element[] | Array
+ sluterData?: any;
+ draw?: boolean
+ showMarker?: boolean // 显示标记点
+ showCluster?: boolean // 显示范围统计
+ buttonList?: ToolsProps['buttonList']
+ popUpInfo?: PopUpProps
+ showPopUp?: boolean
+ clusterProps?: ClusterProps
+ toolsBarOpen?: boolean
+ customMarkerRender?: MarkerProps['customMarkerRender']
+ onLoad?: (e: mapboxgl.MapboxEvent) => void
+ onDrawCreate?: (e: { features: object[], [key: string]: any }) => void
+ onDrawUpdate?: (e: { features: object[], [key: string]: any }) => void
+ onDrawDelete?: (e: { features: object[], [key: string]: any }) => void
+ onMarkerClick?: MarkerProps['onMarkerClick']
+ onPopUpClose?: (e: PopupEvent) => void;
+ onToolClick?: ToolsProps['onToolClick']
+}
+
+export interface MapRefProps {
+}
+
+const MapBox = forwardRef((props, ref) => {
const {
style = {},
children,
- mapRef,
+ height = 600,
+ width = '100%',
+ draw,
+ markerData = [],
+ sluterData = [],
+ popUpInfo = {
+ longitude: 0,
+ latitude: 0
+ },
+ showPopUp,
+ toolsBarOpen,
+ showMarker = true,
+ showCluster = false,
+ clusterProps,
+ interactiveLayerIds = [],
+ buttonList = [
+ {
+ label: '圆形框选',
+ key: 'circle',
+ icon: 'icon-yuan',
+ onClick: () => drawControlRef.current?.drawer?.changeMode?.('simple_select')
+ },
+ {
+ label: '矩形框选',
+ key: 'rect',
+ icon: 'icon-fang',
+ onClick: () => drawControlRef.current?.drawer?.changeMode?.('draw_rect'),
+ popoverProps: {
+ placement: 'bottom',
+ content: '自定义内容'
+ }
+ },
+ {
+ label: '多边形框选',
+ key: 'more',
+ icon: 'icon-duobianxing',
+ onClick: () => drawControlRef.current?.drawer?.changeMode?.('draw_polygon')
+ },
+ {
+ label: '路径框选',
+ key: 'path',
+ icon: 'icon-lujingkuangxuannor',
+ onClick: () => drawControlRef.current?.drawer?.changeMode?.('draw_line_string')
+ },
+ {
+ label: '测距',
+ key: 'path',
+ icon: 'icon-ceju',
+ onClick: () => drawControlRef.current?.drawer?.changeMode?.('draw_line_string')
+ },
+ {
+ label: '清除',
+ key: 'clear',
+ icon: 'icon-gongjuxiangguanbi',
+ onClick: () => drawControlRef.current?.drawer?.deleteAll()
+ }
+ ],
+ onMarkerClick,
+ onPopUpClose,
+ customMarkerRender,
onLoad,
- mapCenter = MAP_CENTER,
- mapConfig = {},
+ onDrawCreate,
+ onDrawUpdate,
+ onDrawDelete,
+ onToolClick,
...others
} = props || {};
+ const mapRef = useRef(null)
+ const drawControlRef = useRef(null)
+
+ // 默认绘制配置
+ const [drawConfig] = useState({
+ displayControlsDefault: false,
+ position: 'top-left',
+
+ styles: mapboxDrawStyle,
+ // Select which mapbox-gl-draw control buttons to add to the map.
+ // @ts-ignore
+ controls: false,
+ // The user does not have to click the polygon control button first.
+ defaultMode: 'draw_polygon',
+ })
+
+ const initMarker = useMemo(
+ () => {
+ return markerData.map((_item) => (
+
+ ))
+ }, [markerData]
+ );
+
+ useImperativeHandle(ref, () => ({
+ mapRef: mapRef.current,
+ drawer: drawControlRef.current?.drawer,
+ }))
+
return (
//@ts-ignore
-
+
+
+ {/* @ts-ignore */}
+
+
);
-};
+});
export default MapBox;
diff --git a/packages/map/src/assets/icons/camera_blue.png b/packages/map/src/assets/icons/camera_blue.png
new file mode 100644
index 0000000..14cfa80
Binary files /dev/null and b/packages/map/src/assets/icons/camera_blue.png differ
diff --git a/packages/map/src/assets/icons/camera_green.png b/packages/map/src/assets/icons/camera_green.png
new file mode 100644
index 0000000..0572538
Binary files /dev/null and b/packages/map/src/assets/icons/camera_green.png differ
diff --git a/packages/map/src/assets/icons/camera_grey.png b/packages/map/src/assets/icons/camera_grey.png
new file mode 100644
index 0000000..cf271bd
Binary files /dev/null and b/packages/map/src/assets/icons/camera_grey.png differ
diff --git a/packages/map/src/assets/icons/camera_red.png b/packages/map/src/assets/icons/camera_red.png
new file mode 100644
index 0000000..7470540
Binary files /dev/null and b/packages/map/src/assets/icons/camera_red.png differ
diff --git a/packages/map/src/assets/icons/camera_red_border.png b/packages/map/src/assets/icons/camera_red_border.png
new file mode 100644
index 0000000..9c0774b
Binary files /dev/null and b/packages/map/src/assets/icons/camera_red_border.png differ
diff --git a/packages/map/src/assets/icons/camera_yellow.png b/packages/map/src/assets/icons/camera_yellow.png
new file mode 100644
index 0000000..00eeaab
Binary files /dev/null and b/packages/map/src/assets/icons/camera_yellow.png differ
diff --git a/packages/map/src/assets/icons/cluster_blue.png b/packages/map/src/assets/icons/cluster_blue.png
new file mode 100644
index 0000000..ac7f5c5
Binary files /dev/null and b/packages/map/src/assets/icons/cluster_blue.png differ
diff --git a/packages/map/src/assets/icons/cluster_red.png b/packages/map/src/assets/icons/cluster_red.png
new file mode 100644
index 0000000..395f082
Binary files /dev/null and b/packages/map/src/assets/icons/cluster_red.png differ
diff --git a/packages/map/src/assets/icons/cluster_red_border.png b/packages/map/src/assets/icons/cluster_red_border.png
new file mode 100644
index 0000000..940203e
Binary files /dev/null and b/packages/map/src/assets/icons/cluster_red_border.png differ
diff --git a/packages/map/src/assets/icons/cluterImage.json b/packages/map/src/assets/icons/cluterImage.json
new file mode 100644
index 0000000..9d9e67c
--- /dev/null
+++ b/packages/map/src/assets/icons/cluterImage.json
@@ -0,0 +1,79 @@
+[{
+ "key": "UNCLUTER",
+ "state": [{
+ "type": "NORMAL",
+ "bgImage": "",
+ "bgColor": "#0099ff",
+ "frontImage": "",
+ "frontColor": "red",
+ "ripple": false,
+ "redDot": false,
+ "name": "IMAGE_UNCLUTER_NORMAL"
+ },
+ {
+ "type": "RUNING",
+ "backImage": "",
+ "backColor": "green",
+ "frontImage": "",
+ "frontColor": "red",
+ "ripple": false,
+ "redDot": false,
+ "name": "IMAGE_UNCLUTER_RUNING"
+ },
+ {
+ "type": "NORMAL_SELECT",
+ "backImage": "",
+ "backColor": "yellow",
+ "frontImage": "",
+ "frontColor": "red",
+ "ripple": false,
+ "redDot": false,
+ "name": "IMAGE_UNCLUTER_NORMAL_SELECT"
+ },
+ {
+ "type": "RUNING_SELECT",
+ "backImage": "",
+ "backColor": "red",
+ "frontImage": "",
+ "frontColor": "blue",
+ "ripple": false,
+ "redDot": false,
+ "name": "IMAGE_UNCLUTER_RUNING_SELECT"
+ }
+ ]
+ },
+ {
+ "key": "APPEARCLUTER_RED",
+ "state": [{
+ "type": "BLUE",
+ "bgImage": "",
+ "bgColor": "#0099ff",
+ "frontImage": "",
+ "frontColor": "#ffffff",
+ "ripple": false,
+ "redDot": false,
+ "name": "IMAGE_APPEARCLUTER_BLUE"
+ },
+ {
+ "type": "YELLOW",
+ "bgImage": "",
+ "bgColor": "#FF9900",
+ "frontImage": "",
+ "frontColor": "#ffffff",
+ "ripple": false,
+ "redDot": false,
+ "name": "IMAGE_APPEARCLUTER_YELLOW"
+ },
+ {
+ "type": "RED",
+ "bgImage": "",
+ "bgColor": "#F25051",
+ "frontImage": "",
+ "frontColor": "#ffffff",
+ "ripple": false,
+ "redDot": false,
+ "name": "IMAGE_APPEARCLUTER_RED"
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/packages/map/src/assets/icons/index.ts b/packages/map/src/assets/icons/index.ts
new file mode 100644
index 0000000..da7a772
--- /dev/null
+++ b/packages/map/src/assets/icons/index.ts
@@ -0,0 +1,187 @@
+// @ts-nocheck
+//引入地图所所有点图片
+const file: { [key: string]: string } = {};
+
+const modules = import.meta.glob('./*.png', { eager: true });
+Object.keys(modules).forEach((key) => {
+ const fileNmae = key.substring(key.lastIndexOf('/') + 1, key.lastIndexOf('.'));
+ file[`${fileNmae}`] = modules[key].default;
+});
+
+export const images: { [key: string]: string } = {};
+//图片点规则
+export const unClustersImgExpressions: mapboxgl.SymbolLayout['icon-image'] = ['case'];
+export const clustersImgExpressions: mapboxgl.SymbolLayout['icon-image'] = ['case'];
+export const feClustersImgExpressions: mapboxgl.SymbolLayout['icon-image'] = ['case'];
+
+export const feclusterPrefix = 'IMG_FECLUSTER';
+export const unClusterPrefix = 'IMG_UNCLUSTER';
+export const clusterPrefix = 'IMG_CLUSTER';
+
+Object.keys(file).forEach((fileNmae) => {
+ const [prefix, type, status] = fileNmae.split('_');
+ const key = `${type.toUpperCase()}${!!status ? `_${status.toUpperCase()}` : ''}`;
+ if (prefix === 'marker') {
+ const imageId = `${unClusterPrefix}_${key}`;
+ images[imageId] = file[fileNmae];
+ unClustersImgExpressions.push(['==', ['get', 'type'], key]);
+ unClustersImgExpressions.push(imageId);
+ }
+ if (prefix === 'cluster') {
+ const imageId = `${clusterPrefix}_${key}`;
+ images[imageId] = file[fileNmae];
+ clustersImgExpressions.push(['==', ['get', 'type'], key]);
+ clustersImgExpressions.push(imageId);
+ }
+ if (prefix === 'fecluster') {
+ const imageId = `${feclusterPrefix}_${key}`;
+ images[imageId] = file[fileNmae];
+ feClustersImgExpressions.push(['==', ['get', 'type'], key]);
+ feClustersImgExpressions.push(imageId);
+ }
+});
+
+unClustersImgExpressions.push('IMG_UNCLUSTER_NORMAL');
+clustersImgExpressions.push('IMG_CLUSTER_NORMAL');
+feClustersImgExpressions.push('IMG_FECLUSTER_NORMAL');
+
+export const imageData = [];
+export const converImageByJson = (jsonData) => {
+ jsonData.map((v) => {
+ const key = v['key'];
+ v['state'].length > 0 &&
+ v['state'].map((_v) => {
+ const backWidth = 60;
+ const backHeight = 70;
+ const canvas = document.createElement('canvas');
+ canvas.width = backWidth;
+ canvas.height = backHeight;
+ const context = canvas.getContext('2d');
+ //context.clearRect(0, 0, backWidth, backHeight);
+ //context.beginPath();
+ context.fillStyle = _v['bgColor'];
+
+ context.font = '50px IconFont';
+ context.fillText(
+ eval(('("' + _v['bgImage']).replace('', '\\u').replace(';', '') + '")'),
+ 0,
+ backWidth
+ );
+ context.fillStyle = _v['frontColor'];
+ context.font = '50px IconFont';
+ context.fillText(
+ eval(('("' + _v['frontImage']).replace('', '\\u').replace(';', '') + '")'),
+ 0,
+ backWidth
+ );
+
+ //画小红点;
+ if (v['redDot']) {
+ context.fillStyle = 'red';
+ context.arc(20, 5, 3, Math.PI * 2, 0, true);
+ context.fill();
+ }
+ const targetImage = new Image();
+ targetImage.src = canvas.toDataURL('image/png');
+ imageData.push({
+ name: _v['name'],
+ targetImage: targetImage,
+ ripple: _v['ripple'],
+ });
+ });
+ });
+};
+
+function BezierEllipse2(ctx, x, y, a, b) {
+ ctx.beginPath();
+ const k = 0.5522848;
+ const ox = a * k; // 水平控制点偏移量
+ const oy = b * k; // 垂直控制点偏移量
ctx.beginPath();
+ //从椭圆的左端点开始顺时针绘制四条三次贝塞尔曲线
+ ctx.moveTo(x - a, y);
+ ctx.bezierCurveTo(x - a, y - oy, x - ox, y - b, x, y - b);
+ ctx.bezierCurveTo(x + ox, y - b, x + a, y - oy, x + a, y);
+ ctx.bezierCurveTo(x + a, y + oy, x + ox, y + b, x, y + b);
+ ctx.bezierCurveTo(x - ox, y + b, x - a, y + oy, x - a, y);
+ ctx.closePath();
+}
+
+function rgbToRgba(color, alp) {
+ const rgbaAttr = color.match(/[\d.]+/g);
+ if (rgbaAttr.length >= 3) {
+ const [r, g, b] = rgbaAttr;
+ // r = rgbaAttr[0];
+ // g = rgbaAttr[1];
+ // b = rgbaAttr[2];
+ return 'rgba(' + r + ',' + g + ',' + b + ',' + alp + ')';
+ }
+}
+export function convertImageToMap(name, map) {
+ const size = 150;
+
+ const imageObject = imageData.find((v) => v['name'] === name);
+ const initialImage = imageObject.targetImage;
+ const hasRipper = imageObject['ripple'];
+ const pulsingDot = {
+ width: size,
+ height: size,
+ data: new Uint8Array(size * size * 4),
+
+ onAdd: function () {
+ const canvas = document.createElement('canvas');
+ canvas.width = this.width;
+ canvas.height = this.height;
+ this.canvas = canvas;
+ this.context = canvas.getContext('2d');
+ },
+
+ render: function () {
+ const duration = 1.5 * 1000; //1.5s
+ const t = (performance.now() % duration) / duration;
+ const alp = 1 - t;
+ // const size = 10;
+
+ const outerRadius = (size / 2) * 1 * t;
+ const outerRadius2 = (size / 2) * 0.6 * t;
+ const context = this.context;
+ // draw outer circle
+ context.clearRect(0, 0, this.width, this.height);
+
+ context.beginPath();
+ context.drawImage(initialImage, 0, 0, this.width, this.height);
+ // context.drawImage('./cluster_escape.png', this.width / 2, this.height / 2, this.width / 2, this.height / 2);
+ // // context.arc(this.width / 2, this.height / 2, outerRadius, 0, Math.PI * 2);
+ if (hasRipper) {
+ BezierEllipse2(context, this.width / 2, this.height / 2, outerRadius, outerRadius / 2);
+ context.fillStyle = rgbToRgba('rgb(255, 100, 100)', alp);
+ context.fill();
+
+ context.beginPath();
+ // context.arc(this.width / 2, this.height / 2, outerRadius2, 0, Math.PI * 2);
+ BezierEllipse2(context, this.width / 2, this.height / 2, outerRadius2, outerRadius2 / 2);
+ context.fillStyle = rgbToRgba('rgb(255, 100, 100)', alp);
+ context.fill();
+
+ // draw inner circle
+ context.beginPath();
+ BezierEllipse2(
+ context,
+ this.width / 2,
+ this.height / 2,
+ (size / 2) * 0.2,
+ ((size / 2) * 0.2) / 2
+ );
+ // context.arc(this.width / 2, this.height / 2, (size / 2) * 1 * 0.1, 0, Math.PI * 2);
+ // context.fillStyle = 'rgba(255, 100, 100, 1)';
+ context.fillStyle = rgbToRgba('rgb(255, 100, 100)', 1);
+ context.fill();
+ }
+
+ this.data = context.getImageData(0, 0, this.width, this.height).data;
+
+ map.triggerRepaint();
+ return true;
+ },
+ };
+ return pulsingDot;
+}
diff --git a/packages/map/src/assets/icons/marker_blue.png b/packages/map/src/assets/icons/marker_blue.png
new file mode 100644
index 0000000..2b65d02
Binary files /dev/null and b/packages/map/src/assets/icons/marker_blue.png differ
diff --git a/packages/map/src/assets/icons/marker_escape.png b/packages/map/src/assets/icons/marker_escape.png
new file mode 100644
index 0000000..a357791
Binary files /dev/null and b/packages/map/src/assets/icons/marker_escape.png differ
diff --git a/packages/map/src/assets/icons/marker_escape_border.png b/packages/map/src/assets/icons/marker_escape_border.png
new file mode 100644
index 0000000..de53d47
Binary files /dev/null and b/packages/map/src/assets/icons/marker_escape_border.png differ
diff --git a/packages/map/src/assets/icons/marker_green.png b/packages/map/src/assets/icons/marker_green.png
new file mode 100644
index 0000000..777c5ac
Binary files /dev/null and b/packages/map/src/assets/icons/marker_green.png differ
diff --git a/packages/map/src/assets/icons/marker_red_border.png b/packages/map/src/assets/icons/marker_red_border.png
new file mode 100644
index 0000000..f91f77f
Binary files /dev/null and b/packages/map/src/assets/icons/marker_red_border.png differ
diff --git a/packages/map/src/assets/icons/marker_red_track.png b/packages/map/src/assets/icons/marker_red_track.png
new file mode 100644
index 0000000..2d06249
Binary files /dev/null and b/packages/map/src/assets/icons/marker_red_track.png differ
diff --git a/packages/map/src/assets/icons/marker_yellow.png b/packages/map/src/assets/icons/marker_yellow.png
new file mode 100644
index 0000000..7ab4b83
Binary files /dev/null and b/packages/map/src/assets/icons/marker_yellow.png differ
diff --git a/packages/map/src/components/clusters/Clusters.tsx b/packages/map/src/components/clusters/Clusters.tsx
new file mode 100644
index 0000000..aa65f4a
--- /dev/null
+++ b/packages/map/src/components/clusters/Clusters.tsx
@@ -0,0 +1,38 @@
+/**
+ * Created by jiangzhixiong on 2024/05/23
+ */
+import React, { forwardRef, useImperativeHandle } from 'react'
+import { Source, Layer, SourceProps } from 'react-map-gl';
+import { clusterLayer, clusterCountLayer } from './layers';
+
+// const { ConfigContext } = ConfigProvider
+
+export interface ClusterProps {
+ prefixCls?: string;
+}
+
+export interface ClusterRefProps {
+}
+
+const Cluster = forwardRef((props, ref) => {
+ const {
+ prefixCls: customizePrefixCls,
+ ...rest
+ } = props
+ // const { getPrefixCls } = useContext(ConfigContext)
+ // const componentName = getPrefixCls('map-cluster', customizePrefixCls);
+
+ useImperativeHandle(ref, () => ({}))
+
+ return (
+
+
+
+ {/* */}
+
+ )
+})
+
+export default Cluster
diff --git a/packages/map/src/components/clusters/index.tsx b/packages/map/src/components/clusters/index.tsx
new file mode 100644
index 0000000..35ddd45
--- /dev/null
+++ b/packages/map/src/components/clusters/index.tsx
@@ -0,0 +1,7 @@
+/**
+ * Created by jiangzhixiong on 2024/05/23
+ */
+import Clusters from './Clusters'
+// export type { ClustersProps, ClustersRefProps } from './Clusters'
+
+export default Clusters
diff --git a/packages/map/src/components/clusters/layers.ts b/packages/map/src/components/clusters/layers.ts
new file mode 100644
index 0000000..3177d1e
--- /dev/null
+++ b/packages/map/src/components/clusters/layers.ts
@@ -0,0 +1,327 @@
+import type { LayerProps } from 'react-map-gl';
+
+// 绘制聚合圆形
+export const clusterLayer: LayerProps = {
+ id: 'clusters',
+ type: 'circle',
+ source: 'earthquakes',
+ // "metadata": { // 元数据(可选,用于为 layer 附加任意的属性。为避免冲突,建议添加前缀,如 mapbox:)
+ // "mapbox:name": "test"
+ // },
+ // "minzoom": 0, // 最小层级(可选,取值范围为 0 ~ 24。当 style 的 zoom 小于此 minzoom 时,layer 将被隐藏)
+ // "maxzoom": 24, // 最大层级(可选,取值范围为 0 ~ 24。当 style 的 zoom 大于此 maxzoom 时,layer 将被隐藏)
+ filter: ['has', 'point_count'], // 过滤(可选,用特定的表达式过滤指定的数据源的要素。具体的表达式详见 expression)
+ paint: {
+ 'circle-color': ['step', ['get', 'point_count'], '#2eacff', 200, '#f90', 750, '#f34e52'],
+ 'circle-radius': ['step', ['get', 'point_count'], 20, 200, 30, 750, 40],
+ "circle-stroke-color": "#fff", // 圆点的描边颜色(可选,默认值为 #000000)
+ // "circle-opacity": 1, // 圆点的不透明度(可选,取值范围为 0 ~ 1,默认值为 1)
+ // "circle-blur": 0, // 圆点的虚化(可选,默认值为 0。当值为 1 时,表示把圆虚化到只有圆心是不透明的)
+ // "circle-translate": [0, 0], // 圆点的平移(可选,通过平移 [x, y] 达到一定的偏移量。默认值为 [0, 0],单位:像素。)
+ // "circle-translate-anchor": "map", // 圆点的平移锚点,即相对的参考物(可选,可选值为 map、viewport,默认为 map)
+ // "circle-pitch-scale": "map", // 地图倾斜时圆点的缩放(可选,可选值为 map、viewport,默认为 map。值为 viewport 时,圆点不会缩放)
+ // "circle-pitch-alignment": "map", // 地图倾斜时圆点的对齐方式(可选,可选值为 map、viewport,默认为 map)
+ "circle-stroke-width": 1, // 圆点的描边宽度(可选,值 >= 0,默认值为 0,单位:像素)
+ // "circle-stroke-opacity": 1 // 圆点的描边不透明度(可选,取值范围为 0 ~ 1,默认值为 1)
+ },
+};
+
+// 单个绘制圆形
+export const unclusteredPointLayer: LayerProps = {
+ id: 'unclustered-point',
+ type: 'circle',
+ source: 'earthquakes',
+ filter: ['!', ['has', 'point_count']],
+ paint: {
+ 'circle-color': '#11b4da',
+ 'circle-radius': 4,
+ 'circle-stroke-width': 1,
+ 'circle-stroke-color': '#fff'
+ }
+};
+
+
+// 绘制填充
+export const FillLayer: LayerProps = {
+ "id": "fill-id", // 唯一 id (必填)
+ "type": "fill", // 类型(必填)
+ "metadata": { // 元数据(可选,用于为 layer 附加任意的属性。为避免冲突,建议添加前缀,如 mapbox:)
+ "mapbox:name": "test"
+ },
+ "source": "source-name", // 数据源的名称(除了 layer 的 type 为 background 外,source 必填)
+ "source-layer": "source-layer-name", // 数据源的图层(只有数据源 source 的 type 为 vector 时,才能设置 source-layer,其他类型的不可以设置)
+ "minzoom": 0, // 最小层级(可选,取值范围为 0 ~ 24。当 style 的 zoom 小于此 minzoom 时,layer 将被隐藏)
+ "maxzoom": 24, // 最大层级(可选,取值范围为 0 ~ 24。当 style 的 zoom 大于此 maxzoom 时,layer 将被隐藏)
+ "filter": [], // 过滤(可选,用特定的表达式过滤指定的数据源的要素。具体的表达式详见 expression)
+ "layout": { // 布局类属性
+ "visibility": "visible", // 可见性(可选,可选值为 none、visible,默认值为 visible)
+ },
+ "paint": { // 绘制类属性
+ "fill-antialias": true, // 填充时是否反锯齿(可选,默认值为 true)
+ "fill-opacity": 1, // 填充的不透明度(可选,取值范围为 0 ~ 1,默认值为 1)
+ "fill-pattern": "", // 填充用的图案(可选,这里填写在 sprite 雪碧图中图标名称。为了图案能无缝填充,图标的高宽需要是 2 的倍数)
+ "fill-color": "#000000", // 填充的颜色(可选,默认值为 #000000。如果设置了 fill-pattern,则 fill-color 将无效)
+ "fill-outline-color": "#000000", // 描边的颜色(可选,默认和 fill-color 一致。如果设置了 fill-pattern,则 fill-outline-color 将无效。为了使用此属性,还需要设置 fill-antialias 为 true)
+ "fill-translate": [0, 0], // 填充的平移(可选,通过平移 [x, y] 达到一定的偏移量。默认值为 [0, 0],单位:像素。)
+ "fill-translate-anchor": "map" // 平移的锚点,即相对的参考物(可选,可选值为 map、viewport,默认为 map)
+ }
+}
+
+// --------------------------------- 绘制线 ----------------------------------------
+export const LineLayer: LayerProps = {
+ "id": "line-id", // 唯一 id (必填)
+ "type": "line", // 类型(必填)
+ "metadata": { // 元数据(可选,用于为 layer 附加任意的属性。为避免冲突,建议添加前缀,如 mapbox:)
+ "mapbox:name": "test"
+ },
+ "source": "source-name", // 数据源的名称(除了 layer 的 type 为 background 外,source 必填)
+ "source-layer": "source-layer-name", // 数据源的图层(只有数据源 source 的 type 为 vector 时,才能设置 source-layer,其他类型的不可以设置)
+ "minzoom": 0, // 最小层级(可选,取值范围为 0 ~ 24。当 style 的 zoom 小于此 minzoom 时,layer 将被隐藏)
+ "maxzoom": 24, // 最大层级(可选,取值范围为 0 ~ 24。当 style 的 zoom 大于此 maxzoom 时,layer 将被隐藏)
+ "filter": [], // 过滤(可选,用特定的表达式过滤指定的数据源的要素。具体的表达式详见 expression)
+ "layout": { // 布局类属性
+ "visibility": "visible", // 可见性(可选,可选值为 none、visible,默认值为 visible)
+ "line-cap": "butt", // 线末端的显示样式(可选,可选值为 butt、round、square,默认值为 butt)
+ // --- butt:方型末端(仅绘制到线的端点)
+ // --- round:圆型末端(以线宽的 1/2 为半径,以线的端点为圆心,绘制圆型端点,会超出线的端点)
+ // --- square:方型末端(以线宽的 1/2 长度超出线的端点)
+ "line-join": "miter", // 线交叉时的显示样式(可选,可选值为 bevel、round、miter,默认值为 miter)
+ // --- bevel:方型交点(以线宽的 1/2 长度超出线的交点)
+ // --- round:圆型交点(以线宽的 1/2 为半径,以线的交点为圆心,绘制圆型交点,会超出线的交点)
+ // --- miter:尖型交点(以两线段的外沿相交,超出交点绘制)
+ "line-miter-limit": 2, // 最大斜接长度(可选,用来将 miter 尖型交点自动转为 bevel 方型交点,默认值为 2。只有 line-join 为 miter 时,才需要设置此属性)
+ "line-round-limit": 1.05, // 最小圆角半径(可选,用来将 round 圆型交点自动转为 miter 尖型交点,默认值为 1.05。只有 line-join 为 round 时,才需要设置此属性)
+ },
+ "paint": { // 绘制类属性
+ "line-opacity": 1, // 线的不透明度(可选,取值范围为 0 ~ 1,默认值为 1)
+ "line-pattern": "", // 线用的图案(可选,这里填写在 sprite 雪碧图中图标名称。为了图案能无缝填充,图标的高宽需要是 2 的倍数)
+ "line-color": "#000000", // 线的颜色(可选,默认值为 #000000。如果设置了 line-pattern,则 line-color 将无效)
+ "line-translate": [0, 0], // 线的平移(可选,通过平移 [x, y] 达到一定的偏移量。默认值为 [0, 0],单位:像素。)
+ "line-translate-anchor": "map", // 线的平移锚点,即相对的参考物(可选,可选值为 map、viewport,默认为 map)
+ "line-width": 1, // 线的宽度(可选,值 >= 0,默认值为 1,单位:像素)
+ "line-gap-width": 0, // 线的外部间距宽度(可选,值 >= 0,默认值为 0,单位:像素。用来在线的外部再绘制一部分,此值表示内间距)
+ "line-offset": 0, // 线的偏移(可选,默认值为 0,单位:像素。对于单线,则是向右的偏移量;对于多边形,正值为内缩 inset,负值为外突 outset)
+ "line-blur": 0, // 线的模糊度(可选,值 >= 0,默认值为 0,单位:像素)
+ "line-dasharray": [0, 0], // 虚线的破折号部分和间隔的长度(可选,默认值为 [0, 0]。如果设置了 line-pattern,则 line-dasharray 将无效)
+ // "line-gradient": "#000000", // 线的渐变色(可选。如果设置了 line-pattern 或 line-dasharray,则 line-gradient 将无效。只有数据源 source 的 type 为 geojson ,且 source 的 lineMetrics 为 true 时,line-gradient 才有效)
+ }
+}
+
+// 绘制符号
+export const clusterCountLayer: LayerProps = {
+ id: 'cluster-count',
+ type: 'symbol',
+ source: 'earthquakes',
+ filter: ['has', 'point_count'],
+ layout: {
+ 'text-field': '{point_count_abbreviated}',
+ 'text-font': ['DIN Offc Pro Medium', 'Arial Unicode MS Bold'],
+ 'text-size': 12,
+ // "visibility": "visible", // 可见性(可选,可选值为 none、visible,默认值为 visible)
+ // "symbol-placement": "point", // 符号的位置(可选,可选值为 point、line、line-center,默认值为 point)
+ // // --- point:符号在几何形状的点上
+ // // --- line:符号在几何形状的线上(几何形状只能为 LineString 或 Polygon)
+ // // --- line-center:符号在几何形状的线的中心点上(几何形状只能为 LineString 或 Polygon)
+ // "symbol-spacing": 250, // 符号之间的距离(可选,值 >= 1,默认值为 250,单位:像素。只有 symbol-placement 为 line 时才有效)
+ // "symbol-avoid-edges": false, // 是否避免边缘冲突(可选,默认值为 false。当为 true 时,符号不会超过切片的边缘)
+ // "symbol-sort-key": 1, // 排序的参考值(可选,无默认值。值越大,越在上方)
+ // "symbol-z-order": 'source', // z 轴上的顺序控制(可选,可选值为 viewport-y、source)
+
+ // // 图标类属性(需要设置 icon-image)
+ // "icon-image": "", // 图标的图片(可选,这里填写在 sprite 雪碧图中图标名称)
+ // "icon-size": 1, // 图标的大小(可选,值 >= 0,默认值为 1。这里实际上是图标对应的原始图片的大小的缩放比例。值为 1 表示图标大小为原始图片的大小)
+ // "icon-padding": 2, // 图标的外边距(可选,值 >= 0,默认值为 2。可用于碰撞检测)
+ // "icon-offset": [0, 0], // 图标的偏移量(可选,默认值为 [0, 0])
+ // "icon-anchor": "center", // 图标与锚点的位置关系(可选,可选值为 center、left、right、top、bottom、top-left、top-right、bottom-left、bottom-right,默认值为 center)
+ // "icon-rotate": 0, // 图标的顺时针旋转角度(可选,默认值为 0,单位:角度)
+ // "icon-allow-overlap": false, // 是否允许图标重叠(可选,默认值为 false。当值为 true 时,图标即使和其他符号触碰也会显示)
+ // "icon-ignore-placement": false, // 是否忽略图标位置(可选,默认值为 false。当值为 true 时,其他符号即使与此图标触碰也会显示)
+ // "icon-optional": false, // 图标是否可不显示(可选,默认值为 false。当值为 true 时,如果图标与文本标签碰撞,则显示文本标签)
+ // "icon-text-fit": "none", // 图标与文本的大小适应关系(可选,可选值为 none、width、height、both,默认值为 none)
+ // // --- none:图标按其本身的比例显示
+ // // --- width:图标在 x 轴上缩放以适应文本的宽度
+ // // --- height:图标在 y 轴上缩放以适应文本的高度
+ // // --- both:图标在 x 和 y 轴上缩放以适应文本的宽高
+ // "icon-text-fit-padding": [0, 0, 0, 0], // 图标与文本的内边距(可选,默认值为 [0,0,0,0],单位:像素)
+ // "icon-keep-upright": false, // 当 icon-rotation-alignment 为 map,且 symbol-placement 为 line 或者 line-center 时,设置为 true 的话,可以避免图标上下颠倒
+ // "icon-rotation-alignment": "auto", // 地图旋转时图标的对齐方式(可选,可选值为 map、viewport、auto,默认值为 auto)
+ // // --- map:当 symbol-placement 为 point 时,图标与地图的东西方向对齐;当 symbol-placement 为 line 时,图标的 x 轴和线对齐
+ // // --- viewport:图标的 x 轴和视口的 x 轴对齐
+ // // --- auto:当 symbol-placement 为 point 时,和 viewport 一致;当 symbol-placement 为 line 时,和 map 一致
+ // "icon-pitch-alignment": "auto", // 地图倾斜时图标的对齐方式(可选,可选值为 map、viewport、auto,默认值为 auto)
+ // // --- map:图标的 x 轴与地图平面对齐
+ // // --- viewport:图标的 x 轴和视口的 x 轴对齐
+ // // --- auto:当 symbol-placement 为 point 时,和 viewport 一致;当 symbol-placement 为 line 时,和 map 一致
+
+ // // 文本类属性(需要指定 text-field)
+ // "text-rotation-alignment": "auto", // 与 icon-rotation-alignment 类似
+ // "text-pitch-alignment": "auto", // 与 icon-pitch-alignment 类似
+ // "text-field": "", // 文本所对应的字段(可选,默认值为 "")
+ // "text-font": ["Open Sans Regular","Arial Unicode MS Regular"], // 文本的字体集合(可选,默认值为 ["Open Sans Regular","Arial Unicode MS Regular"])
+ // "text-size": 16, // 文本的大小(可选,默认值为 16,单位:像素)
+ // "text-max-width": 10, // 文本的最大宽度,超过则折行(可选,默认值为 10,单位:ems)
+ // "text-line-height": 1.2, // 文本的行高(可选,默认值为 1.2,单位:ems)
+ // "text-letter-spacing": 0, // 文本的字符间距(可选,默认值为 0,单位:ems)
+ // "text-justify": "center", // 文本的水平对齐方式(可选,可选值为 auto、left、center、right。默认值为 center)
+ // "text-anchor": "center", // 文本与锚点的位置关系(可选,可选值为 center、left、right、top、bottom、top-left、top-right、bottom-left、bottom-right,默认值为 center)
+ // "text-max-angle": 45, // 当 symbol-placement 为 line 或 line-center 时,文本相邻字符的最大夹角,默认 45 度
+ // "text-rotate": 0, // 文本的顺时针旋转角度(可选,默认值为 0,单位:角度)
+ // "text-padding": 2, // 文本的外边距(可选,值 >= 0,默认值为 2。可用于碰撞检测)
+ // "text-keep-upright": false, // 当 icon-rotation-alignment 为 map,且 symbol-placement 为 line 或者 line-center 时,设置为 true 的话,可以避免文本上下颠倒
+ // "text-transform": "none", // 文本大小写转换(可选,可选值为 none、uppercase、lowercase,默认值为 none)
+ // "text-offset": [0, 0], // 图标的偏移量(可选,默认值为 [0, 0])
+ // "text-radial-offset": 0, // 文本的径向偏移量,优先级比 text-offset 高
+ // "text-allow-overlap": false, // 是否允许文本重叠(可选,默认值为 false。当值为 true 时,文本即使和其他符号触碰也会显示)
+ // "text-ignore-placement": false, // 是否忽略文本位置(可选,默认值为 false。当值为 true 时,其他符号即使与此文本触碰也会显示)
+ // "text-optional": false // 文本是否可不显示(可选,默认值为 false。当值为 true 时,如果文本与图标碰撞,则显示图标)
+ },
+ "paint": { // 绘制类属性
+ // // 图标类属性(需要设置 icon-image)
+ // "icon-opacity": 1, // 图标的不透明度(可选,取值范围为 0 ~ 1,默认值为 1)
+ "icon-color": "#fff", // 图标的颜色(可选,默认值为 #000000)
+ // "icon-halo-color": "rgba(0,0,0,0)", // 图标的光晕颜色(可选,默认值为 rgba(0,0,0,0))
+ // "icon-halo-width": 0, // 图标的光晕宽度(可选,值 >= 0,默认值为 0,单位:像素)
+ // "icon-halo-blur": 0, // 图标的光晕模糊宽度(可选,值 >= 0,默认值为 0,单位:像素)
+ // "icon-translate": [0, 0], // 图标的平移(可选,通过平移 [x, y] 达到一定的偏移量。默认值为 [0, 0],单位:像素。)
+ // "icon-translate-anchor": "map", // 图标的平移锚点,即相对的参考物(可选,可选值为 map、viewport,默认为 map)
+
+ // // 文本类属性(需要设置 text-field)
+ // "text-opacity": 1, // 文本的不透明度(可选,取值范围为 0 ~ 1,默认值为 1)
+ "text-color": "#fff", // 文本的颜色(可选,默认值为 #000000)
+ // "text-halo-color": "rgba(0,0,0,0)", // 文本的光晕颜色(可选,默认值为 rgba(0,0,0,0))
+ // "text-halo-width": 0, // 文本的光晕宽度(可选,值 >= 0,默认值为 0,单位:像素)
+ // "text-halo-blur": 0, // 文本的光晕模糊宽度(可选,值 >= 0,默认值为 0,单位:像素)
+ // "text-translate": [0, 0], // 文本的平移(可选,通过平移 [x, y] 达到一定的偏移量。默认值为 [0, 0],单位:像素。)
+ // "text-translate-anchor": "map", // 文本的平移锚点,即相对的参考物(可选,可选值为 map、viewport,默认为 map)
+ }
+};
+
+// 背景
+export const backgroundLayer: LayerProps = {
+ "id": "background-id", // 唯一 id (必填)
+ "type": "background", // 类型(必填)
+ "metadata": { // 元数据(可选,用于为 layer 附加任意的属性。为避免冲突,建议添加前缀,如 mapbox:)
+ "mapbox:name": "test"
+ },
+ "minzoom": 0, // 最小层级(可选,取值范围为 0 ~ 24。当 style 的 zoom 小于此 minzoom 时,layer 将被隐藏)
+ "maxzoom": 24, // 最大层级(可选,取值范围为 0 ~ 24。当 style 的 zoom 大于此 maxzoom 时,layer 将被隐藏)
+ "layout": { // 布局类属性
+ "visibility": "visible", // 可见性(可选,可选值为 none、visible,默认值为 visible)
+ },
+ "paint": { // 绘制类属性
+ "background-color": "#000000", // 背景颜色(可选,默认值为 #000000。如果设置了 background-pattern,则 background-color 将无效)
+ "background-pattern": "", // 背景图案(可选,这里填写在 sprite 雪碧图中图标名称。为了背景图案能无缝填充,图标的高宽需要是 2 的倍数)
+ "background-opacity": 1 // 背景不透明度(可选,取值范围为 0 ~ 1,默认值为 1)
+ }
+}
+
+// 栅格布局
+export const rasterLayer: LayerProps = {
+ "id": "raster-id", // 唯一 id (必填)
+ "type": "raster", // 类型(必填)
+ "metadata": { // 元数据(可选,用于为 layer 附加任意的属性。为避免冲突,建议添加前缀,如 mapbox:)
+ "mapbox:name": "test"
+ },
+ "source": "source-name", // 数据源的名称(除了 layer 的 type 为 background 外,source 必填)
+ "source-layer": "source-layer-name", // 数据源的图层(只有数据源 source 的 type 为 vector 时,才能设置 source-layer,其他类型的不可以设置)
+ "minzoom": 0, // 最小层级(可选,取值范围为 0 ~ 24。当 style 的 zoom 小于此 minzoom 时,layer 将被隐藏)
+ "maxzoom": 24, // 最大层级(可选,取值范围为 0 ~ 24。当 style 的 zoom 大于此 maxzoom 时,layer 将被隐藏)
+ "filter": [], // 过滤(可选,用特定的表达式过滤指定的数据源的要素。具体的表达式详见 expression)
+ "layout": { // 布局类属性
+ "visibility": "visible", // 可见性(可选,可选值为 none、visible,默认值为 visible)
+ },
+ "paint": { // 绘制类属性
+ "raster-opacity": 1, // 图片的不透明度(可选,取值范围为 0 ~ 1,默认值为 1)
+ "raster-hue-rotate": 0, // 在色轮上旋转色相的角度(可选,默认值为 0,单位:角度)
+ "raster-brightness-min": 0, // 图片的最小亮度(可选,取值范围为 0 ~ 1,默认值为 0)
+ "raster-brightness-max": 1, // 图片的最大亮度(可选,取值范围为 0 ~ 1,默认值为 1)
+ "raster-saturation": 0, // 图片的饱和度(可选,取值范围为 -1 ~ 1,默认值为 0)
+ "raster-contrast": 0, // 图片的对比度(可选,取值范围为 -1 ~ 1,默认值为 0)
+ "raster-resampling": "linear", // 采样方式(可选,可选值为 linear、nearest,默认值为 linear)
+ "raster-fade-duration": 300 // 切换瓦片时的渐隐时间(可选,默认值为 300,单位:毫秒)
+ }
+}
+
+// 热力图
+export const heatmapLayer: LayerProps = {
+ "id": "heatmap-id", // 唯一 id (必填)
+ "type": "heatmap", // 类型(必填)
+ "metadata": { // 元数据(可选,用于为 layer 附加任意的属性。为避免冲突,建议添加前缀,如 mapbox:)
+ "mapbox:name": "test"
+ },
+ "source": "source-name", // 数据源的名称(除了 layer 的 type 为 background 外,source 必填)
+ "source-layer": "source-layer-name", // 数据源的图层(只有数据源 source 的 type 为 vector 时,才能设置 source-layer,其他类型的不可以设置)
+ "minzoom": 0, // 最小层级(可选,取值范围为 0 ~ 24。当 style 的 zoom 小于此 minzoom 时,layer 将被隐藏)
+ "maxzoom": 24, // 最大层级(可选,取值范围为 0 ~ 24。当 style 的 zoom 大于此 maxzoom 时,layer 将被隐藏)
+ "filter": [], // 过滤(可选,用特定的表达式过滤指定的数据源的要素。具体的表达式详见 expression)
+ "layout": { // 布局类属性
+ "visibility": "visible", // 可见性(可选,可选值为 none、visible,默认值为 visible)
+ },
+ "paint": { // 绘制类属性
+ "heatmap-opacity": 1, // 热力图的不透明度(可选,取值范围为 0 ~ 1,默认值为 1)
+ "heatmap-radius": 30, // 一个热力图点的影响半径(可选,值 >= 1,默认值为 30,单位:像素)
+ "heatmap-weight": 1, // 一个热力图点的权重(可选,值 >= 0,默认值为 1)
+ "heatmap-intensity": 1, // 热力图的强度,控制了所有的热力图点(可选,值 >= 0,默认值为 1)
+ "heatmap-color": [ // 热力图的颜色变化(可选,默认值如下)
+ "interpolate", ["linear"], ["heatmap-density"],
+ 0, "rgba(0, 0, 255, 0)",
+ 0.1, "royalblue",
+ 0.3, "cyan",
+ 0.5, "lime",
+ 0.7, "yellow",
+ 1, "red"
+ ]
+ }
+}
+
+// 坡面阴影
+export const hillshadeLayer: LayerProps = {
+ "id": "hillshade-id", // 唯一 id (必填)
+ "type": "hillshade", // 类型(必填)
+ "metadata": { // 元数据(可选,用于为 layer 附加任意的属性。为避免冲突,建议添加前缀,如 mapbox:)
+ "mapbox:name": "test"
+ },
+ "source": "source-name", // 数据源的名称(除了 layer 的 type 为 background 外,source 必填)
+ "source-layer": "source-layer-name", // 数据源的图层(只有数据源 source 的 type 为 vector 时,才能设置 source-layer,其他类型的不可以设置)
+ "minzoom": 0, // 最小层级(可选,取值范围为 0 ~ 24。当 style 的 zoom 小于此 minzoom 时,layer 将被隐藏)
+ "maxzoom": 24, // 最大层级(可选,取值范围为 0 ~ 24。当 style 的 zoom 大于此 maxzoom 时,layer 将被隐藏)
+ "filter": [], // 过滤(可选,用特定的表达式过滤指定的数据源的要素。具体的表达式详见 expression)
+ "layout": { // 布局类属性
+ "visibility": "visible", // 可见性(可选,可选值为 none、visible,默认值为 visible)
+ },
+ "paint": { // 绘制类属性
+ "hillshade-illumination-direction": 335, // 光照的方向(可选,取值范围为 0 ~ 359,默认值为 335,单位:角度)
+ "hillshade-illumination-anchor": "viewport", // 光照的锚点(可选,可选值为 map、viewport,默认值为 viewport)
+ "hillshade-exaggeration": 0.5, // 阴影的强度(可选,取值范围为 0 ~ 1,默认值为 0.5)
+ "hillshade-shadow-color": "#000000", // 阴影的颜色(可选,默认值为 #000000)
+ "hillshade-highlight-color": "#ffffff", // 光照部分的颜色(可选,默认值为 #ffffff)
+ "hillshade-accent-color": "#000000" // 用于强调地形的颜色(可选,默认值为 #000000)
+ }
+}
+
+// 三维填充
+export const FillExtrusionLayer: LayerProps = {
+ "id": "fill-extrusion-id", // 唯一 id (必填)
+ "type": "fill-extrusion", // 类型(必填)
+ "metadata": { // 元数据(可选,用于为 layer 附加任意的属性。为避免冲突,建议添加前缀,如 mapbox:)
+ "mapbox:name": "test"
+ },
+ "source": "source-name", // 数据源的名称(除了 layer 的 type 为 background 外,source 必填)
+ "source-layer": "source-layer-name", // 数据源的图层(只有数据源 source 的 type 为 vector 时,才能设置 source-layer,其他类型的不可以设置)
+ "minzoom": 0, // 最小层级(可选,取值范围为 0 ~ 24。当 style 的 zoom 小于此 minzoom 时,layer 将被隐藏)
+ "maxzoom": 24, // 最大层级(可选,取值范围为 0 ~ 24。当 style 的 zoom 大于此 maxzoom 时,layer 将被隐藏)
+ "filter": [], // 过滤(可选,用特定的表达式过滤指定的数据源的要素。具体的表达式详见 expression)
+ "layout": { // 布局类属性
+ "visibility": "visible", // 可见性(可选,可选值为 none、visible,默认值为 visible)
+ },
+ "paint": { // 绘制类属性
+ "fill-extrusion-opacity": 1, // 三维填充的不透明度(可选,取值范围为 0 ~ 1,默认值为 1)
+ "fill-extrusion-pattern": "", // 三维填充的图案(可选,这里填写在 sprite 雪碧图中图标名称。为了图案能无缝填充,图标的高宽需要是 2 的倍数)
+ "fill-extrusion-color": "#000000", // 三维填充的颜色(可选,默认值为 #000000)
+ "fill-extrusion-translate": [0, 0], // 三维填充的平移(可选,通过平移 [x, y] 达到一定的偏移量。默认值为 [0, 0],单位:像素。)
+ "fill-extrusion-translate-anchor": "map", // 平移的锚点,即相对的参考物(可选,可选值为 map、viewport,默认为 map)
+ "fill-extrusion-height": 0, // 三维填充的高度(可选,值 >= 0,默认值为 0,单位:米)
+ "fill-extrusion-base": 0, // 三维填充的底部高度(可选,值 >= 0,默认值为 0,单位:米。值必须小于等于 fill-extrusion-height)
+ "fill-extrusion-vertical-gradient": true, // 是否开启垂直渐变(可选,默认值为 true)
+ }
+}
diff --git a/packages/map/src/components/customOverlay/CustomOverlay.tsx b/packages/map/src/components/customOverlay/CustomOverlay.tsx
new file mode 100644
index 0000000..a687403
--- /dev/null
+++ b/packages/map/src/components/customOverlay/CustomOverlay.tsx
@@ -0,0 +1,60 @@
+// @ts-nocheck
+import * as React from 'react';
+import {useState, cloneElement} from 'react';
+import {useControl} from 'react-map-gl';
+import {createPortal} from 'react-dom';
+import type { MapboxMap, IControl } from 'react-map-gl';
+
+// Based on template in https://docs.mapbox.com/mapbox-gl-js/api/markers/#icontrol
+class OverlayControl implements IControl {
+ _map: MapboxMap | undefined;
+ _container: HTMLElement | undefined;
+ _redraw: () => void;
+
+ constructor(redraw: () => void) {
+ this._redraw = redraw;
+ }
+
+ // @ts-ignore
+ onAdd(map) {
+ this._map = map;
+ map.on('move', this._redraw);
+ /* global document */
+ this._container = document.createElement('div');
+ this._redraw();
+ return this._container;
+ }
+
+ onRemove() {
+ this._container?.remove();
+ this._map?.off('move', this._redraw);
+ this._map = undefined;
+ }
+
+ getMap() {
+ return this._map;
+ }
+
+ getElement() {
+ return this._container;
+ }
+}
+
+/**
+ * A custom control that rerenders arbitrary React content whenever the camera changes
+ */
+function CustomOverlay(props: {children: React.ReactElement}) {
+ const [, setVersion] = useState(0);
+
+ const ctrl = useControl(() => {
+ const forceUpdate = () => setVersion(v => v + 1);
+ return new OverlayControl(forceUpdate);
+ });
+
+ const map = ctrl.getMap();
+
+ // @ts-ignore
+ return map && createPortal(cloneElement(props.children, {map}), ctrl.getElement());
+}
+
+export default React.memo(CustomOverlay);
diff --git a/packages/map/src/components/customOverlay/index.tsx b/packages/map/src/components/customOverlay/index.tsx
new file mode 100644
index 0000000..774efb3
--- /dev/null
+++ b/packages/map/src/components/customOverlay/index.tsx
@@ -0,0 +1,6 @@
+/**
+ * Created by jiangzhixiong on 2024/05/21
+ */
+import CustomOverlay from './CustomOverlay'
+
+export default CustomOverlay
diff --git a/packages/map/src/components/drawControl/Draw/constants.js b/packages/map/src/components/drawControl/Draw/constants.js
new file mode 100644
index 0000000..3c0bda4
--- /dev/null
+++ b/packages/map/src/components/drawControl/Draw/constants.js
@@ -0,0 +1,100 @@
+export const classes = {
+ CONTROL_BASE: 'mapboxgl-ctrl',
+ CONTROL_PREFIX: 'mapboxgl-ctrl-',
+ CONTROL_BUTTON: 'mapbox-gl-draw_ctrl-draw-btn',
+ CONTROL_BUTTON_LINE: 'mapbox-gl-draw_line',
+ CONTROL_BUTTON_POLYGON: 'mapbox-gl-draw_polygon',
+ CONTROL_BUTTON_POINT: 'mapbox-gl-draw_point',
+ CONTROL_BUTTON_TRASH: 'mapbox-gl-draw_trash',
+ CONTROL_BUTTON_COMBINE_FEATURES: 'mapbox-gl-draw_combine',
+ CONTROL_BUTTON_UNCOMBINE_FEATURES: 'mapbox-gl-draw_uncombine',
+ CONTROL_GROUP: 'mapboxgl-ctrl-group',
+ ATTRIBUTION: 'mapboxgl-ctrl-attrib',
+ ACTIVE_BUTTON: 'active',
+ BOX_SELECT: 'mapbox-gl-draw_boxselect',
+};
+
+export const sources = {
+ HOT: 'mapbox-gl-draw-hot',
+ COLD: 'mapbox-gl-draw-cold',
+};
+
+export const cursors = {
+ ADD: 'add',
+ MOVE: 'move',
+ DRAG: 'drag',
+ POINTER: 'pointer',
+ NONE: 'none',
+};
+
+export const types = {
+ POLYGON: 'polygon',
+ LINE: 'line_string',
+ POINT: 'point',
+};
+
+export const geojsonTypes = {
+ FEATURE: 'Feature',
+ POLYGON: 'Polygon',
+ LINE_STRING: 'LineString',
+ POINT: 'Point',
+ FEATURE_COLLECTION: 'FeatureCollection',
+ MULTI_PREFIX: 'Multi',
+ MULTI_POINT: 'MultiPoint',
+ MULTI_LINE_STRING: 'MultiLineString',
+ MULTI_POLYGON: 'MultiPolygon',
+};
+
+export const modes = {
+ DRAW_LINE_STRING: 'draw_line_string',
+ DRAW_POLYGON: 'draw_polygon',
+ DRAW_POINT: 'draw_point',
+ SIMPLE_SELECT: 'simple_select',
+ DIRECT_SELECT: 'direct_select',
+ STATIC: 'static',
+};
+
+export const events = {
+ CREATE: 'draw.create',
+ DELETE: 'draw.delete',
+ UPDATE: 'draw.update',
+ SELECTION_CHANGE: 'draw.selectionchange',
+ MODE_CHANGE: 'draw.modechange',
+ ACTIONABLE: 'draw.actionable',
+ RENDER: 'draw.render',
+ COMBINE_FEATURES: 'draw.combine',
+ UNCOMBINE_FEATURES: 'draw.uncombine',
+};
+
+export const updateActions = {
+ MOVE: 'move',
+ CHANGE_COORDINATES: 'change_coordinates',
+};
+
+export const meta = {
+ FEATURE: 'feature',
+ MIDPOINT: 'midpoint',
+ VERTEX: 'vertex',
+};
+
+export const activeStates = {
+ ACTIVE: 'true',
+ INACTIVE: 'false',
+};
+
+export const interactions = [
+ 'scrollZoom',
+ 'boxZoom',
+ 'dragRotate',
+ 'dragPan',
+ 'keyboard',
+ 'doubleClickZoom',
+ 'touchZoomRotate',
+];
+
+export const LAT_MIN = -90;
+export const LAT_RENDERED_MIN = -85;
+export const LAT_MAX = 90;
+export const LAT_RENDERED_MAX = 85;
+export const LNG_MIN = -270;
+export const LNG_MAX = 270;
diff --git a/packages/map/src/components/drawControl/Draw/doubleClickZoom.js b/packages/map/src/components/drawControl/Draw/doubleClickZoom.js
new file mode 100644
index 0000000..4e747e1
--- /dev/null
+++ b/packages/map/src/components/drawControl/Draw/doubleClickZoom.js
@@ -0,0 +1,24 @@
+const doubleClickZoom = {
+ enable(ctx) {
+ setTimeout(() => {
+ if (
+ !ctx.map ||
+ !ctx.map.doubleClickZoom ||
+ !ctx._ctx ||
+ !ctx._ctx.store ||
+ !ctx._ctx.store.getInitialConfigValue
+ )
+ return;
+ if (!ctx._ctx.store.getInitialConfigValue('doubleClickZoom')) return;
+ ctx.map.doubleClickZoom.enable();
+ }, 0);
+ },
+ disable(ctx) {
+ setTimeout(() => {
+ if (!ctx.map || !ctx.map.doubleClickZoom) return;
+ ctx.map.doubleClickZoom.disable();
+ }, 0);
+ },
+};
+
+export default doubleClickZoom;
diff --git a/packages/map/src/components/drawControl/Draw/drawCircleMode.draw.js b/packages/map/src/components/drawControl/Draw/drawCircleMode.draw.js
new file mode 100644
index 0000000..fca766e
--- /dev/null
+++ b/packages/map/src/components/drawControl/Draw/drawCircleMode.draw.js
@@ -0,0 +1,69 @@
+import MapboxDraw from '@mapbox/mapbox-gl-draw';
+import doubleClickZoom from './doubleClickZoom';
+import * as turf from '@turf/turf';
+const { circle, distance, helpers: turfHelpers } = turf;
+const drawCircleMode = { ...MapboxDraw.modes.draw_polygon };
+drawCircleMode.onSetup = function () {
+ const polygon = this.newFeature({
+ type: 'Feature',
+ properties: {
+ isCircle: true,
+ center: [],
+ },
+ geometry: {
+ type: 'Polygon',
+ coordinates: [],
+ },
+ });
+
+ this.addFeature(polygon);
+
+ this.clearSelectedFeatures();
+ doubleClickZoom.disable(this);
+ // dragPan.disable(this);
+ this.updateUIClasses({ mouse: 'add' });
+ this.activateUIButton('Polygon');
+ this.setActionableState({
+ trash: true,
+ });
+
+ return {
+ polygon,
+ currentVertexPosition: 0,
+ };
+};
+drawCircleMode.onClick = drawCircleMode.onTap = function (state, e) {
+ const currentCenter = state.polygon.properties.center;
+ if (currentCenter.length === 0) {
+ // dragPan.disable(this)
+ state.polygon.properties.center = [e.lngLat.lng, e.lngLat.lat];
+ } else {
+ // dragPan.enable(this);
+ return this.changeMode('simple_select', { featureIds: [state.polygon.id] });
+ }
+};
+drawCircleMode.onDrag = drawCircleMode.onMouseMove = function (state, e) {
+ const center = state.polygon.properties.center;
+ if (center.length > 0) {
+ const distanceInKm = distance(
+ turfHelpers.point(center),
+ turfHelpers.point([e.lngLat.lng, e.lngLat.lat]),
+ {
+ units: 'kilometers',
+ }
+ );
+ const circleFeature = circle(center, distanceInKm);
+ state.polygon.incomingCoords(circleFeature.geometry.coordinates);
+ state.polygon.properties.radiusInKm = distanceInKm;
+ state.polygon.properties.lastClickCoord = [e.lngLat.lng, e.lngLat.lat];
+ }
+};
+//它决定当前 Drew 数据存储中的哪些特性将在地图上呈现。
+//所有传递给“显示”的特性都将被渲染,因此可以为每个内部特性传递多个显示特性。
+//有关如何制作显示特性的建议,请参阅‘ styling-pull’in‘ API.md’
+drawCircleMode.toDisplayFeatures = function (state, geojson, display) {
+ const isActivePolygon = geojson.properties.id === state.polygon.id;
+ geojson.properties.active = isActivePolygon ? 'true' : 'false';
+ display(geojson);
+};
+export default drawCircleMode;
diff --git a/packages/map/src/components/drawControl/Draw/drawDirectMode.draw.js b/packages/map/src/components/drawControl/Draw/drawDirectMode.draw.js
new file mode 100644
index 0000000..2179039
--- /dev/null
+++ b/packages/map/src/components/drawControl/Draw/drawDirectMode.draw.js
@@ -0,0 +1,131 @@
+import MapboxDraw from '@mapbox/mapbox-gl-draw';
+import createSupplementaryPoints from '@mapbox/mapbox-gl-draw';
+import moveFeatures from '@mapbox/mapbox-gl-draw';
+import constrainFeatureMovement from '@mapbox/mapbox-gl-draw';
+import createVertex from '@mapbox/mapbox-gl-draw';
+import * as turf from '@turf/turf';
+const { constants } = MapboxDraw;
+const { circle, distance, helpers: turfHelpers } = turf;
+
+function createSupplementaryPointsForCircle(geojson) {
+ const { properties, geometry } = geojson;
+
+ if (!properties.user_isCircle) return null;
+
+ const supplementaryPoints = [];
+ const vertices = geometry.coordinates[0].slice(0, -1);
+ for (let index = 0; index < vertices.length; index += Math.round(vertices.length / 4)) {
+ supplementaryPoints.push(createVertex(properties.id, vertices[index], `0.${index}`, false));
+ }
+ return supplementaryPoints;
+}
+const drawDirectMode = { ...MapboxDraw.modes.direct_select };
+
+drawDirectMode.dragFeature = function (state, e, delta) {
+ moveFeatures(this.getSelected(), delta);
+ this.getSelected()
+ .filter((feature) => feature.properties.isCircle)
+ .map((circle) => circle.properties.center)
+ .forEach((center) => {
+ center[0] += delta.lng;
+ center[1] += delta.lat;
+ });
+ state.dragMoveLocation = e.lngLat;
+};
+
+drawDirectMode.dragVertex = function (state, e, delta) {
+ //圆处理
+ if (state.feature.properties.isCircle) {
+ const center = state.feature.properties.center;
+ const movedVertex = [e.lngLat.lng, e.lngLat.lat];
+ const radius = distance(turfHelpers.point(center), turfHelpers.point(movedVertex), {
+ units: 'kilometers',
+ });
+ const circleFeature = circle(center, radius);
+ state.feature.incomingCoords(circleFeature.geometry.coordinates);
+ state.feature.properties.radiusInKm = radius;
+ return;
+ }
+ //矩形处理
+ if (state.feature.properties.isRect) {
+ state.selectedCoordPaths.forEach((coordPath) => {
+ const selectCoord = state.feature.getCoordinate(coordPath);
+ //更新边缘2点
+ const [featureIndex, coordIndex] = coordPath.split('.');
+ const coordinates = state.feature.getCoordinates()[featureIndex];
+ //对立点判断
+ const coordPosMap = {
+ 1: '3',
+ 2: '0',
+ 3: '1',
+ 0: '2',
+ };
+ const mapCoord = state.feature.getCoordinate(`${featureIndex}.${coordPosMap[coordIndex]}`);
+ //如果对立点和坐标x||y 一致 则返回
+ if (mapCoord[0] === e.lngLat.lng || mapCoord[1] === e.lngLat.lat) {
+ return;
+ }
+ for (let i = 0; i < 4; i++) {
+ const coord = coordinates[i];
+ if (coordIndex == i) {
+ continue;
+ }
+
+ if (coord[0] === selectCoord[0]) {
+ state.feature.updateCoordinate(`${featureIndex}.${i}`, e.lngLat.lng, coord[1]);
+
+ continue;
+ }
+ if (coord[1] === selectCoord[1]) {
+ state.feature.updateCoordinate(`${featureIndex}.${i}`, coord[0], e.lngLat.lat);
+ continue;
+ }
+ }
+ //更新拖拽的点
+ state.feature.updateCoordinate(coordPath, e.lngLat.lng, e.lngLat.lat);
+ });
+ return;
+ }
+ //其他走回默认
+ const selectedCoords = state.selectedCoordPaths.map((coordPath) =>
+ state.feature.getCoordinate(coordPath)
+ );
+ const selectedCoordPoints = selectedCoords.map((coords) => ({
+ type: constants.geojsonTypes.FEATURE,
+ properties: {},
+ geometry: {
+ type: constants.geojsonTypes.POINT,
+ coordinates: coords,
+ },
+ }));
+
+ const constrainedDelta = constrainFeatureMovement(selectedCoordPoints, delta);
+ for (let i = 0; i < selectedCoords.length; i++) {
+ const coord = selectedCoords[i];
+ state.feature.updateCoordinate(
+ state.selectedCoordPaths[i],
+ coord[0] + constrainedDelta.lng,
+ coord[1] + constrainedDelta.lat
+ );
+ }
+};
+
+drawDirectMode.toDisplayFeatures = function (state, geojson, push) {
+ if (state.featureId === geojson.properties.id) {
+ geojson.properties.active = constants.activeStates.ACTIVE;
+ push(geojson);
+ const supplementaryPoints = geojson.properties.user_isCircle
+ ? createSupplementaryPointsForCircle(geojson)
+ : createSupplementaryPoints(geojson, {
+ map: this.map,
+ midpoints: true,
+ selectedPaths: state.selectedCoordPaths,
+ });
+ supplementaryPoints.forEach(push);
+ } else {
+ geojson.properties.active = constants.activeStates.INACTIVE;
+ push(geojson);
+ }
+ this.fireActionable(state);
+};
+export default drawDirectMode;
diff --git a/packages/map/src/components/drawControl/Draw/drawLineSelectMode.draw.js b/packages/map/src/components/drawControl/Draw/drawLineSelectMode.draw.js
new file mode 100644
index 0000000..4086da1
--- /dev/null
+++ b/packages/map/src/components/drawControl/Draw/drawLineSelectMode.draw.js
@@ -0,0 +1,165 @@
+import MapboxDraw from '@mapbox/mapbox-gl-draw';
+import doubleClickZoom from './doubleClickZoom';
+const { constants, lib } = MapboxDraw;
+const drawLineSelectMode = {
+ //当模式启动时,这个函数将被调用。
+ //draw.changeMode(drawLineSelectMode,params}); 切换模式时,params = opts
+ //返回的值应该是一个对象,并将传递给所有其他生命周期函数
+ onSetup: function (opts) {
+ const featureId = opts.featureId;
+ let line;
+ let currentVertexPosition = 0;
+ let direction = 'forward';
+ if (featureId) {
+ line = this.getFeature(featureId);
+ if (!line) {
+ throw new Error('Could not find a feature with the provided featureId');
+ }
+ let from = opts.from;
+ if (from && from.type === 'Feature' && from.geometry && from.geometry.type === 'Point') {
+ from = from.geometry;
+ }
+ if (from && from.type === 'Point' && from.coordinates && from.coordinates.length === 2) {
+ from = from.coordinates;
+ }
+ if (!from || !Array.isArray(from)) {
+ throw new Error(
+ 'Please use the `from` property to indicate which point to continue the line from'
+ );
+ }
+ const lastCoord = line.coordinates.length - 1;
+ if (
+ line.coordinates[lastCoord][0] === from[0] &&
+ line.coordinates[lastCoord][1] === from[1]
+ ) {
+ currentVertexPosition = lastCoord + 1;
+ line.addCoordinate(currentVertexPosition, ...line.coordinates[lastCoord]);
+ } else if (line.coordinates[0][0] === from[0] && line.coordinates[0][1] === from[1]) {
+ direction = 'backwards';
+ currentVertexPosition = 0;
+ line.addCoordinate(currentVertexPosition, ...line.coordinates[0]);
+ } else {
+ throw new Error(
+ '`from` should match the point at either the start or the end of the provided LineString'
+ );
+ }
+ } else {
+ line = this.newFeature({
+ type: constants.geojsonTypes.FEATURE,
+ properties: {},
+ geometry: {
+ type: constants.geojsonTypes.LINE_STRING,
+ coordinates: [],
+ },
+ });
+ currentVertexPosition = 0;
+ this.addFeature(line);
+ }
+ this.clearSelectedFeatures();
+ doubleClickZoom.disable(this);
+ this.updateUIClasses({ mouse: 'add' }); //"+"
+ this.setActionableState({
+ //添加地图事件'draw.actionable'
+ trash: true,
+ combineFeatures: false,
+ uncombineFeatures: false,
+ });
+ return {
+ line,
+ currentVertexPosition,
+ direction,
+ };
+ },
+ clickAnywhere: function (state, e) {
+ if (
+ (state.currentVertexPosition > 0 &&
+ lib.isEventAtCoordinates(e, state.line.coordinates[state.currentVertexPosition - 1])) ||
+ (state.direction === 'backwards' &&
+ lib.isEventAtCoordinates(e, state.line.coordinates[state.currentVertexPosition + 1]))
+ ) {
+ return this.changeMode(constants.modes.SIMPLE_SELECT, {
+ featureIds: [state.line.id],
+ });
+ }
+
+ this.updateUIClasses({ mouse: constants.cursors.ADD });
+ state.line.updateCoordinate(state.currentVertexPosition, e.lngLat.lng, e.lngLat.lat);
+ if (state.direction === 'forward') {
+ state.currentVertexPosition++;
+ state.line.updateCoordinate(state.currentVertexPosition, e.lngLat.lng, e.lngLat.lat);
+ } else {
+ state.line.addCoordinate(0, e.lngLat.lng, e.lngLat.lat);
+ }
+ },
+ clickOnVertex: function (state) {
+ //点击在已经有点上
+ state.line.properties.name = 'line_select';
+ return this.changeMode(constants.modes.SIMPLE_SELECT, { featureIds: [state.line.id] });
+ },
+ onMouseMove: function (state, e) {
+ state.line.updateCoordinate(state.currentVertexPosition, e.lngLat.lng, e.lngLat.lat);
+ if (lib.CommonSelectors.isVertex(e)) {
+ //再次将鼠标放在之前已经有的点上,改变鼠标样式
+ this.updateUIClasses({ mouse: constants.cursors.POINTER });
+ }
+ },
+ onClick: function (state, e) {
+ //再次将鼠标放在之前已经有的点上
+ if (lib.CommonSelectors.isVertex(e)) return this.clickOnVertex(state, e);
+ this.clickAnywhere(state, e);
+ },
+ onKeyUp: function (state, e) {
+ if (lib.CommonSelectors.isEnterKey(e)) {
+ this.changeMode(constants.modes.SIMPLE_SELECT, { featureIds: [state.line.id] });
+ } else if (lib.CommonSelectors.isEscapeKey(e)) {
+ this.deleteFeature([state.line.id], { silent: true });
+ this.changeMode(constants.modes.SIMPLE_SELECT);
+ }
+ },
+ onStop: function (state) {
+ doubleClickZoom.enable(this);
+ if (this.getFeature(state.line.id) === undefined) return;
+ state.line.removeCoordinate(`${state.currentVertexPosition}`); //双击停止时,最后两个点位是一样的
+ if (state.line.isValid()) {
+ //'draw.create'
+ this.map.fire(constants.events.CREATE, {
+ features: [state.line.toGeoJSON()],
+ });
+ } else {
+ this.deleteFeature([state.line.id], { silent: true });
+ this.changeMode(constants.modes.SIMPLE_SELECT, {}, { silent: true });
+ }
+ },
+ onTrash: function (state) {
+ this.deleteFeature([state.line.id], { silent: true });
+ this.changeMode(constants.modes.SIMPLE_SELECT);
+ },
+ //它决定当前 Drew 数据存储中的哪些特性将在地图上呈现。
+ //所有传递给“显示”的特性都将被渲染,因此可以为每个内部特性传递多个显示特性。
+ //有关如何制作显示特性的建议,请参阅‘ styling-pull’in‘ API.md’
+ toDisplayFeatures: function (state, geojson, display) {
+ const isActiveLine = geojson.properties.id === state.line.id;
+ geojson.properties.active = isActiveLine
+ ? constants.activeStates.ACTIVE
+ : constants.activeStates.INACTIVE;
+ if (!isActiveLine) {
+ display(geojson);
+ return;
+ }
+ if (geojson.geometry.coordinates.length < 2) return;
+ geojson.properties.meta = 'line_distance';
+ geojson.properties.name = 'line_distance';
+ display(
+ lib.createVertex(
+ state.line.id,
+ geojson.geometry.coordinates[
+ state.direction === 'forward' ? geojson.geometry.coordinates.length - 2 : 1
+ ],
+ `${state.direction === 'forward' ? geojson.geometry.coordinates.length - 2 : 1}`,
+ false
+ )
+ );
+ display(geojson);
+ },
+};
+export default drawLineSelectMode;
diff --git a/packages/map/src/components/drawControl/Draw/drawRectMode.draw.js b/packages/map/src/components/drawControl/Draw/drawRectMode.draw.js
new file mode 100644
index 0000000..7f7d976
--- /dev/null
+++ b/packages/map/src/components/drawControl/Draw/drawRectMode.draw.js
@@ -0,0 +1,125 @@
+const doubleClickZoom = {
+ enable: (ctx) => {
+ setTimeout(() => {
+ // First check we've got a map and some context.
+ if (
+ !ctx.map ||
+ !ctx.map.doubleClickZoom ||
+ !ctx._ctx ||
+ !ctx._ctx.store ||
+ !ctx._ctx.store.getInitialConfigValue
+ )
+ return;
+ // Now check initial state wasn't false (we leave it disabled if so)
+ if (!ctx._ctx.store.getInitialConfigValue('doubleClickZoom')) return;
+ ctx.map.doubleClickZoom.enable();
+ }, 0);
+ },
+ disable(ctx) {
+ setTimeout(() => {
+ if (!ctx.map || !ctx.map.doubleClickZoom) return;
+ // Always disable here, as it's necessary in some cases.
+ ctx.map.doubleClickZoom.disable();
+ }, 0);
+ },
+};
+
+const DrawRectangle = {
+ // When the mode starts this function will be called.
+ onSetup: function () {
+ const rectangle = this.newFeature({
+ type: 'Feature',
+ properties: {
+ isRect: true,
+ },
+ geometry: {
+ type: 'Polygon',
+ coordinates: [[]],
+ },
+ });
+ this.addFeature(rectangle);
+ this.clearSelectedFeatures();
+ doubleClickZoom.disable(this);
+ this.updateUIClasses({ mouse: 'add' });
+ this.setActionableState({
+ trash: true,
+ });
+ return {
+ rectangle,
+ };
+ },
+ // support mobile taps
+ onTap: function (state, e) {
+ // emulate 'move mouse' to update feature coords
+ if (state.startPoint) this.onMouseMove(state, e);
+ // emulate onClick
+ this.onClick(state, e);
+ },
+ // Whenever a user clicks on the map, Draw will call `onClick`
+ onClick: function (state, e) {
+ // if state.startPoint exist, means its second click
+ //change to simple_select mode
+ if (
+ state.startPoint &&
+ state.startPoint[0] !== e.lngLat.lng &&
+ state.startPoint[1] !== e.lngLat.lat
+ ) {
+ this.updateUIClasses({ mouse: 'pointer' });
+ state.endPoint = [e.lngLat.lng, e.lngLat.lat];
+ this.changeMode('simple_select', { featuresId: state.rectangle.id });
+ }
+ // on first click, save clicked point coords as starting for rectangle
+ const startPoint = [e.lngLat.lng, e.lngLat.lat];
+ state.startPoint = startPoint;
+ },
+ onMouseMove: function (state, e) {
+ // if startPoint, update the feature coordinates, using the bounding box concept
+ // we are simply using the startingPoint coordinates and the current Mouse Position
+ // coordinates to calculate the bounding box on the fly, which will be our rectangle
+ if (state.startPoint) {
+ state.rectangle.updateCoordinate('0.0', state.startPoint[0], state.startPoint[1]); //minX, minY - the starting point
+ state.rectangle.updateCoordinate('0.1', e.lngLat.lng, state.startPoint[1]); // maxX, minY
+ state.rectangle.updateCoordinate('0.2', e.lngLat.lng, e.lngLat.lat); // maxX, maxY
+ state.rectangle.updateCoordinate('0.3', state.startPoint[0], e.lngLat.lat); // minX,maxY
+ state.rectangle.updateCoordinate('0.4', state.startPoint[0], state.startPoint[1]); //minX,minY - ending point (equals to starting point)
+ }
+ },
+ // Whenever a user clicks on a key while focused on the map, it will be sent here
+ onKeyUp: function (state, e) {
+ if (e.keyCode === 27) return this.changeMode('simple_select');
+ },
+ onStop: function (state) {
+ doubleClickZoom.enable(this);
+ this.updateUIClasses({ mouse: 'none' });
+ this.activateUIButton();
+
+ // check to see if we've deleted this feature
+ if (this.getFeature(state.rectangle.id) === undefined) return;
+
+ //remove last added coordinate
+ state.rectangle.removeCoordinate('0.4');
+ if (state.rectangle.isValid()) {
+ this.map.fire('draw.create', {
+ features: [state.rectangle.toGeoJSON()],
+ });
+ } else {
+ this.deleteFeature([state.rectangle.id], { silent: true });
+ this.changeMode('simple_select', {}, { silent: true });
+ }
+ },
+ toDisplayFeatures: function (state, geojson, display) {
+ const isActivePolygon = geojson.properties.id === state.rectangle.id;
+ geojson.properties.active = isActivePolygon ? 'true' : 'false';
+ if (!isActivePolygon) return display(geojson);
+
+ // Only render the rectangular polygon if it has the starting point
+ if (!state.startPoint) return;
+ return display(geojson);
+ },
+ onTrash: function (state) {
+ this.deleteFeature([state.rectangle.id], { silent: true });
+ this.changeMode('simple_select');
+ },
+};
+
+export default DrawRectangle;
diff --git a/packages/map/src/components/drawControl/Draw/drawSimpleSelectMode.draw.js b/packages/map/src/components/drawControl/Draw/drawSimpleSelectMode.draw.js
new file mode 100644
index 0000000..a31a5ad
--- /dev/null
+++ b/packages/map/src/components/drawControl/Draw/drawSimpleSelectMode.draw.js
@@ -0,0 +1,86 @@
+import MapboxDraw from '@mapbox/mapbox-gl-draw';
+import createSupplementaryPoints from '@mapbox/mapbox-gl-draw';
+import moveFeatures from '@mapbox/mapbox-gl-draw';
+import createVertex from '@mapbox/mapbox-gl-draw';
+import { lineToPoly } from './utils';
+const { constants } = MapboxDraw;
+
+function createSupplementaryPointsForCircle(geojson) {
+ const { properties, geometry } = geojson;
+
+ if (!properties.user_isCircle) return null;
+
+ const supplementaryPoints = [];
+ const vertices = geometry.coordinates[0].slice(0, -1);
+ for (let index = 0; index < vertices.length; index += Math.round(vertices.length / 4)) {
+ supplementaryPoints.push(createVertex(properties.id, vertices[index], `0.${index}`, false));
+ }
+ return supplementaryPoints;
+}
+const drawSimpleSelectMode = { ...MapboxDraw.modes.simple_select };
+
+drawSimpleSelectMode.dragMove = function (state, e) {
+ // Dragging when drag move is enabled
+ state.dragMoving = true;
+ e.originalEvent.stopPropagation();
+
+ const delta = {
+ lng: e.lngLat.lng - state.dragMoveLocation.lng,
+ lat: e.lngLat.lat - state.dragMoveLocation.lat,
+ };
+
+ moveFeatures(this.getSelected(), delta);
+
+ this.getSelected()
+ .filter((feature) => feature.properties.isCircle)
+ .map((circle) => circle.properties.center)
+ .forEach((center) => {
+ center[0] += delta.lng;
+ center[1] += delta.lat;
+ });
+
+ state.dragMoveLocation = e.lngLat;
+};
+
+drawSimpleSelectMode.toDisplayFeatures = function (state, geojson, display) {
+ geojson.properties.active = this.isSelected(geojson.properties.id)
+ ? constants.activeStates.ACTIVE
+ : constants.activeStates.INACTIVE;
+
+ if (geojson.properties.user_name === 'line_select') {
+ const union = lineToPoly(geojson);
+ display(union);
+ }
+ display(geojson);
+ this.fireActionable();
+ //如果是线 每次都创建点
+ if (
+ geojson?.properties.active !== constants.activeStates.ACTIVE &&
+ geojson.geometry.type === constants.geojsonTypes.LINE_STRING &&
+ geojson.properties.user_name !== 'line_select'
+ ) {
+ const points = createSupplementaryPoints(geojson);
+ points.forEach(display);
+ }
+
+ if (
+ geojson.properties.active !== constants.activeStates.ACTIVE ||
+ geojson.geometry.type === constants.geojsonTypes.POINT
+ ) {
+ return;
+ }
+
+ let supplementaryPoints;
+ if (geojson.properties.user_isCircle) {
+ supplementaryPoints = createSupplementaryPointsForCircle(geojson);
+ } else {
+ supplementaryPoints = createSupplementaryPoints(geojson);
+ }
+ supplementaryPoints.forEach(display);
+
+ // if(geojson.properties.)
+};
+
+//阻止框选图形拖拽
+drawSimpleSelectMode.onTap = drawSimpleSelectMode.onClick = function () {};
+export default drawSimpleSelectMode;
diff --git a/packages/map/src/components/drawControl/Draw/drawStaticMode.draw.js b/packages/map/src/components/drawControl/Draw/drawStaticMode.draw.js
new file mode 100644
index 0000000..9834c2c
--- /dev/null
+++ b/packages/map/src/components/drawControl/Draw/drawStaticMode.draw.js
@@ -0,0 +1,14 @@
+import doubleClickZoom from './doubleClickZoom';
+
+var StaticMode = {};
+
+StaticMode.onSetup = function () {
+ this.setActionableState(); // default actionable state is false for all actions
+ doubleClickZoom.disable(this); //静态model 不运行双击
+ return {};
+};
+
+StaticMode.toDisplayFeatures = function (state, geojson, display) {
+ display(geojson);
+};
+export default StaticMode;
diff --git a/packages/map/src/components/drawControl/Draw/index.ts b/packages/map/src/components/drawControl/Draw/index.ts
new file mode 100644
index 0000000..d1580b5
--- /dev/null
+++ b/packages/map/src/components/drawControl/Draw/index.ts
@@ -0,0 +1,75 @@
+// @ts-nocheck
+import '@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css';
+import MapboxDraw from '@mapbox/mapbox-gl-draw';
+import type { DrawModes } from '@mapbox/mapbox-gl-draw';
+import type { MapboxMap } from 'react-map-gl';
+import drawLineSelectMode from './drawLineSelectMode.draw.js';
+import drawCircleMode from './drawCircleMode.draw.js';
+import drawRectMode from './drawRectMode.draw.js';
+import drawDirectMode from './drawDirectMode.draw.js';
+import drawSimpleSelectMode from './drawSimpleSelectMode.draw.js';
+import drawStaticMode from './drawStaticMode.draw.js';
+import mapboxDrawStyle from './drawStyle';
+
+interface DrawControl {
+ modes?: DrawModes;
+}
+function noop(): void {
+ /* do nothing */
+}
+//mapbox-gl-draw api
+//https://github.com/mapbox/mapbox-gl-draw/blob/main/docs/MODES.md#life-cycle-functions
+
+function drawControl(
+ map: MapboxMap,
+ params: DrawControl = {},
+ defaultMode = 'static',
+ onDrawCreate = () => {}
+) {
+ const { modes: paramModes = {} } = params;
+
+ if (!map) {
+ return;
+ }
+ /**
+ * MapboxDraw 里面有的
+ * draw_line_string 画线
+ * draw_polygon 多边形
+ * draw_point
+ * simple_select
+ * direct_select
+ *
+ * 需要自定义的
+ * draw_line_select; 路径框选1
+ * direct_select;
+ * simple_select;
+ * draw_circle;1
+ * draw_rect;1
+ *
+ * 用MapboxDraw的
+ * draw_polygon 多边形
+ * draw_line_string 画线
+ */
+
+ const draw = new MapboxDraw({
+ defaultMode: defaultMode,
+ displayControlsDefault: false, // 取消默认的按钮
+ styles: mapboxDrawStyle,
+ modes: {
+ ...MapboxDraw.modes,
+ draw_line_select: drawLineSelectMode,
+ draw_line_string: drawLineSelectMode,
+ draw_circle: drawCircleMode,
+ draw_rect: drawRectMode,
+ direct_select: drawDirectMode,
+ simple_select: drawSimpleSelectMode,
+ static: drawStaticMode,
+ ...paramModes,
+ },
+ });
+ map.addControl(draw);
+ map.on('draw.create', onDrawCreate || noop);
+ return draw;
+}
+
+export default drawControl;
diff --git a/packages/map/src/components/drawControl/DrawControl.tsx b/packages/map/src/components/drawControl/DrawControl.tsx
new file mode 100644
index 0000000..d3099e1
--- /dev/null
+++ b/packages/map/src/components/drawControl/DrawControl.tsx
@@ -0,0 +1,107 @@
+/**
+ * Created by jiangzhixiong on 2024/05/21
+ */
+import { forwardRef, useImperativeHandle, useRef, } from 'react'
+import MapboxDraw from '@mapbox/mapbox-gl-draw';
+import {
+ CircleMode,
+ DragCircleMode,
+ DirectMode,
+ SimpleSelectMode
+// @ts-ignore
+} from 'mapbox-gl-draw-circle'
+// @ts-ignore
+import drawRectMode from 'mapbox-gl-draw-rectangle-mode'
+// @ts-ignore
+import drawStaticMode from '@mapbox/mapbox-gl-draw-static-mode'
+import { useControl } from 'react-map-gl';
+import type { ControlPosition } from 'react-map-gl';
+import { MapContextValue } from 'react-map-gl/dist/esm/components/map';
+
+export type DrawControlProps = ConstructorParameters[0] & {
+ position?: ControlPosition;
+
+ onCreate?: (evt: {features: object[]}) => void;
+ onUpdate?: (evt: {features: object[]; action: string}) => void;
+ onDelete?: (evt: {features: object[]}) => void;
+ onRender?: (evt: {features: object[]}) => void;
+ onCombine?: (evt: {features: object[]}) => void;
+ onUncombine?: (evt: {features: object[]}) => void;
+ onModeChange?: (evt: {features: object[]}) => void;
+ onActionable?: (evt: {features: object[]}) => void;
+ onSelectionChange?: (evt: {features: object[]}) => void;
+};
+
+export interface DrawControlRefProps {
+ drawer?: MapboxDraw & {
+ modes: MapboxDraw.Modes | 'static' | 'draw_rect' | 'drag_circle' | 'draw_circle' | 'direct_select' | 'simple_select'
+ }
+}
+
+const DrawControl = forwardRef((props, ref) => {
+ const drawRef = useRef(null)
+
+ useControl(
+ () => {
+ let draw = new MapboxDraw(
+ {
+ modes: {
+ ...MapboxDraw.modes,
+ // draw_line_select: drawLineSelectMode,
+ draw_rect: drawRectMode,
+ drag_circle: DragCircleMode,
+ draw_circle : CircleMode,
+ direct_select: DirectMode,
+ simple_select: SimpleSelectMode,
+ static: drawStaticMode,
+ },
+ ...props
+ }
+ )
+ // @ts-ignore
+ drawRef.current = draw
+ return draw
+ },
+ (context: MapContextValue) => {
+ const { map } = context
+ map.on('draw.create', e => props.onCreate?.(e));
+ map.on('draw.update', e => props.onUpdate?.(e));
+ map.on('draw.delete', e => props.onDelete?.(e));
+ map.on('draw.render', e => props.onRender?.(e));
+ map.on('draw.combine', e => props.onCombine?.(e));
+ map.on('draw.uncombine', e => props.onUncombine?.(e));
+ map.on('draw.modechange', e => props.onModeChange?.(e));
+ map.on('draw.actionable', e => props.onActionable?.(e));
+ map.on('draw.selectionchange', e => props.onSelectionChange?.(e));
+ },
+ (context: MapContextValue) => {
+ const { map } = context
+ map.off('draw.create', props.onCreate);
+ map.off('draw.update', props.onUpdate);
+ map.off('draw.delete', props.onDelete);
+ map.off('draw.render', e => props.onRender?.(e));
+ map.off('draw.combine', e => props.onCombine?.(e));
+ map.off('draw.uncombine', e => props.onUncombine?.(e));
+ map.off('draw.modechange', e => props.onModeChange?.(e));
+ map.off('draw.actionable', e => props.onActionable?.(e));
+ map.off('draw.selectionchange', e => props.onSelectionChange?.(e));
+ },
+ {
+ position: props.position
+ }
+ );
+
+ useImperativeHandle(ref, () => ({
+ drawer: drawRef.current!
+ }))
+
+ return null;
+})
+
+DrawControl.defaultProps = {
+ onCreate: () => {},
+ onUpdate: () => {},
+ onDelete: () => {}
+};
+
+export default DrawControl
diff --git a/packages/map/src/components/drawControl/index.tsx b/packages/map/src/components/drawControl/index.tsx
new file mode 100644
index 0000000..5a96584
--- /dev/null
+++ b/packages/map/src/components/drawControl/index.tsx
@@ -0,0 +1,8 @@
+/**
+ * Created by jiangzhixiong on 2024/05/21
+ */
+import DrawControl from './DrawControl'
+
+export type { DrawControlProps, DrawControlRefProps } from './DrawControl'
+
+export default DrawControl
diff --git a/packages/map/src/components/marker/Marker.tsx b/packages/map/src/components/marker/Marker.tsx
new file mode 100644
index 0000000..e8fe8b4
--- /dev/null
+++ b/packages/map/src/components/marker/Marker.tsx
@@ -0,0 +1,114 @@
+/**
+ * Created by jiangzhixiong on 2024/05/23
+ */
+import React, { forwardRef, ReactNode, useContext, useImperativeHandle, useState } from 'react'
+import {
+ Marker as MapboxMarker,
+ MarkerProps as MapboxMarkerProps,
+ MarkerEvent
+} from 'react-map-gl'
+import { Checkbox, ConfigProvider, Image } from '@zhst/meta'
+import classNames from 'classnames'
+import cameraBlue from '../../assets/icons/camera_blue.png'
+import cameraGreen from '../../assets/icons/camera_green.png'
+import cameraGrey from '../../assets/icons/camera_grey.png'
+import cameraRed from '../../assets/icons/camera_red.png'
+import cameraYellow from '../../assets/icons/camera_yellow.png'
+import './index.less'
+
+const { ConfigContext } = ConfigProvider
+
+const PIC_MAP = new Map([
+ ['camera_blue', cameraBlue],
+ ['camera_green', cameraGreen],
+ ['camera_grey', cameraGrey],
+ ['camera_red', cameraRed],
+ ['camera_yellow', cameraYellow],
+])
+
+// @ts-ignore
+export interface MarkerProps extends MapboxMarkerProps {
+ prefixCls?: string;
+ key: string;
+ id: string;
+ title?: string;
+ disabled?: boolean;
+ checked?: boolean;
+ showCheckBox?: boolean
+ showTooltip?: boolean
+ type?: 'camera' | 'cluster' | 'marker';
+ population?: string;
+ status?: 'blue' | 'green' | 'yellow' | 'grey' | 'red_border' | 'escape' | 'escape_border' | 'red_track'; // 摄像头状态
+ onClick?: (e?: MarkerEvent, data?: MarkerProps) => void;
+ onMarkerClick?: (e?: MouseEvent, checked?: boolean, data?: MarkerProps) => void;
+ customMarkerRender?: (data: MarkerProps) => ReactNode
+}
+
+export interface MarkerRefProps {
+}
+
+const Marker = forwardRef((props, ref) => {
+ const {
+ prefixCls: customizePrefixCls,
+ checked = false,
+ type = 'camera',
+ status = 'blue',
+ disabled,
+ showCheckBox,
+ showTooltip,
+ onClick,
+ onMarkerClick,
+ customMarkerRender,
+ ...rest
+ } = props
+ const { getPrefixCls } = useContext(ConfigContext)
+ const componentName = getPrefixCls('-map-marker', customizePrefixCls);
+ const [showTitle, setShowTitle] = useState(showTooltip)
+
+ useImperativeHandle(ref, () => ({}))
+
+ return (
+ {
+ e.originalEvent.stopPropagation();
+ // @ts-ignore
+ onClick?.(e, props)
+ }}
+ {...rest}
+ >
+ {/* 自定义marker */}
+ {customMarkerRender?.(props) || (
+
+ {showCheckBox && (
+
{
+ e.stopPropagation()
+ // @ts-ignore
+ onMarkerClick?.(e, checked, props)
+ }}
+ />
+ )}
+ setShowTitle(true)}
+ onMouseLeave={() => setShowTitle(false)}
+ src={PIC_MAP.get(`${type}_${status}`)}
+ preview={false}
+ />
+ {showTitle && (
+
+ {props.title}
+
+ )}
+
+
+ )}
+
+ )
+})
+
+export default Marker
diff --git a/packages/map/src/components/marker/index.less b/packages/map/src/components/marker/index.less
new file mode 100644
index 0000000..d242d6e
--- /dev/null
+++ b/packages/map/src/components/marker/index.less
@@ -0,0 +1,35 @@
+.zhst--map-marker {
+ position: relative;
+ cursor: pointer;
+
+ &-checkbox {
+ position: absolute;
+ top: -6px;
+ right: -6px;
+ z-index: 1;
+ }
+
+ &-title {
+ padding: 3px 6px;
+ position: absolute;
+ left: 50%;
+ bottom: -36px;
+ transform: translateX(-50%);
+ white-space: nowrap;
+ background-color: #fff;
+ border-radius: 3px;
+ box-shadow: 3px 3px 6px 3px rgba(0, 0, 0, 20%);
+
+ &::after {
+ position: absolute;
+ top: -12px;
+ left: 50%;
+ transform: translateX(-50%);
+ content: '';
+ width: 0;
+ height: 0;
+ border: 6px solid;
+ border-color: transparent transparent #fff;
+ }
+ }
+}
diff --git a/packages/map/src/components/marker/index.tsx b/packages/map/src/components/marker/index.tsx
new file mode 100644
index 0000000..e2a7138
--- /dev/null
+++ b/packages/map/src/components/marker/index.tsx
@@ -0,0 +1,8 @@
+/**
+ * Created by jiangzhixiong on 2024/05/23
+ */
+import Marker from './Marker'
+
+export type { MarkerProps, MarkerRefProps } from './Marker'
+
+export default Marker
diff --git a/packages/map/src/components/marker/pin.tsx b/packages/map/src/components/marker/pin.tsx
new file mode 100644
index 0000000..c669333
--- /dev/null
+++ b/packages/map/src/components/marker/pin.tsx
@@ -0,0 +1,21 @@
+import * as React from 'react';
+
+const ICON = `M20.2,15.7L20.2,15.7c1.1-1.6,1.8-3.6,1.8-5.7c0-5.6-4.5-10-10-10S2,4.5,2,10c0,2,0.6,3.9,1.6,5.4c0,0.1,0.1,0.2,0.2,0.3
+ c0,0,0.1,0.1,0.1,0.2c0.2,0.3,0.4,0.6,0.7,0.9c2.6,3.1,7.4,7.6,7.4,7.6s4.8-4.5,7.4-7.5c0.2-0.3,0.5-0.6,0.7-0.9
+ C20.1,15.8,20.2,15.8,20.2,15.7z`;
+
+const pinStyle = {
+ cursor: 'pointer',
+ fill: '#d00',
+ stroke: 'none'
+};
+
+function Pin({size = 20}) {
+ return (
+
+ );
+}
+
+export default React.memo(Pin);
diff --git a/packages/map/src/components/popup/PopUp.tsx b/packages/map/src/components/popup/PopUp.tsx
new file mode 100644
index 0000000..e87b635
--- /dev/null
+++ b/packages/map/src/components/popup/PopUp.tsx
@@ -0,0 +1,58 @@
+/**
+ * Created by jiangzhixiong on 2024/05/23
+ */
+import React, { forwardRef, useContext, useImperativeHandle } from 'react'
+import {
+ Popup as MapboxPopUp,
+ PopupProps as MapboxPopupProps
+} from 'react-map-gl'
+import { ConfigProvider, Image } from '@zhst/meta'
+import './index.less'
+import classNames from 'classnames'
+
+const { ConfigContext } = ConfigProvider
+
+export interface PopUpProps extends MapboxPopupProps {
+ prefixCls?: string;
+ size?: number;
+ title?: string;
+ url?: string;
+ content?: string;
+ contentRender?: (props: PopUpProps) => void;
+}
+
+export interface PopUpRefProps {
+}
+
+const PopUp = forwardRef((props, ref) => {
+ const {
+ title,
+ content,
+ url,
+ contentRender,
+ prefixCls: customizePrefixCls,
+ ...rest
+ } = props
+ const { getPrefixCls } = useContext(ConfigContext)
+ const componentName = getPrefixCls('map-popup', customizePrefixCls);
+
+ useImperativeHandle(ref, () => ({}))
+
+ return (
+
+ {contentRender?.(props) || (
+
+ {title &&
{title}
}
+ {url &&
}
+ {content &&
{content}
}
+
+ )}
+
+ )
+})
+
+export default PopUp
diff --git a/packages/map/src/components/popup/index.less b/packages/map/src/components/popup/index.less
new file mode 100644
index 0000000..3510a6a
--- /dev/null
+++ b/packages/map/src/components/popup/index.less
@@ -0,0 +1,11 @@
+.zhst-map-popup {
+ .mapboxgl-popup-content {
+ padding: 12px 6px 6px;
+ }
+
+ &-container {
+ p {
+ margin: 0;
+ }
+ }
+}
diff --git a/packages/map/src/components/popup/index.tsx b/packages/map/src/components/popup/index.tsx
new file mode 100644
index 0000000..867e3fe
--- /dev/null
+++ b/packages/map/src/components/popup/index.tsx
@@ -0,0 +1,7 @@
+/**
+ * Created by jiangzhixiong on 2024/05/23
+ */
+import PopUp from './PopUp'
+export type { PopUpProps, PopUpRefProps } from './PopUp'
+
+export default PopUp
diff --git a/packages/map/src/components/tools/Tools.tsx b/packages/map/src/components/tools/Tools.tsx
new file mode 100644
index 0000000..a126de3
--- /dev/null
+++ b/packages/map/src/components/tools/Tools.tsx
@@ -0,0 +1,67 @@
+/**
+ * Created by jiangzhixiong on 2024/05/21
+ */
+
+import React, { forwardRef, ReactNode, useContext, useImperativeHandle } from 'react'
+import { Button, ConfigProvider } from '@zhst/meta'
+import classNames from 'classnames'
+import { IconFont } from '@zhst/icon'
+import './index.less'
+
+const { ConfigContext } = ConfigProvider
+
+export interface ToolsProps {
+ prefixCls?: string
+ open?: boolean;
+ onToolClick?: (e: React.MouseEvent) => void
+ buttonList?: {
+ label: string
+ key: string
+ icon?: ReactNode | string
+ onClick?: () => void
+ }[]
+}
+
+export interface ToolsRefProps {
+}
+
+const Tools = forwardRef((props, ref) => {
+ const {
+ prefixCls: customizePrefixCls,
+ buttonList = [],
+ onToolClick,
+ open
+ } = props
+ const { getPrefixCls } = useContext(ConfigContext)
+ const componentName = getPrefixCls('map-tools', customizePrefixCls)
+
+ useImperativeHandle(ref, () => ({
+
+ }))
+
+ return (
+
+
+ {buttonList.map((item) => (
+ -
+ {typeof item.icon === 'string' ? (
+
+ ) : (
+ item.icon
+ )}
+ {item.label}
+
+ ))}
+
+
}
+ />
+
+ )
+})
+
+export default Tools
diff --git a/packages/map/src/components/tools/index.less b/packages/map/src/components/tools/index.less
new file mode 100644
index 0000000..269732b
--- /dev/null
+++ b/packages/map/src/components/tools/index.less
@@ -0,0 +1,64 @@
+.zhst-map-tools {
+ position: absolute;
+ display: flex;
+ align-items: center;
+ top: 16px;
+ right: 16px;
+ z-index: 1;
+
+ &-navs {
+ display: none;
+ position: relative;
+ left: 24px;
+ margin: 0;
+ margin-right: 12px;
+ padding-left: 0;
+ list-style: none;
+ font-size: 0;
+ background-color: #fff;
+ border: 1px solid #09f;
+ border-radius: 3px;
+ opacity: 0;
+ transition: .3s ease all;
+
+ &_active {
+ display: block;
+ left: 0;
+ opacity: 1;
+ }
+
+ &-item {
+ position: relative;
+ padding: 6px 12px;
+ display: inline-flex;
+ align-items: center;
+ font-size: 12px;
+ cursor: pointer;
+
+ &:hover {
+ color: #09f;
+ }
+
+ &::after {
+ position: absolute;
+ content: '';
+ width: 1px;
+ height: 36%;
+ right: 0;
+ top: 50%;
+ background-color: #f0f0f0;
+ transform: translateY(-50%);
+ }
+
+ &:last-child {
+ &::after {
+ display: none;
+ }
+ }
+
+ &-icon {
+ font-size: 24px;
+ }
+ }
+ }
+}
diff --git a/packages/map/src/components/tools/index.tsx b/packages/map/src/components/tools/index.tsx
new file mode 100644
index 0000000..a01fbac
--- /dev/null
+++ b/packages/map/src/components/tools/index.tsx
@@ -0,0 +1,8 @@
+/**
+ * Created by jiangzhixiong on 2024/05/21
+ */
+import Tools from './Tools'
+
+export type { ToolsProps, ToolsRefProps } from './Tools'
+
+export default Tools
diff --git a/packages/map/src/demo/.data/bart-station.json b/packages/map/src/demo/.data/bart-station.json
new file mode 100644
index 0000000..0da362a
--- /dev/null
+++ b/packages/map/src/demo/.data/bart-station.json
@@ -0,0 +1,46 @@
+[
+ {"name":"Lafayette (LAFY)","coordinates":[-122.123801,37.893394]},
+ {"name":"12th St. Oakland City Center (12TH)","coordinates":[-122.271604,37.803664]},
+ {"name":"16th St. Mission (16TH)","coordinates":[-122.419694,37.765062]},
+ {"name":"19th St. Oakland (19TH)","coordinates":[-122.269029,37.80787]},
+ {"name":"24th St. Mission (24TH)","coordinates":[-122.418466,37.752254]},
+ {"name":"Ashby (ASHB)","coordinates":[-122.26978,37.853024]},
+ {"name":"Balboa Park (BALB)","coordinates":[-122.447414,37.721981]},
+ {"name":"Bay Fair (BAYF)","coordinates":[-122.126871,37.697185]},
+ {"name":"Castro Valley (CAST)","coordinates":[-122.075567,37.690754]},
+ {"name":"Civic Center/UN Plaza (CIVC)","coordinates":[-122.413756,37.779528]},
+ {"name":"Colma (COLM)","coordinates":[-122.466233,37.684638]},
+ {"name":"Coliseum/Oakland Airport (COLS)","coordinates":[-122.197273,37.754006]},
+ {"name":"Concord (CONC)","coordinates":[-122.029095,37.973737]},
+ {"name":"Daly City (DALY)","coordinates":[-122.469081,37.706121]},
+ {"name":"Downtown Berkeley (DBRK)","coordinates":[-122.268045,37.869867]},
+ {"name":"El Cerrito del Norte (DELN)","coordinates":[-122.317269,37.925655]},
+ {"name":"Dublin/Pleasanton (DUBL)","coordinates":[-121.900367,37.701695]},
+ {"name":"Embarcadero (EMBR)","coordinates":[-122.396742,37.792976]},
+ {"name":"Fremont (FRMT)","coordinates":[-121.9764,37.557355]},
+ {"name":"Fruitvale (FTVL)","coordinates":[-122.224274,37.774963]},
+ {"name":"Glen Park (GLEN)","coordinates":[-122.434092,37.732921]},
+ {"name":"Hayward (HAYW)","coordinates":[-122.087967,37.670399]},
+ {"name":"Lake Merritt (LAKE)","coordinates":[-122.265609,37.797484]},
+ {"name":"MacArthur (MCAR)","coordinates":[-122.267227,37.828415]},
+ {"name":"Millbrae (MLBR)","coordinates":[-122.38666,37.599787]},
+ {"name":"Montgomery St. (MONT)","coordinates":[-122.401407,37.789256]},
+ {"name":"North Berkeley (NBRK)","coordinates":[-122.283451,37.87404]},
+ {"name":"North Concord/Martinez (NCON)","coordinates":[-122.024597,38.003275]},
+ {"name":"Orinda (ORIN)","coordinates":[-122.183791,37.878361]},
+ {"name":"Pleasant Hill/Contra Costa Centre (PHIL)","coordinates":[-122.056013,37.928403]},
+ {"name":"Pittsburg/Bay Point (PITT)","coordinates":[-121.945154,38.018914]},
+ {"name":"El Cerrito Plaza (PLZA)","coordinates":[-122.299272,37.903059]},
+ {"name":"Powell St. (POWL)","coordinates":[-122.406857,37.784991]},
+ {"name":"Richmond (RICH)","coordinates":[-122.353165,37.936887]},
+ {"name":"Rockridge (ROCK)","coordinates":[-122.251793,37.844601]},
+ {"name":"San Leandro (SANL)","coordinates":[-122.161311,37.722619]},
+ {"name":"San Bruno (SBRN)","coordinates":[-122.416038,37.637753]},
+ {"name":"San Francisco Int'l Airport (SFIA)","coordinates":[-122.392612,37.616035]},
+ {"name":"South Hayward (SHAY)","coordinates":[-122.057551,37.6348]},
+ {"name":"South San Francisco (SSAN)","coordinates":[-122.444116,37.664174]},
+ {"name":"Union City (UCTY)","coordinates":[-122.017867,37.591208]},
+ {"name":"Walnut Creek (WCRK)","coordinates":[-122.067423,37.905628]},
+ {"name":"West Dublin/Pleasanton (WDUB)","coordinates":[-121.928099,37.699759]},
+ {"name":"West Oakland (WOAK)","coordinates":[-122.294582,37.804675]}
+]
\ No newline at end of file
diff --git a/packages/map/src/demo/.data/feature-example-sf.json b/packages/map/src/demo/.data/feature-example-sf.json
new file mode 100644
index 0000000..578d34b
--- /dev/null
+++ b/packages/map/src/demo/.data/feature-example-sf.json
@@ -0,0 +1,2262 @@
+{
+ "type": "FeatureCollection",
+ "features": [
+ {
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [-122.391701,37.794113],
+ [-122.39198,37.793906],
+ [-122.391614,37.793571],
+ [-122.391714,37.793459],
+ [-122.388816,37.791005],
+ [-122.388932,37.790919],
+ [-122.388616,37.790348],
+ [-122.388076,37.790518],
+ [-122.388375,37.790334],
+ [-122.388225,37.790032],
+ [-122.385852,37.790951],
+ [-122.385496,37.790559],
+ [-122.387589,37.789838],
+ [-122.387289,37.789347],
+ [-122.385303,37.789838],
+ [-122.38512,37.789313],
+ [-122.387174,37.788807],
+ [-122.387032,37.788255],
+ [-122.385261,37.788537],
+ [-122.385136,37.788156],
+ [-122.38739,37.787736],
+ [-122.387415,37.787269],
+ [-122.3845,37.787437],
+ [-122.384342,37.785728],
+ [-122.387577,37.785485],
+ [-122.38765,37.784929],
+ [-122.385546,37.785009],
+ [-122.385455,37.784711],
+ [-122.387477,37.784493],
+ [-122.387691,37.784412],
+ [-122.387722,37.783928],
+ [-122.385271,37.784049],
+ [-122.38525,37.78379],
+ [-122.38572,37.783774],
+ [-122.38573,37.78354],
+ [-122.386088,37.783435],
+ [-122.387732,37.783282],
+ [-122.387773,37.782911],
+ [-122.388426,37.781801],
+ [-122.388189,37.784771],
+ [-122.388504,37.785348],
+ [-122.389694,37.786243],
+ [-122.39141,37.785103],
+ [-122.39146,37.7855],
+ [-122.393512,37.784564],
+ [-122.394567,37.783783],
+ [-122.396711,37.785549],
+ [-122.398941,37.783785],
+ [-122.400955,37.785389],
+ [-122.399523,37.786631],
+ [-122.39999,37.787004],
+ [-122.401497,37.785824],
+ [-122.403374,37.787401],
+ [-122.403427,37.787676],
+ [-122.393875,37.795248],
+ [-122.392429,37.793835],
+ [-122.391701,37.794113]
+ ]
+ ]
+ },
+ "id": "94105",
+ "properties": {
+ "id": 94105,
+ "neighborhood": "Rincon Hill"
+ },
+ "type": "Feature"
+ },
+ {
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [-122.387773,37.782911],
+ [-122.38474,37.782975],
+ [-122.384693,37.78256],
+ [-122.387778,37.782318],
+ [-122.387757,37.781825],
+ [-122.385561,37.781946],
+ [-122.385521,37.781607],
+ [-122.387737,37.781454],
+ [-122.38743,37.778402],
+ [-122.385306,37.778443],
+ [-122.387471,37.778322],
+ [-122.389642,37.777478],
+ [-122.390383,37.777037],
+ [-122.391116,37.777571],
+ [-122.393279,37.775838],
+ [-122.393858,37.776284],
+ [-122.396169,37.774505],
+ [-122.39557,37.774012],
+ [-122.40004,37.7705],
+ [-122.395085,37.766537],
+ [-122.394825,37.766551],
+ [-122.394286,37.766114],
+ [-122.393456,37.765089],
+ [-122.393013,37.764089],
+ [-122.387845,37.764369],
+ [-122.386873,37.765646],
+ [-122.386312,37.765628],
+ [-122.386523,37.765339],
+ [-122.386427,37.764449],
+ [-122.386725,37.76414],
+ [-122.386629,37.76392],
+ [-122.387081,37.76357],
+ [-122.386533,37.763395],
+ [-122.386581,37.763239],
+ [-122.386331,37.763148],
+ [-122.386187,37.763369],
+ [-122.385513,37.763308],
+ [-122.385484,37.763163],
+ [-122.385186,37.763369],
+ [-122.385099,37.762353],
+ [-122.384723,37.76214],
+ [-122.38429,37.762162],
+ [-122.384473,37.764079],
+ [-122.384319,37.764072],
+ [-122.384098,37.762261],
+ [-122.38326,37.762322],
+ [-122.383289,37.762543],
+ [-122.383771,37.762573],
+ [-122.383809,37.764277],
+ [-122.383289,37.764148],
+ [-122.383116,37.762467],
+ [-122.382337,37.762482],
+ [-122.382519,37.764647],
+ [-122.382336,37.764639],
+ [-122.382125,37.762425],
+ [-122.381894,37.762425],
+ [-122.381865,37.762745],
+ [-122.381682,37.762737],
+ [-122.381643,37.764852],
+ [-122.381153,37.764951],
+ [-122.380883,37.764776],
+ [-122.380874,37.763308],
+ [-122.380691,37.763293],
+ [-122.380383,37.760219],
+ [-122.379507,37.76028],
+ [-122.379776,37.763506],
+ [-122.379526,37.763513],
+ [-122.379218,37.759968],
+ [-122.381288,37.759787],
+ [-122.381327,37.759353],
+ [-122.381202,37.759322],
+ [-122.381317,37.75901],
+ [-122.381182,37.758995],
+ [-122.381288,37.75866],
+ [-122.381134,37.758638],
+ [-122.38125,37.758318],
+ [-122.381096,37.758211],
+ [-122.38124,37.758211],
+ [-122.3815,37.75777],
+ [-122.381481,37.757549],
+ [-122.381288,37.755936],
+ [-122.380787,37.755487],
+ [-122.380797,37.755258],
+ [-122.384109,37.75497],
+ [-122.384109,37.754719],
+ [-122.38333,37.754689],
+ [-122.382868,37.754384],
+ [-122.382896,37.753699],
+ [-122.382723,37.753418],
+ [-122.381703,37.753197],
+ [-122.381433,37.752999],
+ [-122.380095,37.752923],
+ [-122.380089,37.752759],
+ [-122.381482,37.752782],
+ [-122.382078,37.753131],
+ [-122.382933,37.753184],
+ [-122.387833,37.752817],
+ [-122.387666,37.750267],
+ [-122.391705,37.750133],
+ [-122.401546,37.74945],
+ [-122.403798,37.749443],
+ [-122.403022,37.752336],
+ [-122.403364,37.752366],
+ [-122.403524,37.754463],
+ [-122.40315,37.754488],
+ [-122.403328,37.756082],
+ [-122.403585,37.756818],
+ [-122.403428,37.756871],
+ [-122.40405,37.757619],
+ [-122.405604,37.758851],
+ [-122.406015,37.759409],
+ [-122.406167,37.759315],
+ [-122.40645,37.760114],
+ [-122.406451,37.760865],
+ [-122.40604,37.761865],
+ [-122.405859,37.761815],
+ [-122.405832,37.762199],
+ [-122.405271,37.763272],
+ [-122.405115,37.764635],
+ [-122.399688,37.765005],
+ [-122.3998,37.766807],
+ [-122.400422,37.767291],
+ [-122.40001,37.767614],
+ [-122.400915,37.768096],
+ [-122.400881,37.767518],
+ [-122.401851,37.767416],
+ [-122.402021,37.768998],
+ [-122.401768,37.769145],
+ [-122.401685,37.769721],
+ [-122.402091,37.769716],
+ [-122.402105,37.769912],
+ [-122.403477,37.769842],
+ [-122.404003,37.77018],
+ [-122.403723,37.770182],
+ [-122.399425,37.773612],
+ [-122.405629,37.778502],
+ [-122.396711,37.785549],
+ [-122.394567,37.783783],
+ [-122.393512,37.784564],
+ [-122.39146,37.7855],
+ [-122.39141,37.785103],
+ [-122.389694,37.786243],
+ [-122.388504,37.785348],
+ [-122.388189,37.784771],
+ [-122.388426,37.781801],
+ [-122.387773,37.782911]
+ ]
+ ]
+ },
+ "id": "94107",
+ "properties": {
+ "id": "94107",
+ "neighborhood": "South Beach"
+ },
+ "type": "Feature"
+ },
+ {
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [-122.404959,37.795337],
+ [-122.404055,37.790751],
+ [-122.402694,37.790937],
+ [-122.402535,37.790006],
+ [-122.403858,37.789819],
+ [-122.403478,37.787965],
+ [-122.403247,37.787814],
+ [-122.405883,37.785718],
+ [-122.406236,37.785793],
+ [-122.406602,37.787583],
+ [-122.408244,37.787369],
+ [-122.408655,37.789244],
+ [-122.411913,37.788812],
+ [-122.41229,37.790669],
+ [-122.413931,37.79047],
+ [-122.414883,37.79503],
+ [-122.411553,37.795409],
+ [-122.411484,37.795033],
+ [-122.411024,37.795145],
+ [-122.411087,37.795467],
+ [-122.407091,37.79597],
+ [-122.407014,37.795587],
+ [-122.406591,37.795697],
+ [-122.406649,37.796027],
+ [-122.40568,37.796152],
+ [-122.405526,37.795292],
+ [-122.404959,37.795337]
+ ]
+ ]
+ },
+ "id": "94108",
+ "properties": {
+ "id": "94108",
+ "neighborhood": "Chinatown"
+ },
+ "type": "Feature"
+ },
+ {
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [-122.420432,37.808308],
+ [-122.420342,37.807746],
+ [-122.420746,37.807598],
+ [-122.419084,37.807804],
+ [-122.418879,37.806877],
+ [-122.4196,37.806783],
+ [-122.418789,37.806249],
+ [-122.418349,37.804101],
+ [-122.418468,37.804109],
+ [-122.418129,37.803168],
+ [-122.417893,37.80172],
+ [-122.419167,37.801559],
+ [-122.419075,37.801144],
+ [-122.417814,37.80132],
+ [-122.417548,37.799967],
+ [-122.418252,37.799884],
+ [-122.418226,37.799295],
+ [-122.41741,37.799405],
+ [-122.417224,37.798494],
+ [-122.415574,37.798688],
+ [-122.413931,37.79047],
+ [-122.41229,37.790669],
+ [-122.411712,37.78787],
+ [-122.413356,37.787657],
+ [-122.413165,37.786726],
+ [-122.414805,37.786523],
+ [-122.414256,37.783728],
+ [-122.427427,37.782055],
+ [-122.430001,37.794906],
+ [-122.423491,37.795723],
+ [-122.42553,37.805821],
+ [-122.425374,37.806107],
+ [-122.425397,37.806565],
+ [-122.426352,37.807528],
+ [-122.425528,37.806976],
+ [-122.424292,37.806622],
+ [-122.423469,37.80678],
+ [-122.422145,37.80759],
+ [-122.421381,37.808188],
+ [-122.42109,37.808549],
+ [-122.421123,37.808812],
+ [-122.422852,37.810176],
+ [-122.422752,37.810251],
+ [-122.421319,37.809178],
+ [-122.421194,37.809232],
+ [-122.420906,37.808818],
+ [-122.420739,37.808837],
+ [-122.420764,37.809105],
+ [-122.420323,37.809002],
+ [-122.420639,37.80884],
+ [-122.42032,37.808739],
+ [-122.420514,37.808645],
+ [-122.420432,37.808308]
+ ]
+ ]
+ },
+ "id": "94109",
+ "properties": {
+ "id": 94109,
+ "neighborhood": "Nob Hill"
+ },
+ "type": "Feature"
+ },
+ {
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [-122.420701,37.731936],
+ [-122.420551,37.731562],
+ [-122.420949,37.731304],
+ [-122.420182,37.731449],
+ [-122.420306,37.729926],
+ [-122.420399,37.729529],
+ [-122.420599,37.729374],
+ [-122.422911,37.729289],
+ [-122.423689,37.729515],
+ [-122.426026,37.729391],
+ [-122.426016,37.728636],
+ [-122.423712,37.728761],
+ [-122.423154,37.727262],
+ [-122.424157,37.725984],
+ [-122.423554,37.725625],
+ [-122.422873,37.723983],
+ [-122.424475,37.723544],
+ [-122.425246,37.722277],
+ [-122.424405,37.721949],
+ [-122.425484,37.720235],
+ [-122.423682,37.719801],
+ [-122.423493,37.719533],
+ [-122.423541,37.718906],
+ [-122.423308,37.718471],
+ [-122.422477,37.717882],
+ [-122.423615,37.71719],
+ [-122.424422,37.717063],
+ [-122.425093,37.717356],
+ [-122.425602,37.718097],
+ [-122.42605,37.718375],
+ [-122.427306,37.715611],
+ [-122.42836,37.716053],
+ [-122.431213,37.716631],
+ [-122.433751,37.713118],
+ [-122.42923,37.712203],
+ [-122.426175,37.710959],
+ [-122.427347,37.710021],
+ [-122.427285,37.708352],
+ [-122.433961,37.708232],
+ [-122.435558,37.70799],
+ [-122.436272,37.708244],
+ [-122.440646,37.708221],
+ [-122.441103,37.708333],
+ [-122.442024,37.708085],
+ [-122.44211,37.708251],
+ [-122.44981,37.708246],
+ [-122.449854,37.708358],
+ [-122.450204,37.708242],
+ [-122.454386,37.708221],
+ [-122.455966,37.708386],
+ [-122.45716,37.708221],
+ [-122.458838,37.708437],
+ [-122.459901,37.708244],
+ [-122.469004,37.708187],
+ [-122.46745,37.709496],
+ [-122.465786,37.710243],
+ [-122.464028,37.710549],
+ [-122.460894,37.710579],
+ [-122.462503,37.711207],
+ [-122.462598,37.711377],
+ [-122.462562,37.713806],
+ [-122.462758,37.714264],
+ [-122.462626,37.714469],
+ [-122.46268,37.720018],
+ [-122.462264,37.720021],
+ [-122.46227,37.72527],
+ [-122.462838,37.725488],
+ [-122.462587,37.727158],
+ [-122.462888,37.728087],
+ [-122.462066,37.728095],
+ [-122.460858,37.728754],
+ [-122.460039,37.728777],
+ [-122.459911,37.729952],
+ [-122.459585,37.730425],
+ [-122.459231,37.730582],
+ [-122.459245,37.730838],
+ [-122.458191,37.73088],
+ [-122.454427,37.731533],
+ [-122.444271,37.731596],
+ [-122.444304,37.728562],
+ [-122.444115,37.7283],
+ [-122.443605,37.728313],
+ [-122.439982,37.729929],
+ [-122.435069,37.731505],
+ [-122.433944,37.732408],
+ [-122.428578,37.735082],
+ [-122.427849,37.734718],
+ [-122.426983,37.735455],
+ [-122.422133,37.735162],
+ [-122.422243,37.734846],
+ [-122.422901,37.734388],
+ [-122.421827,37.732917],
+ [-122.421889,37.732533],
+ [-122.422997,37.732224],
+ [-122.423493,37.732317],
+ [-122.4237,37.732172],
+ [-122.425256,37.732125],
+ [-122.425944,37.731698],
+ [-122.423718,37.73155],
+ [-122.420701,37.731936]
+ ]
+ ]
+ },
+ "id": "94112",
+ "properties": {
+ "id": 94112,
+ "neighborhood": "Ingleside"
+ },
+ "type": "Feature"
+ },
+ {
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [-122.42828,37.769641],
+ [-122.428262,37.769541],
+ [-122.426242,37.769644],
+ [-122.426896,37.769009],
+ [-122.424928,37.748628],
+ [-122.438168,37.747841],
+ [-122.438259,37.748644],
+ [-122.441209,37.748622],
+ [-122.441851,37.748537],
+ [-122.442512,37.748218],
+ [-122.44399,37.746777],
+ [-122.444318,37.747004],
+ [-122.444685,37.746982],
+ [-122.444081,37.747453],
+ [-122.44411,37.74842],
+ [-122.44345,37.749502],
+ [-122.44273,37.752373],
+ [-122.442509,37.75242],
+ [-122.441838,37.753439],
+ [-122.441256,37.753916],
+ [-122.440108,37.755715],
+ [-122.440154,37.756433],
+ [-122.441013,37.756239],
+ [-122.441426,37.756562],
+ [-122.442224,37.756707],
+ [-122.441394,37.756449],
+ [-122.441139,37.756211],
+ [-122.442884,37.755494],
+ [-122.443334,37.75639],
+ [-122.444617,37.757198],
+ [-122.445648,37.757231],
+ [-122.446474,37.757533],
+ [-122.446912,37.757892],
+ [-122.447093,37.757671],
+ [-122.447003,37.75746],
+ [-122.445905,37.756932],
+ [-122.44605,37.756429],
+ [-122.445121,37.756601],
+ [-122.444679,37.756524],
+ [-122.444373,37.756212],
+ [-122.44423,37.755714],
+ [-122.44423,37.755536],
+ [-122.444746,37.755293],
+ [-122.444639,37.754422],
+ [-122.445121,37.75366],
+ [-122.445427,37.75266],
+ [-122.445085,37.751871],
+ [-122.445069,37.751444],
+ [-122.445288,37.750918],
+ [-122.445771,37.750465],
+ [-122.445935,37.750721],
+ [-122.445661,37.751657],
+ [-122.446088,37.752524],
+ [-122.446427,37.752725],
+ [-122.446108,37.753046],
+ [-122.445997,37.753716],
+ [-122.447214,37.754064],
+ [-122.447519,37.753835],
+ [-122.44743,37.754333],
+ [-122.448641,37.754793],
+ [-122.449441,37.755474],
+ [-122.449611,37.756321],
+ [-122.450168,37.756772],
+ [-122.452095,37.756675],
+ [-122.452084,37.756971],
+ [-122.452354,37.757054],
+ [-122.453279,37.7567],
+ [-122.45409,37.757114],
+ [-122.453759,37.757568],
+ [-122.453158,37.757986],
+ [-122.451348,37.75859],
+ [-122.451531,37.759473],
+ [-122.448095,37.759665],
+ [-122.447637,37.759222],
+ [-122.447468,37.759318],
+ [-122.447146,37.75969],
+ [-122.446481,37.76113],
+ [-122.44679,37.761792],
+ [-122.445302,37.761876],
+ [-122.443776,37.763352],
+ [-122.443017,37.76351],
+ [-122.442944,37.764111],
+ [-122.443207,37.764522],
+ [-122.443242,37.765229],
+ [-122.443426,37.765368],
+ [-122.44122,37.765314],
+ [-122.439489,37.766572],
+ [-122.438575,37.766771],
+ [-122.438094,37.766709],
+ [-122.43819,37.767203],
+ [-122.436477,37.767293],
+ [-122.436632,37.769031],
+ [-122.429137,37.769452],
+ [-122.429208,37.770372],
+ [-122.42828,37.769641]
+ ]
+ ]
+ },
+ "id": "94114",
+ "properties": {
+ "id": "94114",
+ "neighborhood": "Castro"
+ },
+ "type": "Feature"
+ },
+ {
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [-122.456648,37.763844],
+ [-122.46085,37.762616],
+ [-122.46065,37.760577],
+ [-122.46179,37.760505],
+ [-122.461766,37.760113],
+ [-122.461619,37.759868],
+ [-122.461341,37.759789],
+ [-122.46069,37.760089],
+ [-122.460528,37.759536],
+ [-122.462483,37.759342],
+ [-122.462935,37.75906],
+ [-122.463213,37.75861],
+ [-122.462755,37.756882],
+ [-122.463648,37.756636],
+ [-122.463559,37.755159],
+ [-122.463826,37.753998],
+ [-122.463714,37.753509],
+ [-122.463247,37.75286],
+ [-122.467947,37.752765],
+ [-122.46821,37.752963],
+ [-122.468791,37.754241],
+ [-122.469991,37.754686],
+ [-122.470471,37.753431],
+ [-122.469909,37.752784],
+ [-122.470711,37.752359],
+ [-122.470866,37.752536],
+ [-122.473168,37.752564],
+ [-122.508181,37.750987],
+ [-122.507941,37.749124],
+ [-122.50849,37.749138],
+ [-122.509105,37.749743],
+ [-122.509928,37.749936],
+ [-122.509922,37.7502],
+ [-122.510421,37.750956],
+ [-122.510753,37.752401],
+ [-122.510919,37.752598],
+ [-122.511003,37.754535],
+ [-122.51121,37.755586],
+ [-122.510919,37.756636],
+ [-122.511875,37.760314],
+ [-122.511958,37.762154],
+ [-122.512332,37.763007],
+ [-122.512194,37.764109],
+ [-122.512489,37.764633],
+ [-122.513273,37.771077],
+ [-122.511322,37.771173],
+ [-122.511398,37.771486],
+ [-122.510968,37.771331],
+ [-122.47172,37.773141],
+ [-122.471785,37.772681],
+ [-122.472237,37.77236],
+ [-122.474834,37.772518],
+ [-122.478552,37.772254],
+ [-122.479118,37.772006],
+ [-122.479409,37.771509],
+ [-122.479165,37.770749],
+ [-122.476909,37.771533],
+ [-122.475216,37.771681],
+ [-122.47378,37.771182],
+ [-122.474249,37.771029],
+ [-122.475898,37.771087],
+ [-122.476249,37.770754],
+ [-122.476205,37.770261],
+ [-122.475251,37.770068],
+ [-122.47402,37.769507],
+ [-122.471528,37.769845],
+ [-122.471438,37.769604],
+ [-122.472672,37.768601],
+ [-122.472844,37.767756],
+ [-122.472697,37.767444],
+ [-122.472231,37.768606],
+ [-122.471411,37.769112],
+ [-122.470265,37.769228],
+ [-122.469282,37.769118],
+ [-122.466956,37.768001],
+ [-122.464536,37.769638],
+ [-122.461874,37.770266],
+ [-122.460096,37.770396],
+ [-122.459502,37.770711],
+ [-122.459148,37.771316],
+ [-122.462072,37.771779],
+ [-122.464749,37.772486],
+ [-122.465845,37.772545],
+ [-122.465887,37.773401],
+ [-122.454676,37.774758],
+ [-122.452974,37.766367],
+ [-122.456862,37.765856],
+ [-122.457805,37.765978],
+ [-122.457707,37.764705],
+ [-122.457575,37.764847],
+ [-122.456778,37.764938],
+ [-122.456648,37.763844]
+ ]
+ ]
+ },
+ "id": "94122",
+ "properties": {
+ "id": "94122",
+ "neighborhood": "Sunset"
+ },
+ "type": "Feature"
+ },
+ {
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [-122.380089,37.752759],
+ [-122.380062,37.752064],
+ [-122.376159,37.752283],
+ [-122.375723,37.74872],
+ [-122.376358,37.748638],
+ [-122.376356,37.747159],
+ [-122.375057,37.746841],
+ [-122.374811,37.746423],
+ [-122.374965,37.745818],
+ [-122.374157,37.745048],
+ [-122.373929,37.745014],
+ [-122.373374,37.745414],
+ [-122.372797,37.745573],
+ [-122.367633,37.740199],
+ [-122.368216,37.739935],
+ [-122.373216,37.73973],
+ [-122.373243,37.739554],
+ [-122.373234,37.739297],
+ [-122.372406,37.739007],
+ [-122.36792,37.739216],
+ [-122.372423,37.738953],
+ [-122.373303,37.739284],
+ [-122.373379,37.739718],
+ [-122.374008,37.739622],
+ [-122.374066,37.739462],
+ [-122.373496,37.738645],
+ [-122.372685,37.738317],
+ [-122.367541,37.73834],
+ [-122.367579,37.738218],
+ [-122.370108,37.737729],
+ [-122.371392,37.737134],
+ [-122.372328,37.737065],
+ [-122.373574,37.737233],
+ [-122.374046,37.737409],
+ [-122.374481,37.737844],
+ [-122.375282,37.738105],
+ [-122.375371,37.736427],
+ [-122.376029,37.735769],
+ [-122.376156,37.735123],
+ [-122.375315,37.735416],
+ [-122.374946,37.734928],
+ [-122.375011,37.734747],
+ [-122.375334,37.734633],
+ [-122.375053,37.734363],
+ [-122.375048,37.734148],
+ [-122.375549,37.733124],
+ [-122.374324,37.732569],
+ [-122.373714,37.732963],
+ [-122.372437,37.734205],
+ [-122.37215,37.734273],
+ [-122.370831,37.733231],
+ [-122.370126,37.733662],
+ [-122.370067,37.733579],
+ [-122.370758,37.733162],
+ [-122.369578,37.732404],
+ [-122.369375,37.732034],
+ [-122.368745,37.731968],
+ [-122.368337,37.732254],
+ [-122.367411,37.731931],
+ [-122.366864,37.732334],
+ [-122.366683,37.732285],
+ [-122.36527,37.73386],
+ [-122.365183,37.73375],
+ [-122.366567,37.732159],
+ [-122.365638,37.731617],
+ [-122.364783,37.7326],
+ [-122.365096,37.732096],
+ [-122.363719,37.731331],
+ [-122.362922,37.732232],
+ [-122.362608,37.732045],
+ [-122.363442,37.731154],
+ [-122.362856,37.730839],
+ [-122.362059,37.731724],
+ [-122.361774,37.731576],
+ [-122.362569,37.730661],
+ [-122.36196,37.730325],
+ [-122.362054,37.730155],
+ [-122.360898,37.729983],
+ [-122.36075,37.730276],
+ [-122.36,37.730379],
+ [-122.35887,37.729814],
+ [-122.358962,37.72958],
+ [-122.362149,37.728811],
+ [-122.36226,37.728532],
+ [-122.361816,37.728518],
+ [-122.357767,37.72947],
+ [-122.357503,37.729286],
+ [-122.357846,37.729008],
+ [-122.36006,37.728502],
+ [-122.360449,37.728261],
+ [-122.359967,37.728224],
+ [-122.357272,37.728832],
+ [-122.357031,37.728693],
+ [-122.357735,37.726304],
+ [-122.358027,37.726114],
+ [-122.361677,37.725257],
+ [-122.361297,37.724209],
+ [-122.357944,37.724993],
+ [-122.357849,37.724678],
+ [-122.361434,37.723926],
+ [-122.364857,37.726094],
+ [-122.365156,37.725974],
+ [-122.36501,37.725725],
+ [-122.362287,37.723914],
+ [-122.362707,37.723498],
+ [-122.360005,37.721674],
+ [-122.360273,37.721388],
+ [-122.363043,37.72303],
+ [-122.363836,37.722158],
+ [-122.359153,37.719359],
+ [-122.359931,37.718502],
+ [-122.36272,37.720107],
+ [-122.363655,37.719096],
+ [-122.362576,37.718466],
+ [-122.362678,37.718312],
+ [-122.358611,37.715909],
+ [-122.35875,37.715777],
+ [-122.362668,37.718056],
+ [-122.363859,37.716766],
+ [-122.359959,37.71448],
+ [-122.360097,37.71437],
+ [-122.363988,37.716612],
+ [-122.365229,37.715388],
+ [-122.365229,37.715249],
+ [-122.361115,37.712882],
+ [-122.361226,37.712794],
+ [-122.365443,37.715293],
+ [-122.364475,37.716341],
+ [-122.364642,37.716517],
+ [-122.364892,37.716451],
+ [-122.365336,37.71585],
+ [-122.365513,37.715821],
+ [-122.366008,37.716085],
+ [-122.366426,37.716799],
+ [-122.367697,37.717613],
+ [-122.368134,37.717782],
+ [-122.36953,37.717858],
+ [-122.369955,37.71812],
+ [-122.370353,37.718688],
+ [-122.371784,37.719011],
+ [-122.374191,37.718934],
+ [-122.374317,37.719602],
+ [-122.374531,37.719878],
+ [-122.375775,37.720586],
+ [-122.376094,37.721673],
+ [-122.376073,37.722751],
+ [-122.376755,37.723458],
+ [-122.376818,37.724031],
+ [-122.377564,37.724132],
+ [-122.378863,37.723846],
+ [-122.379928,37.722313],
+ [-122.380731,37.72173],
+ [-122.382591,37.72241],
+ [-122.383777,37.723126],
+ [-122.383999,37.723489],
+ [-122.385167,37.72411],
+ [-122.386436,37.724479],
+ [-122.386835,37.724339],
+ [-122.386911,37.724148],
+ [-122.382843,37.721921],
+ [-122.382765,37.721547],
+ [-122.383381,37.720627],
+ [-122.383253,37.720135],
+ [-122.381696,37.71932],
+ [-122.381353,37.718785],
+ [-122.38058,37.718802],
+ [-122.379724,37.71832],
+ [-122.379915,37.71797],
+ [-122.379807,37.717843],
+ [-122.379217,37.717818],
+ [-122.376187,37.716103],
+ [-122.377399,37.714411],
+ [-122.378896,37.713077],
+ [-122.379684,37.711801],
+ [-122.380004,37.711586],
+ [-122.380035,37.710681],
+ [-122.378821,37.710024],
+ [-122.3783,37.709279],
+ [-122.3783,37.708891],
+ [-122.378012,37.708681],
+ [-122.376979,37.70895],
+ [-122.376436,37.7097],
+ [-122.376085,37.70975],
+ [-122.375571,37.709661],
+ [-122.374625,37.70906],
+ [-122.374427,37.708743],
+ [-122.374662,37.708562],
+ [-122.375646,37.708409],
+ [-122.379472,37.708427],
+ [-122.380428,37.708795],
+ [-122.384507,37.709281],
+ [-122.385965,37.709993],
+ [-122.386977,37.709655],
+ [-122.388155,37.708672],
+ [-122.389693,37.709556],
+ [-122.38991,37.70958],
+ [-122.390654,37.709186],
+ [-122.391782,37.709808],
+ [-122.39094,37.710318],
+ [-122.38874,37.710489],
+ [-122.386724,37.711066],
+ [-122.386375,37.711033],
+ [-122.387684,37.712178],
+ [-122.387994,37.713004],
+ [-122.388774,37.71228],
+ [-122.390439,37.712109],
+ [-122.390961,37.712322],
+ [-122.391224,37.713259],
+ [-122.393041,37.713609],
+ [-122.394738,37.713611],
+ [-122.396527,37.714716],
+ [-122.396489,37.714972],
+ [-122.398027,37.715493],
+ [-122.398393,37.716337],
+ [-122.398555,37.717783],
+ [-122.399202,37.71992],
+ [-122.401262,37.724794],
+ [-122.402107,37.727849],
+ [-122.404946,37.733588],
+ [-122.406506,37.735623],
+ [-122.407024,37.738016],
+ [-122.408009,37.737734],
+ [-122.408136,37.73964],
+ [-122.407045,37.739587],
+ [-122.406936,37.740554],
+ [-122.406652,37.741241],
+ [-122.404524,37.744285],
+ [-122.404865,37.744385],
+ [-122.405493,37.744084],
+ [-122.405614,37.7442],
+ [-122.405091,37.745281],
+ [-122.403798,37.749443],
+ [-122.401546,37.74945],
+ [-122.391705,37.750133],
+ [-122.387666,37.750267],
+ [-122.387833,37.752817],
+ [-122.382933,37.753184],
+ [-122.382078,37.753131],
+ [-122.381482,37.752782],
+ [-122.380089,37.752759]
+ ]
+ ]
+ },
+ "id": "94124",
+ "properties": {
+ "id": "94124",
+ "neighborhood": "Bayview"
+ },
+ "type": "Feature"
+ },
+ {
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [-122.444271,37.731596],
+ [-122.454427,37.731533],
+ [-122.458191,37.73088],
+ [-122.459245,37.730838],
+ [-122.459231,37.730582],
+ [-122.459585,37.730425],
+ [-122.459911,37.729952],
+ [-122.460039,37.728777],
+ [-122.460858,37.728754],
+ [-122.462066,37.728095],
+ [-122.462888,37.728087],
+ [-122.462587,37.727158],
+ [-122.462838,37.725488],
+ [-122.46227,37.72527],
+ [-122.462297,37.723037],
+ [-122.464104,37.722246],
+ [-122.464475,37.721682],
+ [-122.471815,37.721661],
+ [-122.471677,37.720951],
+ [-122.471654,37.71788],
+ [-122.472453,37.717877],
+ [-122.47226,37.721627],
+ [-122.472667,37.721562],
+ [-122.472676,37.722124],
+ [-122.472602,37.724834],
+ [-122.472364,37.726819],
+ [-122.472829,37.726836],
+ [-122.47269,37.728843],
+ [-122.472283,37.728807],
+ [-122.472046,37.733756],
+ [-122.471751,37.733878],
+ [-122.47168,37.734642],
+ [-122.471464,37.734653],
+ [-122.471543,37.7351],
+ [-122.470664,37.736636],
+ [-122.470972,37.737018],
+ [-122.471224,37.741374],
+ [-122.468572,37.741502],
+ [-122.467798,37.743412],
+ [-122.463662,37.743771],
+ [-122.461372,37.745591],
+ [-122.460766,37.745108],
+ [-122.458701,37.74661],
+ [-122.458952,37.746923],
+ [-122.455093,37.746263],
+ [-122.453776,37.745686],
+ [-122.451731,37.745527],
+ [-122.449493,37.743019],
+ [-122.448814,37.742758],
+ [-122.446663,37.742452],
+ [-122.446266,37.742106],
+ [-122.4461,37.741372],
+ [-122.445874,37.741102],
+ [-122.444651,37.740775],
+ [-122.443888,37.740074],
+ [-122.442865,37.739757],
+ [-122.44256,37.739472],
+ [-122.442635,37.738458],
+ [-122.442409,37.737629],
+ [-122.442603,37.737183],
+ [-122.443662,37.736503],
+ [-122.444158,37.736536],
+ [-122.444385,37.736182],
+ [-122.444704,37.736429],
+ [-122.444598,37.737092],
+ [-122.445914,37.737074],
+ [-122.445737,37.736525],
+ [-122.446381,37.73578],
+ [-122.44633,37.735245],
+ [-122.445366,37.734517],
+ [-122.445397,37.734267],
+ [-122.44573,37.733938],
+ [-122.445652,37.733835],
+ [-122.444319,37.733831],
+ [-122.444271,37.731596]
+ ]
+ ]
+ },
+ "id": "94127",
+ "properties": {
+ "id": 94127,
+ "neighborhood": "Portola"
+ },
+ "type": "Feature"
+ },
+ {
+ "geometry": {
+ "type": "MultiPolygon",
+ "coordinates": [
+ [
+ [
+ [-122.486279,37.736821],
+ [-122.485731,37.736825],
+ [-122.484755,37.737207],
+ [-122.482882,37.737513],
+ [-122.481446,37.737249],
+ [-122.47097,37.737652],
+ [-122.470945,37.736905],
+ [-122.470664,37.736636],
+ [-122.471543,37.7351],
+ [-122.471464,37.734653],
+ [-122.47168,37.734642],
+ [-122.471751,37.733878],
+ [-122.472046,37.733756],
+ [-122.472283,37.728807],
+ [-122.47269,37.728843],
+ [-122.472829,37.726836],
+ [-122.472364,37.726819],
+ [-122.472602,37.724834],
+ [-122.472676,37.722124],
+ [-122.472667,37.721562],
+ [-122.47226,37.721627],
+ [-122.472453,37.717877],
+ [-122.471654,37.71788],
+ [-122.471677,37.720951],
+ [-122.471815,37.721661],
+ [-122.464475,37.721682],
+ [-122.464104,37.722246],
+ [-122.462297,37.723037],
+ [-122.462264,37.720021],
+ [-122.46268,37.720018],
+ [-122.462626,37.714469],
+ [-122.462758,37.714264],
+ [-122.462562,37.713806],
+ [-122.462598,37.711377],
+ [-122.462503,37.711207],
+ [-122.460894,37.710579],
+ [-122.464028,37.710549],
+ [-122.465786,37.710243],
+ [-122.46745,37.709496],
+ [-122.469004,37.708187],
+ [-122.471987,37.708406],
+ [-122.485555,37.70826],
+ [-122.485383,37.708507],
+ [-122.485717,37.70826],
+ [-122.50278,37.70805],
+ [-122.503255,37.709186],
+ [-122.503881,37.712656],
+ [-122.504632,37.714564],
+ [-122.504809,37.715626],
+ [-122.505174,37.716546],
+ [-122.505394,37.718032],
+ [-122.506133,37.720154],
+ [-122.506222,37.721235],
+ [-122.506473,37.721616],
+ [-122.506687,37.723115],
+ [-122.507043,37.72379],
+ [-122.507151,37.72527],
+ [-122.507551,37.72704],
+ [-122.507223,37.72862],
+ [-122.508116,37.731333],
+ [-122.507951,37.732438],
+ [-122.508526,37.733837],
+ [-122.508172,37.73443],
+ [-122.508396,37.734631],
+ [-122.50842,37.735401],
+ [-122.508573,37.735638],
+ [-122.507884,37.735942],
+ [-122.506807,37.735587],
+ [-122.502009,37.735517],
+ [-122.500874,37.735256],
+ [-122.498765,37.734264],
+ [-122.497435,37.733934],
+ [-122.493786,37.733991],
+ [-122.49343,37.734328],
+ [-122.492622,37.734039],
+ [-122.491528,37.734094],
+ [-122.491263,37.734165],
+ [-122.491357,37.735345],
+ [-122.490312,37.735638],
+ [-122.490714,37.736565],
+ [-122.491319,37.737325],
+ [-122.490655,37.737821],
+ [-122.489989,37.737975],
+ [-122.488812,37.73713],
+ [-122.486279,37.736821]
+ ]
+ ]
+ ]
+ },
+ "id": "94132",
+ "properties": {
+ "id": 94132,
+ "neighborhood": "Lake Merced"
+ },
+ "type": "Feature"
+ },
+ {
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [-122.452936,37.7581],
+ [-122.453759,37.757568],
+ [-122.45409,37.757114],
+ [-122.453279,37.7567],
+ [-122.452354,37.757054],
+ [-122.452084,37.756971],
+ [-122.452095,37.756675],
+ [-122.450168,37.756772],
+ [-122.449611,37.756321],
+ [-122.449441,37.755474],
+ [-122.448641,37.754793],
+ [-122.44743,37.754333],
+ [-122.447519,37.753835],
+ [-122.447214,37.754064],
+ [-122.445997,37.753716],
+ [-122.446108,37.753046],
+ [-122.446427,37.752725],
+ [-122.446088,37.752524],
+ [-122.445661,37.751657],
+ [-122.445935,37.750721],
+ [-122.445771,37.750465],
+ [-122.445288,37.750918],
+ [-122.445069,37.751444],
+ [-122.445085,37.751871],
+ [-122.445427,37.75266],
+ [-122.445121,37.75366],
+ [-122.444639,37.754422],
+ [-122.444746,37.755293],
+ [-122.44423,37.755536],
+ [-122.44423,37.755714],
+ [-122.444373,37.756212],
+ [-122.444679,37.756524],
+ [-122.445121,37.756601],
+ [-122.44605,37.756429],
+ [-122.445905,37.756932],
+ [-122.447003,37.75746],
+ [-122.447093,37.757671],
+ [-122.446912,37.757892],
+ [-122.446474,37.757533],
+ [-122.445648,37.757231],
+ [-122.444617,37.757198],
+ [-122.443334,37.75639],
+ [-122.442884,37.755494],
+ [-122.441139,37.756211],
+ [-122.441394,37.756449],
+ [-122.442072,37.756597],
+ [-122.442224,37.756707],
+ [-122.441426,37.756562],
+ [-122.441013,37.756239],
+ [-122.440154,37.756433],
+ [-122.440108,37.755715],
+ [-122.441256,37.753916],
+ [-122.441838,37.753439],
+ [-122.442509,37.75242],
+ [-122.44273,37.752373],
+ [-122.44345,37.749502],
+ [-122.44411,37.74842],
+ [-122.444081,37.747453],
+ [-122.444685,37.746982],
+ [-122.444318,37.747004],
+ [-122.44399,37.746777],
+ [-122.442512,37.748218],
+ [-122.441851,37.748537],
+ [-122.441092,37.748632],
+ [-122.438259,37.748644],
+ [-122.438168,37.747841],
+ [-122.424928,37.748628],
+ [-122.424168,37.740805],
+ [-122.424394,37.740405],
+ [-122.42427,37.739867],
+ [-122.42452,37.739868],
+ [-122.42551,37.737774],
+ [-122.428454,37.735882],
+ [-122.42801,37.735441],
+ [-122.433944,37.732408],
+ [-122.435069,37.731505],
+ [-122.439982,37.729929],
+ [-122.443605,37.728313],
+ [-122.444115,37.7283],
+ [-122.444304,37.728562],
+ [-122.444319,37.733831],
+ [-122.445652,37.733835],
+ [-122.44573,37.733938],
+ [-122.445397,37.734267],
+ [-122.445366,37.734517],
+ [-122.44633,37.735245],
+ [-122.446387,37.735748],
+ [-122.445737,37.736525],
+ [-122.445914,37.737074],
+ [-122.444598,37.737092],
+ [-122.444704,37.736429],
+ [-122.444385,37.736182],
+ [-122.444158,37.736536],
+ [-122.443662,37.736503],
+ [-122.442523,37.737263],
+ [-122.442409,37.737629],
+ [-122.442628,37.738387],
+ [-122.442523,37.739283],
+ [-122.442631,37.739589],
+ [-122.443888,37.740074],
+ [-122.444651,37.740775],
+ [-122.445874,37.741102],
+ [-122.4461,37.741372],
+ [-122.446266,37.742106],
+ [-122.446663,37.742452],
+ [-122.448814,37.742758],
+ [-122.449493,37.743019],
+ [-122.451731,37.745527],
+ [-122.453776,37.745686],
+ [-122.455093,37.746263],
+ [-122.458952,37.746923],
+ [-122.45919,37.747199],
+ [-122.458708,37.747608],
+ [-122.458717,37.748113],
+ [-122.460528,37.749935],
+ [-122.461227,37.751194],
+ [-122.463247,37.75286],
+ [-122.46379,37.753707],
+ [-122.463554,37.75526],
+ [-122.463648,37.756636],
+ [-122.462755,37.756882],
+ [-122.463213,37.75861],
+ [-122.462935,37.75906],
+ [-122.462483,37.759342],
+ [-122.460528,37.759536],
+ [-122.46069,37.760089],
+ [-122.461341,37.759789],
+ [-122.461619,37.759868],
+ [-122.461766,37.760113],
+ [-122.46179,37.760505],
+ [-122.46065,37.760577],
+ [-122.46085,37.762616],
+ [-122.455731,37.764099],
+ [-122.455465,37.760271],
+ [-122.453594,37.761617],
+ [-122.452405,37.761578],
+ [-122.45182,37.758743],
+ [-122.452997,37.758202],
+ [-122.452936,37.7581]
+ ]
+ ]
+ },
+ "id": "94131",
+ "properties": {
+ "id": 94131,
+ "neighborhood": "Twin Peaks"
+ },
+ "type": "Feature"
+ },
+ {
+ "geometry": {
+ "type": "MultiPolygon",
+ "coordinates": [
+ [
+ [
+ [-122.419083,37.811572],
+ [-122.415375,37.809166],
+ [-122.415194,37.809226],
+ [-122.415403,37.809424],
+ [-122.415085,37.809231],
+ [-122.414794,37.809331],
+ [-122.415315,37.809767],
+ [-122.415212,37.809848],
+ [-122.413444,37.809247],
+ [-122.413371,37.809391],
+ [-122.414276,37.809863],
+ [-122.414024,37.81014],
+ [-122.413789,37.809946],
+ [-122.413868,37.809874],
+ [-122.412638,37.809089],
+ [-122.41239,37.809118],
+ [-122.411911,37.809384],
+ [-122.412856,37.810523],
+ [-122.412717,37.810604],
+ [-122.411402,37.809035],
+ [-122.41056,37.808843],
+ [-122.410475,37.80937],
+ [-122.411323,37.810958],
+ [-122.410669,37.811379],
+ [-122.410203,37.811311],
+ [-122.409973,37.810966],
+ [-122.410179,37.810095],
+ [-122.409611,37.809141],
+ [-122.409242,37.809049],
+ [-122.409109,37.808848],
+ [-122.409089,37.808138],
+ [-122.405774,37.806775],
+ [-122.405899,37.806399],
+ [-122.405462,37.806107],
+ [-122.405175,37.804795],
+ [-122.40596,37.80469],
+ [-122.405752,37.803725],
+ [-122.404953,37.803822],
+ [-122.405067,37.802885],
+ [-122.403175,37.803098],
+ [-122.402791,37.801265],
+ [-122.4036,37.801195],
+ [-122.403549,37.800548],
+ [-122.404359,37.800576],
+ [-122.404329,37.800423],
+ [-122.404265,37.80013],
+ [-122.403422,37.800209],
+ [-122.403765,37.799746],
+ [-122.403656,37.799212],
+ [-122.402423,37.799369],
+ [-122.401864,37.796638],
+ [-122.405152,37.796213],
+ [-122.404959,37.795337],
+ [-122.405526,37.795292],
+ [-122.40568,37.796152],
+ [-122.406649,37.796027],
+ [-122.406591,37.795697],
+ [-122.407014,37.795587],
+ [-122.407091,37.79597],
+ [-122.411087,37.795467],
+ [-122.411024,37.795145],
+ [-122.411484,37.795033],
+ [-122.411553,37.795409],
+ [-122.414883,37.79503],
+ [-122.415574,37.798688],
+ [-122.417224,37.798494],
+ [-122.41741,37.799405],
+ [-122.418226,37.799295],
+ [-122.418252,37.799884],
+ [-122.417548,37.799967],
+ [-122.417814,37.80132],
+ [-122.419075,37.801144],
+ [-122.419167,37.801559],
+ [-122.417893,37.80172],
+ [-122.418129,37.803168],
+ [-122.418468,37.804109],
+ [-122.418349,37.804101],
+ [-122.418789,37.806249],
+ [-122.4196,37.806783],
+ [-122.418879,37.806877],
+ [-122.419084,37.807804],
+ [-122.420746,37.807598],
+ [-122.420342,37.807746],
+ [-122.420432,37.808308],
+ [-122.417911,37.808629],
+ [-122.417992,37.808864],
+ [-122.419957,37.808915],
+ [-122.41998,37.809133],
+ [-122.418052,37.809139],
+ [-122.417879,37.808993],
+ [-122.417733,37.808362],
+ [-122.417454,37.80838],
+ [-122.417364,37.808135],
+ [-122.4164,37.808303],
+ [-122.416315,37.808478],
+ [-122.4172,37.808528],
+ [-122.416291,37.808576],
+ [-122.416241,37.808862],
+ [-122.417477,37.808903],
+ [-122.417448,37.809198],
+ [-122.420591,37.811315],
+ [-122.420379,37.811535],
+ [-122.418938,37.810817],
+ [-122.419471,37.811444],
+ [-122.419083,37.811572]
+ ]
+ ]
+ ]
+ },
+ "id": "94133",
+ "properties": {
+ "id": "94133",
+ "neighborhood": "North Beach"
+ },
+ "type": "Feature"
+ },
+ {
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [-122.405883,37.785718],
+ [-122.426242,37.769644],
+ [-122.428262,37.769541],
+ [-122.429573,37.776045],
+ [-122.4294,37.776267],
+ [-122.429593,37.776526],
+ [-122.429983,37.778864],
+ [-122.426829,37.779265],
+ [-122.427427,37.782055],
+ [-122.414256,37.783728],
+ [-122.414805,37.786523],
+ [-122.413165,37.786726],
+ [-122.413356,37.787657],
+ [-122.411712,37.78787],
+ [-122.411913,37.788812],
+ [-122.408655,37.789244],
+ [-122.408244,37.787369],
+ [-122.406602,37.787583],
+ [-122.406236,37.785793],
+ [-122.405883,37.785718]
+ ]
+ ]
+ },
+ "id": "94102",
+ "properties": {
+ "id": 94102,
+ "neighborhood": "Tenderloin"
+ },
+ "type": "Feature"
+ },
+ {
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [-122.398941,37.783785],
+ [-122.405629,37.778502],
+ [-122.399425,37.773612],
+ [-122.403723,37.770182],
+ [-122.404003,37.77018],
+ [-122.403477,37.769842],
+ [-122.402105,37.769912],
+ [-122.402091,37.769716],
+ [-122.401685,37.769721],
+ [-122.401768,37.769145],
+ [-122.402021,37.768998],
+ [-122.401851,37.767416],
+ [-122.400881,37.767518],
+ [-122.400915,37.768096],
+ [-122.40001,37.767614],
+ [-122.400422,37.767291],
+ [-122.3998,37.766807],
+ [-122.399688,37.765005],
+ [-122.407431,37.764497],
+ [-122.407553,37.765798],
+ [-122.419459,37.765089],
+ [-122.421248,37.764947],
+ [-122.421031,37.76335],
+ [-122.42173,37.763304],
+ [-122.421885,37.764908],
+ [-122.426453,37.764634],
+ [-122.426897,37.769107],
+ [-122.42245,37.772761],
+ [-122.403427,37.787676],
+ [-122.40333,37.787336],
+ [-122.401497,37.785824],
+ [-122.39999,37.787004],
+ [-122.399523,37.786631],
+ [-122.400955,37.785389],
+ [-122.398941,37.783785]
+ ]
+ ]
+ },
+ "id": "94103",
+ "properties": {
+ "id": 94103,
+ "neighborhood": "SoMa"
+ },
+ "type": "Feature"
+ },
+ {
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [-122.405115,37.764635],
+ [-122.405212,37.763469],
+ [-122.405832,37.762199],
+ [-122.405859,37.761815],
+ [-122.40604,37.761865],
+ [-122.406365,37.761199],
+ [-122.40645,37.760114],
+ [-122.406167,37.759315],
+ [-122.406015,37.759409],
+ [-122.405604,37.758851],
+ [-122.40405,37.757619],
+ [-122.403428,37.756871],
+ [-122.403585,37.756818],
+ [-122.403328,37.756082],
+ [-122.40315,37.754488],
+ [-122.403524,37.754463],
+ [-122.403437,37.753199],
+ [-122.403364,37.752366],
+ [-122.403022,37.752336],
+ [-122.403052,37.752048],
+ [-122.405091,37.745281],
+ [-122.405614,37.7442],
+ [-122.405493,37.744084],
+ [-122.404865,37.744385],
+ [-122.404524,37.744285],
+ [-122.406652,37.741241],
+ [-122.406936,37.740554],
+ [-122.407045,37.739587],
+ [-122.408136,37.73964],
+ [-122.408009,37.737734],
+ [-122.408218,37.73765],
+ [-122.408284,37.736846],
+ [-122.408613,37.736074],
+ [-122.409287,37.735258],
+ [-122.410052,37.734675],
+ [-122.411978,37.733732],
+ [-122.412695,37.733197],
+ [-122.414554,37.732371],
+ [-122.416255,37.732034],
+ [-122.419881,37.732016],
+ [-122.423718,37.73155],
+ [-122.425944,37.731698],
+ [-122.425256,37.732125],
+ [-122.422274,37.732383],
+ [-122.421889,37.732533],
+ [-122.421787,37.732774],
+ [-122.422472,37.733967],
+ [-122.422901,37.734388],
+ [-122.422243,37.734846],
+ [-122.422133,37.735162],
+ [-122.426983,37.735455],
+ [-122.427849,37.734718],
+ [-122.428578,37.735082],
+ [-122.42801,37.735441],
+ [-122.428454,37.735882],
+ [-122.42551,37.737774],
+ [-122.42452,37.739868],
+ [-122.42427,37.739867],
+ [-122.424394,37.740405],
+ [-122.424168,37.740805],
+ [-122.426453,37.764634],
+ [-122.421885,37.764908],
+ [-122.42173,37.763304],
+ [-122.421031,37.76335],
+ [-122.421248,37.764947],
+ [-122.407553,37.765798],
+ [-122.407431,37.764497],
+ [-122.405115,37.764635]
+ ]
+ ]
+ },
+ "id": "94110",
+ "properties": {
+ "id": 94110,
+ "neighborhood": "Mission"
+ },
+ "type": "Feature"
+ },
+ {
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [-122.391701,37.794113],
+ [-122.392429,37.793835],
+ [-122.393875,37.795248],
+ [-122.399156,37.791051],
+ [-122.399607,37.791317],
+ [-122.400146,37.79415],
+ [-122.404629,37.79358],
+ [-122.405152,37.796213],
+ [-122.401864,37.796638],
+ [-122.402423,37.799369],
+ [-122.403656,37.799212],
+ [-122.403765,37.799746],
+ [-122.403422,37.800209],
+ [-122.404265,37.80013],
+ [-122.404329,37.800423],
+ [-122.404359,37.800576],
+ [-122.403549,37.800548],
+ [-122.4036,37.801195],
+ [-122.402791,37.801265],
+ [-122.403175,37.803098],
+ [-122.405067,37.802885],
+ [-122.404953,37.803822],
+ [-122.405752,37.803725],
+ [-122.40596,37.80469],
+ [-122.405175,37.804795],
+ [-122.405462,37.806107],
+ [-122.405899,37.806399],
+ [-122.405774,37.806775],
+ [-122.409089,37.808138],
+ [-122.409004,37.808563],
+ [-122.407936,37.808146],
+ [-122.407617,37.808244],
+ [-122.407477,37.808085],
+ [-122.406554,37.807891],
+ [-122.406816,37.810064],
+ [-122.406209,37.810103],
+ [-122.405976,37.807252],
+ [-122.405313,37.806883],
+ [-122.404321,37.808927],
+ [-122.403972,37.808829],
+ [-122.404712,37.807015],
+ [-122.403955,37.806592],
+ [-122.402774,37.808053],
+ [-122.402375,37.807896],
+ [-122.403406,37.806516],
+ [-122.402824,37.806076],
+ [-122.400944,37.807679],
+ [-122.400408,37.807307],
+ [-122.40097,37.803579],
+ [-122.400512,37.8035],
+ [-122.39855,37.80465],
+ [-122.398217,37.804315],
+ [-122.399938,37.803283],
+ [-122.399597,37.802882],
+ [-122.397818,37.803862],
+ [-122.397518,37.803526],
+ [-122.399718,37.802209],
+ [-122.399419,37.801867],
+ [-122.399203,37.801906],
+ [-122.397115,37.803089],
+ [-122.39613,37.801975],
+ [-122.3984,37.80072],
+ [-122.398001,37.800267],
+ [-122.395772,37.801535],
+ [-122.39544,37.80118],
+ [-122.397667,37.7999],
+ [-122.396766,37.798884],
+ [-122.39658,37.798852],
+ [-122.394503,37.800155],
+ [-122.394306,37.80013],
+ [-122.394252,37.799996],
+ [-122.396516,37.798686],
+ [-122.395855,37.797941],
+ [-122.395655,37.797922],
+ [-122.393825,37.798956],
+ [-122.393551,37.798652],
+ [-122.395468,37.797463],
+ [-122.395024,37.797575],
+ [-122.394882,37.797427],
+ [-122.39512,37.797145],
+ [-122.393219,37.798276],
+ [-122.392969,37.797941],
+ [-122.394774,37.796778],
+ [-122.394682,37.796659],
+ [-122.3942,37.796922],
+ [-122.393041,37.795634],
+ [-122.391593,37.796229],
+ [-122.391211,37.795822],
+ [-122.392391,37.794856],
+ [-122.392292,37.794737],
+ [-122.391934,37.794842],
+ [-122.391668,37.79458],
+ [-122.391934,37.794376],
+ [-122.391701,37.794113]
+ ]
+ ]
+ },
+ "id": "94111",
+ "properties": {
+ "id": 94111,
+ "neighborhood": "Financial District"
+ },
+ "type": "Feature"
+ },
+ {
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [-122.427427,37.782055],
+ [-122.426829,37.779265],
+ [-122.444972,37.776956],
+ [-122.445357,37.778831],
+ [-122.446084,37.778731],
+ [-122.446307,37.77984],
+ [-122.446226,37.780051],
+ [-122.44544,37.780142],
+ [-122.445536,37.781341],
+ [-122.447476,37.781067],
+ [-122.447533,37.781349],
+ [-122.447238,37.782464],
+ [-122.44584,37.782546],
+ [-122.447689,37.791703],
+ [-122.446306,37.791871],
+ [-122.446428,37.792795],
+ [-122.44153,37.793428],
+ [-122.441719,37.794387],
+ [-122.440875,37.794492],
+ [-122.440679,37.793537],
+ [-122.430001,37.794906],
+ [-122.427427,37.782055]
+ ]
+ ]
+ },
+ "id": "94115",
+ "properties": {
+ "id": 94115,
+ "neighborhood": "Lower Pacific Heights"
+ },
+ "type": "Feature"
+ },
+ {
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [-122.463247,37.75286],
+ [-122.461338,37.751312],
+ [-122.460528,37.749935],
+ [-122.458717,37.748113],
+ [-122.458708,37.747608],
+ [-122.45919,37.747199],
+ [-122.458701,37.74661],
+ [-122.460766,37.745108],
+ [-122.461372,37.745591],
+ [-122.463662,37.743771],
+ [-122.467798,37.743412],
+ [-122.468572,37.741502],
+ [-122.471224,37.741374],
+ [-122.47097,37.737652],
+ [-122.481446,37.737249],
+ [-122.482882,37.737513],
+ [-122.486168,37.736807],
+ [-122.488812,37.73713],
+ [-122.489989,37.737975],
+ [-122.490655,37.737821],
+ [-122.491319,37.737325],
+ [-122.490714,37.736565],
+ [-122.490312,37.735638],
+ [-122.491357,37.735345],
+ [-122.491263,37.734165],
+ [-122.491528,37.734094],
+ [-122.492622,37.734039],
+ [-122.49343,37.734328],
+ [-122.493786,37.733991],
+ [-122.497435,37.733934],
+ [-122.498765,37.734264],
+ [-122.500874,37.735256],
+ [-122.502009,37.735517],
+ [-122.506807,37.735587],
+ [-122.507884,37.735942],
+ [-122.508573,37.735638],
+ [-122.50817,37.736602],
+ [-122.50842,37.739587],
+ [-122.508233,37.740381],
+ [-122.509089,37.74456],
+ [-122.508879,37.74557],
+ [-122.509589,37.747897],
+ [-122.50961,37.748912],
+ [-122.509928,37.749936],
+ [-122.509105,37.749743],
+ [-122.50849,37.749138],
+ [-122.507941,37.749124],
+ [-122.508181,37.750987],
+ [-122.473168,37.752564],
+ [-122.470866,37.752536],
+ [-122.470711,37.752359],
+ [-122.469909,37.752784],
+ [-122.470471,37.753431],
+ [-122.469991,37.754686],
+ [-122.468791,37.754241],
+ [-122.46821,37.752963],
+ [-122.467947,37.752765],
+ [-122.463247,37.75286]
+ ]
+ ]
+ },
+ "id": "94116",
+ "properties": {
+ "id": "94116",
+ "neighborhood": "Taraval"
+ },
+ "type": "Feature"
+ },
+ {
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [-122.42828,37.769641],
+ [-122.429208,37.770372],
+ [-122.429137,37.769452],
+ [-122.436632,37.769031],
+ [-122.436477,37.767293],
+ [-122.43819,37.767203],
+ [-122.438094,37.766709],
+ [-122.438575,37.766771],
+ [-122.439489,37.766572],
+ [-122.44122,37.765314],
+ [-122.443426,37.765368],
+ [-122.443242,37.765229],
+ [-122.443207,37.764522],
+ [-122.442944,37.764111],
+ [-122.443017,37.76351],
+ [-122.443776,37.763352],
+ [-122.445302,37.761876],
+ [-122.44679,37.761792],
+ [-122.446481,37.76113],
+ [-122.447146,37.75969],
+ [-122.447468,37.759318],
+ [-122.447637,37.759222],
+ [-122.448095,37.759665],
+ [-122.451531,37.759473],
+ [-122.451348,37.75859],
+ [-122.452936,37.7581],
+ [-122.452997,37.758202],
+ [-122.45182,37.758743],
+ [-122.452405,37.761578],
+ [-122.453594,37.761617],
+ [-122.455465,37.760271],
+ [-122.455731,37.764099],
+ [-122.456648,37.763844],
+ [-122.456778,37.764938],
+ [-122.457575,37.764847],
+ [-122.457707,37.764705],
+ [-122.457805,37.765978],
+ [-122.456862,37.765856],
+ [-122.452974,37.766367],
+ [-122.454676,37.774758],
+ [-122.452852,37.774986],
+ [-122.453191,37.776877],
+ [-122.446859,37.777678],
+ [-122.446673,37.776733],
+ [-122.429983,37.778864],
+ [-122.429593,37.776526],
+ [-122.4294,37.776267],
+ [-122.429573,37.776045],
+ [-122.42828,37.769641]
+ ]
+ ]
+ },
+ "id": "94117",
+ "properties": {
+ "id": "94117",
+ "neighborhood": "Panhandle"
+ },
+ "type": "Feature"
+ },
+ {
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [-122.444972,37.776956],
+ [-122.446673,37.776733],
+ [-122.446859,37.777678],
+ [-122.453191,37.776877],
+ [-122.452852,37.774986],
+ [-122.465887,37.773401],
+ [-122.465845,37.772545],
+ [-122.464749,37.772486],
+ [-122.462072,37.771779],
+ [-122.459148,37.771316],
+ [-122.459502,37.770711],
+ [-122.460096,37.770396],
+ [-122.461874,37.770266],
+ [-122.464536,37.769638],
+ [-122.466956,37.768001],
+ [-122.469006,37.769046],
+ [-122.470813,37.769209],
+ [-122.471557,37.769065],
+ [-122.472056,37.768783],
+ [-122.472362,37.7684],
+ [-122.472697,37.767444],
+ [-122.472844,37.767756],
+ [-122.472672,37.768601],
+ [-122.471497,37.76954],
+ [-122.471476,37.769812],
+ [-122.47402,37.769507],
+ [-122.475251,37.770068],
+ [-122.476153,37.770232],
+ [-122.476281,37.770393],
+ [-122.476217,37.770837],
+ [-122.475898,37.771087],
+ [-122.474249,37.771029],
+ [-122.47378,37.771182],
+ [-122.475395,37.771703],
+ [-122.477216,37.77146],
+ [-122.479165,37.770749],
+ [-122.479412,37.771247],
+ [-122.479254,37.771868],
+ [-122.478613,37.772245],
+ [-122.474834,37.772518],
+ [-122.472407,37.772329],
+ [-122.471937,37.772516],
+ [-122.471729,37.772828],
+ [-122.47172,37.773141],
+ [-122.475639,37.772941],
+ [-122.476602,37.78702],
+ [-122.475083,37.787011],
+ [-122.473321,37.787239],
+ [-122.472691,37.786462],
+ [-122.472522,37.787124],
+ [-122.471777,37.787485],
+ [-122.468463,37.787804],
+ [-122.449327,37.791654],
+ [-122.449368,37.791488],
+ [-122.447689,37.791703],
+ [-122.44584,37.782546],
+ [-122.447238,37.782464],
+ [-122.447533,37.781349],
+ [-122.447476,37.781067],
+ [-122.445536,37.781341],
+ [-122.44544,37.780142],
+ [-122.446226,37.780051],
+ [-122.446307,37.77984],
+ [-122.446084,37.778731],
+ [-122.445357,37.778831],
+ [-122.444972,37.776956]
+ ]
+ ]
+ },
+ "id": "94118",
+ "properties": {
+ "id": "94118",
+ "neighborhood": "Inner Richmond"
+ },
+ "type": "Feature"
+ },
+ {
+ "geometry": {
+ "type": "MultiPolygon",
+ "coordinates": [
+ [
+ [
+ [-122.515568,37.778158],
+ [-122.515522,37.778054],
+ [-122.516044,37.778034],
+ [-122.5171,37.778255],
+ [-122.515972,37.778931],
+ [-122.515659,37.778709],
+ [-122.51575,37.778534],
+ [-122.515568,37.778158]
+ ]
+ ],
+ [
+ [
+ [-122.517686,37.780601],
+ [-122.517402,37.780516],
+ [-122.517389,37.780248],
+ [-122.517109,37.780174],
+ [-122.517043,37.779939],
+ [-122.517474,37.779998],
+ [-122.517747,37.78023],
+ [-122.517686,37.780601]
+ ]
+ ],
+ [
+ [
+ [-122.484717,37.789597],
+ [-122.484583,37.789242],
+ [-122.484718,37.788811],
+ [-122.485334,37.788309],
+ [-122.485284,37.787608],
+ [-122.483795,37.787747],
+ [-122.483607,37.78743],
+ [-122.48337,37.78736],
+ [-122.48138,37.787401],
+ [-122.479785,37.787032],
+ [-122.479129,37.787142],
+ [-122.477715,37.786931],
+ [-122.476602,37.78702],
+ [-122.475639,37.772941],
+ [-122.510968,37.771331],
+ [-122.511398,37.771486],
+ [-122.511322,37.771173],
+ [-122.513273,37.771077],
+ [-122.513184,37.774133],
+ [-122.513026,37.774949],
+ [-122.513142,37.775182],
+ [-122.513194,37.777452],
+ [-122.514068,37.778184],
+ [-122.514289,37.778184],
+ [-122.514373,37.77944],
+ [-122.514926,37.779652],
+ [-122.514884,37.779893],
+ [-122.514399,37.780002],
+ [-122.514178,37.780542],
+ [-122.514736,37.781041],
+ [-122.514698,37.781217],
+ [-122.514205,37.781328],
+ [-122.514245,37.781536],
+ [-122.513721,37.781503],
+ [-122.513795,37.781861],
+ [-122.513426,37.782119],
+ [-122.513563,37.782343],
+ [-122.513395,37.782526],
+ [-122.51349,37.782784],
+ [-122.512869,37.782851],
+ [-122.512785,37.783408],
+ [-122.512406,37.783757],
+ [-122.51267,37.784013],
+ [-122.512121,37.783849],
+ [-122.511811,37.783945],
+ [-122.511632,37.784377],
+ [-122.511411,37.784286],
+ [-122.511348,37.784585],
+ [-122.510833,37.784452],
+ [-122.509747,37.784795],
+ [-122.509062,37.785544],
+ [-122.508124,37.785907],
+ [-122.506904,37.787204],
+ [-122.50621,37.787597],
+ [-122.506022,37.787797],
+ [-122.506092,37.788194],
+ [-122.505811,37.78826],
+ [-122.504845,37.787919],
+ [-122.504094,37.788082],
+ [-122.503578,37.787971],
+ [-122.502917,37.788146],
+ [-122.500674,37.788287],
+ [-122.50006,37.788535],
+ [-122.499835,37.788446],
+ [-122.499703,37.788669],
+ [-122.499497,37.788669],
+ [-122.499037,37.788298],
+ [-122.498381,37.788217],
+ [-122.498118,37.787979],
+ [-122.497677,37.787987],
+ [-122.497246,37.78749],
+ [-122.496326,37.78732],
+ [-122.49486,37.78784],
+ [-122.494599,37.788153],
+ [-122.49389,37.787551],
+ [-122.492867,37.787922],
+ [-122.492545,37.787773],
+ [-122.492055,37.787864],
+ [-122.491482,37.788136],
+ [-122.490012,37.789413],
+ [-122.488188,37.789339],
+ [-122.487051,37.789528],
+ [-122.485863,37.790665],
+ [-122.485131,37.790421],
+ [-122.484717,37.789597]
+ ]
+ ]
+ ]
+ },
+ "id": "94121",
+ "properties": {
+ "id": "94121",
+ "neighborhood": "Outer Richmond"
+ },
+ "type": "Feature"
+ },
+ {
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [-122.426352,37.807528],
+ [-122.425397,37.806565],
+ [-122.425374,37.806107],
+ [-122.42553,37.805821],
+ [-122.423491,37.795723],
+ [-122.440679,37.793537],
+ [-122.440875,37.794492],
+ [-122.441719,37.794387],
+ [-122.44153,37.793428],
+ [-122.446428,37.792795],
+ [-122.447811,37.80152],
+ [-122.448525,37.801634],
+ [-122.449009,37.801917],
+ [-122.449404,37.802357],
+ [-122.449561,37.802801],
+ [-122.449275,37.803858],
+ [-122.448409,37.804394],
+ [-122.448243,37.804788],
+ [-122.448481,37.806062],
+ [-122.448321,37.806876],
+ [-122.447295,37.807455],
+ [-122.443705,37.807725],
+ [-122.441096,37.808198],
+ [-122.44055,37.80839],
+ [-122.440055,37.808821],
+ [-122.439998,37.808663],
+ [-122.44041,37.808174],
+ [-122.441003,37.808088],
+ [-122.441364,37.80786],
+ [-122.441493,37.808019],
+ [-122.442101,37.807966],
+ [-122.442427,37.807869],
+ [-122.442406,37.807668],
+ [-122.44268,37.807623],
+ [-122.44274,37.80782],
+ [-122.442999,37.807803],
+ [-122.443683,37.807592],
+ [-122.443643,37.807467],
+ [-122.447471,37.806461],
+ [-122.44728,37.805577],
+ [-122.447182,37.805402],
+ [-122.442496,37.806008],
+ [-122.442604,37.806591],
+ [-122.444053,37.806469],
+ [-122.442517,37.806758],
+ [-122.442471,37.807123],
+ [-122.442303,37.806809],
+ [-122.435826,37.807598],
+ [-122.435633,37.806878],
+ [-122.434208,37.80697],
+ [-122.433816,37.805671],
+ [-122.432637,37.805729],
+ [-122.432535,37.805917],
+ [-122.432195,37.806011],
+ [-122.432646,37.808535],
+ [-122.432349,37.808561],
+ [-122.432062,37.807246],
+ [-122.431414,37.807326],
+ [-122.431787,37.809057],
+ [-122.431368,37.809109],
+ [-122.431027,37.807395],
+ [-122.430333,37.807473],
+ [-122.430652,37.809196],
+ [-122.430212,37.809257],
+ [-122.429937,37.807873],
+ [-122.428901,37.808021],
+ [-122.428209,37.808373],
+ [-122.427017,37.808129],
+ [-122.427547,37.808655],
+ [-122.428028,37.808617],
+ [-122.428059,37.808747],
+ [-122.427568,37.808804],
+ [-122.426866,37.80813],
+ [-122.426726,37.808158],
+ [-122.426817,37.809302],
+ [-122.426369,37.810186],
+ [-122.425473,37.810746],
+ [-122.424468,37.810765],
+ [-122.424322,37.810603],
+ [-122.424449,37.81045],
+ [-122.424801,37.810665],
+ [-122.425364,37.810603],
+ [-122.425897,37.810359],
+ [-122.426387,37.809852],
+ [-122.426648,37.808866],
+ [-122.426352,37.807528]
+ ]
+ ]
+ },
+ "id": "94123",
+ "properties": {
+ "id": 94123,
+ "neighborhood": "Marina"
+ },
+ "type": "Feature"
+ },
+ {
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [-122.391527,37.709674],
+ [-122.393396,37.708262],
+ [-122.395354,37.708369],
+ [-122.407491,37.708181],
+ [-122.408326,37.708426],
+ [-122.410318,37.708314],
+ [-122.410071,37.708909],
+ [-122.412248,37.708601],
+ [-122.413821,37.709054],
+ [-122.414165,37.708316],
+ [-122.418198,37.708311],
+ [-122.420305,37.707817],
+ [-122.420709,37.708291],
+ [-122.426074,37.708319],
+ [-122.426415,37.707763],
+ [-122.427043,37.708066],
+ [-122.426985,37.70837],
+ [-122.427283,37.708307],
+ [-122.427347,37.710021],
+ [-122.426175,37.710959],
+ [-122.42923,37.712203],
+ [-122.433751,37.713118],
+ [-122.431213,37.716631],
+ [-122.42836,37.716053],
+ [-122.427306,37.715611],
+ [-122.42605,37.718375],
+ [-122.425602,37.718097],
+ [-122.425093,37.717356],
+ [-122.424422,37.717063],
+ [-122.423615,37.71719],
+ [-122.422477,37.717882],
+ [-122.423308,37.718471],
+ [-122.423541,37.718906],
+ [-122.423493,37.719533],
+ [-122.423682,37.719801],
+ [-122.425484,37.720235],
+ [-122.424405,37.721949],
+ [-122.425246,37.722277],
+ [-122.424475,37.723544],
+ [-122.422873,37.723983],
+ [-122.423554,37.725625],
+ [-122.424157,37.725984],
+ [-122.423154,37.727262],
+ [-122.423712,37.728761],
+ [-122.426016,37.728636],
+ [-122.426026,37.729391],
+ [-122.423689,37.729515],
+ [-122.422911,37.729289],
+ [-122.420599,37.729374],
+ [-122.420399,37.729529],
+ [-122.420306,37.729926],
+ [-122.420182,37.731449],
+ [-122.420949,37.731304],
+ [-122.420551,37.731562],
+ [-122.420701,37.731936],
+ [-122.416255,37.732034],
+ [-122.413909,37.732606],
+ [-122.409647,37.734951],
+ [-122.408488,37.736297],
+ [-122.408218,37.73765],
+ [-122.407024,37.738016],
+ [-122.406506,37.735623],
+ [-122.404946,37.733588],
+ [-122.402107,37.727849],
+ [-122.401262,37.724794],
+ [-122.399202,37.71992],
+ [-122.398555,37.717783],
+ [-122.398393,37.716337],
+ [-122.398027,37.715493],
+ [-122.396489,37.714972],
+ [-122.396527,37.714716],
+ [-122.394738,37.713611],
+ [-122.393041,37.713609],
+ [-122.391224,37.713259],
+ [-122.390961,37.712322],
+ [-122.390439,37.712109],
+ [-122.388774,37.71228],
+ [-122.387994,37.713004],
+ [-122.387684,37.712178],
+ [-122.386375,37.711033],
+ [-122.386724,37.711066],
+ [-122.38874,37.710489],
+ [-122.39094,37.710318],
+ [-122.391782,37.709808],
+ [-122.391527,37.709674]
+ ]
+ ]
+ },
+ "id": "94134",
+ "properties": {
+ "id": 94134,
+ "neighborhood": "Bayshore"
+ },
+ "type": "Feature"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/packages/map/src/demo/.data/mock.ts b/packages/map/src/demo/.data/mock.ts
new file mode 100644
index 0000000..23bcbe0
--- /dev/null
+++ b/packages/map/src/demo/.data/mock.ts
@@ -0,0 +1,240 @@
+export const sluterData = {
+ "features": [
+ {
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -151.5129,
+ 63.1016,
+ 0.0
+ ]
+ }
+ },
+ {
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -150.4048,
+ 63.1224,
+ 105.5
+ ]
+ }
+ },
+ {
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -151.3597,
+ 63.0781,
+ 0.0
+ ]
+ }
+ },
+ {
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -118.497,
+ 34.299667,
+ 7.64
+ ]
+ }
+ },
+ {
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -87.6901,
+ 12.0623,
+ 46.41
+ ]
+ }
+ },
+ {
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -151.5053,
+ 63.0719,
+ 0.0
+ ]
+ }
+ },
+ {
+
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -178.4576,
+ -20.2873,
+ 614.26
+ ]
+ }
+ },
+ {
+
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -148.789,
+ 63.1725,
+ 7.5
+ ]
+ }
+ },
+ {
+
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -120.993164,
+ 36.421833,
+ 6.37
+ ]
+ }
+ },
+ {
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -117.0155,
+ 33.656333,
+ 12.37
+ ]
+ }
+ },
+ {
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -151.512,
+ 63.0879,
+ 10.8
+ ]
+ }
+ },
+ {
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -151.4378,
+ 63.0933,
+ 0.0
+ ]
+ }
+ },
+ {
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -149.6538,
+ 63.2272,
+ 96.8
+ ]
+ }
+ },
+ {
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -151.5325,
+ 63.0844,
+ 0.0
+ ]
+ }
+ },
+ {
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -149.4752,
+ 61.8518,
+ 54.3
+ ]
+ }
+ },
+ {
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -150.8597,
+ 61.6214,
+ 50.0
+ ]
+ }
+ },
+ {
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -149.7142,
+ 62.9656,
+ 93.6
+ ]
+ }
+ },
+ {
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -151.2484,
+ 61.2705,
+ 69.1
+ ]
+ }
+ },
+ {
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -152.0732,
+ 65.5942,
+ 14.8
+ ]
+ }
+ },
+ {
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -90.5445,
+ 13.5146,
+ 54.36
+ ]
+ }
+ },
+ {
+
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -118.819504,
+ 37.605499,
+ 4.14
+ ]
+ }
+ },
+ {
+
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -118.930168,
+ 37.636833,
+ -0.71
+ ]
+ }
+ },
+ {
+
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -117.509167,
+ 34.1555,
+ 16.34
+ ]
+ }
+ },
+ ]
+}
diff --git a/packages/map/src/demo/.data/us-election-2016.json b/packages/map/src/demo/.data/us-election-2016.json
new file mode 100644
index 0000000..83be4e7
--- /dev/null
+++ b/packages/map/src/demo/.data/us-election-2016.json
@@ -0,0 +1,3109 @@
+[{"dem":2464364,"rep":769743,"total":3434308,"name":"Los Angeles, California","coordinates":[-118.26186,34.19639]},
+{"dem":1611946,"rep":453287,"total":2158615,"name":"Cook, Illinois","coordinates":[-87.64545,41.89429]},
+{"dem":702907,"rep":747361,"total":1567834,"name":"Maricopa, Arizona","coordinates":[-112.49892,33.34517]},
+{"dem":707914,"rep":545955,"total":1312112,"name":"Harris, Texas","coordinates":[-95.39303,29.85727]},
+{"dem":735476,"rep":477766,"total":1306400,"name":"San Diego, California","coordinates":[-116.77611,33.0236]},
+{"dem":609961,"rep":507148,"total":1197521,"name":"Orange, California","coordinates":[-117.7772,33.67568]},
+{"dem":718322,"rep":216339,"total":998499,"name":"King, Washington","coordinates":[-121.83399,47.49059]},
+{"dem":624146,"rep":333999,"total":980204,"name":"Miami-Dade, Florida","coordinates":[-80.49709,25.61057]},
+{"dem":553320,"rep":260951,"total":831951,"name":"Broward, Florida","coordinates":[-80.47668,26.19353]},
+{"dem":640553,"rep":141044,"total":805605,"name":"Kings, New York","coordinates":[-73.95063,40.63504]},
+{"dem":520360,"rep":219793,"total":784034,"name":"Middlesex, Massachusetts","coordinates":[-71.39491,42.48171]},
+{"dem":519444,"rep":228993,"total":777838,"name":"Wayne, Michigan","coordinates":[-83.26195,42.28466]},
+{"dem":402227,"rep":320057,"total":767156,"name":"Clark, Nevada","coordinates":[-115.01381,36.21425]},
+{"dem":461080,"rep":262945,"total":758973,"name":"Dallas, Texas","coordinates":[-96.77842,32.76698]},
+{"dem":373695,"rep":333243,"total":751391,"name":"Riverside, California","coordinates":[-116.00223,33.72982]},
+{"dem":584025,"rep":108748,"total":707631,"name":"Philadelphia, Pennsylvania","coordinates":[-75.13334,40.00937]},
+{"dem":511684,"rep":144826,"total":703709,"name":"Santa Clara, California","coordinates":[-121.6905,37.22069]},
+{"dem":517220,"rep":149341,"total":686393,"name":"Queens, New York","coordinates":[-73.83801,40.65856]},
+{"dem":303951,"rep":350570,"total":681254,"name":"Suffolk, New York","coordinates":[-72.69221,40.94355]},
+{"dem":429288,"rep":191770,"total":679977,"name":"Hennepin, Minnesota","coordinates":[-93.47522,45.00612]},
+{"dem":579013,"rep":64929,"total":668939,"name":"New York, New York","coordinates":[-73.97018,40.77664]},
+{"dem":288392,"rep":345921,"total":668514,"name":"Tarrant, Texas","coordinates":[-97.29122,32.77211]},
+{"dem":343070,"rep":289203,"total":664614,"name":"Oakland, Michigan","coordinates":[-83.38421,42.66045]},
+{"dem":374673,"rep":272402,"total":662332,"name":"Palm Beach, Florida","coordinates":[-80.44835,26.64912]},
+{"dem":514842,"rep":95922,"total":654266,"name":"Alameda, California","coordinates":[-121.91248,37.64713]},
+{"dem":340833,"rep":271240,"total":653983,"name":"San Bernardino, California","coordinates":[-116.18119,34.85721]},
+{"dem":367617,"rep":259480,"total":650114,"name":"Allegheny, Pennsylvania","coordinates":[-79.98045,40.46975]},
+{"dem":326088,"rep":288313,"total":636967,"name":"Nassau, New York","coordinates":[-73.58941,40.72961]},
+{"dem":398271,"rep":184211,"total":603822,"name":"Cuyahoga, Ohio","coordinates":[-81.72421,41.76039]},
+{"dem":307896,"rep":266870,"total":597660,"name":"Hillsborough, Florida","coordinates":[-82.34971,27.9066]},
+{"dem":319550,"rep":240333,"total":589645,"name":"Bexar, Texas","coordinates":[-98.52014,29.44867]},
+{"dem":351198,"rep":199331,"total":581140,"name":"Franklin, Ohio","coordinates":[-83.00908,39.96987]},
+{"dem":326023,"rep":189789,"total":559330,"name":"Sacramento, California","coordinates":[-121.34044,38.45001]},
+{"dem":355133,"rep":157710,"total":551183,"name":"Fairfax, Virginia","coordinates":[-77.27325,38.82952]},
+{"dem":329894,"rep":195216,"total":546275,"name":"Orange, Florida","coordinates":[-81.32328,28.51439]},
+{"dem":302736,"rep":196082,"total":527624,"name":"Wake, North Carolina","coordinates":[-78.65062,35.78984]},
+{"dem":286704,"rep":202434,"total":514858,"name":"St. Louis County, Missouri","coordinates":[-90.44607,38.64068]},
+{"dem":233701,"rep":239201,"total":492403,"name":"Pinellas, Florida","coordinates":[-82.73951,27.9031]},
+{"dem":357837,"rep":92704,"total":478873,"name":"Montgomery, Maryland","coordinates":[-77.20306,39.13738]},
+{"dem":294562,"rep":155518,"total":472857,"name":"Mecklenburg, North Carolina","coordinates":[-80.83383,35.24686]},
+{"dem":308260,"rep":127209,"total":468720,"name":"Travis, Texas","coordinates":[-97.69126,30.23951]},
+{"dem":319287,"rep":115956,"total":466175,"name":"Contra Costa, California","coordinates":[-121.95154,37.91947]},
+{"dem":288797,"rep":125846,"total":440247,"name":"Milwaukee, Wisconsin","coordinates":[-87.48155,43.01766]},
+{"dem":256082,"rep":162731,"total":434687,"name":"Montgomery, Pennsylvania","coordinates":[-75.3702,40.20999]},
+{"dem":205704,"rep":211672,"total":432695,"name":"Duval, Florida","coordinates":[-81.64811,30.33524]},
+{"dem":297051,"rep":117783,"total":431391,"name":"Fulton, Georgia","coordinates":[-84.46818,33.79003]},
+{"dem":228622,"rep":166415,"total":428769,"name":"DuPage, Illinois","coordinates":[-88.08603,41.85205]},
+{"dem":215456,"rep":188303,"total":423625,"name":"Erie, New York","coordinates":[-78.77819,42.75275]},
+{"dem":224661,"rep":167428,"total":421640,"name":"Pima, Arizona","coordinates":[-111.78365,32.12804]},
+{"dem":243852,"rep":160077,"total":421209,"name":"Fairfield, Connecticut","coordinates":[-73.36706,41.22741]},
+{"dem":272926,"rep":131238,"total":420655,"name":"Westchester, New York","coordinates":[-73.74575,41.15268]},
+{"dem":176317,"rep":224665,"total":419312,"name":"Macomb, Michigan","coordinates":[-82.91145,42.67155]},
+{"dem":231211,"rep":175529,"total":419296,"name":"Bergen, New Jersey","coordinates":[-74.07472,40.95969]},
+{"dem":175863,"rep":138043,"total":418868,"name":"Salt Lake, Utah","coordinates":[-111.92423,40.66788]},
+{"dem":215719,"rep":173665,"total":409109,"name":"Hamilton, Ohio","coordinates":[-84.54418,39.19692]},
+{"dem":240403,"rep":148173,"total":406864,"name":"Hartford, Connecticut","coordinates":[-72.73291,41.80605]},
+{"dem":345084,"rep":37688,"total":405792,"name":"San Francisco, California","coordinates":[-123.03222,37.72723]},
+{"dem":353646,"rep":37797,"total":399522,"name":"Bronx, New York","coordinates":[-73.85293,40.84871]},
+{"dem":292561,"rep":67954,"total":399103,"name":"Multnomah, Oregon","coordinates":[-122.41736,45.54771]},
+{"dem":218412,"rep":149477,"total":390682,"name":"Baltimore, Maryland","coordinates":[-76.61656,39.44316]},
+{"dem":344049,"rep":32811,"total":390385,"name":"Prince George's, Maryland","coordinates":[-76.84818,38.82928]},
+{"dem":198778,"rep":157682,"total":383705,"name":"Worcester, Massachusetts","coordinates":[-71.94028,42.31169]},
+{"dem":222310,"rep":136316,"total":379868,"name":"Essex, Massachusetts","coordinates":[-70.8649,42.6427]},
+{"dem":205609,"rep":159048,"total":379006,"name":"New Haven, Connecticut","coordinates":[-72.9002,41.34971]},
+{"dem":212899,"rep":130360,"total":362372,"name":"Marion, Indiana","coordinates":[-86.13579,39.78297]},
+{"dem":221819,"rep":119723,"total":361562,"name":"Norfolk, Massachusetts","coordinates":[-71.18111,42.17173]},
+{"dem":140624,"rep":201014,"total":361419,"name":"Collin, Texas","coordinates":[-96.57944,33.19453]},
+{"dem":190836,"rep":143768,"total":353099,"name":"Jefferson, Kentucky","coordinates":[-85.65762,38.18953]},
+{"dem":194402,"rep":132323,"total":351726,"name":"Ventura, California","coordinates":[-119.13314,34.35874]},
+{"dem":172538,"rep":146824,"total":348485,"name":"Pierce, Washington","coordinates":[-122.15324,47.05141]},
+{"dem":188592,"rep":136582,"total":347790,"name":"Monroe, New York","coordinates":[-77.66465,43.46448]},
+{"dem":167060,"rep":164361,"total":344297,"name":"Bucks, Pennsylvania","coordinates":[-75.10706,40.33688]},
+{"dem":185227,"rep":128255,"total":342173,"name":"Snohomish, Washington","coordinates":[-121.93678,48.07046]},
+{"dem":208992,"rep":116344,"total":337383,"name":"Shelby, Tennessee","coordinates":[-89.89539,35.18379]},
+{"dem":244551,"rep":62690,"total":331852,"name":"Denver, Colorado","coordinates":[-104.8811,39.76185]},
+{"dem":160121,"rep":152912,"total":330819,"name":"Cobb, Georgia","coordinates":[-84.57411,33.93992]},
+{"dem":160776,"rep":138177,"total":328882,"name":"Jefferson, Colorado","coordinates":[-105.24546,39.57951]},
+{"dem":166153,"rep":146989,"total":328331,"name":"Gwinnett, Georgia","coordinates":[-84.02308,33.95914]},
+{"dem":124908,"rep":191551,"total":326420,"name":"Lee, Florida","coordinates":[-81.89199,26.55903]},
+{"dem":193044,"rep":122953,"total":326102,"name":"Middlesex, New Jersey","coordinates":[-74.40743,40.43962]},
+{"dem":108010,"rep":179228,"total":318967,"name":"El Paso, Colorado","coordinates":[-104.52747,38.82738]},
+{"dem":251370,"rep":51468,"total":314757,"name":"DeKalb, Georgia","coordinates":[-84.22634,33.77066]},
+{"dem":119679,"rep":181848,"total":314752,"name":"Brevard, Florida","coordinates":[-80.70033,28.29831]},
+{"dem":237882,"rep":57929,"total":314384,"name":"San Mateo, California","coordinates":[-122.37154,37.41467]},
+{"dem":137181,"rep":166723,"total":314377,"name":"Monmouth, New Jersey","coordinates":[-74.15244,40.28704]},
+{"dem":282830,"rep":12723,"total":311268,"name":"District of Columbia, District of Columbia","coordinates":[-77.01651,38.90424]},
+{"dem":240837,"rep":63176,"total":310934,"name":"Essex, New Jersey","coordinates":[-74.24629,40.7874]},
+{"dem":217526,"rep":71279,"total":310017,"name":"Dane, Wisconsin","coordinates":[-89.41785,43.06746]},
+{"dem":245751,"rep":50421,"total":308741,"name":"Suffolk, Massachusetts","coordinates":[-71.01825,42.33855]},
+{"dem":138683,"rep":148180,"total":308184,"name":"Kent, Michigan","coordinates":[-85.54744,43.03249]},
+{"dem":156873,"rep":134768,"total":304191,"name":"Jefferson, Alabama","coordinates":[-86.89653,33.55344]},
+{"dem":171095,"rep":109767,"total":303520,"name":"Lake, Illinois","coordinates":[-87.43597,42.32644]},
+{"dem":159885,"rep":117053,"total":303046,"name":"Arapahoe, Colorado","coordinates":[-104.3317,39.64455]},
+{"dem":151927,"rep":132720,"total":300904,"name":"Will, Illinois","coordinates":[-87.97845,41.44847]},
+{"dem":110890,"rep":170603,"total":298645,"name":"Denton, Texas","coordinates":[-97.12114,33.20513]},
+{"dem":177402,"rep":110667,"total":297634,"name":"Delaware, Pennsylvania","coordinates":[-75.39881,39.91668]},
+{"dem":129852,"rep":137490,"total":290090,"name":"Johnson, Kansas","coordinates":[-94.82232,38.8839]},
+{"dem":175696,"rep":90326,"total":285790,"name":"Honolulu, Hawaii","coordinates":[-158.1234,21.58002]},
+{"dem":117433,"rep":157430,"total":284314,"name":"Polk, Florida","coordinates":[-81.69353,27.95364]},
+{"dem":141341,"rep":124049,"total":282319,"name":"Fresno, California","coordinates":[-119.65501,36.761]},
+{"dem":143417,"rep":94698,"total":274662,"name":"Bernalillo, New Mexico","coordinates":[-106.66908,35.05362]},
+{"dem":87150,"rep":179079,"total":274362,"name":"Ocean, New Jersey","coordinates":[-74.25886,39.86566]},
+{"dem":112813,"rep":141569,"total":273942,"name":"Oklahoma, Oklahoma","coordinates":[-97.4094,35.55461]},
+{"dem":177738,"rep":70894,"total":273143,"name":"Ramsey, Minnesota","coordinates":[-93.09996,45.0152]},
+{"dem":128419,"rep":122403,"total":270081,"name":"Anne Arundel, Maryland","coordinates":[-76.56089,38.99161]},
+{"dem":153251,"rep":83197,"total":269232,"name":"Washington, Oregon","coordinates":[-123.09761,45.55354]},
+{"dem":141682,"rep":116114,"total":268800,"name":"Chester, Pennsylvania","coordinates":[-75.74975,39.97402]},
+{"dem":135513,"rep":115369,"total":266863,"name":"Plymouth, Massachusetts","coordinates":[-70.74194,41.98719]},
+{"dem":162919,"rep":85525,"total":262391,"name":"New Castle, Delaware","coordinates":[-75.64413,39.57591]},
+{"dem":134686,"rep":117291,"total":262066,"name":"Fort Bend, Texas","coordinates":[-95.77101,29.5266]},
+{"dem":109091,"rep":143007,"total":260869,"name":"Volusia, Florida","coordinates":[-81.16179,29.05776]},
+{"dem":122016,"rep":123909,"total":258301,"name":"Montgomery, Ohio","coordinates":[-84.29059,39.75373]},
+{"dem":134256,"rep":112026,"total":257979,"name":"Summit, Ohio","coordinates":[-81.53492,41.12184]},
+{"dem":149248,"rep":98062,"total":257405,"name":"Guilford, North Carolina","coordinates":[-79.78866,36.07906]},
+{"dem":115249,"rep":126071,"total":250416,"name":"Morris, New Jersey","coordinates":[-74.54729,40.85889]},
+{"dem":148864,"rep":84550,"total":249068,"name":"Davidson, Tennessee","coordinates":[-86.78478,36.16912]},
+{"dem":129540,"rep":105443,"total":248959,"name":"Bristol, Massachusetts","coordinates":[-71.08889,41.74858]},
+{"dem":142899,"rep":90882,"total":248474,"name":"Providence, Rhode Island","coordinates":[-71.57862,41.86976]},
+{"dem":87847,"rep":144258,"total":247054,"name":"Tulsa, Oklahoma","coordinates":[-95.94181,36.12031]},
+{"dem":98689,"rep":129584,"total":244163,"name":"Kern, California","coordinates":[-118.7295,35.34662]},
+{"dem":90142,"rep":142101,"total":241139,"name":"Pasco, Florida","coordinates":[-82.46483,28.30771]},
+{"dem":91093,"rep":137914,"total":241112,"name":"Lancaster, Pennsylvania","coordinates":[-76.25019,40.04199]},
+{"dem":113798,"rep":108077,"total":240433,"name":"Douglas, Nebraska","coordinates":[-96.15406,41.29709]},
+{"dem":202673,"rep":25205,"total":239402,"name":"Baltimore City, Maryland","coordinates":[-76.61047,39.30003]},
+{"dem":79200,"rep":142521,"total":239042,"name":"Waukesha, Wisconsin","coordinates":[-88.30424,43.01836]},
+{"dem":119804,"rep":93492,"total":231555,"name":"Polk, Iowa","coordinates":[-93.56897,41.68481]},
+{"dem":110483,"rep":99583,"total":231440,"name":"Dakota, Minnesota","coordinates":[-93.06248,44.67089]},
+{"dem":160435,"rep":51408,"total":231253,"name":"Sonoma, California","coordinates":[-122.9261,38.52518]},
+{"dem":97870,"rep":124438,"total":229063,"name":"Sarasota, Florida","coordinates":[-82.36583,27.18438]},
+{"dem":93767,"rep":113435,"total":227246,"name":"Spokane, Washington","coordinates":[-117.40337,47.62037]},
+{"dem":146717,"rep":72631,"total":226592,"name":"Camden, New Jersey","coordinates":[-74.96124,39.8024]},
+{"dem":105914,"rep":109443,"total":224896,"name":"Seminole, Florida","coordinates":[-81.13198,28.69009]},
+{"dem":121124,"rep":88936,"total":224166,"name":"San Joaquin, California","coordinates":[-121.27224,37.93498]},
+{"dem":147414,"rep":68114,"total":221975,"name":"Union, New Jersey","coordinates":[-74.30869,40.65987]},
+{"dem":163917,"rep":49043,"total":219375,"name":"Hudson, New Jersey","coordinates":[-74.0786,40.73137]},
+{"dem":121725,"rep":89272,"total":218943,"name":"Burlington, New Jersey","coordinates":[-74.663,39.87578]},
+{"dem":74483,"rep":127832,"total":215165,"name":"Greenville, South Carolina","coordinates":[-82.37207,34.89264]},
+{"dem":99589,"rep":100013,"total":214157,"name":"Hillsborough, New Hampshire","coordinates":[-71.72305,42.91153]},
+{"dem":102095,"rep":88392,"total":214039,"name":"Clackamas, Oregon","coordinates":[-122.19512,45.16049]},
+{"dem":147843,"rep":55512,"total":214008,"name":"El Paso, Texas","coordinates":[-106.24142,31.76648]},
+{"dem":97379,"rep":94758,"total":209909,"name":"Washoe, Nevada","coordinates":[-119.66326,40.73131]},
+{"dem":112337,"rep":83649,"total":208440,"name":"Onondaga, New York","coordinates":[-76.19613,43.00651]},
+{"dem":68524,"rep":128528,"total":205986,"name":"York, Pennsylvania","coordinates":[-76.72888,39.92175]},
+{"dem":45835,"rep":150314,"total":204632,"name":"Montgomery, Texas","coordinates":[-95.50295,30.2988]},
+{"dem":91032,"rep":98224,"total":203262,"name":"Virginia Beach, Virginia","coordinates":[-76.0252,36.77998]},
+{"dem":112590,"rep":78685,"total":203117,"name":"Hampden, Massachusetts","coordinates":[-72.63564,42.13619]},
+{"dem":84468,"rep":104175,"total":203081,"name":"Williamson, Texas","coordinates":[-97.60506,30.64908]},
+{"dem":28522,"rep":102182,"total":201551,"name":"Utah, Utah","coordinates":[-111.6685,40.12042]},
+{"dem":116935,"rep":75625,"total":201205,"name":"Lake, Indiana","coordinates":[-87.37433,41.47224]},
+{"dem":68626,"rep":121650,"total":201005,"name":"St. Charles, Missouri","coordinates":[-90.67491,38.7811]},
+{"dem":92757,"rep":92441,"total":200160,"name":"Clark, Washington","coordinates":[-122.48595,45.77172]},
+{"dem":103665,"rep":82734,"total":199314,"name":"Kane, Illinois","coordinates":[-88.42803,41.93959]},
+{"dem":110833,"rep":75698,"total":197556,"name":"Lucas, Ohio","coordinates":[-83.4689,41.68232]},
+{"dem":113144,"rep":71721,"total":196538,"name":"Prince William, Virginia","coordinates":[-77.47957,38.70111]},
+{"dem":102828,"rep":84660,"total":196491,"name":"East Baton Rouge, Louisiana","coordinates":[-91.09313,30.54392]},
+{"dem":102751,"rep":84175,"total":196296,"name":"Genesee, Michigan","coordinates":[-83.70637,43.02107]},
+{"dem":93113,"rep":83430,"total":195980,"name":"Larimer, Colorado","coordinates":[-105.48676,40.65809]},
+{"dem":75677,"rep":93752,"total":195669,"name":"Ada, Idaho","coordinates":[-116.24437,43.45147]},
+{"dem":116759,"rep":72902,"total":194802,"name":"Passaic, New Jersey","coordinates":[-74.29828,41.03788]},
+{"dem":96558,"rep":80082,"total":193665,"name":"Adams, Colorado","coordinates":[-104.33187,39.87432]},
+{"dem":102753,"rep":67141,"total":191950,"name":"Lane, Oregon","coordinates":[-122.89769,43.92832]},
+{"dem":69627,"rep":104353,"total":188783,"name":"Sedgwick, Kansas","coordinates":[-97.46105,37.68104]},
+{"dem":128483,"rep":50631,"total":188578,"name":"Washtenaw, Michigan","coordinates":[-83.84342,42.25221]},
+{"dem":132334,"rep":41396,"total":188142,"name":"Boulder, Colorado","coordinates":[-105.39769,40.09496]},
+{"dem":68657,"rep":102573,"total":187499,"name":"Douglas, Colorado","coordinates":[-104.92598,39.32541]},
+{"dem":75500,"rep":93339,"total":185758,"name":"Anoka, Minnesota","coordinates":[-93.24272,45.2741]},
+{"dem":100795,"rep":69949,"total":183097,"name":"Loudoun, Virginia","coordinates":[-77.63889,39.0812]},
+{"dem":78437,"rep":96626,"total":183065,"name":"Berks, Pennsylvania","coordinates":[-75.92685,40.41395]},
+{"dem":73509,"rep":95138,"total":182839,"name":"Placer, California","coordinates":[-120.72271,39.06203]},
+{"dem":59669,"rep":116522,"total":182051,"name":"Westmoreland, Pennsylvania","coordinates":[-79.46668,40.31106]},
+{"dem":73670,"rep":100398,"total":181639,"name":"Jefferson, Louisiana","coordinates":[-90.081,29.52228]},
+{"dem":79994,"rep":90447,"total":181434,"name":"Rockingham, New Hampshire","coordinates":[-71.09908,42.98866]},
+{"dem":74143,"rep":101437,"total":180960,"name":"Richmond, New York","coordinates":[-74.13989,40.56126]},
+{"dem":62878,"rep":105767,"total":180697,"name":"Knox, Tennessee","coordinates":[-83.93772,35.99272]},
+{"dem":71224,"rep":101944,"total":178958,"name":"Manatee, Florida","coordinates":[-82.36876,27.48168]},
+{"dem":94464,"rep":75975,"total":178312,"name":"Forsyth, North Carolina","coordinates":[-80.25696,36.13246]},
+{"dem":107142,"rep":56365,"total":176786,"name":"Santa Barbara, California","coordinates":[-120.03997,34.53705]},
+{"dem":81074,"rep":85045,"total":176461,"name":"Chesterfield, Virginia","coordinates":[-77.58584,37.37843]},
+{"dem":89299,"rep":75443,"total":176345,"name":"Charleston, South Carolina","coordinates":[-79.94248,32.80045]},
+{"dem":68146,"rep":98388,"total":175239,"name":"Stark, Ohio","coordinates":[-81.36566,40.81413]},
+{"dem":62041,"rep":107833,"total":174700,"name":"Marion, Florida","coordinates":[-82.0431,29.2028]},
+{"dem":58642,"rep":106976,"total":173839,"name":"Butler, Ohio","coordinates":[-84.56573,39.43974]},
+{"dem":118809,"rep":48642,"total":173437,"name":"Hidalgo, Texas","coordinates":[-98.18099,26.39638]},
+{"dem":71237,"rep":91557,"total":173275,"name":"Jackson, Missouri","coordinates":[-94.34316,39.00533]},
+{"dem":72186,"rep":95116,"total":172737,"name":"Mobile, Alabama","coordinates":[-88.19656,30.68457]},
+{"dem":81647,"rep":78494,"total":172146,"name":"Stanislaus, California","coordinates":[-121.00283,37.56231]},
+{"dem":102981,"rep":57709,"total":171818,"name":"Cumberland, Maine","coordinates":[-70.33037,43.80834]},
+{"dem":61085,"rep":105423,"total":170789,"name":"Collier, Florida","coordinates":[-81.40095,26.11878]},
+{"dem":62838,"rep":102188,"total":170462,"name":"Lake, Florida","coordinates":[-81.71228,28.76411]},
+{"dem":108000,"rep":52469,"total":168722,"name":"Richland, South Carolina","coordinates":[-80.89803,34.02909]},
+{"dem":102360,"rep":51920,"total":166113,"name":"Solano, California","coordinates":[-121.93959,38.26722]},
+{"dem":133996,"rep":24292,"total":165812,"name":"Orleans, Louisiana","coordinates":[-89.9345,30.05341]},
+{"dem":93935,"rep":59857,"total":163654,"name":"Henrico, Virginia","coordinates":[-77.65192,37.63126]},
+{"dem":62822,"rep":89520,"total":163389,"name":"Madison, Alabama","coordinates":[-86.55108,34.76423]},
+{"dem":102597,"rep":47484,"total":162193,"name":"Howard, Maryland","coordinates":[-76.9244,39.25226]},
+{"dem":81324,"rep":73690,"total":160993,"name":"Lehigh, Pennsylvania","coordinates":[-75.59062,40.61424]},
+{"dem":89574,"rep":61257,"total":159776,"name":"Pulaski, Arkansas","coordinates":[-92.31299,34.77031]},
+{"dem":85689,"rep":65505,"total":157092,"name":"Somerset, New Jersey","coordinates":[-74.61993,40.56552]},
+{"dem":104775,"rep":46193,"total":156529,"name":"Mercer, New Jersey","coordinates":[-74.70372,40.2825]},
+{"dem":121250,"rep":28350,"total":156134,"name":"Durham, North Carolina","coordinates":[-78.87812,36.03382]},
+{"dem":57263,"rep":87404,"total":154256,"name":"Hamilton, Indiana","coordinates":[-86.02171,40.0535]},
+{"dem":57461,"rep":88808,"total":152469,"name":"Escambia, Florida","coordinates":[-87.33889,30.61163]},
+{"dem":92068,"rep":53821,"total":152132,"name":"Leon, Florida","coordinates":[-84.2778,30.45931]},
+{"dem":68278,"rep":76645,"total":152021,"name":"Orange, New York","coordinates":[-74.30625,41.4024]},
+{"dem":55382,"rep":83930,"total":147137,"name":"Allen, Indiana","coordinates":[-85.07179,41.0919]},
+{"dem":67086,"rep":64428,"total":144235,"name":"Washington, Minnesota","coordinates":[-92.89011,45.03792]},
+{"dem":66272,"rep":71736,"total":143519,"name":"Northampton, Pennsylvania","coordinates":[-75.30744,40.75279]},
+{"dem":44973,"rep":88467,"total":142734,"name":"Ottawa, Michigan","coordinates":[-86.65494,42.94246]},
+{"dem":55316,"rep":78733,"total":142408,"name":"Hamilton, Tennessee","coordinates":[-85.20184,35.16347]},
+{"dem":60803,"rep":71612,"total":141750,"name":"McHenry, Illinois","coordinates":[-88.45224,42.32429]},
+{"dem":66881,"rep":70289,"total":140847,"name":"St. Lucie, Florida","coordinates":[-80.44353,27.37981]},
+{"dem":66949,"rep":66818,"total":140562,"name":"Lorain, Ohio","coordinates":[-82.17972,41.4388]},
+{"dem":85458,"rep":50301,"total":140206,"name":"Osceola, Florida","coordinates":[-81.13931,28.05902]},
+{"dem":83077,"rep":47810,"total":139830,"name":"Albany, New York","coordinates":[-73.974,42.58824]},
+{"dem":66870,"rep":67544,"total":139542,"name":"Gloucester, New Jersey","coordinates":[-75.14567,39.72287]},
+{"dem":108707,"rep":21771,"total":139273,"name":"Marin, California","coordinates":[-122.74597,38.05181]},
+{"dem":75452,"rep":55716,"total":138947,"name":"Buncombe, North Carolina","coordinates":[-82.53042,35.60937]},
+{"dem":28776,"rep":62219,"total":138411,"name":"Davis, Utah","coordinates":[-112.20194,41.03755]},
+{"dem":57788,"rep":63377,"total":136840,"name":"Marion, Oregon","coordinates":[-122.57626,44.90089]},
+{"dem":43099,"rep":88684,"total":136514,"name":"St. Johns, Florida","coordinates":[-81.40004,29.89048]},
+{"dem":69778,"rep":56894,"total":136315,"name":"Fayette, Kentucky","coordinates":[-84.45827,38.04067]},
+{"dem":61898,"rep":61588,"total":136223,"name":"Lancaster, Nebraska","coordinates":[-96.68865,40.78354]},
+{"dem":46519,"rep":76651,"total":135428,"name":"Weld, Colorado","coordinates":[-104.38366,40.55596]},
+{"dem":69342,"rep":60911,"total":135087,"name":"Rockland, New York","coordinates":[-74.02466,41.15462]},
+{"dem":67107,"rep":56164,"total":135009,"name":"San Luis Obispo, California","coordinates":[-120.44754,35.38522]},
+{"dem":52451,"rep":78688,"total":134983,"name":"Luzerne, Pennsylvania","coordinates":[-75.97603,41.17278]},
+{"dem":72430,"rep":54099,"total":133862,"name":"Barnstable, Massachusetts","coordinates":[-70.21188,41.79901]},
+{"dem":47077,"rep":77860,"total":133672,"name":"Harford, Maryland","coordinates":[-76.29978,39.53742]},
+{"dem":89088,"rep":34895,"total":133408,"name":"Monterey, California","coordinates":[-121.31557,36.2401]},
+{"dem":39410,"rep":89288,"total":132920,"name":"Horry, South Carolina","coordinates":[-78.97667,33.90926]},
+{"dem":104235,"rep":20832,"total":131191,"name":"St. Louis City, Missouri","coordinates":[-90.24458,38.63569]},
+{"dem":79110,"rep":43868,"total":131138,"name":"Ingham, Michigan","coordinates":[-84.37381,42.60353]},
+{"dem":62261,"rep":61797,"total":130934,"name":"Dutchess, New York","coordinates":[-73.74004,41.75476]},
+{"dem":64706,"rep":60863,"total":130872,"name":"Dauphin, Pennsylvania","coordinates":[-76.79263,40.41256]},
+{"dem":50587,"rep":70490,"total":130179,"name":"Madison, Illinois","coordinates":[-89.90022,38.82711]},
+{"dem":47892,"rep":72819,"total":129546,"name":"Pinal, Arizona","coordinates":[-111.36633,32.91852]},
+{"dem":68798,"rep":48624,"total":129410,"name":"Thurston, Washington","coordinates":[-122.83015,46.93582]},
+{"dem":42728,"rep":78035,"total":129231,"name":"Greene, Missouri","coordinates":[-93.34064,37.25819]},
+{"dem":53364,"rep":67199,"total":128979,"name":"Brown, Wisconsin","coordinates":[-87.99613,44.47402]},
+{"dem":95249,"rep":22438,"total":128821,"name":"Santa Cruz, California","coordinates":[-122.0072,37.01248]},
+{"dem":75820,"rep":46834,"total":128571,"name":"Alachua, Florida","coordinates":[-82.35722,29.67574]},
+{"dem":71605,"rep":51265,"total":127506,"name":"Cumberland, North Carolina","coordinates":[-78.82871,35.05019]},
+{"dem":67148,"rep":51034,"total":126299,"name":"Kalamazoo, Michigan","coordinates":[-85.53285,42.24626]},
+{"dem":56522,"rep":59522,"total":125677,"name":"Frederick, Maryland","coordinates":[-77.39762,39.47021]},
+{"dem":27717,"rep":90915,"total":124392,"name":"St. Tammany, Louisiana","coordinates":[-89.95196,30.41002]},
+{"dem":63156,"rep":49018,"total":124317,"name":"Kitsap, Washington","coordinates":[-122.64963,47.63959]},
+{"dem":58112,"rep":60069,"total":123679,"name":"Erie, Pennsylvania","coordinates":[-80.09638,42.11795]},
+{"dem":62278,"rep":54058,"total":123528,"name":"New London, Connecticut","coordinates":[-72.10863,41.47265]},
+{"dem":43658,"rep":73757,"total":122903,"name":"Galveston, Texas","coordinates":[-94.88845,29.23345]},
+{"dem":35230,"rep":80026,"total":122093,"name":"Lexington, South Carolina","coordinates":[-81.26627,33.89947]},
+{"dem":47085,"rep":69076,"total":121617,"name":"Cumberland, Pennsylvania","coordinates":[-77.26344,40.1648]},
+{"dem":92016,"rep":20186,"total":121356,"name":"Arlington, Virginia","coordinates":[-77.1007,38.87833]},
+{"dem":43200,"rep":72791,"total":121181,"name":"Brazoria, Texas","coordinates":[-95.43464,29.16781]},
+{"dem":39997,"rep":76277,"total":121090,"name":"Spartanburg, South Carolina","coordinates":[-81.99105,34.93327]},
+{"dem":60756,"rep":53857,"total":120580,"name":"St. Clair, Illinois","coordinates":[-89.92854,38.47019]},
+{"dem":55713,"rep":55624,"total":118376,"name":"Winnebago, Illinois","coordinates":[-89.1612,42.33739]},
+{"dem":60924,"rep":52690,"total":117291,"name":"Atlantic, New Jersey","coordinates":[-74.63375,39.46935]},
+{"dem":33730,"rep":77643,"total":117267,"name":"Warren, Ohio","coordinates":[-84.1699,39.42565]},
+{"dem":58935,"rep":48390,"total":117098,"name":"Linn, Iowa","coordinates":[-91.59767,42.07795]},
+{"dem":46397,"rep":64255,"total":116246,"name":"Lake, Ohio","coordinates":[-81.39264,41.92411]},
+{"dem":57381,"rep":53616,"total":115072,"name":"Mahoning, Ohio","coordinates":[-80.77039,41.01087]},
+{"dem":35590,"rep":71330,"total":114450,"name":"Yavapai, Arizona","coordinates":[-112.57722,34.63107]},
+{"dem":41593,"rep":66754,"total":114357,"name":"York, South Carolina","coordinates":[-81.18318,34.97018]},
+{"dem":55844,"rep":50403,"total":114274,"name":"York, Maine","coordinates":[-70.66842,43.42601]},
+{"dem":50913,"rep":54575,"total":114094,"name":"Saratoga, New York","coordinates":[-73.85538,43.10613]},
+{"dem":52627,"rep":54047,"total":112705,"name":"Chesapeake, Virginia","coordinates":[-76.30178,36.67937]},
+{"dem":57771,"rep":44630,"total":112422,"name":"Saint Louis, Minnesota","coordinates":[-92.51456,47.57863]},
+{"dem":47585,"rep":58299,"total":112334,"name":"Tulare, California","coordinates":[-118.78105,36.22883]},
+{"dem":62290,"rep":45688,"total":112142,"name":"Chatham, Georgia","coordinates":[-81.08518,31.9804]},
+{"dem":25231,"rep":80649,"total":112043,"name":"Cherokee, Georgia","coordinates":[-84.47505,34.24431]},
+{"dem":50979,"rep":55344,"total":111905,"name":"New Hanover, North Carolina","coordinates":[-77.8642,34.18344]},
+{"dem":45304,"rep":57476,"total":110176,"name":"Clay, Missouri","coordinates":[-94.4215,39.31555]},
+{"dem":52252,"rep":52021,"total":110060,"name":"St. Joseph, Indiana","coordinates":[-86.28804,41.61772]},
+{"dem":60340,"rep":40599,"total":109673,"name":"Whatcom, Washington","coordinates":[-121.83643,48.84265]},
+{"dem":38829,"rep":62538,"total":109450,"name":"Cleveland, Oklahoma","coordinates":[-97.32308,35.20637]},
+{"dem":44447,"rep":53870,"total":109327,"name":"Jackson, Oregon","coordinates":[-122.67561,42.41162]},
+{"dem":36706,"rep":64515,"total":107436,"name":"Rutherford, Tennessee","coordinates":[-86.41721,35.84336]},
+{"dem":27822,"rep":74963,"total":106483,"name":"Clay, Florida","coordinates":[-81.86503,29.98658]},
+{"dem":31013,"rep":68212,"total":106271,"name":"Williamson, Tennessee","coordinates":[-86.89806,35.8948]},
+{"dem":31568,"rep":69036,"total":106238,"name":"Jefferson, Missouri","coordinates":[-90.54368,38.25762]},
+{"dem":39333,"rep":62611,"total":106008,"name":"Sussex, Delaware","coordinates":[-75.33702,38.67322]},
+{"dem":34384,"rep":65680,"total":105866,"name":"Livingston, Michigan","coordinates":[-83.91171,42.60253]},
+{"dem":53483,"rep":49006,"total":105804,"name":"Caddo, Louisiana","coordinates":[-93.88242,32.57719]},
+{"dem":34337,"rep":66707,"total":105710,"name":"Union, North Carolina","coordinates":[-80.53042,34.99182]},
+{"dem":32726,"rep":68195,"total":105603,"name":"Lafayette, Louisiana","coordinates":[-92.06416,30.2065]},
+{"dem":49198,"rep":50766,"total":104405,"name":"Nueces, Texas","coordinates":[-97.51621,27.74003]},
+{"dem":40872,"rep":57568,"total":103860,"name":"Delaware, Ohio","coordinates":[-83.00746,40.27894]},
+{"dem":81259,"rep":15581,"total":103484,"name":"Richmond, Virginia","coordinates":[-77.476,37.53139]},
+{"dem":51983,"rep":48384,"total":103456,"name":"Lackawanna, Pennsylvania","coordinates":[-75.60966,41.44028]},
+{"dem":36322,"rep":61386,"total":101450,"name":"Washington, Pennsylvania","coordinates":[-80.25213,40.2]},
+{"dem":22977,"rep":73020,"total":101254,"name":"Shelby, Alabama","coordinates":[-86.67808,33.26304]},
+{"dem":23780,"rep":71893,"total":100855,"name":"Okaloosa, Florida","coordinates":[-86.59418,30.66585]},
+{"dem":26715,"rep":67518,"total":99121,"name":"Clermont, Ohio","coordinates":[-84.14948,39.05205]},
+{"dem":28023,"rep":65651,"total":99013,"name":"Lubbock, Texas","coordinates":[-101.81994,33.61146]},
+{"dem":50057,"rep":45724,"total":98766,"name":"Henry, Georgia","coordinates":[-84.15402,33.45294]},
+{"dem":42444,"rep":45692,"total":98557,"name":"Deschutes, Oregon","coordinates":[-121.22557,43.91511]},
+{"dem":40907,"rep":49944,"total":98373,"name":"Sangamon, Illinois","coordinates":[-89.66242,39.75686]},
+{"dem":23462,"rep":69851,"total":98221,"name":"Forsyth, Georgia","coordinates":[-84.1274,34.22514]},
+{"dem":39775,"rep":53051,"total":97442,"name":"Litchfield, Connecticut","coordinates":[-73.2354,41.79188]},
+{"dem":28584,"rep":64428,"total":97071,"name":"Butler, Pennsylvania","coordinates":[-79.91897,40.91384]},
+{"dem":28005,"rep":60871,"total":96824,"name":"Benton, Arkansas","coordinates":[-94.25629,36.33781]},
+{"dem":31177,"rep":61798,"total":96431,"name":"Gaston, North Carolina","coordinates":[-81.17725,35.29334]},
+{"dem":33445,"rep":60218,"total":96374,"name":"Charlotte, Florida","coordinates":[-81.94127,26.86897]},
+{"dem":43014,"rep":49024,"total":96029,"name":"Trumbull, Ohio","coordinates":[-80.77039,41.30637]},
+{"dem":58916,"rep":34003,"total":95878,"name":"Montgomery, Alabama","coordinates":[-86.20446,32.20288]},
+{"dem":41567,"rep":45144,"total":95564,"name":"Butte, California","coordinates":[-121.60191,39.66595]},
+{"dem":18458,"rep":72883,"total":95215,"name":"Baldwin, Alabama","coordinates":[-87.74606,30.65921]},
+{"dem":37801,"rep":51998,"total":94994,"name":"Bell, Texas","coordinates":[-97.48126,31.04274]},
+{"dem":67594,"rep":25275,"total":94681,"name":"Hinds, Mississippi","coordinates":[-90.46601,32.26778]},
+{"dem":44396,"rep":45469,"total":94320,"name":"Saginaw, Michigan","coordinates":[-84.05541,43.32826]},
+{"dem":42512,"rep":46611,"total":94133,"name":"Racine, Wisconsin","coordinates":[-87.42087,42.75412]},
+{"dem":38087,"rep":49884,"total":93868,"name":"Outagamie, Wisconsin","coordinates":[-88.46498,44.41822]},
+{"dem":31795,"rep":58970,"total":93796,"name":"Hernando, Florida","coordinates":[-82.46622,28.57304]},
+{"dem":36404,"rep":49247,"total":93591,"name":"El Dorado, California","coordinates":[-120.53422,38.78561]},
+{"dem":35521,"rep":53819,"total":93289,"name":"Cabarrus, North Carolina","coordinates":[-80.55272,35.38834]},
+{"dem":78220,"rep":12645,"total":92859,"name":"Clayton, Georgia","coordinates":[-84.35557,33.54268]},
+{"dem":35559,"rep":51961,"total":92402,"name":"Niagara, New York","coordinates":[-78.79214,43.45673]},
+{"dem":59402,"rep":29472,"total":92079,"name":"Cameron, Texas","coordinates":[-97.47895,26.10292]},
+{"dem":26567,"rep":58215,"total":91848,"name":"Carroll, Maryland","coordinates":[-77.01532,39.56333]},
+{"dem":50137,"rep":33368,"total":91628,"name":"Champaign, Illinois","coordinates":[-88.19697,40.13898]},
+{"dem":32182,"rep":54810,"total":91373,"name":"Medina, Ohio","coordinates":[-81.89976,41.11617]},
+{"dem":33743,"rep":51437,"total":91009,"name":"Oneida, New York","coordinates":[-75.43428,43.24272]},
+{"dem":45357,"rep":38867,"total":88624,"name":"Middlesex, Connecticut","coordinates":[-72.52278,41.433]},
+{"dem":18464,"rep":65339,"total":87745,"name":"Santa Rosa, Florida","coordinates":[-87.01289,30.70126]},
+{"dem":42443,"rep":42862,"total":87618,"name":"Jefferson, Texas","coordinates":[-94.14933,29.85399]},
+{"dem":21797,"rep":62194,"total":87453,"name":"Bay, Florida","coordinates":[-85.63167,30.23821]},
+{"dem":37054,"rep":43448,"total":87144,"name":"Winnebago, Wisconsin","coordinates":[-88.66814,44.0857]},
+{"dem":40440,"rep":39149,"total":86220,"name":"Scott, Iowa","coordinates":[-90.62228,41.64207]},
+{"dem":39212,"rep":40943,"total":86072,"name":"Broome, New York","coordinates":[-75.83028,42.16197]},
+{"dem":28362,"rep":54372,"total":85909,"name":"Johnston, North Carolina","coordinates":[-78.36734,35.51341]},
+{"dem":30185,"rep":53204,"total":85792,"name":"Martin, Florida","coordinates":[-80.3982,27.0836]},
+{"dem":23131,"rep":40235,"total":85039,"name":"Weber, Utah","coordinates":[-111.87688,41.27032]},
+{"dem":22300,"rep":58930,"total":84768,"name":"Smith, Texas","coordinates":[-95.27004,32.37701]},
+{"dem":41125,"rep":36200,"total":83868,"name":"Boone, Missouri","coordinates":[-92.3102,38.98986]},
+{"dem":26296,"rep":54191,"total":83785,"name":"Calcasieu, Louisiana","coordinates":[-93.35801,30.22955]},
+{"dem":40198,"rep":37674,"total":83648,"name":"Merrimack, New Hampshire","coordinates":[-71.68004,43.29957]},
+{"dem":32531,"rep":48167,"total":83571,"name":"Beaver, Pennsylvania","coordinates":[-80.35072,40.68414]},
+{"dem":54814,"rep":18601,"total":83418,"name":"Chittenden, Vermont","coordinates":[-73.0694,44.46332]},
+{"dem":57023,"rep":21552,"total":83388,"name":"Norfolk, Virginia","coordinates":[-76.24464,36.92301]},
+{"dem":55367,"rep":21790,"total":82956,"name":"Hampshire, Massachusetts","coordinates":[-72.66369,42.33945]},
+{"dem":27376,"rep":51241,"total":82761,"name":"Licking, Ohio","coordinates":[-82.48343,40.0915]},
+{"dem":31762,"rep":47723,"total":82700,"name":"Tuscaloosa, Alabama","coordinates":[-87.52278,33.29021]},
+{"dem":24734,"rep":54754,"total":82567,"name":"Iredell, North Carolina","coordinates":[-80.87452,35.80624]},
+{"dem":59923,"rep":18557,"total":82340,"name":"Orange, North Carolina","coordinates":[-79.12003,36.06252]},
+{"dem":54752,"rep":20739,"total":82090,"name":"Yolo, California","coordinates":[-121.90244,38.67959]},
+{"dem":37788,"rep":38336,"total":82053,"name":"Kent, Rhode Island","coordinates":[-71.58092,41.67424]},
+{"dem":33366,"rep":41476,"total":81861,"name":"Washington, Arkansas","coordinates":[-94.21726,35.978]},
+{"dem":28943,"rep":48540,"total":81858,"name":"Greene, Ohio","coordinates":[-83.89489,39.68747]},
+{"dem":42101,"rep":34006,"total":81355,"name":"Ulster, New York","coordinates":[-74.26545,41.94721]},
+{"dem":31361,"rep":39816,"total":80821,"name":"Cass, North Dakota","coordinates":[-97.25237,46.927]},
+{"dem":28033,"rep":45143,"total":80580,"name":"Sarpy, Nebraska","coordinates":[-96.10912,41.11506]},
+{"dem":32838,"rep":41622,"total":80540,"name":"Penobscot, Maine","coordinates":[-68.66661,45.40928]},
+{"dem":41824,"rep":35691,"total":80527,"name":"Pitt, North Carolina","coordinates":[-77.37273,35.59248]},
+{"dem":21097,"rep":56232,"total":80483,"name":"Anderson, South Carolina","coordinates":[-82.6386,34.52123]},
+{"dem":36268,"rep":35668,"total":80129,"name":"Olmsted, Minnesota","coordinates":[-92.41009,43.99949]},
+{"dem":22301,"rep":51778,"total":80053,"name":"Shasta, California","coordinates":[-122.04355,40.76051]},
+{"dem":26360,"rep":47194,"total":80027,"name":"Benton, Washington","coordinates":[-119.51665,46.22812]},
+{"dem":29043,"rep":48620,"total":80009,"name":"Indian River, Florida","coordinates":[-80.57478,27.70052]},
+{"dem":17455,"rep":58282,"total":79943,"name":"Mohave, Arizona","coordinates":[-113.74968,35.7177]},
+{"dem":36196,"rep":37237,"total":79835,"name":"McLean, Illinois","coordinates":[-88.84453,40.49455]},
+{"dem":22789,"rep":54456,"total":79700,"name":"Citrus, Florida","coordinates":[-82.5248,28.84364]},
+{"dem":25576,"rep":47617,"total":79592,"name":"Stearns, Minnesota","coordinates":[-94.61048,45.55523]},
+{"dem":30705,"rep":44587,"total":79517,"name":"Berkeley, South Carolina","coordinates":[-79.95365,33.2077]},
+{"dem":27063,"rep":48260,"total":79075,"name":"McLennan, Texas","coordinates":[-97.20151,31.54959]},
+{"dem":35875,"rep":36265,"total":78646,"name":"Pueblo, Colorado","coordinates":[-104.48989,38.17065]},
+{"dem":32138,"rep":42922,"total":78524,"name":"Beaufort, South Carolina","coordinates":[-80.68942,32.35811]},
+{"dem":38060,"rep":35633,"total":78503,"name":"Peoria, Illinois","coordinates":[-89.76699,40.78597]},
+{"dem":49341,"rep":25614,"total":78303,"name":"Charles, Maryland","coordinates":[-77.01542,38.47285]},
+{"dem":30610,"rep":42043,"total":78263,"name":"Minnehaha, South Dakota","coordinates":[-96.79572,43.66747]},
+{"dem":37304,"rep":36127,"total":78088,"name":"Muskegon, Michigan","coordinates":[-86.75189,43.28925]},
+{"dem":24553,"rep":49051,"total":78003,"name":"St. Clair, Michigan","coordinates":[-82.66891,42.9288]},
+{"dem":20855,"rep":51729,"total":78003,"name":"Washington, Wisconsin","coordinates":[-88.23291,43.39115]},
+{"dem":31291,"rep":41735,"total":77750,"name":"Yakima, Washington","coordinates":[-120.74014,46.45655]},
+{"dem":21729,"rep":49779,"total":77653,"name":"Mesa, Colorado","coordinates":[-108.46057,39.01952]},
+{"dem":38506,"rep":34194,"total":77424,"name":"Tolland, Connecticut","coordinates":[-72.34097,41.85808]},
+{"dem":33676,"rep":38832,"total":77190,"name":"Porter, Indiana","coordinates":[-87.07131,41.50991]},
+{"dem":35771,"rep":36025,"total":77076,"name":"Kenosha, Wisconsin","coordinates":[-87.425,42.5797]},
+{"dem":50200,"rep":21044,"total":76940,"name":"Johnson, Iowa","coordinates":[-91.59052,41.67066]},
+{"dem":22638,"rep":52730,"total":76665,"name":"Sumter, Florida","coordinates":[-82.07434,28.7141]},
+{"dem":37088,"rep":35274,"total":76148,"name":"Centre, Pennsylvania","coordinates":[-77.84787,40.90912]},
+{"dem":32397,"rep":39971,"total":76139,"name":"Portage, Ohio","coordinates":[-81.19696,41.16897]},
+{"dem":39343,"rep":31488,"total":76068,"name":"Rock, Wisconsin","coordinates":[-89.07528,42.66988]},
+{"dem":57242,"rep":13285,"total":75770,"name":"Alexandria, Virginia","coordinates":[-77.08366,38.81925]},
+{"dem":45618,"rep":25468,"total":75715,"name":"Newport News, Virginia","coordinates":[-76.52198,37.07613]},
+{"dem":28263,"rep":43850,"total":75690,"name":"Kanawha, West Virginia","coordinates":[-81.52351,38.32806]},
+{"dem":22600,"rep":48337,"total":75559,"name":"Hendricks, Indiana","coordinates":[-86.5099,39.76896]},
+{"dem":48814,"rep":24461,"total":75515,"name":"Richmond, Georgia","coordinates":[-82.07499,33.36148]},
+{"dem":33926,"rep":35934,"total":75406,"name":"Shawnee, Kansas","coordinates":[-95.75566,39.0418]},
+{"dem":28502,"rep":39948,"total":75029,"name":"Scott, Minnesota","coordinates":[-93.53373,44.6518]},
+{"dem":18109,"rep":54317,"total":74856,"name":"Davidson, North Carolina","coordinates":[-80.2071,35.79513]},
+{"dem":25455,"rep":46025,"total":74851,"name":"Aiken, South Carolina","coordinates":[-81.63298,33.55001]},
+{"dem":33351,"rep":36991,"total":74598,"name":"Kent, Delaware","coordinates":[-75.50298,39.09708]},
+{"dem":26863,"rep":43261,"total":74218,"name":"Monroe, Michigan","coordinates":[-83.4871,41.91609]},
+{"dem":24212,"rep":46658,"total":74126,"name":"Sussex, New Jersey","coordinates":[-74.69191,41.13746]},
+{"dem":24881,"rep":44314,"total":72913,"name":"Fairfield, Ohio","coordinates":[-82.62668,39.74769]},
+{"dem":16883,"rep":47222,"total":72785,"name":"Canyon, Idaho","coordinates":[-116.70905,43.62579]},
+{"dem":28530,"rep":40496,"total":72507,"name":"Vanderburgh, Indiana","coordinates":[-87.58616,38.02007]},
+{"dem":21216,"rep":48324,"total":72351,"name":"Catawba, North Carolina","coordinates":[-81.2149,35.66188]},
+{"dem":33224,"rep":33826,"total":72164,"name":"Hays, Texas","coordinates":[-98.02926,30.06122]},
+{"dem":29495,"rep":38647,"total":72031,"name":"Berrien, Michigan","coordinates":[-86.74254,41.79138]},
+{"dem":24214,"rep":42958,"total":71998,"name":"Kenton, Kentucky","coordinates":[-84.53343,38.9305]},
+{"dem":32717,"rep":33726,"total":71562,"name":"Rensselaer, New York","coordinates":[-73.51384,42.71042]},
+{"dem":18161,"rep":50129,"total":71505,"name":"Sumner, Tennessee","coordinates":[-86.45979,36.47344]},
+{"dem":50793,"rep":14332,"total":71434,"name":"Santa Fe, New Mexico","coordinates":[-105.96397,35.51453]},
+{"dem":29833,"rep":38815,"total":71157,"name":"Alamance, North Carolina","coordinates":[-79.40057,36.04395]},
+{"dem":28898,"rep":38712,"total":70836,"name":"Hunterdon, New Jersey","coordinates":[-74.91196,40.56528]},
+{"dem":37317,"rep":28725,"total":70789,"name":"Merced, California","coordinates":[-120.7228,37.1948]},
+{"dem":16180,"rep":51733,"total":70694,"name":"Hall, Georgia","coordinates":[-83.81849,34.31756]},
+{"dem":37947,"rep":25374,"total":70648,"name":"Dona Ana, New Mexico","coordinates":[-106.83496,32.34991]},
+{"dem":33918,"rep":33386,"total":69752,"name":"Monroe, Pennsylvania","coordinates":[-75.32906,41.05624]},
+{"dem":17465,"rep":49768,"total":69731,"name":"Franklin, Pennsylvania","coordinates":[-77.72452,39.92677]},
+{"dem":25795,"rep":39793,"total":69677,"name":"Jackson, Michigan","coordinates":[-84.42086,42.24847]},
+{"dem":20334,"rep":43274,"total":69618,"name":"Wright, Minnesota","coordinates":[-93.96639,45.17509]},
+{"dem":26477,"rep":39013,"total":69515,"name":"Marathon, Wisconsin","coordinates":[-89.75782,44.89803]},
+{"dem":22171,"rep":40920,"total":69108,"name":"Yellowstone, Montana","coordinates":[-108.27665,45.93698]},
+{"dem":39851,"rep":26976,"total":69032,"name":"Muscogee, Georgia","coordinates":[-84.87494,32.51019]},
+{"dem":34894,"rep":29072,"total":69000,"name":"Strafford, New Hampshire","coordinates":[-71.03558,43.29327]},
+{"dem":23282,"rep":42720,"total":68351,"name":"Brunswick, North Carolina","coordinates":[-78.22776,34.03875]},
+{"dem":24428,"rep":41734,"total":68017,"name":"Ouachita, Louisiana","coordinates":[-92.15158,32.48093]},
+{"dem":33747,"rep":28953,"total":67280,"name":"Schenectady, New York","coordinates":[-74.04355,42.81755]},
+{"dem":23121,"rep":38738,"total":67211,"name":"Brazos, Texas","coordinates":[-96.30239,30.65671]},
+{"dem":17318,"rep":45456,"total":66500,"name":"Johnson, Indiana","coordinates":[-86.09426,39.49609]},
+{"dem":33741,"rep":27230,"total":66369,"name":"Washington, Rhode Island","coordinates":[-71.62028,41.39679]},
+{"dem":16264,"rep":44449,"total":66310,"name":"Kootenai, Idaho","coordinates":[-116.69592,47.67596]},
+{"dem":29302,"rep":31675,"total":66208,"name":"Kennebec, Maine","coordinates":[-69.76576,44.41701]},
+{"dem":21129,"rep":40998,"total":65991,"name":"Washington, Maryland","coordinates":[-77.81467,39.60362]},
+{"dem":27908,"rep":33868,"total":65934,"name":"Stafford, Virginia","coordinates":[-77.45133,38.41326]},
+{"dem":20591,"rep":43089,"total":65695,"name":"DeSoto, Mississippi","coordinates":[-89.99324,34.87426]},
+{"dem":20740,"rep":41867,"total":65630,"name":"Elkhart, Indiana","coordinates":[-85.86398,41.60069]},
+{"dem":18025,"rep":44662,"total":64890,"name":"Paulding, Georgia","coordinates":[-84.86716,33.92102]},
+{"dem":41259,"rep":17501,"total":64867,"name":"Hawaii, Hawaii","coordinates":[-155.50244,19.59776]},
+{"dem":43714,"rep":16839,"total":64803,"name":"Berkshire, Massachusetts","coordinates":[-73.21792,42.37149]},
+{"dem":18887,"rep":43085,"total":64743,"name":"Columbia, Georgia","coordinates":[-82.25229,33.54763]},
+{"dem":13194,"rep":49430,"total":64575,"name":"Randolph, North Carolina","coordinates":[-79.80621,35.70991]},
+{"dem":32233,"rep":27476,"total":64405,"name":"Black Hawk, Iowa","coordinates":[-92.3076,42.47113]},
+{"dem":20685,"rep":38707,"total":64400,"name":"Tazewell, Illinois","coordinates":[-89.51625,40.50807]},
+{"dem":19400,"rep":42810,"total":64369,"name":"Rowan, North Carolina","coordinates":[-80.52172,35.64135]},
+{"dem":27318,"rep":32498,"total":64341,"name":"Wood, Ohio","coordinates":[-83.62268,41.36018]},
+{"dem":32298,"rep":26998,"total":63994,"name":"Rock Island, Illinois","coordinates":[-90.57212,41.46842]},
+{"dem":16253,"rep":44941,"total":63673,"name":"Ellis, Texas","coordinates":[-96.79694,32.34687]},
+{"dem":21169,"rep":40354,"total":63313,"name":"Harrison, Mississippi","coordinates":[-89.08337,30.41653]},
+{"dem":18867,"rep":42258,"total":63072,"name":"Cambria, Pennsylvania","coordinates":[-78.71047,40.51022]},
+{"dem":32406,"rep":26389,"total":62968,"name":"La Crosse, Wisconsin","coordinates":[-91.11175,43.90822]},
+{"dem":16770,"rep":44001,"total":62869,"name":"Schuylkill, Pennsylvania","coordinates":[-76.21778,40.70368]},
+{"dem":14110,"rep":47178,"total":62768,"name":"Rankin, Mississippi","coordinates":[-89.94606,32.26712]},
+{"dem":19382,"rep":39630,"total":62753,"name":"Hanover, Virginia","coordinates":[-77.49131,37.76021]},
+{"dem":36787,"rep":24043,"total":62596,"name":"Bibb, Georgia","coordinates":[-83.69419,32.80884]},
+{"dem":24055,"rep":34987,"total":62567,"name":"Dorchester, South Carolina","coordinates":[-80.40469,33.08218]},
+{"dem":24207,"rep":34623,"total":62562,"name":"Spotsylvania, Virginia","coordinates":[-77.65722,38.18243]},
+{"dem":27282,"rep":30768,"total":62515,"name":"Tippecanoe, Indiana","coordinates":[-86.89355,40.38913]},
+{"dem":41312,"rep":17902,"total":62356,"name":"Hampton, Virginia","coordinates":[-76.29729,37.04796]},
+{"dem":12578,"rep":46979,"total":62278,"name":"Sullivan, Tennessee","coordinates":[-82.30133,36.50968]},
+{"dem":14238,"rep":45136,"total":62178,"name":"Comal, Texas","coordinates":[-98.26054,29.80549]},
+{"dem":10288,"rep":42650,"total":61963,"name":"Washington, Utah","coordinates":[-113.4878,37.26253]},
+{"dem":18953,"rep":40525,"total":61845,"name":"Lebanon, Pennsylvania","coordinates":[-76.46481,40.37144]},
+{"dem":16583,"rep":42533,"total":61745,"name":"Coweta, Georgia","coordinates":[-84.76213,33.35289]},
+{"dem":27707,"rep":25905,"total":61690,"name":"Sandoval, New Mexico","coordinates":[-106.88311,35.68509]},
+{"dem":23328,"rep":35205,"total":61429,"name":"Clark, Ohio","coordinates":[-83.78367,39.91703]},
+{"dem":39199,"rep":17411,"total":61372,"name":"Napa, California","coordinates":[-122.3259,38.50709]},
+{"dem":23284,"rep":35048,"total":60913,"name":"Fayette, Georgia","coordinates":[-84.49394,33.41271]},
+{"dem":22553,"rep":35430,"total":60079,"name":"Houston, Georgia","coordinates":[-83.66252,32.45828]},
+{"dem":32404,"rep":21108,"total":59784,"name":"Coconino, Arizona","coordinates":[-111.77372,35.82969]},
+{"dem":22956,"rep":32458,"total":59655,"name":"Sheboygan, Wisconsin","coordinates":[-87.73151,43.74123]},
+{"dem":33200,"rep":18373,"total":59246,"name":"Humboldt, California","coordinates":[-123.92617,40.70665]},
+{"dem":31543,"rep":22250,"total":59203,"name":"Missoula, Montana","coordinates":[-113.89269,47.02726]},
+{"dem":21230,"rep":34617,"total":59191,"name":"Lee, Alabama","coordinates":[-85.35304,32.60406]},
+{"dem":24157,"rep":31494,"total":58902,"name":"Calhoun, Michigan","coordinates":[-85.01238,42.24298]},
+{"dem":17995,"rep":33488,"total":58719,"name":"Linn, Oregon","coordinates":[-122.5372,44.48889]},
+{"dem":34216,"rep":20592,"total":58454,"name":"Monroe, Indiana","coordinates":[-86.52331,39.16072]},
+{"dem":19827,"rep":35809,"total":58176,"name":"Henderson, North Carolina","coordinates":[-82.47974,35.33641]},
+{"dem":26710,"rep":29573,"total":57931,"name":"Florence, South Carolina","coordinates":[-79.71023,34.02853]},
+{"dem":18391,"rep":36632,"total":57822,"name":"Guadalupe, Texas","coordinates":[-97.94677,29.58353]},
+{"dem":31005,"rep":24817,"total":57738,"name":"Douglas, Georgia","coordinates":[-84.76731,33.70124]},
+{"dem":6950,"rep":48824,"total":57730,"name":"Livingston, Louisiana","coordinates":[-90.72747,30.44041]},
+{"dem":21699,"rep":32341,"total":57620,"name":"Montgomery, Tennessee","coordinates":[-87.38088,36.50035]},
+{"dem":15026,"rep":39082,"total":57618,"name":"Boone, Kentucky","coordinates":[-84.73637,38.9589]},
+{"dem":10988,"rep":44382,"total":57606,"name":"Johnson, Texas","coordinates":[-97.36495,32.37982]},
+{"dem":22026,"rep":33850,"total":57503,"name":"Flagler, Florida","coordinates":[-81.28625,29.47489]},
+{"dem":17514,"rep":37122,"total":57135,"name":"Onslow, North Carolina","coordinates":[-77.49946,34.7631]},
+{"dem":42307,"rep":12947,"total":56905,"name":"Webb, Texas","coordinates":[-99.34075,27.76079]},
+{"dem":18322,"rep":36816,"total":56844,"name":"Rapides, Louisiana","coordinates":[-92.53595,31.1932]},
+{"dem":8344,"rep":46473,"total":56817,"name":"Parker, Texas","coordinates":[-97.8059,32.77709]},
+{"dem":14385,"rep":39406,"total":56734,"name":"Wilson, Tennessee","coordinates":[-86.29124,36.14952]},
+{"dem":33345,"rep":19259,"total":56726,"name":"Albemarle, Virginia","coordinates":[-78.5535,38.02418]},
+{"dem":24938,"rep":27609,"total":56221,"name":"Eaton, Michigan","coordinates":[-84.84644,42.58953]},
+{"dem":26690,"rep":24736,"total":55968,"name":"Skagit, Washington","coordinates":[-121.81577,48.49329]},
+{"dem":18050,"rep":34183,"total":55786,"name":"Allegan, Michigan","coordinates":[-86.63474,42.59578]},
+{"dem":21508,"rep":29056,"total":55696,"name":"Carver, Minnesota","coordinates":[-93.80009,44.82131]},
+{"dem":23009,"rep":28227,"total":55601,"name":"Androscoggin, Maine","coordinates":[-70.20743,44.16768]},
+{"dem":11674,"rep":39986,"total":55278,"name":"Canadian, Oklahoma","coordinates":[-97.97988,35.54335]},
+{"dem":16085,"rep":36590,"total":55214,"name":"Richland, Ohio","coordinates":[-82.54278,40.77415]},
+{"dem":26053,"rep":23365,"total":54935,"name":"Nevada, California","coordinates":[-120.77134,39.2975]},
+{"dem":13958,"rep":39135,"total":54909,"name":"Blair, Pennsylvania","coordinates":[-78.30959,40.49865]},
+{"dem":27294,"rep":23311,"total":54885,"name":"Eau Claire, Wisconsin","coordinates":[-91.28641,44.72635]},
+{"dem":16476,"rep":36143,"total":54678,"name":"Ascension, Louisiana","coordinates":[-90.9125,30.20644]},
+{"dem":20168,"rep":30430,"total":54523,"name":"Ozaukee, Wisconsin","coordinates":[-87.4993,43.36075]},
+{"dem":8367,"rep":43462,"total":54305,"name":"Randall, Texas","coordinates":[-101.89554,34.96252]},
+{"dem":19091,"rep":31594,"total":54234,"name":"Chautauqua, New York","coordinates":[-79.40759,42.30421]},
+{"dem":27771,"rep":24453,"total":54004,"name":"Cumberland, New Jersey","coordinates":[-75.12162,39.32843]},
+{"dem":18595,"rep":32376,"total":53909,"name":"Madison, Indiana","coordinates":[-85.72245,40.1662]},
+{"dem":24246,"rep":23802,"total":53819,"name":"Gallatin, Montana","coordinates":[-111.16392,45.51805]},
+{"dem":17946,"rep":34590,"total":53767,"name":"Fayette, Pennsylvania","coordinates":[-79.64011,39.9189]},
+{"dem":14096,"rep":34582,"total":53521,"name":"Douglas, Oregon","coordinates":[-123.15447,43.28632]},
+{"dem":24884,"rep":24961,"total":53447,"name":"Kendall, Illinois","coordinates":[-88.43062,41.58814]},
+{"dem":24605,"rep":25165,"total":53010,"name":"Yuma, Arizona","coordinates":[-113.9109,32.77394]},
+{"dem":21642,"rep":28328,"total":52977,"name":"Bay, Michigan","coordinates":[-83.9787,43.69971]},
+{"dem":13120,"rep":37079,"total":52734,"name":"Miami, Ohio","coordinates":[-84.22841,40.05332]},
+{"dem":16878,"rep":33959,"total":52416,"name":"Tangipahoa, Louisiana","coordinates":[-90.40663,30.62153]},
+{"dem":18733,"rep":31544,"total":52309,"name":"Mercer, Pennsylvania","coordinates":[-80.25278,41.30001]},
+{"dem":22233,"rep":26029,"total":52258,"name":"Ontario, New York","coordinates":[-77.30349,42.85635]},
+{"dem":12100,"rep":37443,"total":52208,"name":"Blount, Tennessee","coordinates":[-83.92297,35.68818]},
+{"dem":13256,"rep":35863,"total":52100,"name":"Saline, Arkansas","coordinates":[-92.67446,34.64852]},
+{"dem":33480,"rep":13446,"total":51945,"name":"Maui, Hawaii","coordinates":[-156.60155,20.85593]},
+{"dem":20965,"rep":27413,"total":51589,"name":"Grand Traverse, Michigan","coordinates":[-85.55384,44.71868]},
+{"dem":17200,"rep":31408,"total":51489,"name":"Roanoke, Virginia","coordinates":[-79.94399,37.34358]},
+{"dem":17391,"rep":31044,"total":51327,"name":"Fond du Lac, Wisconsin","coordinates":[-88.49328,43.75472]},
+{"dem":18706,"rep":28851,"total":51324,"name":"Walworth, Wisconsin","coordinates":[-88.54173,42.6681]},
+{"dem":28510,"rep":19010,"total":51191,"name":"Grafton, New Hampshire","coordinates":[-71.84242,43.92643]},
+{"dem":18808,"rep":30035,"total":51147,"name":"Clark, Indiana","coordinates":[-85.71112,38.47621]},
+{"dem":14846,"rep":33098,"total":50990,"name":"Cass, Missouri","coordinates":[-94.35454,38.64647]},
+{"dem":21792,"rep":25747,"total":50823,"name":"Windham, Connecticut","coordinates":[-71.9907,41.82499]},
+{"dem":21770,"rep":27540,"total":50689,"name":"Wayne, North Carolina","coordinates":[-78.00866,35.35418]},
+{"dem":25709,"rep":19458,"total":50667,"name":"Story, Iowa","coordinates":[-93.46609,42.03753]},
+{"dem":11254,"rep":37486,"total":50644,"name":"Morgan, Alabama","coordinates":[-86.8464,34.45448]},
+{"dem":13020,"rep":35627,"total":50565,"name":"Lycoming, Pennsylvania","coordinates":[-77.05526,41.34388]},
+{"dem":12341,"rep":35430,"total":50113,"name":"Franklin, Missouri","coordinates":[-91.07283,38.413]},
+{"dem":31195,"rep":14688,"total":50087,"name":"Douglas, Kansas","coordinates":[-95.29094,38.89641]},
+{"dem":17450,"rep":28092,"total":50015,"name":"Cochise, Arizona","coordinates":[-109.77516,31.84012]},
+{"dem":17569,"rep":30227,"total":49941,"name":"Geauga, Ohio","coordinates":[-81.1735,41.49932]},
+{"dem":15031,"rep":32270,"total":49853,"name":"Wayne, Ohio","coordinates":[-81.88719,40.82966]},
+{"dem":12641,"rep":35474,"total":49848,"name":"Bossier, Louisiana","coordinates":[-93.62656,32.69848]},
+{"dem":17534,"rep":28663,"total":49842,"name":"St. Mary's, Maryland","coordinates":[-76.53038,38.22028]},
+{"dem":20343,"rep":28265,"total":49802,"name":"Madison, Mississippi","coordinates":[-90.03416,32.63437]},
+{"dem":13024,"rep":34252,"total":49750,"name":"Washington, Tennessee","coordinates":[-82.49503,36.29566]},
+{"dem":19543,"rep":26689,"total":49743,"name":"LaSalle, Illinois","coordinates":[-88.88593,41.34334]},
+{"dem":22850,"rep":23460,"total":49721,"name":"Dubuque, Iowa","coordinates":[-90.87877,42.46348]},
+{"dem":14657,"rep":33629,"total":49567,"name":"Jackson, Mississippi","coordinates":[-88.6251,30.456]},
+{"dem":17281,"rep":29858,"total":49236,"name":"Warren, New Jersey","coordinates":[-75.00949,40.85349]},
+{"dem":10025,"rep":36973,"total":49212,"name":"Midland, Texas","coordinates":[-102.00245,31.81426]},
+{"dem":10354,"rep":36236,"total":49049,"name":"Pickens, South Carolina","coordinates":[-82.72337,34.88536]},
+{"dem":20057,"rep":25933,"total":48885,"name":"Platte, Missouri","coordinates":[-94.76147,39.37869]},
+{"dem":30146,"rep":15806,"total":48781,"name":"Wyandotte, Kansas","coordinates":[-94.76308,39.11538]},
+{"dem":29193,"rep":13445,"total":48753,"name":"Benton, Oregon","coordinates":[-123.42466,44.49388]},
+{"dem":19301,"rep":23250,"total":48753,"name":"Yamhill, Oregon","coordinates":[-123.31639,45.24782]},
+{"dem":18750,"rep":28446,"total":48722,"name":"Cape May, New Jersey","coordinates":[-74.84635,39.08584]},
+{"dem":16329,"rep":30490,"total":48692,"name":"Moore, North Carolina","coordinates":[-79.49272,35.30827]},
+{"dem":19366,"rep":27024,"total":48563,"name":"Putnam, New York","coordinates":[-73.74386,41.4279]},
+{"dem":16966,"rep":28673,"total":48454,"name":"Warren, Kentucky","coordinates":[-86.42357,36.99563]},
+{"dem":10572,"rep":35070,"total":48326,"name":"Jasper, Missouri","coordinates":[-94.33725,37.20519]},
+{"dem":13293,"rep":31053,"total":48283,"name":"Sherburne, Minnesota","coordinates":[-93.76913,45.45317]},
+{"dem":17095,"rep":27688,"total":48180,"name":"Oswego, New York","coordinates":[-76.20926,43.46144]},
+{"dem":32667,"rep":12704,"total":48091,"name":"Imperial, California","coordinates":[-115.3554,33.04081]},
+{"dem":18343,"rep":26866,"total":48060,"name":"Macon, Illinois","coordinates":[-88.96152,39.86023]},
+{"dem":10881,"rep":32532,"total":47979,"name":"Burleigh, North Dakota","coordinates":[-100.46953,46.97882]},
+{"dem":13242,"rep":32865,"total":47864,"name":"Calhoun, Alabama","coordinates":[-85.8279,33.77051]},
+{"dem":14074,"rep":29804,"total":47743,"name":"Pennington, South Dakota","coordinates":[-102.8238,44.00234]},
+{"dem":23235,"rep":23319,"total":47665,"name":"Nash, North Carolina","coordinates":[-77.98755,35.96594]},
+{"dem":14629,"rep":29346,"total":47527,"name":"Faulkner, Arkansas","coordinates":[-92.33692,35.14654]},
+{"dem":17486,"rep":26220,"total":47508,"name":"St. Croix, Wisconsin","coordinates":[-92.44728,45.02895]},
+{"dem":14219,"rep":31423,"total":47489,"name":"Adams, Pennsylvania","coordinates":[-77.21772,39.86947]},
+{"dem":10301,"rep":35325,"total":47416,"name":"Grayson, Texas","coordinates":[-96.67569,33.62452]},
+{"dem":18225,"rep":26176,"total":47408,"name":"Calvert, Maryland","coordinates":[-76.52976,38.52271]},
+{"dem":18971,"rep":25129,"total":47305,"name":"Kankakee, Illinois","coordinates":[-87.86111,41.13951]},
+{"dem":17630,"rep":27731,"total":47001,"name":"Craven, North Carolina","coordinates":[-77.08131,35.11682]},
+{"dem":10869,"rep":34266,"total":46607,"name":"Nassau, Florida","coordinates":[-81.76508,30.60596]},
+{"dem":13293,"rep":30240,"total":46571,"name":"Flathead, Montana","coordinates":[-114.05429,48.31467]},
+{"dem":12432,"rep":31676,"total":46201,"name":"Columbiana, Ohio","coordinates":[-80.77845,40.77007]},
+{"dem":8563,"rep":21139,"total":46157,"name":"Cache, Utah","coordinates":[-111.74539,41.73411]},
+{"dem":12865,"rep":27946,"total":46110,"name":"San Juan, New Mexico","coordinates":[-108.32457,36.51162]},
+{"dem":16737,"rep":27614,"total":46065,"name":"Harnett, North Carolina","coordinates":[-78.87161,35.36863]},
+{"dem":16750,"rep":26430,"total":45939,"name":"Lenawee, Michigan","coordinates":[-84.07435,41.89602]},
+{"dem":13294,"rep":30487,"total":45894,"name":"Allen, Ohio","coordinates":[-84.1061,40.77162]},
+{"dem":14163,"rep":28907,"total":45807,"name":"Daviess, Kentucky","coordinates":[-87.08713,37.73167]},
+{"dem":10085,"rep":33250,"total":45759,"name":"Taylor, Texas","coordinates":[-99.89042,32.29712]},
+{"dem":17908,"rep":24185,"total":45692,"name":"Cowlitz, Washington","coordinates":[-122.67845,46.19678]},
+{"dem":14937,"rep":29565,"total":45686,"name":"Highlands, Florida","coordinates":[-81.34235,27.34107]},
+{"dem":13650,"rep":28868,"total":45269,"name":"Cecil, Maryland","coordinates":[-75.94158,39.56235]},
+{"dem":19798,"rep":22687,"total":45203,"name":"LaPorte, Indiana","coordinates":[-86.74473,41.54901]},
+{"dem":12734,"rep":30037,"total":45183,"name":"Lapeer, Michigan","coordinates":[-83.22432,43.08863]},
+{"dem":18153,"rep":24263,"total":45123,"name":"Delaware, Indiana","coordinates":[-85.39926,40.22754]},
+{"dem":29603,"rep":12717,"total":44976,"name":"Clarke, Georgia","coordinates":[-83.36715,33.95218]},
+{"dem":14964,"rep":28479,"total":44673,"name":"Cleveland, North Carolina","coordinates":[-81.55711,35.33463]},
+{"dem":12300,"rep":29127,"total":44637,"name":"Sebastian, Arkansas","coordinates":[-94.27498,35.19698]},
+{"dem":13453,"rep":26923,"total":44560,"name":"Josephine, Oregon","coordinates":[-123.57161,42.38698]},
+{"dem":8930,"rep":26699,"total":44221,"name":"Bonneville, Idaho","coordinates":[-111.62187,43.39517]},
+{"dem":10442,"rep":32353,"total":44164,"name":"Etowah, Alabama","coordinates":[-86.03426,34.04764]},
+{"dem":12464,"rep":30029,"total":44121,"name":"Carroll, Georgia","coordinates":[-85.08052,33.58223]},
+{"dem":24047,"rep":18745,"total":44086,"name":"Sumter, South Carolina","coordinates":[-80.38237,33.91613]},
+{"dem":21943,"rep":20913,"total":43987,"name":"Newton, Georgia","coordinates":[-83.85518,33.54404]},
+{"dem":10665,"rep":31902,"total":43896,"name":"Terrebonne, Louisiana","coordinates":[-90.84367,29.33412]},
+{"dem":16210,"rep":24727,"total":43718,"name":"Woodbury, Iowa","coordinates":[-96.05329,42.39321]},
+{"dem":20466,"rep":19091,"total":43600,"name":"DeKalb, Illinois","coordinates":[-88.76899,41.89461]},
+{"dem":28497,"rep":12795,"total":43265,"name":"Portsmouth, Virginia","coordinates":[-76.35697,36.85933]},
+{"dem":23280,"rep":18006,"total":43240,"name":"Suffolk, Virginia","coordinates":[-76.63478,36.69715]},
+{"dem":19105,"rep":21306,"total":43173,"name":"James City, Virginia","coordinates":[-76.77788,37.32483]},
+{"dem":13944,"rep":26971,"total":43156,"name":"Hardin, Kentucky","coordinates":[-85.96318,37.69583]},
+{"dem":16561,"rep":23410,"total":43146,"name":"Jefferson, Wisconsin","coordinates":[-88.77398,43.0138]},
+{"dem":17029,"rep":23357,"total":43112,"name":"Madera, California","coordinates":[-119.7498,37.20982]},
+{"dem":13968,"rep":26643,"total":43065,"name":"Dodge, Wisconsin","coordinates":[-88.70193,43.42962]},
+{"dem":20021,"rep":19459,"total":43031,"name":"Montgomery, Virginia","coordinates":[-80.38779,37.17553]},
+{"dem":20960,"rep":18465,"total":42876,"name":"Island, Washington","coordinates":[-122.67064,48.15855]},
+{"dem":12321,"rep":28244,"total":42850,"name":"Berkeley, West Virginia","coordinates":[-78.03775,39.44793]},
+{"dem":15355,"rep":24447,"total":42680,"name":"Pottawattamie, Iowa","coordinates":[-95.5449,41.34018]},
+{"dem":28890,"rep":10371,"total":42678,"name":"Tompkins, New York","coordinates":[-76.47348,42.453]},
+{"dem":10664,"rep":30728,"total":42639,"name":"Houston, Alabama","coordinates":[-85.29641,31.15818]},
+{"dem":18050,"rep":22198,"total":42547,"name":"Wicomico, Maryland","coordinates":[-75.63208,38.36736]},
+{"dem":9768,"rep":30659,"total":42525,"name":"Bedford, Virginia","coordinates":[-79.52722,37.31225]},
+{"dem":14658,"rep":25050,"total":42510,"name":"Campbell, Kentucky","coordinates":[-84.37958,38.94698]},
+{"dem":15635,"rep":23846,"total":42506,"name":"Midland, Michigan","coordinates":[-84.37941,43.6482]},
+{"dem":18971,"rep":21904,"total":42478,"name":"Monroe, Florida","coordinates":[-80.95327,24.76888]},
+{"dem":14228,"rep":26830,"total":42278,"name":"Rockingham, North Carolina","coordinates":[-79.78275,36.3818]},
+{"dem":12526,"rep":26831,"total":42002,"name":"Steuben, New York","coordinates":[-77.38552,42.26672]},
+{"dem":22064,"rep":16876,"total":41895,"name":"Cheshire, New Hampshire","coordinates":[-72.24818,42.92545]},
+{"dem":11677,"rep":28764,"total":41749,"name":"Gregg, Texas","coordinates":[-94.81627,32.48639]},
+{"dem":8423,"rep":31959,"total":41645,"name":"Lafourche, Louisiana","coordinates":[-90.39484,29.49199]},
+{"dem":8508,"rep":30946,"total":41531,"name":"Christian, Missouri","coordinates":[-93.18761,36.96973]},
+{"dem":12188,"rep":26918,"total":41289,"name":"Tuscarawas, Ohio","coordinates":[-81.4711,40.44749]},
+{"dem":10278,"rep":29587,"total":41265,"name":"Kaufman, Texas","coordinates":[-96.28837,32.59894]},
+{"dem":22851,"rep":15077,"total":41045,"name":"Newport, Rhode Island","coordinates":[-71.28368,41.5025]},
+{"dem":11573,"rep":24847,"total":40969,"name":"Laramie, Wyoming","coordinates":[-104.66039,41.29283]},
+{"dem":15577,"rep":23318,"total":40867,"name":"Ashtabula, Ohio","coordinates":[-80.74559,41.90663]},
+{"dem":7902,"rep":30913,"total":40862,"name":"Rogers, Oklahoma","coordinates":[-95.60138,36.37779]},
+{"dem":19016,"rep":20762,"total":40858,"name":"Robeson, North Carolina","coordinates":[-79.10088,34.6392]},
+{"dem":12311,"rep":26087,"total":40805,"name":"Garland, Arkansas","coordinates":[-93.14693,34.57885]},
+{"dem":14009,"rep":25428,"total":40753,"name":"Lawrence, Pennsylvania","coordinates":[-80.33444,40.99273]},
+{"dem":8292,"rep":31125,"total":40698,"name":"Walton, Georgia","coordinates":[-83.73182,33.78388]},
+{"dem":16492,"rep":21636,"total":40655,"name":"Clinton, Michigan","coordinates":[-84.59169,42.95045]},
+{"dem":11932,"rep":26083,"total":40440,"name":"Frederick, Virginia","coordinates":[-78.26382,39.20366]},
+{"dem":14506,"rep":23193,"total":40346,"name":"Manitowoc, Wisconsin","coordinates":[-87.57735,44.15613]},
+{"dem":16420,"rep":18940,"total":40295,"name":"Polk, Oregon","coordinates":[-123.39867,44.90037]},
+{"dem":9468,"rep":29067,"total":40294,"name":"Limestone, Alabama","coordinates":[-86.98139,34.81023]},
+{"dem":16459,"rep":20577,"total":40294,"name":"Navajo, Arizona","coordinates":[-110.32102,35.39078]},
+{"dem":9897,"rep":28806,"total":40023,"name":"Lincoln, North Carolina","coordinates":[-81.22689,35.48849]},
+{"dem":17209,"rep":21971,"total":39977,"name":"St. Landry, Louisiana","coordinates":[-91.98927,30.58344]},
+{"dem":9655,"rep":28451,"total":39948,"name":"Rockwall, Texas","coordinates":[-96.4044,32.89867]},
+{"dem":21065,"rep":17105,"total":39849,"name":"Chatham, North Carolina","coordinates":[-79.25145,35.70499]},
+{"dem":15931,"rep":21937,"total":39818,"name":"Vigo, Indiana","coordinates":[-87.39037,39.42914]},
+{"dem":13473,"rep":23380,"total":39687,"name":"Wayne, New York","coordinates":[-77.06316,43.45875]},
+{"dem":8212,"rep":29911,"total":39550,"name":"Bartow, Georgia","coordinates":[-84.83818,34.24091]},
+{"dem":9952,"rep":27899,"total":39525,"name":"Lauderdale, Alabama","coordinates":[-87.65099,34.90412]},
+{"dem":17677,"rep":18794,"total":39457,"name":"Clallam, Washington","coordinates":[-123.88985,48.1109]},
+{"dem":16488,"rep":19942,"total":39158,"name":"St. Lawrence, New York","coordinates":[-75.07431,44.48811]},
+{"dem":13812,"rep":23719,"total":38938,"name":"Lancaster, South Carolina","coordinates":[-80.70368,34.68681]},
+{"dem":11251,"rep":26238,"total":38920,"name":"Burke, North Carolina","coordinates":[-81.70617,35.74618]},
+{"dem":26318,"rep":11931,"total":38910,"name":"Orangeburg, South Carolina","coordinates":[-80.80291,33.43613]},
+{"dem":7070,"rep":29768,"total":38666,"name":"Bradley, Tennessee","coordinates":[-84.85941,35.15391]},
+{"dem":18521,"rep":17306,"total":38496,"name":"Portage, Wisconsin","coordinates":[-89.49806,44.47624]},
+{"dem":9173,"rep":27494,"total":38479,"name":"Tom Green, Texas","coordinates":[-100.46378,31.39882]},
+{"dem":5589,"rep":31651,"total":38400,"name":"St. Clair, Alabama","coordinates":[-86.31566,33.71296]},
+{"dem":15701,"rep":19339,"total":38252,"name":"Dallas, Iowa","coordinates":[-94.0407,41.68532]},
+{"dem":13809,"rep":21763,"total":38236,"name":"Jefferson, New York","coordinates":[-76.05296,43.99638]},
+{"dem":24478,"rep":10364,"total":38177,"name":"Franklin, Massachusetts","coordinates":[-72.59179,42.5845]},
+{"dem":19663,"rep":17531,"total":38135,"name":"Wilson, North Carolina","coordinates":[-77.92159,35.70035]},
+{"dem":15448,"rep":21335,"total":38120,"name":"Madison, Tennessee","coordinates":[-88.83342,35.60605]},
+{"dem":8770,"rep":27631,"total":38119,"name":"Wichita, Texas","coordinates":[-98.708,33.98821]},
+{"dem":3798,"rep":32989,"total":37873,"name":"Cullman, Alabama","coordinates":[-86.86926,34.13192]},
+{"dem":23255,"rep":13478,"total":37869,"name":"Rockdale, Georgia","coordinates":[-84.02636,33.65208]},
+{"dem":15064,"rep":21635,"total":37805,"name":"Lowndes, Georgia","coordinates":[-83.26899,30.83314]},
+{"dem":14232,"rep":21503,"total":37800,"name":"Wood, Wisconsin","coordinates":[-90.03882,44.46141]},
+{"dem":9939,"rep":26569,"total":37781,"name":"Carteret, North Carolina","coordinates":[-76.53586,34.85834]},
+{"dem":11528,"rep":24888,"total":37770,"name":"Indiana, Pennsylvania","coordinates":[-79.08754,40.65143]},
+{"dem":16057,"rep":19648,"total":37578,"name":"Erie, Ohio","coordinates":[-82.52589,41.554]},
+{"dem":10971,"rep":24987,"total":37492,"name":"Crawford, Pennsylvania","coordinates":[-80.10779,41.68787]},
+{"dem":9366,"rep":25990,"total":37487,"name":"Rockingham, Virginia","coordinates":[-78.88532,38.50758]},
+{"dem":22079,"rep":10888,"total":37477,"name":"Mendocino, California","coordinates":[-123.44288,39.43238]},
+{"dem":12971,"rep":22127,"total":37467,"name":"Fauquier, Virginia","coordinates":[-77.8215,38.74409]},
+{"dem":13945,"rep":21432,"total":37425,"name":"Floyd, Indiana","coordinates":[-85.91184,38.31808]},
+{"dem":10913,"rep":24616,"total":37374,"name":"Cole, Missouri","coordinates":[-92.28002,38.50323]},
+{"dem":11793,"rep":23431,"total":37371,"name":"Madison, Kentucky","coordinates":[-84.27836,37.72551]},
+{"dem":8443,"rep":27634,"total":37260,"name":"Elmore, Alabama","coordinates":[-86.14273,32.59722]},
+{"dem":8492,"rep":27017,"total":37038,"name":"Cape Girardeau, Missouri","coordinates":[-89.68565,37.38414]},
+{"dem":11123,"rep":24056,"total":36991,"name":"Muskingum, Ohio","coordinates":[-81.9435,39.96604]},
+{"dem":11215,"rep":23675,"total":36843,"name":"Howard, Indiana","coordinates":[-86.11411,40.48353]},
+{"dem":9788,"rep":25427,"total":36622,"name":"Northumberland, Pennsylvania","coordinates":[-76.70987,40.85152]},
+{"dem":10249,"rep":25020,"total":36530,"name":"Ector, Texas","coordinates":[-102.5425,31.8653]},
+{"dem":8177,"rep":26163,"total":36343,"name":"Augusta, Virginia","coordinates":[-79.14755,38.17191]},
+{"dem":8425,"rep":26621,"total":36320,"name":"Caldwell, North Carolina","coordinates":[-81.51254,35.96639]},
+{"dem":6297,"rep":28629,"total":36312,"name":"Sevier, Tennessee","coordinates":[-83.51849,35.79534]},
+{"dem":8904,"rep":25074,"total":36181,"name":"Hancock, Indiana","coordinates":[-85.77315,39.82252]},
+{"dem":13757,"rep":20097,"total":36119,"name":"Chemung, New York","coordinates":[-76.74717,42.15528]},
+{"dem":8255,"rep":26210,"total":36069,"name":"Bullitt, Kentucky","coordinates":[-85.70263,37.96994]},
+{"dem":14699,"rep":18432,"total":36048,"name":"Monongalia, West Virginia","coordinates":[-80.05907,39.63364]},
+{"dem":9609,"rep":24183,"total":36023,"name":"Hancock, Ohio","coordinates":[-83.66603,41.00047]},
+{"dem":10982,"rep":22287,"total":35842,"name":"Crow Wing, Minnesota","coordinates":[-94.07071,46.49165]},
+{"dem":7376,"rep":27379,"total":35773,"name":"Somerset, Pennsylvania","coordinates":[-79.02848,39.98129]},
+{"dem":14792,"rep":17982,"total":35671,"name":"Lynchburg, Virginia","coordinates":[-79.19545,37.39901]},
+{"dem":12013,"rep":21320,"total":35659,"name":"Buchanan, Missouri","coordinates":[-94.80817,39.66036]},
+{"dem":8400,"rep":25434,"total":35615,"name":"Wood, West Virginia","coordinates":[-81.51623,39.2116]},
+{"dem":10538,"rep":22892,"total":35573,"name":"Craighead, Arkansas","coordinates":[-90.63142,35.82772]},
+{"dem":10038,"rep":23799,"total":35369,"name":"Maury, Tennessee","coordinates":[-87.07776,35.61569]},
+{"dem":4917,"rep":29233,"total":35316,"name":"Marshall, Alabama","coordinates":[-86.32166,34.30956]},
+{"dem":13386,"rep":19419,"total":35097,"name":"Aroostook, Maine","coordinates":[-68.6124,46.70919]},
+{"dem":13517,"rep":19315,"total":35045,"name":"Belknap, New Hampshire","coordinates":[-71.42536,43.5191]},
+{"dem":9159,"rep":24114,"total":34608,"name":"Floyd, Georgia","coordinates":[-85.21368,34.26369]},
+{"dem":8838,"rep":24924,"total":34602,"name":"Bowie, Texas","coordinates":[-94.42239,33.44606]},
+{"dem":12175,"rep":19632,"total":34571,"name":"Cascade, Montana","coordinates":[-111.35026,47.31657]},
+{"dem":14478,"rep":16895,"total":34478,"name":"Lewis and Clark, Montana","coordinates":[-112.37336,47.13201]},
+{"dem":8200,"rep":24932,"total":34271,"name":"Clearfield, Pennsylvania","coordinates":[-78.47374,41.00024]},
+{"dem":11775,"rep":21512,"total":34263,"name":"Glynn, Georgia","coordinates":[-81.49645,31.2127]},
+{"dem":9654,"rep":21992,"total":34149,"name":"Lewis, Washington","coordinates":[-122.37744,46.58007]},
+{"dem":12999,"rep":18837,"total":34118,"name":"York, Virginia","coordinates":[-76.56164,37.21908]},
+{"dem":12546,"rep":19230,"total":34111,"name":"Shiawassee, Michigan","coordinates":[-84.14635,42.95154]},
+{"dem":23311,"rep":10232,"total":34087,"name":"Dougherty, Georgia","coordinates":[-84.20904,31.53258]},
+{"dem":13617,"rep":18093,"total":33915,"name":"Kings, California","coordinates":[-119.81553,36.07247]},
+{"dem":6876,"rep":25756,"total":33637,"name":"Walton, Florida","coordinates":[-86.17661,30.63121]},
+{"dem":7998,"rep":24178,"total":33635,"name":"Oconee, South Carolina","coordinates":[-83.06153,34.74876]},
+{"dem":14428,"rep":15667,"total":33593,"name":"Blue Earth, Minnesota","coordinates":[-94.06401,44.03371]},
+{"dem":13076,"rep":18176,"total":33523,"name":"Sutter, California","coordinates":[-121.70393,39.03618]},
+{"dem":10342,"rep":17180,"total":33416,"name":"Bannock, Idaho","coordinates":[-112.22898,42.69292]},
+{"dem":12121,"rep":20614,"total":33407,"name":"Talladega, Alabama","coordinates":[-86.17593,33.36931]},
+{"dem":13032,"rep":18114,"total":33380,"name":"Chelan, Washington","coordinates":[-120.61904,47.86097]},
+{"dem":6577,"rep":23552,"total":33348,"name":"Natrona, Wyoming","coordinates":[-106.76821,42.97764]},
+{"dem":13258,"rep":17890,"total":33274,"name":"Van Buren, Michigan","coordinates":[-86.30607,42.28214]},
+{"dem":13522,"rep":17384,"total":33172,"name":"Cayuga, New York","coordinates":[-76.57458,43.00854]},
+{"dem":10094,"rep":22138,"total":33117,"name":"Putnam, Florida","coordinates":[-81.73203,29.59389]},
+{"dem":11447,"rep":19850,"total":33085,"name":"Cabell, West Virginia","coordinates":[-82.24339,38.41957]},
+{"dem":16042,"rep":14646,"total":32976,"name":"Marquette, Michigan","coordinates":[-87.58402,46.65659]},
+{"dem":10029,"rep":22220,"total":32913,"name":"Lee, Mississippi","coordinates":[-88.68243,34.29237]},
+{"dem":10268,"rep":20469,"total":32853,"name":"Oldham, Kentucky","coordinates":[-85.45615,38.40012]},
+{"dem":11463,"rep":19183,"total":32564,"name":"Comanche, Oklahoma","coordinates":[-98.47661,34.66263]},
+{"dem":9340,"rep":20939,"total":32500,"name":"Otter Tail, Minnesota","coordinates":[-95.71458,46.40572]},
+{"dem":9841,"rep":20640,"total":32490,"name":"Bartholomew, Indiana","coordinates":[-85.89799,39.20584]},
+{"dem":10698,"rep":20903,"total":32454,"name":"Iberia, Louisiana","coordinates":[-91.97678,30.00712]},
+{"dem":14437,"rep":15429,"total":32443,"name":"Rice, Minnesota","coordinates":[-93.2985,44.35073]},
+{"dem":9675,"rep":21117,"total":32201,"name":"Jefferson, Ohio","coordinates":[-80.76352,40.39938]},
+{"dem":7488,"rep":23671,"total":32196,"name":"Surry, North Carolina","coordinates":[-80.68646,36.41541]},
+{"dem":10181,"rep":19654,"total":32178,"name":"Boone, Indiana","coordinates":[-86.46901,40.05089]},
+{"dem":16117,"rep":13705,"total":32130,"name":"Hancock, Maine","coordinates":[-68.3707,44.5649]},
+{"dem":15059,"rep":14449,"total":32105,"name":"Clinton, New York","coordinates":[-73.70564,44.75271]},
+{"dem":6313,"rep":23935,"total":32084,"name":"Kosciusko, Indiana","coordinates":[-85.86157,41.24429]},
+{"dem":5735,"rep":25513,"total":32000,"name":"Orange, Texas","coordinates":[-93.89409,30.12232]},
+{"dem":7676,"rep":22790,"total":31951,"name":"Adams, Illinois","coordinates":[-91.19496,39.98605]},
+{"dem":8581,"rep":21570,"total":31852,"name":"Williamson, Illinois","coordinates":[-88.93001,37.73035]},
+{"dem":13310,"rep":17389,"total":31657,"name":"Georgetown, South Carolina","coordinates":[-79.29633,33.41753]},
+{"dem":7178,"rep":23484,"total":31618,"name":"Armstrong, Pennsylvania","coordinates":[-79.46412,40.81238]},
+{"dem":9199,"rep":21554,"total":31598,"name":"Pittsylvania, Virginia","coordinates":[-79.3985,36.82172]},
+{"dem":11886,"rep":17909,"total":31561,"name":"Chippewa, Wisconsin","coordinates":[-91.2835,45.06909]},
+{"dem":6396,"rep":23910,"total":31554,"name":"Hunt, Texas","coordinates":[-96.08422,33.1233]},
+{"dem":13091,"rep":15751,"total":31408,"name":"Warren, New York","coordinates":[-73.83813,43.5551]},
+{"dem":14692,"rep":14791,"total":31318,"name":"Sauk, Wisconsin","coordinates":[-89.94331,43.428]},
+{"dem":10448,"rep":17865,"total":31313,"name":"Coos, Oregon","coordinates":[-124.09413,43.1859]},
+{"dem":9134,"rep":20774,"total":31307,"name":"McCracken, Kentucky","coordinates":[-88.71245,37.05411]},
+{"dem":6723,"rep":23005,"total":31300,"name":"Wagoner, Oklahoma","coordinates":[-95.51409,35.96347]},
+{"dem":6638,"rep":23752,"total":31296,"name":"Wilkes, North Carolina","coordinates":[-81.16609,36.20888]},
+{"dem":6040,"rep":23674,"total":31280,"name":"Morgan, Indiana","coordinates":[-86.44745,39.48264]},
+{"dem":12172,"rep":16210,"total":31201,"name":"Oxford, Maine","coordinates":[-70.73442,44.49449]},
+{"dem":9497,"rep":19692,"total":31161,"name":"Cattaraugus, New York","coordinates":[-78.66233,42.23909]},
+{"dem":15525,"rep":12587,"total":31150,"name":"La Plata, Colorado","coordinates":[-107.83971,37.28736]},
+{"dem":8866,"rep":21275,"total":31123,"name":"Victoria, Texas","coordinates":[-96.97119,28.79636]},
+{"dem":8785,"rep":21108,"total":31122,"name":"Belmont, Ohio","coordinates":[-80.96772,40.01768]},
+{"dem":18594,"rep":7993,"total":31086,"name":"Washington, Vermont","coordinates":[-72.60951,44.27498]},
+{"dem":15284,"rep":13756,"total":30902,"name":"Columbia, New York","coordinates":[-73.6268,42.24772]},
+{"dem":9132,"rep":20550,"total":30784,"name":"Scioto, Ohio","coordinates":[-82.99867,38.81488]},
+{"dem":10473,"rep":18929,"total":30727,"name":"Haywood, North Carolina","coordinates":[-82.9813,35.55888]},
+{"dem":7937,"rep":21537,"total":30658,"name":"Whitfield, Georgia","coordinates":[-84.96854,34.80172]},
+{"dem":7875,"rep":21270,"total":30654,"name":"Allegany, Maryland","coordinates":[-78.7031,39.61231]},
+{"dem":10039,"rep":19087,"total":30570,"name":"Vermilion, Illinois","coordinates":[-87.72677,40.18675]},
+{"dem":7210,"rep":20435,"total":30507,"name":"Klamath, Oregon","coordinates":[-121.64616,42.68376]},
+{"dem":10356,"rep":18652,"total":30380,"name":"Ross, Ohio","coordinates":[-83.05953,39.32389]},
+{"dem":12874,"rep":16368,"total":30368,"name":"Franklin, North Carolina","coordinates":[-78.28309,36.08824]},
+{"dem":10851,"rep":16340,"total":30365,"name":"Grand Forks, North Dakota","coordinates":[-97.45085,47.926]},
+{"dem":9114,"rep":19202,"total":30329,"name":"Barry, Michigan","coordinates":[-85.31455,42.58281]},
+{"dem":7512,"rep":21871,"total":30307,"name":"Rutherford, North Carolina","coordinates":[-81.91958,35.40274]},
+{"dem":10209,"rep":17638,"total":30301,"name":"Leavenworth, Kansas","coordinates":[-95.03897,39.18951]},
+{"dem":9278,"rep":18441,"total":30228,"name":"Chisago, Minnesota","coordinates":[-92.90384,45.50544]},
+{"dem":11667,"rep":15936,"total":30064,"name":"Madison, New York","coordinates":[-75.66357,42.91002]},
+{"dem":5669,"rep":23650,"total":30045,"name":"Henderson, Texas","coordinates":[-95.85341,32.21163]},
+{"dem":10697,"rep":17290,"total":30031,"name":"Livingston, New York","coordinates":[-77.76977,42.72748]},
+{"dem":14138,"rep":13697,"total":29985,"name":"Watauga, North Carolina","coordinates":[-81.70988,36.23536]},
+{"dem":12568,"rep":15931,"total":29955,"name":"Sullivan, New York","coordinates":[-74.77157,41.71999]},
+{"dem":17556,"rep":8605,"total":29928,"name":"Windsor, Vermont","coordinates":[-72.59882,43.57268]},
+{"dem":7094,"rep":21964,"total":29917,"name":"Stanly, North Carolina","coordinates":[-80.25437,35.31044]},
+{"dem":7538,"rep":21668,"total":29911,"name":"Angelina, Texas","coordinates":[-94.61113,31.25189]},
+{"dem":9013,"rep":19212,"total":29881,"name":"Anderson, Tennessee","coordinates":[-84.19541,36.11673]},
+{"dem":6233,"rep":19828,"total":29874,"name":"Twin Falls, Idaho","coordinates":[-114.66563,42.3523]},
+{"dem":8026,"rep":20514,"total":29840,"name":"Washington, Ohio","coordinates":[-81.49063,39.45067]},
+{"dem":13526,"rep":14160,"total":29771,"name":"Columbia, Wisconsin","coordinates":[-89.33047,43.47188]},
+{"dem":13888,"rep":14989,"total":29674,"name":"Darlington, South Carolina","coordinates":[-79.96211,34.33218]},
+{"dem":13635,"rep":12479,"total":29619,"name":"Rutland, Vermont","coordinates":[-73.0382,43.58085]},
+{"dem":6443,"rep":22048,"total":29618,"name":"Raleigh, West Virginia","coordinates":[-81.26467,37.76246]},
+{"dem":12987,"rep":14635,"total":29616,"name":"Carroll, New Hampshire","coordinates":[-71.20155,43.86777]},
+{"dem":9086,"rep":19113,"total":29589,"name":"Warrick, Indiana","coordinates":[-87.27204,38.09772]},
+{"dem":11269,"rep":17741,"total":29506,"name":"Lauderdale, Mississippi","coordinates":[-88.66044,32.40399]},
+{"dem":11904,"rep":16381,"total":29494,"name":"Salem, New Jersey","coordinates":[-75.35735,39.57382]},
+{"dem":4497,"rep":24266,"total":29472,"name":"Walker, Alabama","coordinates":[-87.30109,33.79155]},
+{"dem":16370,"rep":11354,"total":29443,"name":"Athens, Ohio","coordinates":[-82.04584,39.3326]},
+{"dem":12971,"rep":13543,"total":29398,"name":"Clay, Minnesota","coordinates":[-96.4949,46.89837]},
+{"dem":6580,"rep":21108,"total":29060,"name":"Barrow, Georgia","coordinates":[-83.7123,33.992]},
+{"dem":10330,"rep":17542,"total":28995,"name":"Kershaw, South Carolina","coordinates":[-80.59088,34.33835]},
+{"dem":5841,"rep":21575,"total":28830,"name":"Creek, Oklahoma","coordinates":[-96.37979,35.90773]},
+{"dem":8936,"rep":18743,"total":28776,"name":"Carbon, Pennsylvania","coordinates":[-75.70503,40.91836]},
+{"dem":10711,"rep":16961,"total":28763,"name":"Greenwood, South Carolina","coordinates":[-82.12787,34.15579]},
+{"dem":7601,"rep":20368,"total":28707,"name":"Columbia, Florida","coordinates":[-82.62337,30.22165]},
+{"dem":8171,"rep":19131,"total":28687,"name":"Knox, Ohio","coordinates":[-82.42239,40.40361]},
+{"dem":7657,"rep":19630,"total":28651,"name":"Potter, Texas","coordinates":[-101.8938,35.39867]},
+{"dem":10569,"rep":16328,"total":28454,"name":"Bastrop, Texas","coordinates":[-97.31063,30.10077]},
+{"dem":12020,"rep":14067,"total":28367,"name":"Grays Harbor, Washington","coordinates":[-123.82673,47.11373]},
+{"dem":7791,"rep":20133,"total":28352,"name":"Jones, Mississippi","coordinates":[-89.16853,31.6166]},
+{"dem":7810,"rep":18518,"total":28346,"name":"Grant, Washington","coordinates":[-119.46778,47.21363]},
+{"dem":9753,"rep":17210,"total":28273,"name":"Worcester, Maryland","coordinates":[-75.30993,38.22213]},
+{"dem":8934,"rep":18004,"total":28228,"name":"Columbia, Pennsylvania","coordinates":[-76.40425,41.04551]},
+{"dem":11993,"rep":13677,"total":28073,"name":"Mason, Washington","coordinates":[-123.17384,47.35412]},
+{"dem":11716,"rep":15461,"total":28064,"name":"Forrest, Mississippi","coordinates":[-89.25944,31.18858]},
+{"dem":9929,"rep":16316,"total":28044,"name":"Sandusky, Ohio","coordinates":[-83.14277,41.35531]},
+{"dem":4208,"rep":22902,"total":28041,"name":"Pulaski, Kentucky","coordinates":[-84.57695,37.10737]},
+{"dem":7694,"rep":18750,"total":27960,"name":"Harrison, West Virginia","coordinates":[-80.38649,39.27918]},
+{"dem":8454,"rep":17415,"total":27885,"name":"Douglas, Nevada","coordinates":[-119.60901,38.90512]},
+{"dem":9354,"rep":17639,"total":27885,"name":"Pender, North Carolina","coordinates":[-77.8881,34.51255]},
+{"dem":8788,"rep":16651,"total":27760,"name":"Payne, Oklahoma","coordinates":[-96.97525,36.07922]},
+{"dem":17083,"rep":8240,"total":27661,"name":"Apache, Arizona","coordinates":[-109.49017,35.38508]},
+{"dem":6573,"rep":19073,"total":27657,"name":"Butler, Kansas","coordinates":[-96.83884,37.77364]},
+{"dem":7673,"rep":17059,"total":27597,"name":"Umatilla, Oregon","coordinates":[-118.73387,45.59119]},
+{"dem":10841,"rep":13215,"total":27592,"name":"Valencia, New Mexico","coordinates":[-106.80658,34.71684]},
+{"dem":6664,"rep":19551,"total":27535,"name":"Campbell, Virginia","coordinates":[-79.09542,37.21015]},
+{"dem":7718,"rep":18096,"total":27429,"name":"Union, Ohio","coordinates":[-83.36704,40.2959]},
+{"dem":5806,"rep":18636,"total":27412,"name":"Ward, North Dakota","coordinates":[-101.54053,48.21668]},
+{"dem":5638,"rep":21162,"total":27389,"name":"Acadia, Louisiana","coordinates":[-92.41103,30.29149]},
+{"dem":12909,"rep":13591,"total":27353,"name":"Granville, North Carolina","coordinates":[-78.65763,36.29988]},
+{"dem":10411,"rep":14814,"total":27300,"name":"Warren, Iowa","coordinates":[-93.56875,41.33244]},
+{"dem":5170,"rep":21077,"total":27219,"name":"White, Arkansas","coordinates":[-91.75303,35.25511]},
+{"dem":6851,"rep":19002,"total":27212,"name":"Putnam, Tennessee","coordinates":[-85.49618,36.14094]},
+{"dem":4491,"rep":21784,"total":27190,"name":"Jackson, Georgia","coordinates":[-83.56255,34.1309]},
+{"dem":6637,"rep":19410,"total":27113,"name":"Robertson, Tennessee","coordinates":[-86.86935,36.5275]},
+{"dem":5664,"rep":19958,"total":27100,"name":"Lonoke, Arkansas","coordinates":[-91.89413,34.75511]},
+{"dem":7257,"rep":18569,"total":26971,"name":"Franklin, Virginia","coordinates":[-79.88271,36.99118]},
+{"dem":8352,"rep":16635,"total":26854,"name":"Ionia, Michigan","coordinates":[-85.07376,42.94465]},
+{"dem":12634,"rep":13613,"total":26807,"name":"Lenoir, North Carolina","coordinates":[-77.6355,35.24006]},
+{"dem":4771,"rep":20876,"total":26757,"name":"Catoosa, Georgia","coordinates":[-85.13938,34.90021]},
+{"dem":9646,"rep":15348,"total":26650,"name":"Calumet, Wisconsin","coordinates":[-88.21213,44.07841]},
+{"dem":10167,"rep":13217,"total":26618,"name":"Columbia, Oregon","coordinates":[-123.08107,45.94193]},
+{"dem":7874,"rep":16907,"total":26609,"name":"Montcalm, Michigan","coordinates":[-85.14946,43.31278]},
+{"dem":6974,"rep":18689,"total":26607,"name":"Lawrence, Ohio","coordinates":[-82.51718,38.60386]},
+{"dem":4990,"rep":20553,"total":26606,"name":"Newton, Missouri","coordinates":[-94.33503,36.90837]},
+{"dem":8889,"rep":16816,"total":26566,"name":"Laurens, South Carolina","coordinates":[-82.00549,34.48367]},
+{"dem":7151,"rep":18749,"total":26548,"name":"Harrison, Texas","coordinates":[-94.37443,32.54799]},
+{"dem":7973,"rep":16993,"total":26523,"name":"Queen Anne's, Maryland","coordinates":[-76.0824,39.04069]},
+{"dem":11271,"rep":13132,"total":26470,"name":"Garfield, Colorado","coordinates":[-107.90978,39.59935]},
+{"dem":7650,"rep":16915,"total":26432,"name":"Genesee, New York","coordinates":[-78.19277,43.0009]},
+{"dem":5202,"rep":20413,"total":26360,"name":"Cumberland, Tennessee","coordinates":[-84.99476,35.95239]},
+{"dem":16456,"rep":7574,"total":26335,"name":"Kauai, Hawaii","coordinates":[-159.70596,22.01203]},
+{"dem":7928,"rep":16961,"total":26322,"name":"Marion, Ohio","coordinates":[-83.1688,40.58803]},
+{"dem":4008,"rep":21382,"total":26262,"name":"Hood, Texas","coordinates":[-97.83167,32.43014]},
+{"dem":8083,"rep":16699,"total":26255,"name":"Herkimer, New York","coordinates":[-75.01168,43.40748]},
+{"dem":8559,"rep":16621,"total":26192,"name":"St. Charles, Louisiana","coordinates":[-90.35785,29.90572]},
+{"dem":9713,"rep":15750,"total":26111,"name":"Troup, Georgia","coordinates":[-85.02835,33.03448]},
+{"dem":9256,"rep":16056,"total":26101,"name":"Pike, Pennsylvania","coordinates":[-75.03151,41.32594]},
+{"dem":11366,"rep":12122,"total":26074,"name":"Winona, Minnesota","coordinates":[-91.7767,43.98226]},
+{"dem":9092,"rep":15001,"total":26064,"name":"Somerset, Maine","coordinates":[-69.9561,45.50364]},
+{"dem":8440,"rep":16189,"total":26024,"name":"Waupaca, Wisconsin","coordinates":[-88.967,44.478]},
+{"dem":10547,"rep":14838,"total":25928,"name":"Sampson, North Carolina","coordinates":[-78.37117,34.98929]},
+{"dem":15772,"rep":9250,"total":25894,"name":"Jefferson, Arkansas","coordinates":[-91.92967,34.27723]},
+{"dem":5553,"rep":19320,"total":25847,"name":"Washington, Virginia","coordinates":[-81.95032,36.74781]},
+{"dem":3622,"rep":21405,"total":25826,"name":"DeKalb, Alabama","coordinates":[-85.80399,34.46092]},
+{"dem":7429,"rep":17102,"total":25796,"name":"Tuscola, Michigan","coordinates":[-83.43661,43.4879]},
+{"dem":8266,"rep":16873,"total":25750,"name":"St. Martin, Louisiana","coordinates":[-91.61148,30.12143]},
+{"dem":9446,"rep":14041,"total":25717,"name":"Goodhue, Minnesota","coordinates":[-92.716,44.40617]},
+{"dem":6369,"rep":18141,"total":25708,"name":"Bradford, Pennsylvania","coordinates":[-76.50212,41.7915]},
+{"dem":9357,"rep":15646,"total":25704,"name":"Spalding, Georgia","coordinates":[-84.2849,33.26234]},
+{"dem":10451,"rep":13308,"total":25668,"name":"Otsego, New York","coordinates":[-75.02884,42.62977]},
+{"dem":4857,"rep":20063,"total":25632,"name":"Vermilion, Louisiana","coordinates":[-92.29156,29.78972]},
+{"dem":2156,"rep":22859,"total":25588,"name":"Blount, Alabama","coordinates":[-86.56644,33.97735]},
+{"dem":11035,"rep":12615,"total":25582,"name":"Whiteside, Illinois","coordinates":[-89.911,41.75067]},
+{"dem":8322,"rep":16028,"total":25579,"name":"Wayne, Indiana","coordinates":[-85.00673,39.86309]},
+{"dem":11819,"rep":13271,"total":25575,"name":"Lowndes, Mississippi","coordinates":[-88.43972,33.47142]},
+{"dem":9123,"rep":14551,"total":25529,"name":"Tuolumne, California","coordinates":[-119.96473,38.02143]},
+{"dem":4470,"rep":20012,"total":25484,"name":"Darke, Ohio","coordinates":[-84.62124,40.13154]},
+{"dem":14609,"rep":8965,"total":25475,"name":"Bristol, Rhode Island","coordinates":[-71.28663,41.70683]},
+{"dem":6015,"rep":17848,"total":25452,"name":"Pottawatomie, Oklahoma","coordinates":[-96.957,35.21139]},
+{"dem":9694,"rep":13651,"total":25419,"name":"Walla Walla, Washington","coordinates":[-118.48036,46.2546]},
+{"dem":11404,"rep":12338,"total":25392,"name":"Isabella, Michigan","coordinates":[-84.83942,43.64523]},
+{"dem":9261,"rep":15097,"total":25316,"name":"Bulloch, Georgia","coordinates":[-81.74402,32.39171]},
+{"dem":7010,"rep":17008,"total":25312,"name":"Grant, Indiana","coordinates":[-85.65494,40.51575]},
+{"dem":12501,"rep":10039,"total":25256,"name":"Lincoln, Oregon","coordinates":[-123.91121,44.64106]},
+{"dem":8076,"rep":15499,"total":25231,"name":"Lincoln, South Dakota","coordinates":[-96.72228,43.27942]},
+{"dem":14099,"rep":8990,"total":25223,"name":"Eagle, Colorado","coordinates":[-106.69516,39.62699]},
+{"dem":15748,"rep":9031,"total":25167,"name":"Halifax, North Carolina","coordinates":[-77.64484,36.25143]},
+{"dem":10469,"rep":13712,"total":25084,"name":"Lee, North Carolina","coordinates":[-79.17211,35.47633]},
+{"dem":9610,"rep":13125,"total":25016,"name":"Carson City, Nevada","coordinates":[-119.74736,39.15305]},
+{"dem":5936,"rep":18172,"total":24973,"name":"Autauga, Alabama","coordinates":[-86.64643,32.53223]},
+{"dem":5575,"rep":18159,"total":24962,"name":"Lincoln, Missouri","coordinates":[-90.96291,39.06225]},
+{"dem":7312,"rep":16746,"total":24915,"name":"Colbert, Alabama","coordinates":[-87.80145,34.70311]},
+{"dem":5884,"rep":17788,"total":24893,"name":"Putnam, West Virginia","coordinates":[-81.9061,38.51051]},
+{"dem":16224,"rep":8261,"total":24886,"name":"Edgecombe, North Carolina","coordinates":[-77.60274,35.91707]},
+{"dem":7192,"rep":16226,"total":24834,"name":"Huron, Ohio","coordinates":[-82.59464,41.14507]},
+{"dem":3440,"rep":20592,"total":24833,"name":"Laurel, Kentucky","coordinates":[-84.11939,37.11326]},
+{"dem":3412,"rep":20670,"total":24776,"name":"Wise, Texas","coordinates":[-97.65399,33.21909]},
+{"dem":6529,"rep":17076,"total":24745,"name":"Pickaway, Ohio","coordinates":[-83.05282,39.64894]},
+{"dem":6250,"rep":17468,"total":24728,"name":"St. Francois, Missouri","coordinates":[-90.47386,37.8107]},
+{"dem":4280,"rep":19747,"total":24665,"name":"Pike, Kentucky","coordinates":[-82.41091,37.48603]},
+{"dem":8871,"rep":13985,"total":24643,"name":"Henry, Illinois","coordinates":[-90.13083,41.35002]},
+{"dem":11634,"rep":10843,"total":24617,"name":"Jackson, Illinois","coordinates":[-89.38121,37.78609]},
+{"dem":5190,"rep":18751,"total":24592,"name":"Lamar, Mississippi","coordinates":[-89.50636,31.19758]},
+{"dem":5740,"rep":17493,"total":24590,"name":"Ashland, Ohio","coordinates":[-82.27012,40.84327]},
+{"dem":9098,"rep":13610,"total":24528,"name":"Washington, New York","coordinates":[-73.43942,43.31237]},
+{"dem":11496,"rep":10599,"total":24496,"name":"Lake, California","coordinates":[-122.74675,39.0948]},
+{"dem":10046,"rep":12349,"total":24321,"name":"Grant, Wisconsin","coordinates":[-90.69422,42.87002]},
+{"dem":4862,"rep":18892,"total":24267,"name":"Liberty, Texas","coordinates":[-94.84406,30.1585]},
+{"dem":7977,"rep":15043,"total":24216,"name":"Muskogee, Oklahoma","coordinates":[-95.38391,35.61755]},
+{"dem":6837,"rep":15513,"total":24210,"name":"Reno, Kansas","coordinates":[-98.07834,37.94818]},
+{"dem":7715,"rep":15052,"total":24200,"name":"Scott, Kentucky","coordinates":[-84.57834,38.2857]},
+{"dem":8050,"rep":14352,"total":24193,"name":"Ogle, Illinois","coordinates":[-89.32017,42.04188]},
+{"dem":9518,"rep":13204,"total":24147,"name":"Jefferson, West Virginia","coordinates":[-77.86322,39.30739]},
+{"dem":8198,"rep":15208,"total":24106,"name":"Henry, Virginia","coordinates":[-79.75923,36.78147]},
+{"dem":7008,"rep":16244,"total":24018,"name":"Wayne, Pennsylvania","coordinates":[-75.29249,41.6466]},
+{"dem":4883,"rep":18113,"total":23987,"name":"Dearborn, Indiana","coordinates":[-84.97349,39.14832]},
+{"dem":7404,"rep":14825,"total":23987,"name":"Seneca, Ohio","coordinates":[-83.12754,41.11999]},
+{"dem":4215,"rep":18950,"total":23956,"name":"Walker, Georgia","coordinates":[-85.30545,34.7358]},
+{"dem":8764,"rep":14543,"total":23938,"name":"Beaufort, North Carolina","coordinates":[-76.84201,35.48231]},
+{"dem":6809,"rep":15494,"total":23908,"name":"Tehama, California","coordinates":[-122.23227,40.12615]},
+{"dem":9015,"rep":12920,"total":23880,"name":"Itasca, Minnesota","coordinates":[-93.6111,47.49081]},
+{"dem":10717,"rep":11819,"total":23865,"name":"Franklin, Kentucky","coordinates":[-84.86878,38.23491]},
+{"dem":6146,"rep":16005,"total":23762,"name":"Lyon, Nevada","coordinates":[-119.19742,39.02221]},
+{"dem":7526,"rep":14884,"total":23757,"name":"St. Joseph, Michigan","coordinates":[-85.52287,41.91148]},
+{"dem":4243,"rep":18590,"total":23740,"name":"Shelby, Ohio","coordinates":[-84.20414,40.33668]},
+{"dem":9063,"rep":14272,"total":23732,"name":"Columbus, North Carolina","coordinates":[-78.6393,34.2616]},
+{"dem":8886,"rep":13206,"total":23720,"name":"Franklin, Washington","coordinates":[-118.90694,46.53457]},
+{"dem":3645,"rep":19552,"total":23637,"name":"Bedford, Pennsylvania","coordinates":[-78.49474,39.99863]},
+{"dem":3980,"rep":18658,"total":23627,"name":"Auglaize, Ohio","coordinates":[-84.22401,40.5613]},
+{"dem":4216,"rep":18562,"total":23583,"name":"Greene, Tennessee","coordinates":[-82.84752,36.17948]},
+{"dem":4373,"rep":18276,"total":23515,"name":"Taney, Missouri","coordinates":[-93.04281,36.64982]},
+{"dem":5785,"rep":16910,"total":23481,"name":"Tipton, Tennessee","coordinates":[-89.7668,35.50025]},
+{"dem":4853,"rep":17874,"total":23458,"name":"Effingham, Georgia","coordinates":[-81.34337,32.36168]},
+{"dem":4919,"rep":17610,"total":23391,"name":"Loudon, Tennessee","coordinates":[-84.31408,35.73508]},
+{"dem":6309,"rep":16021,"total":23348,"name":"Venango, Pennsylvania","coordinates":[-79.76581,41.40071]},
+{"dem":6144,"rep":15474,"total":23326,"name":"Jessamine, Kentucky","coordinates":[-84.58396,37.87329]},
+{"dem":4681,"rep":17727,"total":23297,"name":"Kerr, Texas","coordinates":[-99.35333,30.05995]},
+{"dem":8065,"rep":13454,"total":23237,"name":"Grundy, Illinois","coordinates":[-88.40105,41.2924]},
+{"dem":12443,"rep":9148,"total":23147,"name":"Knox, Maine","coordinates":[-69.03851,44.04204]},
+{"dem":7944,"rep":13511,"total":23136,"name":"Calaveras, California","coordinates":[-120.56144,38.18389]},
+{"dem":10095,"rep":11276,"total":23067,"name":"Clinton, Iowa","coordinates":[-90.53424,41.89807]},
+{"dem":6964,"rep":14668,"total":23029,"name":"Marion, West Virginia","coordinates":[-80.2434,39.50583]},
+{"dem":8986,"rep":12282,"total":23001,"name":"Boone, Illinois","coordinates":[-88.82429,42.31898]},
+{"dem":7910,"rep":13170,"total":22998,"name":"Yuba, California","coordinates":[-121.34425,39.27013]},
+{"dem":4704,"rep":17404,"total":22982,"name":"Mercer, West Virginia","coordinates":[-81.10645,37.40344]},
+{"dem":9862,"rep":11621,"total":22965,"name":"Cerro Gordo, Iowa","coordinates":[-93.25096,43.07497]},
+{"dem":8050,"rep":14359,"total":22877,"name":"St. Mary, Louisiana","coordinates":[-91.4638,29.62934]},
+{"dem":2780,"rep":19606,"total":22780,"name":"Hardin, Texas","coordinates":[-94.39317,30.32964]},
+{"dem":7570,"rep":13815,"total":22749,"name":"Polk, Wisconsin","coordinates":[-92.44706,45.46204]},
+{"dem":10440,"rep":10378,"total":22707,"name":"Waldo, Maine","coordinates":[-69.13895,44.50583]},
+{"dem":10210,"rep":10796,"total":22683,"name":"Sullivan, New Hampshire","coordinates":[-72.22208,43.36118]},
+{"dem":5767,"rep":15161,"total":22677,"name":"Stevens, Washington","coordinates":[-117.85445,48.38872]},
+{"dem":7879,"rep":13606,"total":22643,"name":"Barron, Wisconsin","coordinates":[-91.85289,45.43719]},
+{"dem":6212,"rep":15173,"total":22640,"name":"Newaygo, Michigan","coordinates":[-85.79137,43.56271]},
+{"dem":14340,"rep":5454,"total":22635,"name":"Windham, Vermont","coordinates":[-72.72195,42.99533]},
+{"dem":6846,"rep":14771,"total":22622,"name":"Nacogdoches, Texas","coordinates":[-94.62024,31.62055]},
+{"dem":7270,"rep":14243,"total":22595,"name":"Cass, Michigan","coordinates":[-86.00014,41.91724]},
+{"dem":5000,"rep":16256,"total":22569,"name":"Pope, Arkansas","coordinates":[-93.02681,35.45655]},
+{"dem":6223,"rep":14810,"total":22556,"name":"Ravalli, Montana","coordinates":[-114.10579,46.07774]},
+{"dem":4665,"rep":17116,"total":22550,"name":"Stokes, North Carolina","coordinates":[-80.26621,36.3935]},
+{"dem":4768,"rep":16944,"total":22514,"name":"Camden, Missouri","coordinates":[-92.76532,38.02652]},
+{"dem":11345,"rep":9659,"total":22511,"name":"Douglas, Wisconsin","coordinates":[-91.89247,46.46321]},
+{"dem":17901,"rep":2960,"total":22472,"name":"Charlottesville, Virginia","coordinates":[-78.48538,38.03765]},
+{"dem":4488,"rep":16686,"total":22450,"name":"Crawford, Arkansas","coordinates":[-94.23621,35.58301]},
+{"dem":6689,"rep":14322,"total":22360,"name":"Macoupin, Illinois","coordinates":[-89.92633,39.26591]},
+{"dem":7003,"rep":14182,"total":22312,"name":"Gila, Arizona","coordinates":[-110.81186,33.78961]},
+{"dem":7526,"rep":13260,"total":22299,"name":"Tioga, New York","coordinates":[-76.29745,42.17805]},
+{"dem":3882,"rep":17316,"total":22286,"name":"Grady, Oklahoma","coordinates":[-97.88689,35.02105]},
+{"dem":10083,"rep":10737,"total":22243,"name":"Knox, Illinois","coordinates":[-90.21379,40.93094]},
+{"dem":5048,"rep":15825,"total":22224,"name":"Washington, Oklahoma","coordinates":[-95.90615,36.70438]},
+{"dem":8285,"rep":12653,"total":22218,"name":"Ottawa, Ohio","coordinates":[-83.01261,41.54549]},
+{"dem":7759,"rep":13349,"total":22218,"name":"Culpeper, Virginia","coordinates":[-77.95647,38.48593]},
+{"dem":15020,"rep":6728,"total":22113,"name":"Gadsden, Florida","coordinates":[-84.6126,30.57868]},
+{"dem":9026,"rep":11488,"total":22091,"name":"Dunn, Wisconsin","coordinates":[-91.89764,44.94775]},
+{"dem":7188,"rep":14108,"total":22083,"name":"Christian, Kentucky","coordinates":[-87.49298,36.89205]},
+{"dem":6317,"rep":13828,"total":22064,"name":"Saline, Kansas","coordinates":[-97.65147,38.7918]},
+{"dem":6282,"rep":14408,"total":22060,"name":"Hall, Nebraska","coordinates":[-98.50266,40.86602]},
+{"dem":7405,"rep":13073,"total":22050,"name":"Greene, New York","coordinates":[-74.14202,42.27982]},
+{"dem":5297,"rep":15122,"total":21973,"name":"Fremont, Colorado","coordinates":[-105.42495,38.45516]},
+{"dem":12521,"rep":7841,"total":21924,"name":"San Benito, California","coordinates":[-121.08581,36.61165]},
+{"dem":2799,"rep":18473,"total":21890,"name":"Van Zandt, Texas","coordinates":[-95.8369,32.55878]},
+{"dem":3604,"rep":17782,"total":21883,"name":"Pearl River, Mississippi","coordinates":[-89.5869,30.77479]},
+{"dem":7309,"rep":13003,"total":21863,"name":"Coles, Illinois","coordinates":[-88.22078,39.51367]},
+{"dem":4573,"rep":11169,"total":21829,"name":"Tooele, Utah","coordinates":[-113.12397,40.46775]},
+{"dem":6227,"rep":13966,"total":21785,"name":"Douglas, Minnesota","coordinates":[-95.46215,45.93682]},
+{"dem":7266,"rep":12785,"total":21772,"name":"Kandiyohi, Minnesota","coordinates":[-95.00498,45.15271]},
+{"dem":6092,"rep":15167,"total":21759,"name":"Cherokee, South Carolina","coordinates":[-81.60764,35.04979]},
+{"dem":5270,"rep":15602,"total":21756,"name":"Davie, North Carolina","coordinates":[-80.54255,35.92935]},
+{"dem":3384,"rep":17506,"total":21726,"name":"Mercer, Ohio","coordinates":[-84.63205,40.53533]},
+{"dem":4397,"rep":16009,"total":21710,"name":"Garfield, Oklahoma","coordinates":[-97.78845,36.37805]},
+{"dem":13576,"rep":5104,"total":21703,"name":"McKinley, New Mexico","coordinates":[-108.25326,35.58387]},
+{"dem":4837,"rep":15880,"total":21669,"name":"Roane, Tennessee","coordinates":[-84.52392,35.84725]},
+{"dem":7871,"rep":13030,"total":21656,"name":"San Patricio, Texas","coordinates":[-97.51715,28.01179]},
+{"dem":10664,"rep":9304,"total":21616,"name":"Sagadahoc, Maine","coordinates":[-69.84422,43.91684]},
+{"dem":4647,"rep":15957,"total":21571,"name":"Logan, Ohio","coordinates":[-83.76634,40.38755]},
+{"dem":8688,"rep":10783,"total":21564,"name":"Beltrami, Minnesota","coordinates":[-95.00505,47.8795]},
+{"dem":9341,"rep":10107,"total":21532,"name":"Riley, Kansas","coordinates":[-96.72748,39.29121]},
+{"dem":10241,"rep":9727,"total":21503,"name":"Lincoln, Maine","coordinates":[-69.51362,43.99478]},
+{"dem":8104,"rep":12117,"total":21473,"name":"Oneida, Wisconsin","coordinates":[-89.53453,45.71617]},
+{"dem":9351,"rep":8752,"total":21411,"name":"Franklin, Vermont","coordinates":[-72.9094,44.85896]},
+{"dem":6069,"rep":13709,"total":21225,"name":"Fulton, Ohio","coordinates":[-84.12426,41.59726]},
+{"dem":6496,"rep":13462,"total":21214,"name":"Fulton, New York","coordinates":[-74.42367,43.1156]},
+{"dem":8382,"rep":11258,"total":21189,"name":"Pierce, Wisconsin","coordinates":[-92.42627,44.72533]},
+{"dem":5466,"rep":14382,"total":21186,"name":"Montrose, Colorado","coordinates":[-108.26628,38.4075]},
+{"dem":4632,"rep":15616,"total":21158,"name":"Perry, Pennsylvania","coordinates":[-77.26632,40.39777]},
+{"dem":5930,"rep":13719,"total":21132,"name":"Johnson, Missouri","coordinates":[-93.81186,38.74152]},
+{"dem":4763,"rep":14569,"total":21129,"name":"Buffalo, Nebraska","coordinates":[-99.07498,40.85522]},
+{"dem":3453,"rep":16898,"total":21084,"name":"Carter, Tennessee","coordinates":[-82.12659,36.28474]},
+{"dem":7881,"rep":12204,"total":21075,"name":"Isle of Wight, Virginia","coordinates":[-76.70756,36.90141]},
+{"dem":6397,"rep":14257,"total":21041,"name":"Jackson, Florida","coordinates":[-85.20881,30.78924]},
+{"dem":5657,"rep":13635,"total":21016,"name":"Isanti, Minnesota","coordinates":[-93.29633,45.56243]},
+{"dem":3673,"rep":16672,"total":20984,"name":"Jackson, Alabama","coordinates":[-85.98005,34.76411]},
+{"dem":5819,"rep":13343,"total":20943,"name":"Bonner, Idaho","coordinates":[-116.61236,48.31679]},
+{"dem":8283,"rep":12217,"total":20856,"name":"Duplin, North Carolina","coordinates":[-77.93354,34.9344]},
+{"dem":6434,"rep":13431,"total":20802,"name":"Nelson, Kentucky","coordinates":[-85.46593,37.80311]},
+{"dem":3507,"rep":16648,"total":20774,"name":"Hawkins, Tennessee","coordinates":[-82.93148,36.45208]},
+{"dem":4221,"rep":15875,"total":20767,"name":"Coffee, Alabama","coordinates":[-85.9896,31.40225]},
+{"dem":12661,"rep":7569,"total":20743,"name":"St. John the Baptist, Louisiana","coordinates":[-90.49095,30.14406]},
+{"dem":4075,"rep":15857,"total":20692,"name":"Hamblen, Tennessee","coordinates":[-83.26607,36.21839]},
+{"dem":10503,"rep":7333,"total":20641,"name":"Summit, Utah","coordinates":[-110.96848,40.87206]},
+{"dem":6276,"rep":13196,"total":20580,"name":"Shelby, Kentucky","coordinates":[-85.22824,38.23901]},
+{"dem":4325,"rep":15446,"total":20565,"name":"Preble, Ohio","coordinates":[-84.64475,39.73881]},
+{"dem":8653,"rep":10724,"total":20553,"name":"Talbot, Maryland","coordinates":[-76.17847,38.74834]},
+{"dem":5273,"rep":14094,"total":20513,"name":"Shenandoah, Virginia","coordinates":[-78.57398,38.8562]},
+{"dem":7234,"rep":11341,"total":20492,"name":"Siskiyou, California","coordinates":[-122.53328,41.58798]},
+{"dem":6021,"rep":13591,"total":20454,"name":"Boyd, Kentucky","coordinates":[-82.6814,38.36]},
+{"dem":4310,"rep":15277,"total":20345,"name":"Hopkins, Kentucky","coordinates":[-87.54219,37.31107]},
+{"dem":7768,"rep":11083,"total":20343,"name":"Stephenson, Illinois","coordinates":[-89.66599,42.34972]},
+{"dem":12656,"rep":6037,"total":20276,"name":"Jefferson, Washington","coordinates":[-123.52705,47.8057]},
+{"dem":5534,"rep":12872,"total":20271,"name":"Chaves, New Mexico","coordinates":[-104.46983,33.3616]},
+{"dem":8771,"rep":9900,"total":20244,"name":"Cortland, New York","coordinates":[-76.07623,42.59403]},
+{"dem":6775,"rep":11921,"total":20160,"name":"Chenango, New York","coordinates":[-75.60224,42.47802]},
+{"dem":5124,"rep":13895,"total":20155,"name":"Henry, Indiana","coordinates":[-85.39736,39.92959]},
+{"dem":5581,"rep":13425,"total":20149,"name":"Oconee, Georgia","coordinates":[-83.43772,33.83412]},
+{"dem":3643,"rep":15700,"total":20120,"name":"Kendall, Texas","coordinates":[-98.70926,29.94352]},
+{"dem":6124,"rep":11887,"total":20060,"name":"Otero, New Mexico","coordinates":[-105.7513,32.61559]},
+{"dem":5640,"rep":12872,"total":20058,"name":"Benton, Minnesota","coordinates":[-94.00143,45.70122]},
+{"dem":6243,"rep":12995,"total":20046,"name":"Marinette, Wisconsin","coordinates":[-87.99119,45.34689]},
+{"dem":5389,"rep":13365,"total":19984,"name":"Dubois, Indiana","coordinates":[-86.87338,38.37334]},
+{"dem":5884,"rep":13253,"total":19978,"name":"Oconto, Wisconsin","coordinates":[-88.20651,44.99657]},
+{"dem":12229,"rep":7332,"total":19977,"name":"Vance, North Carolina","coordinates":[-78.40543,36.36548]},
+{"dem":4743,"rep":14417,"total":19971,"name":"Coffee, Tennessee","coordinates":[-86.0782,35.48876]},
+{"dem":4799,"rep":14095,"total":19940,"name":"Hillsdale, Michigan","coordinates":[-84.63747,41.92746]},
+{"dem":4667,"rep":14568,"total":19875,"name":"McDowell, North Carolina","coordinates":[-82.04804,35.68227]},
+{"dem":5092,"rep":13207,"total":19864,"name":"Woodford, Illinois","coordinates":[-89.21058,40.78978]},
+{"dem":4187,"rep":15176,"total":19852,"name":"Polk, Texas","coordinates":[-94.83733,30.78455]},
+{"dem":6091,"rep":12884,"total":19796,"name":"Walker, Texas","coordinates":[-95.56982,30.74316]},
+{"dem":6627,"rep":11942,"total":19792,"name":"Delaware, New York","coordinates":[-74.96672,42.19398]},
+{"dem":4169,"rep":14682,"total":19766,"name":"Baxter, Arkansas","coordinates":[-92.32994,36.28026]},
+{"dem":6056,"rep":12742,"total":19751,"name":"Shawano, Wisconsin","coordinates":[-88.75581,44.78964]},
+{"dem":2282,"rep":12230,"total":19735,"name":"Box Elder, Utah","coordinates":[-113.12622,41.27606]},
+{"dem":6707,"rep":12159,"total":19710,"name":"Henderson, Kentucky","coordinates":[-87.57257,37.79254]},
+{"dem":4539,"rep":14494,"total":19706,"name":"Huntingdon, Pennsylvania","coordinates":[-77.96859,40.42231]},
+{"dem":7048,"rep":11352,"total":19670,"name":"Monroe, Wisconsin","coordinates":[-90.61996,43.94517]},
+{"dem":5033,"rep":13147,"total":19667,"name":"Eddy, New Mexico","coordinates":[-104.30643,32.45783]},
+{"dem":9252,"rep":8138,"total":19664,"name":"Clatsop, Oregon","coordinates":[-123.70503,46.0245]},
+{"dem":7969,"rep":10872,"total":19643,"name":"Lafayette, Mississippi","coordinates":[-89.48538,34.35307]},
+{"dem":5404,"rep":13096,"total":19619,"name":"Gloucester, Virginia","coordinates":[-76.5235,37.40354]},
+{"dem":7833,"rep":11185,"total":19615,"name":"Person, North Carolina","coordinates":[-78.96562,36.38635]},
+{"dem":7222,"rep":11460,"total":19609,"name":"Dare, North Carolina","coordinates":[-75.76753,35.60626]},
+{"dem":4353,"rep":14573,"total":19607,"name":"Brown, Ohio","coordinates":[-83.86677,38.93137]},
+{"dem":5094,"rep":13324,"total":19595,"name":"Nye, Nevada","coordinates":[-116.45901,37.96586]},
+{"dem":5258,"rep":13786,"total":19547,"name":"Gibson, Tennessee","coordinates":[-88.93381,35.99163]},
+{"dem":6752,"rep":12411,"total":19530,"name":"Laurens, Georgia","coordinates":[-82.92631,32.39321]},
+{"dem":5519,"rep":13594,"total":19486,"name":"Tallapoosa, Alabama","coordinates":[-85.79961,32.8633]},
+{"dem":3650,"rep":15192,"total":19478,"name":"Jefferson, Pennsylvania","coordinates":[-79.01241,41.13802]},
+{"dem":8368,"rep":9584,"total":19434,"name":"Muscatine, Iowa","coordinates":[-91.11869,41.48377]},
+{"dem":4790,"rep":13998,"total":19432,"name":"Wilson, Texas","coordinates":[-98.08673,29.17388]},
+{"dem":9284,"rep":9767,"total":19416,"name":"Warren, Mississippi","coordinates":[-90.85238,32.35609]},
+{"dem":5101,"rep":13775,"total":19395,"name":"Levy, Florida","coordinates":[-82.78346,29.28445]},
+{"dem":5874,"rep":13055,"total":19394,"name":"Fayette, Tennessee","coordinates":[-89.4138,35.19699]},
+{"dem":5535,"rep":12629,"total":19354,"name":"Monroe, Illinois","coordinates":[-90.17907,38.27798]},
+{"dem":8501,"rep":10383,"total":19328,"name":"Richmond, North Carolina","coordinates":[-79.75569,35.00463]},
+{"dem":9579,"rep":9210,"total":19256,"name":"Russell, Alabama","coordinates":[-85.18697,32.28981]},
+{"dem":4873,"rep":13446,"total":19249,"name":"Sanilac, Michigan","coordinates":[-82.64281,43.44915]},
+{"dem":4625,"rep":13611,"total":19237,"name":"Crawford, Ohio","coordinates":[-82.92478,40.84852]},
+{"dem":3797,"rep":14638,"total":19204,"name":"Burnet, Texas","coordinates":[-98.20118,30.78963]},
+{"dem":4989,"rep":13057,"total":19193,"name":"Callaway, Missouri","coordinates":[-91.92344,38.83554]},
+{"dem":6241,"rep":11198,"total":19179,"name":"Steele, Minnesota","coordinates":[-93.22045,44.01526]},
+{"dem":4210,"rep":14035,"total":19152,"name":"Lawrence, Indiana","coordinates":[-86.48781,38.83981]},
+{"dem":8212,"rep":9529,"total":19103,"name":"Des Moines, Iowa","coordinates":[-91.18692,40.91533]},
+{"dem":3494,"rep":14776,"total":19072,"name":"Jefferson, Tennessee","coordinates":[-83.44114,36.04833]},
+{"dem":6595,"rep":11301,"total":19054,"name":"Montgomery, New York","coordinates":[-74.43535,42.90089]},
+{"dem":7109,"rep":10560,"total":19034,"name":"Jasper, Iowa","coordinates":[-93.05414,41.68555]},
+{"dem":11219,"rep":5297,"total":19031,"name":"Addison, Vermont","coordinates":[-73.14158,44.03124]},
+{"dem":3935,"rep":14675,"total":18994,"name":"Rusk, Texas","coordinates":[-94.75638,32.10942]},
+{"dem":9122,"rep":8693,"total":18985,"name":"Green, Wisconsin","coordinates":[-89.60507,42.67552]},
+{"dem":4248,"rep":13633,"total":18979,"name":"Logan, Oklahoma","coordinates":[-97.45076,35.91415]},
+{"dem":5597,"rep":12577,"total":18966,"name":"Osage, Oklahoma","coordinates":[-96.40811,36.62429]},
+{"dem":3181,"rep":15191,"total":18959,"name":"Gordon, Georgia","coordinates":[-84.87386,34.50966]},
+{"dem":7489,"rep":10100,"total":18955,"name":"Kittitas, Washington","coordinates":[-120.6767,47.12444]},
+{"dem":11059,"rep":7303,"total":18952,"name":"Danville, Virginia","coordinates":[-79.40807,36.58333]},
+{"dem":5930,"rep":12310,"total":18901,"name":"Camden, Georgia","coordinates":[-81.64201,30.91335]},
+{"dem":5123,"rep":12891,"total":18863,"name":"Susquehanna, Pennsylvania","coordinates":[-75.80096,41.81966]},
+{"dem":4978,"rep":12155,"total":18807,"name":"McLeod, Minnesota","coordinates":[-94.27232,44.82165]},
+{"dem":7142,"rep":11228,"total":18802,"name":"Thomas, Georgia","coordinates":[-83.91981,30.86461]},
+{"dem":6972,"rep":10616,"total":18802,"name":"Emmet, Michigan","coordinates":[-84.98682,45.59009]},
+{"dem":12836,"rep":5789,"total":18792,"name":"Dallas, Alabama","coordinates":[-87.11435,32.33353]},
+{"dem":2922,"rep":14961,"total":18767,"name":"Putnam, Ohio","coordinates":[-84.12987,41.02453]},
+{"dem":3510,"rep":14691,"total":18755,"name":"McMinn, Tennessee","coordinates":[-84.61994,35.42447]},
+{"dem":4413,"rep":13808,"total":18749,"name":"Dale, Alabama","coordinates":[-85.60947,31.43065]},
+{"dem":4494,"rep":13375,"total":18739,"name":"Botetourt, Virginia","coordinates":[-79.79754,37.56548]},
+{"dem":2630,"rep":15700,"total":18727,"name":"Wood, Texas","coordinates":[-95.38216,32.78358]},
+{"dem":7713,"rep":9870,"total":18713,"name":"Jackson, North Carolina","coordinates":[-83.11996,35.28105]},
+{"dem":4727,"rep":13116,"total":18711,"name":"Franklin, Illinois","coordinates":[-88.92632,37.99185]},
+{"dem":4722,"rep":13233,"total":18699,"name":"Dickson, Tennessee","coordinates":[-87.36415,36.14553]},
+{"dem":3964,"rep":14287,"total":18694,"name":"Suwannee, Florida","coordinates":[-82.99275,30.18924]},
+{"dem":4882,"rep":12525,"total":18692,"name":"Allegany, New York","coordinates":[-78.02615,42.24785]},
+{"dem":4066,"rep":13838,"total":18675,"name":"Clinton, Ohio","coordinates":[-83.79568,39.43022]},
+{"dem":7107,"rep":10761,"total":18669,"name":"Lincoln, Louisiana","coordinates":[-92.6623,32.60182]},
+{"dem":5692,"rep":12556,"total":18628,"name":"Washington, Louisiana","coordinates":[-90.04625,30.85214]},
+{"dem":3583,"rep":14561,"total":18611,"name":"Lamar, Texas","coordinates":[-95.57034,33.66726]},
+{"dem":3877,"rep":14094,"total":18601,"name":"Mifflin, Pennsylvania","coordinates":[-77.65183,40.60161]},
+{"dem":2895,"rep":15168,"total":18566,"name":"Tazewell, Virginia","coordinates":[-81.56292,37.12539]},
+{"dem":3401,"rep":13551,"total":18559,"name":"Elko, Nevada","coordinates":[-115.35142,41.14113]},
+{"dem":4783,"rep":12943,"total":18558,"name":"Harrison, Indiana","coordinates":[-86.10376,38.18645]},
+{"dem":4766,"rep":12709,"total":18553,"name":"Phelps, Missouri","coordinates":[-91.79034,37.86632]},
+{"dem":4002,"rep":13752,"total":18534,"name":"Carter, Oklahoma","coordinates":[-97.28792,34.25184]},
+{"dem":3773,"rep":14020,"total":18501,"name":"Highland, Ohio","coordinates":[-83.60135,39.18442]},
+{"dem":6436,"rep":11121,"total":18492,"name":"Delta, Michigan","coordinates":[-86.90193,45.80522]},
+{"dem":4275,"rep":13483,"total":18488,"name":"Barren, Kentucky","coordinates":[-85.9321,36.9628]},
+{"dem":5145,"rep":12477,"total":18434,"name":"Warren, Pennsylvania","coordinates":[-79.29818,41.83429]},
+{"dem":2911,"rep":15081,"total":18369,"name":"Chilton, Alabama","coordinates":[-86.7266,32.85405]},
+{"dem":3901,"rep":13614,"total":18325,"name":"Tioga, Pennsylvania","coordinates":[-77.25728,41.76685]},
+{"dem":3767,"rep":13893,"total":18271,"name":"Alexander, North Carolina","coordinates":[-81.17746,35.92095]},
+{"dem":5064,"rep":12225,"total":18253,"name":"Coryell, Texas","coordinates":[-97.79802,31.39117]},
+{"dem":9726,"rep":7760,"total":18230,"name":"Hoke, North Carolina","coordinates":[-79.24196,35.01723]},
+{"dem":8460,"rep":8160,"total":18211,"name":"Carlton, Minnesota","coordinates":[-92.67104,46.60381]},
+{"dem":1324,"rep":15778,"total":18199,"name":"Campbell, Wyoming","coordinates":[-105.51701,44.19199]},
+{"dem":2300,"rep":14785,"total":18194,"name":"Sioux, Iowa","coordinates":[-96.178,43.08264]},
+{"dem":5368,"rep":11688,"total":18192,"name":"Defiance, Ohio","coordinates":[-84.48643,41.32167]},
+{"dem":8093,"rep":7265,"total":18173,"name":"Latah, Idaho","coordinates":[-116.73097,46.81892]},
+{"dem":6260,"rep":11542,"total":18145,"name":"Webster, Louisiana","coordinates":[-93.33982,32.73215]},
+{"dem":8859,"rep":8576,"total":18124,"name":"Oktibbeha, Mississippi","coordinates":[-88.87615,33.42231]},
+{"dem":4324,"rep":12810,"total":18111,"name":"Pettis, Missouri","coordinates":[-93.2852,38.72736]},
+{"dem":4594,"rep":12631,"total":18104,"name":"Champaign, Ohio","coordinates":[-83.7676,40.13277]},
+{"dem":7886,"rep":8437,"total":18097,"name":"Nicollet, Minnesota","coordinates":[-94.24568,44.35882]},
+{"dem":4798,"rep":12288,"total":18082,"name":"Marshall, Indiana","coordinates":[-86.26903,41.325]},
+{"dem":4247,"rep":12718,"total":17994,"name":"Shelby, Indiana","coordinates":[-85.79217,39.52413]},
+{"dem":10212,"rep":6262,"total":17993,"name":"Harrisonburg, Virginia","coordinates":[-78.8733,38.43625]},
+{"dem":7652,"rep":9146,"total":17980,"name":"Marshall, Iowa","coordinates":[-92.98145,42.04169]},
+{"dem":5169,"rep":11773,"total":17960,"name":"Warren, Virginia","coordinates":[-78.20759,38.90822]},
+{"dem":5493,"rep":11139,"total":17938,"name":"Ohio, West Virginia","coordinates":[-80.62072,40.09893]},
+{"dem":3086,"rep":14182,"total":17904,"name":"Stephens, Oklahoma","coordinates":[-97.8556,34.48136]},
+{"dem":6558,"rep":10520,"total":17869,"name":"Transylvania, North Carolina","coordinates":[-82.81666,35.2101]},
+{"dem":5482,"rep":10962,"total":17816,"name":"Marion, Iowa","coordinates":[-93.09384,41.33145]},
+{"dem":6004,"rep":10485,"total":17734,"name":"Amador, California","coordinates":[-120.65385,38.44355]},
+{"dem":4876,"rep":12127,"total":17734,"name":"Macon, North Carolina","coordinates":[-83.4219,35.15295]},
+{"dem":7437,"rep":8823,"total":17715,"name":"Mower, Minnesota","coordinates":[-92.75951,43.66624]},
+{"dem":3930,"rep":12495,"total":17712,"name":"Lea, New Mexico","coordinates":[-103.41327,32.79568]},
+{"dem":5061,"rep":11786,"total":17663,"name":"Branch, Michigan","coordinates":[-85.06688,41.91845]},
+{"dem":2450,"rep":11561,"total":17654,"name":"Iron, Utah","coordinates":[-113.30674,37.9093]},
+{"dem":3344,"rep":13811,"total":17637,"name":"Hancock, Mississippi","coordinates":[-89.48279,30.39164]},
+{"dem":6212,"rep":10528,"total":17631,"name":"Louisa, Virginia","coordinates":[-77.95979,37.9727]},
+{"dem":3160,"rep":13880,"total":17624,"name":"Yadkin, North Carolina","coordinates":[-80.66516,36.15876]},
+{"dem":3637,"rep":12925,"total":17614,"name":"Morrison, Minnesota","coordinates":[-94.26661,46.02048]},
+{"dem":3083,"rep":13635,"total":17609,"name":"Effingham, Illinois","coordinates":[-88.59284,39.04794]},
+{"dem":8026,"rep":8584,"total":17608,"name":"Door, Wisconsin","coordinates":[-87.04868,45.09341]},
+{"dem":3843,"rep":12859,"total":17573,"name":"Jackson, Indiana","coordinates":[-86.04251,38.91195]},
+{"dem":4273,"rep":12576,"total":17535,"name":"Clarion, Pennsylvania","coordinates":[-79.42036,41.19815]},
+{"dem":6180,"rep":10622,"total":17468,"name":"Union, Pennsylvania","coordinates":[-77.05547,40.96217]},
+{"dem":2881,"rep":13893,"total":17455,"name":"Howell, Missouri","coordinates":[-91.88736,36.77436]},
+{"dem":6305,"rep":10056,"total":17430,"name":"Webster, Iowa","coordinates":[-94.17583,42.43357]},
+{"dem":3945,"rep":12412,"total":17419,"name":"Clinton, Illinois","coordinates":[-89.42622,38.60629]},
+{"dem":8615,"rep":8180,"total":17391,"name":"Pasquotank, North Carolina","coordinates":[-76.26069,36.26519]},
+{"dem":9539,"rep":5925,"total":17381,"name":"Bennington, Vermont","coordinates":[-73.11146,43.03532]},
+{"dem":4358,"rep":11939,"total":17308,"name":"Williams, Ohio","coordinates":[-84.58432,41.56495]},
+{"dem":8146,"rep":7403,"total":17305,"name":"Whitman, Washington","coordinates":[-117.53538,46.90594]},
+{"dem":3904,"rep":12442,"total":17298,"name":"Wyoming, New York","coordinates":[-78.22856,42.70136]},
+{"dem":4779,"rep":11631,"total":17290,"name":"Madison, Ohio","coordinates":[-83.40088,39.8966]},
+{"dem":3711,"rep":12753,"total":17271,"name":"Pittsburg, Oklahoma","coordinates":[-95.74813,34.92554]},
+{"dem":5957,"rep":10521,"total":17270,"name":"Orange, Virginia","coordinates":[-78.00962,38.25019]},
+{"dem":3036,"rep":13650,"total":17259,"name":"Butler, Missouri","coordinates":[-90.40313,36.71518]},
+{"dem":3575,"rep":13168,"total":17256,"name":"Scott, Missouri","coordinates":[-89.56809,37.04779]},
+{"dem":7627,"rep":9091,"total":17251,"name":"Colleton, South Carolina","coordinates":[-80.65524,32.83501]},
+{"dem":4634,"rep":12085,"total":17246,"name":"Medina, Texas","coordinates":[-99.11108,29.35366]},
+{"dem":5208,"rep":10880,"total":17222,"name":"Becker, Minnesota","coordinates":[-95.74175,46.93762]},
+{"dem":3250,"rep":13362,"total":17221,"name":"Le Flore, Oklahoma","coordinates":[-94.69507,34.89735]},
+{"dem":7762,"rep":7958,"total":17218,"name":"Essex, New York","coordinates":[-73.77843,44.1096]},
+{"dem":4828,"rep":10699,"total":17201,"name":"Nez Perce, Idaho","coordinates":[-116.7609,46.33379]},
+{"dem":5827,"rep":10305,"total":17168,"name":"Mecosta, Michigan","coordinates":[-85.33275,43.63529]},
+{"dem":3231,"rep":12154,"total":17130,"name":"Sweetwater, Wyoming","coordinates":[-108.87567,41.66032]},
+{"dem":3186,"rep":13374,"total":17093,"name":"Monroe, Tennessee","coordinates":[-84.2497,35.44781]},
+{"dem":6298,"rep":9610,"total":17091,"name":"Okanogan, Washington","coordinates":[-119.74223,48.54845]},
+{"dem":4369,"rep":11859,"total":17074,"name":"Marion, Illinois","coordinates":[-88.92036,38.64823]},
+{"dem":6890,"rep":7602,"total":17060,"name":"Albany, Wyoming","coordinates":[-105.72188,41.66551]},
+{"dem":4200,"rep":11167,"total":17023,"name":"Fremont, Wyoming","coordinates":[-108.60893,43.05483]},
+{"dem":6897,"rep":9704,"total":17001,"name":"Halifax, Virginia","coordinates":[-78.93961,36.76646]},
+{"dem":4425,"rep":11695,"total":16999,"name":"Jefferson, Illinois","coordinates":[-88.92421,38.30077]},
+{"dem":3369,"rep":13201,"total":16977,"name":"Anderson, Texas","coordinates":[-95.66172,31.84126]},
+{"dem":7297,"rep":8221,"total":16952,"name":"Franklin, New York","coordinates":[-74.31067,44.59437]},
+{"dem":3942,"rep":12054,"total":16902,"name":"DeKalb, Indiana","coordinates":[-85.00018,41.40118]},
+{"dem":4060,"rep":11885,"total":16900,"name":"Powhatan, Virginia","coordinates":[-77.91285,37.5494]},
+{"dem":5855,"rep":10456,"total":16894,"name":"Union, Arkansas","coordinates":[-92.59814,33.16821]},
+{"dem":3904,"rep":12198,"total":16890,"name":"Noble, Indiana","coordinates":[-85.41727,41.40467]},
+{"dem":2894,"rep":13169,"total":16858,"name":"McClain, Oklahoma","coordinates":[-97.4498,35.01643]},
+{"dem":11380,"rep":5244,"total":16825,"name":"Washington, Mississippi","coordinates":[-90.94444,33.27317]},
+{"dem":6217,"rep":10017,"total":16807,"name":"Newberry, South Carolina","coordinates":[-81.59967,34.28988]},
+{"dem":3738,"rep":12172,"total":16803,"name":"Kay, Oklahoma","coordinates":[-97.14386,36.81488]},
+{"dem":4087,"rep":11655,"total":16790,"name":"Delta, Colorado","coordinates":[-107.86489,38.86159]},
+{"dem":3469,"rep":12919,"total":16790,"name":"Cherokee, Texas","coordinates":[-95.15634,31.84388]},
+{"dem":2948,"rep":13339,"total":16786,"name":"Chambers, Texas","coordinates":[-94.66944,29.69637]},
+{"dem":5748,"rep":10531,"total":16784,"name":"Waller, Texas","coordinates":[-95.98214,30.01359]},
+{"dem":3177,"rep":12840,"total":16743,"name":"Webster, Missouri","coordinates":[-92.87607,37.2808]},
+{"dem":2901,"rep":13089,"total":16715,"name":"Lawrence, Missouri","coordinates":[-93.83055,37.10658]},
+{"dem":3672,"rep":12322,"total":16698,"name":"Marshall, Kentucky","coordinates":[-88.33275,36.88201]},
+{"dem":2665,"rep":13471,"total":16633,"name":"Vernon, Louisiana","coordinates":[-93.18152,31.11056]},
+{"dem":2924,"rep":10907,"total":16625,"name":"Bingham, Idaho","coordinates":[-112.3992,43.21635]},
+{"dem":7144,"rep":8968,"total":16621,"name":"Natchitoches, Louisiana","coordinates":[-93.08261,31.73255]},
+{"dem":3308,"rep":12671,"total":16606,"name":"Graves, Kentucky","coordinates":[-88.64989,36.72334]},
+{"dem":5035,"rep":11165,"total":16586,"name":"Avoyelles, Louisiana","coordinates":[-91.98327,31.0885]},
+{"dem":6858,"rep":9312,"total":16581,"name":"Chesterfield, South Carolina","coordinates":[-80.15922,34.63701]},
+{"dem":6029,"rep":9281,"total":16571,"name":"Bureau, Illinois","coordinates":[-89.52837,41.4013]},
+{"dem":2887,"rep":13158,"total":16567,"name":"Stone, Missouri","coordinates":[-93.4737,36.751]},
+{"dem":4359,"rep":11445,"total":16557,"name":"Guernsey, Ohio","coordinates":[-81.49787,40.05666]},
+{"dem":3761,"rep":11948,"total":16548,"name":"Morrow, Ohio","coordinates":[-82.79772,40.52526]},
+{"dem":4015,"rep":11993,"total":16540,"name":"Floyd, Kentucky","coordinates":[-82.73972,37.55245]},
+{"dem":4086,"rep":11936,"total":16502,"name":"Harris, Georgia","coordinates":[-84.91243,32.73154]},
+{"dem":5456,"rep":9994,"total":16490,"name":"Cherokee, Oklahoma","coordinates":[-94.99679,35.90436]},
+{"dem":7016,"rep":7918,"total":16488,"name":"Franklin, Maine","coordinates":[-70.41493,44.97672]},
+{"dem":5666,"rep":9880,"total":16465,"name":"Gratiot, Michigan","coordinates":[-84.60469,43.29232]},
+{"dem":8619,"rep":6376,"total":16452,"name":"Silver Bow, Montana","coordinates":[-112.66007,45.89623]},
+{"dem":11690,"rep":3897,"total":16433,"name":"Santa Cruz, Arizona","coordinates":[-110.84522,31.52573]},
+{"dem":4002,"rep":11994,"total":16433,"name":"Navarro, Texas","coordinates":[-96.4769,32.04844]},
+{"dem":4374,"rep":11532,"total":16404,"name":"Franklin, Tennessee","coordinates":[-86.0992,35.15592]},
+{"dem":4470,"rep":10936,"total":16380,"name":"Orleans, New York","coordinates":[-78.22972,43.50228]},
+{"dem":6075,"rep":9093,"total":16365,"name":"Washington, Maine","coordinates":[-67.60935,44.967]},
+{"dem":4002,"rep":11725,"total":16363,"name":"Snyder, Pennsylvania","coordinates":[-77.07292,40.7554]},
+{"dem":8043,"rep":8009,"total":16310,"name":"Pike, Mississippi","coordinates":[-90.39772,31.17751]},
+{"dem":4025,"rep":11635,"total":16296,"name":"McKean, Pennsylvania","coordinates":[-78.57246,41.81459]},
+{"dem":4146,"rep":11546,"total":16277,"name":"Greenup, Kentucky","coordinates":[-82.93381,38.56356]},
+{"dem":2483,"rep":13190,"total":16243,"name":"Habersham, Georgia","coordinates":[-83.52587,34.63439]},
+{"dem":4706,"rep":10710,"total":16205,"name":"Clark, Kentucky","coordinates":[-84.14511,37.97031]},
+{"dem":6419,"rep":9157,"total":16184,"name":"Prince George, Virginia","coordinates":[-77.22099,37.18732]},
+{"dem":9557,"rep":5100,"total":16174,"name":"Summit, Colorado","coordinates":[-106.13755,39.62102]},
+{"dem":6215,"rep":8803,"total":16151,"name":"Lee, Iowa","coordinates":[-91.47715,40.64758]},
+{"dem":9556,"rep":6134,"total":16143,"name":"Liberty, Georgia","coordinates":[-81.45787,31.80745]},
+{"dem":2913,"rep":12164,"total":16131,"name":"Lincoln, Nebraska","coordinates":[-100.74448,41.05032]},
+{"dem":7970,"rep":7697,"total":16116,"name":"Baldwin, Georgia","coordinates":[-83.25545,33.05948]},
+{"dem":5452,"rep":9613,"total":16114,"name":"Brown, South Dakota","coordinates":[-98.35217,45.58925]},
+{"dem":2926,"rep":12235,"total":16111,"name":"Boone, Arkansas","coordinates":[-93.07923,36.30429]},
+{"dem":4273,"rep":11294,"total":16091,"name":"Miller, Arkansas","coordinates":[-93.9015,33.3055]},
+{"dem":6041,"rep":8808,"total":16051,"name":"Freeborn, Minnesota","coordinates":[-93.35028,43.6742]},
+{"dem":2553,"rep":12881,"total":16051,"name":"Laclede, Missouri","coordinates":[-92.59484,37.65969]},
+{"dem":4749,"rep":10367,"total":16049,"name":"Calloway, Kentucky","coordinates":[-88.27408,36.62097]},
+{"dem":3506,"rep":11649,"total":16043,"name":"Huntington, Indiana","coordinates":[-85.47859,40.82639]},
+{"dem":8324,"rep":7320,"total":16043,"name":"Iberville, Louisiana","coordinates":[-91.36584,30.27062]},
+{"dem":2380,"rep":13209,"total":16013,"name":"Upshur, Texas","coordinates":[-94.94118,32.73534]},
+{"dem":4949,"rep":9982,"total":15999,"name":"Cass, Minnesota","coordinates":[-94.3337,46.95174]},
+{"dem":3134,"rep":11705,"total":15978,"name":"Elbert, Colorado","coordinates":[-104.11407,39.31515]},
+{"dem":2352,"rep":13181,"total":15955,"name":"Cooke, Texas","coordinates":[-97.21034,33.63919]},
+{"dem":8410,"rep":6964,"total":15952,"name":"Crittenden, Arkansas","coordinates":[-90.31533,35.21187]},
+{"dem":2387,"rep":13267,"total":15940,"name":"Covington, Alabama","coordinates":[-86.44872,31.24398]},
+{"dem":3878,"rep":11297,"total":15924,"name":"Cheatham, Tennessee","coordinates":[-87.1008,36.25516]},
+{"dem":4579,"rep":10692,"total":15917,"name":"Huron, Michigan","coordinates":[-82.85704,43.90761]},
+{"dem":7058,"rep":8550,"total":15897,"name":"Bladen, North Carolina","coordinates":[-78.53948,34.59193]},
+{"dem":5524,"rep":10167,"total":15884,"name":"Monroe, Mississippi","coordinates":[-88.48503,33.89002]},
+{"dem":4053,"rep":10988,"total":15876,"name":"Lafayette, Missouri","coordinates":[-93.80263,39.0687]},
+{"dem":3080,"rep":11336,"total":15832,"name":"Morton, North Dakota","coordinates":[-101.29826,46.71081]},
+{"dem":6740,"rep":8583,"total":15818,"name":"Accomack, Virginia","coordinates":[-75.7578,37.76594]},
+{"dem":4960,"rep":10237,"total":15815,"name":"St. Bernard, Louisiana","coordinates":[-89.26349,29.91811]},
+{"dem":6133,"rep":8492,"total":15797,"name":"Fulton, Illinois","coordinates":[-90.20226,40.46524]},
+{"dem":3915,"rep":11111,"total":15784,"name":"Warren, Missouri","coordinates":[-91.1593,38.7619]},
+{"dem":4482,"rep":10849,"total":15764,"name":"Greene, Pennsylvania","coordinates":[-80.22565,39.8477]},
+{"dem":3423,"rep":11555,"total":15717,"name":"Mayes, Oklahoma","coordinates":[-95.23563,36.3038]},
+{"dem":3311,"rep":11826,"total":15716,"name":"Delaware, Oklahoma","coordinates":[-94.80821,36.39337]},
+{"dem":1201,"rep":8941,"total":15688,"name":"Madison, Idaho","coordinates":[-111.65699,43.78861]},
+{"dem":2821,"rep":12420,"total":15666,"name":"Lawrence, Tennessee","coordinates":[-87.39654,35.22047]},
+{"dem":6563,"rep":7952,"total":15627,"name":"Coos, New Hampshire","coordinates":[-71.28943,44.65254]},
+{"dem":6018,"rep":8475,"total":15624,"name":"Houghton, Michigan","coordinates":[-88.6519,46.99842]},
+{"dem":3379,"rep":11358,"total":15623,"name":"Whitley, Indiana","coordinates":[-85.50189,41.13642]},
+{"dem":4013,"rep":10785,"total":15552,"name":"Coshocton, Ohio","coordinates":[-81.9301,40.2967]},
+{"dem":4918,"rep":9603,"total":15543,"name":"Douglas, Washington","coordinates":[-119.69462,47.74176]},
+{"dem":4544,"rep":9933,"total":15529,"name":"Dodge, Nebraska","coordinates":[-96.64585,41.577]},
+{"dem":3772,"rep":11077,"total":15516,"name":"Knox, Indiana","coordinates":[-87.42035,38.68839]},
+{"dem":5528,"rep":8612,"total":15489,"name":"Lee, Illinois","coordinates":[-89.29936,41.74744]},
+{"dem":3721,"rep":11081,"total":15484,"name":"Gibson, Indiana","coordinates":[-87.58052,38.31739]},
+{"dem":3992,"rep":10543,"total":15459,"name":"Christian, Illinois","coordinates":[-89.27959,39.54552]},
+{"dem":5379,"rep":9122,"total":15456,"name":"Chippewa, Michigan","coordinates":[-84.52062,46.32181]},
+{"dem":8423,"rep":5953,"total":15411,"name":"Manassas, Virginia","coordinates":[-77.48263,38.7468]},
+{"dem":5057,"rep":9719,"total":15396,"name":"Amherst, Virginia","coordinates":[-79.15466,37.6293]},
+{"dem":7732,"rep":7386,"total":15395,"name":"Clarendon, South Carolina","coordinates":[-80.21788,33.66468]},
+{"dem":4744,"rep":10022,"total":15394,"name":"Clinton, Pennsylvania","coordinates":[-77.69636,41.26262]},
+{"dem":3395,"rep":11486,"total":15355,"name":"Bedford, Tennessee","coordinates":[-86.45829,35.51366]},
+{"dem":4348,"rep":10512,"total":15351,"name":"Wakulla, Florida","coordinates":[-84.37484,30.13943]},
+{"dem":4290,"rep":10357,"total":15337,"name":"Fayette, West Virginia","coordinates":[-81.08605,38.03093]},
+{"dem":4436,"rep":10000,"total":15298,"name":"Wexford, Michigan","coordinates":[-85.57004,44.33137]},
+{"dem":4023,"rep":10208,"total":15269,"name":"Livingston, Illinois","coordinates":[-88.55285,40.89437]},
+{"dem":10668,"rep":2727,"total":15260,"name":"Taos, New Mexico","coordinates":[-105.63798,36.57652]},
+{"dem":6245,"rep":8413,"total":15225,"name":"Dorchester, Maryland","coordinates":[-76.04743,38.42919]},
+{"dem":4458,"rep":10550,"total":15193,"name":"Lincoln, Mississippi","coordinates":[-90.45356,31.53521]},
+{"dem":3357,"rep":11152,"total":15182,"name":"Wayne, West Virginia","coordinates":[-82.42266,38.14364]},
+{"dem":4014,"rep":10529,"total":15173,"name":"Bryan, Georgia","coordinates":[-81.43854,32.01796]},
+{"dem":4172,"rep":10322,"total":15167,"name":"Pulaski, Virginia","coordinates":[-80.71344,37.06338]},
+{"dem":2701,"rep":12086,"total":15163,"name":"Wise, Virginia","coordinates":[-82.62156,36.97456]},
+{"dem":3362,"rep":11059,"total":15156,"name":"Montgomery, Indiana","coordinates":[-86.89271,40.04029]},
+{"dem":5594,"rep":8715,"total":15149,"name":"Wapello, Iowa","coordinates":[-92.40946,41.03127]},
+{"dem":2535,"rep":11115,"total":15095,"name":"Park, Wyoming","coordinates":[-109.59359,44.49238]},
+{"dem":2393,"rep":12238,"total":15078,"name":"Beauregard, Louisiana","coordinates":[-93.34025,30.64501]},
+{"dem":7431,"rep":7449,"total":15064,"name":"Panola, Mississippi","coordinates":[-89.96306,34.3652]},
+{"dem":9953,"rep":4864,"total":15054,"name":"Williamsburg, South Carolina","coordinates":[-79.71647,33.62646]},
+{"dem":3991,"rep":10003,"total":15022,"name":"Miami, Kansas","coordinates":[-94.83296,38.56677]},
+{"dem":4138,"rep":10228,"total":14995,"name":"Perry, Ohio","coordinates":[-82.23795,39.74318]},
+{"dem":4623,"rep":9182,"total":14971,"name":"Le Sueur, Minnesota","coordinates":[-93.73014,44.37342]},
+{"dem":6285,"rep":8288,"total":14945,"name":"Mecklenburg, Virginia","coordinates":[-78.36895,36.68725]},
+{"dem":5068,"rep":8668,"total":14916,"name":"Harvey, Kansas","coordinates":[-97.4367,38.05014]},
+{"dem":5199,"rep":8624,"total":14891,"name":"Crawford, Kansas","coordinates":[-94.85389,37.50582]},
+{"dem":4208,"rep":10360,"total":14882,"name":"Evangeline, Louisiana","coordinates":[-92.40408,30.72069]},
+{"dem":9592,"rep":3599,"total":14878,"name":"Rio Arriba, New Mexico","coordinates":[-106.69398,36.50966]},
+{"dem":6432,"rep":7147,"total":14863,"name":"Caroline, Virginia","coordinates":[-77.35234,38.03031]},
+{"dem":4605,"rep":9935,"total":14845,"name":"Escambia, Alabama","coordinates":[-87.1684,31.12228]},
+{"dem":8023,"rep":6587,"total":14839,"name":"Marshall, Mississippi","coordinates":[-89.50423,34.76618]},
+{"dem":3637,"rep":10431,"total":14831,"name":"Pontotoc, Oklahoma","coordinates":[-96.69197,34.72144]},
+{"dem":3627,"rep":10833,"total":14829,"name":"Lawrence, Alabama","coordinates":[-87.32186,34.52977]},
+{"dem":3382,"rep":10945,"total":14828,"name":"Washington, Texas","coordinates":[-96.41027,30.21507]},
+{"dem":4696,"rep":9076,"total":14800,"name":"Morgan, Illinois","coordinates":[-90.205,39.71766]},
+{"dem":4712,"rep":8979,"total":14796,"name":"Polk, Minnesota","coordinates":[-96.40002,47.77425]},
+{"dem":2684,"rep":11819,"total":14783,"name":"Alcorn, Mississippi","coordinates":[-88.5811,34.88656]},
+{"dem":6774,"rep":7239,"total":14757,"name":"Leelanau, Michigan","coordinates":[-86.05157,45.14618]},
+{"dem":4238,"rep":10149,"total":14732,"name":"Wharton, Texas","coordinates":[-96.22967,29.27848]},
+{"dem":3356,"rep":10637,"total":14715,"name":"Putnam, Indiana","coordinates":[-86.85337,39.66554]},
+{"dem":5370,"rep":8400,"total":14706,"name":"Lincoln, Wisconsin","coordinates":[-89.7423,45.33841]},
+{"dem":4877,"rep":9090,"total":14698,"name":"Alpena, Michigan","coordinates":[-83.42657,44.89495]},
+{"dem":5281,"rep":8505,"total":14685,"name":"Mason, Michigan","coordinates":[-86.75081,43.99663]},
+{"dem":7541,"rep":5007,"total":14649,"name":"Orange, Vermont","coordinates":[-72.36968,44.00339]},
+{"dem":2710,"rep":11428,"total":14605,"name":"Barry, Missouri","coordinates":[-93.83433,36.69937]},
+{"dem":3071,"rep":10720,"total":14600,"name":"Greene, Arkansas","coordinates":[-90.56634,36.1206]},
+{"dem":5137,"rep":8674,"total":14589,"name":"Charlevoix, Michigan","coordinates":[-85.45039,45.51316]},
+{"dem":3744,"rep":10133,"total":14566,"name":"Steuben, Indiana","coordinates":[-85.0024,41.64346]},
+{"dem":2927,"rep":10266,"total":14510,"name":"Sheridan, Wyoming","coordinates":[-106.88121,44.78136]},
+{"dem":3603,"rep":9745,"total":14444,"name":"Teller, Colorado","coordinates":[-105.18736,38.86997]},
+{"dem":3061,"rep":10888,"total":14437,"name":"Sequoyah, Oklahoma","coordinates":[-94.75075,35.50243]},
+{"dem":2646,"rep":10965,"total":14433,"name":"Platte, Nebraska","coordinates":[-97.51346,41.57686]},
+{"dem":3853,"rep":10025,"total":14426,"name":"Elk, Pennsylvania","coordinates":[-78.65393,41.42733]},
+{"dem":2711,"rep":10628,"total":14343,"name":"Madison, Nebraska","coordinates":[-97.60685,41.90992]},
+{"dem":3207,"rep":10076,"total":14317,"name":"Scotts Bluff, Nebraska","coordinates":[-103.70154,41.85033]},
+{"dem":3080,"rep":10775,"total":14277,"name":"Jefferson Davis, Louisiana","coordinates":[-92.81622,30.26952]},
+{"dem":8569,"rep":5444,"total":14276,"name":"Marion, South Carolina","coordinates":[-79.354,34.08361]},
+{"dem":4347,"rep":9584,"total":14219,"name":"Tift, Georgia","coordinates":[-83.52593,31.457]},
+{"dem":2867,"rep":11014,"total":14215,"name":"Polk, Georgia","coordinates":[-85.18833,33.99601]},
+{"dem":6352,"rep":6996,"total":14213,"name":"Vernon, Wisconsin","coordinates":[-90.82198,43.59936]},
+{"dem":3759,"rep":9701,"total":14209,"name":"Cass, Indiana","coordinates":[-86.35516,40.75379]},
+{"dem":5541,"rep":7484,"total":14196,"name":"Boone, Iowa","coordinates":[-93.93835,42.03864]},
+{"dem":3439,"rep":10023,"total":14194,"name":"Randolph, Illinois","coordinates":[-89.8212,38.05651]},
+{"dem":6579,"rep":7265,"total":14192,"name":"Chester, South Carolina","coordinates":[-81.16124,34.68934]},
+{"dem":2860,"rep":10844,"total":14181,"name":"Cherokee, North Carolina","coordinates":[-84.06144,35.13714]},
+{"dem":3170,"rep":10646,"total":14143,"name":"Lee, Georgia","coordinates":[-84.14668,31.81841]},
+{"dem":4009,"rep":9368,"total":14113,"name":"Caroline, Maryland","coordinates":[-75.83166,38.87153]},
+{"dem":6445,"rep":5534,"total":14075,"name":"Caledonia, Vermont","coordinates":[-72.11216,44.46879]},
+{"dem":3765,"rep":9556,"total":14066,"name":"Greenbrier, West Virginia","coordinates":[-80.45058,37.92441]},
+{"dem":4240,"rep":8831,"total":14050,"name":"Schoharie, New York","coordinates":[-74.43817,42.59129]},
+{"dem":1979,"rep":11651,"total":14038,"name":"Pickens, Georgia","coordinates":[-84.49035,34.45674]},
+{"dem":4889,"rep":8384,"total":14037,"name":"Goochland, Virginia","coordinates":[-77.91762,37.71881]},
+{"dem":1621,"rep":12017,"total":14026,"name":"Brown, Texas","coordinates":[-98.99845,31.76413]},
+{"dem":2430,"rep":10854,"total":14025,"name":"Lincoln, Oklahoma","coordinates":[-96.88139,35.70311]},
+{"dem":2567,"rep":10776,"total":14011,"name":"Garrett, Maryland","coordinates":[-79.27461,39.54729]},
+{"dem":7600,"rep":5230,"total":13986,"name":"Routt, Colorado","coordinates":[-106.9877,40.48366]},
+{"dem":5697,"rep":7236,"total":13980,"name":"Seneca, New York","coordinates":[-76.82708,42.78229]},
+{"dem":4385,"rep":8944,"total":13949,"name":"Okmulgee, Oklahoma","coordinates":[-95.96594,35.6435]},
+{"dem":3756,"rep":9301,"total":13932,"name":"Henry, Ohio","coordinates":[-84.06889,41.33158]},
+{"dem":7319,"rep":6256,"total":13928,"name":"Scotland, North Carolina","coordinates":[-79.47733,34.84002]},
+{"dem":4094,"rep":9588,"total":13915,"name":"Coffee, Georgia","coordinates":[-82.84494,31.54924]},
+{"dem":5784,"rep":7843,"total":13900,"name":"Chambers, Alabama","coordinates":[-85.39403,32.9155]},
+{"dem":2160,"rep":11210,"total":13893,"name":"Erath, Texas","coordinates":[-98.2205,32.23666]},
+{"dem":4678,"rep":8232,"total":13844,"name":"Benton, Iowa","coordinates":[-92.05763,42.09254]},
+{"dem":7757,"rep":5874,"total":13836,"name":"Adams, Mississippi","coordinates":[-91.35179,31.48622]},
+{"dem":9046,"rep":4590,"total":13824,"name":"Bolivar, Mississippi","coordinates":[-90.88411,33.79913]},
+{"dem":2804,"rep":10478,"total":13818,"name":"Bryan, Oklahoma","coordinates":[-96.26413,33.964]},
+{"dem":4580,"rep":8191,"total":13811,"name":"Pine, Minnesota","coordinates":[-92.76309,46.10094]},
+{"dem":5768,"rep":6538,"total":13803,"name":"Tillamook, Oregon","coordinates":[-123.75929,45.45588]},
+{"dem":2929,"rep":10277,"total":13801,"name":"Greene, Indiana","coordinates":[-87.00477,39.04714]},
+{"dem":12021,"rep":1451,"total":13786,"name":"Petersburg, Virginia","coordinates":[-77.39236,37.20473]},
+{"dem":3763,"rep":8708,"total":13779,"name":"Brown, Minnesota","coordinates":[-94.73364,44.24654]},
+{"dem":2067,"rep":11312,"total":13774,"name":"Whitley, Kentucky","coordinates":[-84.14464,36.75802]},
+{"dem":2697,"rep":10469,"total":13770,"name":"Van Wert, Ohio","coordinates":[-84.58577,40.85552]},
+{"dem":2631,"rep":10438,"total":13763,"name":"Polk, Missouri","coordinates":[-93.40081,37.61676]},
+{"dem":3226,"rep":9949,"total":13693,"name":"Jackson, Ohio","coordinates":[-82.61414,39.01347]},
+{"dem":5636,"rep":7364,"total":13675,"name":"Trempealeau, Wisconsin","coordinates":[-91.35886,44.30305]},
+{"dem":4651,"rep":8618,"total":13673,"name":"Atascosa, Texas","coordinates":[-98.53538,28.89147]},
+{"dem":4302,"rep":8683,"total":13672,"name":"Cheboygan, Michigan","coordinates":[-84.49543,45.47602]},
+{"dem":2559,"rep":10663,"total":13668,"name":"Carroll, Virginia","coordinates":[-80.72783,36.73196]},
+{"dem":3959,"rep":9356,"total":13653,"name":"Okeechobee, Florida","coordinates":[-80.88738,27.38559]},
+{"dem":3463,"rep":9898,"total":13624,"name":"Colquitt, Georgia","coordinates":[-83.76977,31.1897]},
+{"dem":6964,"rep":5890,"total":13617,"name":"Val Verde, Texas","coordinates":[-101.14332,29.87528]},
+{"dem":2881,"rep":9936,"total":13614,"name":"Independence, Arkansas","coordinates":[-91.55994,35.73749]},
+{"dem":3535,"rep":9540,"total":13612,"name":"Warren, Tennessee","coordinates":[-85.77734,35.67824]},
+{"dem":4770,"rep":8169,"total":13612,"name":"Vilas, Wisconsin","coordinates":[-89.50125,46.04984]},
+{"dem":5760,"rep":7025,"total":13597,"name":"Fluvanna, Virginia","coordinates":[-78.28349,37.83058]},
+{"dem":4227,"rep":8646,"total":13596,"name":"Clark, Wisconsin","coordinates":[-90.60995,44.73934]},
+{"dem":10397,"rep":2816,"total":13588,"name":"Maverick, Texas","coordinates":[-100.31667,28.72978]},
+{"dem":4448,"rep":8469,"total":13582,"name":"Antrim, Michigan","coordinates":[-85.17563,45.00545]},
+{"dem":5765,"rep":7447,"total":13575,"name":"Dinwiddie, Virginia","coordinates":[-77.63549,37.07349]},
+{"dem":4958,"rep":7697,"total":13563,"name":"Woodford, Kentucky","coordinates":[-84.74885,38.0431]},
+{"dem":4326,"rep":8546,"total":13544,"name":"Jefferson, Indiana","coordinates":[-85.44009,38.7836]},
+{"dem":5356,"rep":7208,"total":13538,"name":"Bremer, Iowa","coordinates":[-92.32735,42.78089]},
+{"dem":2510,"rep":10707,"total":13538,"name":"Hopkins, Texas","coordinates":[-95.56543,33.14896]},
+{"dem":3302,"rep":9287,"total":13513,"name":"Adams, Nebraska","coordinates":[-98.50004,40.52063]},
+{"dem":5165,"rep":8068,"total":13500,"name":"De Soto, Louisiana","coordinates":[-93.74079,32.05924]},
+{"dem":2922,"rep":9876,"total":13488,"name":"Pulaski, Missouri","coordinates":[-92.20702,37.82483]},
+{"dem":2766,"rep":9975,"total":13482,"name":"Miami, Indiana","coordinates":[-86.04425,40.77288]},
+{"dem":3018,"rep":9821,"total":13468,"name":"Wabash, Indiana","coordinates":[-85.79519,40.84374]},
+{"dem":3500,"rep":9412,"total":13424,"name":"Ashe, North Carolina","coordinates":[-81.49933,36.44346]},
+{"dem":2590,"rep":10609,"total":13419,"name":"Jasper, Texas","coordinates":[-94.02229,30.75293]},
+{"dem":4249,"rep":8505,"total":13389,"name":"Clare, Michigan","coordinates":[-84.83832,43.99113]},
+{"dem":3329,"rep":9382,"total":13378,"name":"Jasper, Indiana","coordinates":[-87.11881,41.01768]},
+{"dem":3121,"rep":9035,"total":13370,"name":"Curry, New Mexico","coordinates":[-103.34605,34.57298]},
+{"dem":4345,"rep":8345,"total":13361,"name":"Iosco, Michigan","coordinates":[-82.84944,44.32948]},
+{"dem":2554,"rep":10398,"total":13348,"name":"Lincoln, Tennessee","coordinates":[-86.5934,35.14278]},
+{"dem":2770,"rep":10046,"total":13343,"name":"Wythe, Virginia","coordinates":[-81.083,36.89986]},
+{"dem":2816,"rep":10180,"total":13336,"name":"Dyer, Tennessee","coordinates":[-89.3983,36.05419]},
+{"dem":1876,"rep":11079,"total":13291,"name":"Stoddard, Missouri","coordinates":[-89.94748,36.85155]},
+{"dem":2918,"rep":9666,"total":13216,"name":"Marshall, West Virginia","coordinates":[-80.67179,39.85442]},
+{"dem":2288,"rep":10446,"total":13214,"name":"Gillespie, Texas","coordinates":[-98.94185,30.32509]},
+{"dem":5670,"rep":7061,"total":13204,"name":"Mississippi, Arkansas","coordinates":[-90.0522,35.76694]},
+{"dem":2885,"rep":9680,"total":13190,"name":"Plymouth, Iowa","coordinates":[-96.21586,42.73758]},
+{"dem":2586,"rep":10005,"total":13185,"name":"Wells, Indiana","coordinates":[-85.21297,40.73527]},
+{"dem":4776,"rep":7530,"total":13181,"name":"Lake, Montana","coordinates":[-114.08368,47.6429]},
+{"dem":5056,"rep":7693,"total":13168,"name":"Pike, Alabama","coordinates":[-85.9416,31.79865]},
+{"dem":3923,"rep":8580,"total":13165,"name":"Dickinson, Michigan","coordinates":[-87.86612,46.01282]},
+{"dem":3811,"rep":8837,"total":13144,"name":"Wyoming, Pennsylvania","coordinates":[-76.00873,41.52517]},
+{"dem":5288,"rep":6795,"total":13092,"name":"McDonough, Illinois","coordinates":[-90.67895,40.4558]},
+{"dem":2805,"rep":9648,"total":13090,"name":"Adams, Indiana","coordinates":[-84.93613,40.74573]},
+{"dem":3154,"rep":9254,"total":13074,"name":"Carroll, Ohio","coordinates":[-81.09078,40.57988]},
+{"dem":2504,"rep":9750,"total":13064,"name":"Iroquois, Illinois","coordinates":[-87.8336,40.74886]},
+{"dem":3272,"rep":9393,"total":13060,"name":"Muhlenberg, Kentucky","coordinates":[-87.13409,37.21381]},
+{"dem":4287,"rep":8141,"total":13041,"name":"Roscommon, Michigan","coordinates":[-84.61127,44.33951]},
+{"dem":5749,"rep":7140,"total":13031,"name":"Clarke, Alabama","coordinates":[-87.81862,31.68552]},
+{"dem":3710,"rep":8340,"total":13017,"name":"Mille Lacs, Minnesota","coordinates":[-93.63299,45.92904]},
+{"dem":1432,"rep":11274,"total":12984,"name":"Marion, Alabama","coordinates":[-87.88155,34.13821]},
+{"dem":2386,"rep":10336,"total":12984,"name":"Pontotoc, Mississippi","coordinates":[-89.03723,34.22708]},
+{"dem":6741,"rep":6103,"total":12982,"name":"Copiah, Mississippi","coordinates":[-90.44875,31.86691]},
+{"dem":3504,"rep":8630,"total":12978,"name":"Montgomery, Illinois","coordinates":[-89.47814,39.22806]},
+{"dem":2547,"rep":10108,"total":12970,"name":"Hill, Texas","coordinates":[-97.13066,31.98268]},
+{"dem":3249,"rep":8431,"total":12968,"name":"Union, Oregon","coordinates":[-117.99914,45.30408]},
+{"dem":4281,"rep":8040,"total":12946,"name":"Boyle, Kentucky","coordinates":[-84.86835,37.6181]},
+{"dem":3063,"rep":9508,"total":12945,"name":"Henry, Tennessee","coordinates":[-88.30028,36.32529]},
+{"dem":2994,"rep":9419,"total":12938,"name":"Marion, Missouri","coordinates":[-91.63537,39.80753]},
+{"dem":3484,"rep":8452,"total":12933,"name":"Cass, Nebraska","coordinates":[-96.1406,40.90987]},
+{"dem":2628,"rep":9822,"total":12931,"name":"Gallia, Ohio","coordinates":[-82.30174,38.81704]},
+{"dem":2665,"rep":9750,"total":12890,"name":"Smyth, Virginia","coordinates":[-81.53978,36.84231]},
+{"dem":3973,"rep":7853,"total":12858,"name":"Montezuma, Colorado","coordinates":[-108.59578,37.33802]},
+{"dem":3775,"rep":8497,"total":12838,"name":"Hocking, Ohio","coordinates":[-82.48344,39.49034]},
+{"dem":6276,"rep":5288,"total":12811,"name":"Grant, New Mexico","coordinates":[-108.3815,32.73208]},
+{"dem":2471,"rep":9806,"total":12810,"name":"Ripley, Indiana","coordinates":[-85.26049,39.10022]},
+{"dem":1735,"rep":10069,"total":12807,"name":"Williams, North Dakota","coordinates":[-103.50133,48.35576]},
+{"dem":995,"rep":9810,"total":12797,"name":"Uintah, Utah","coordinates":[-109.51774,40.12588]},
+{"dem":1965,"rep":10477,"total":12773,"name":"Gilmer, Georgia","coordinates":[-84.45462,34.6905]},
+{"dem":7241,"rep":3570,"total":12762,"name":"Lamoille, Vermont","coordinates":[-72.63892,44.6037]},
+{"dem":3226,"rep":8549,"total":12742,"name":"McPherson, Kansas","coordinates":[-97.64748,38.39581]},
+{"dem":5383,"rep":6927,"total":12712,"name":"West Baton Rouge, Louisiana","coordinates":[-91.3098,30.46405]},
+{"dem":3262,"rep":8909,"total":12702,"name":"Hancock, West Virginia","coordinates":[-80.57016,40.51695]},
+{"dem":3571,"rep":8832,"total":12687,"name":"Monroe, Georgia","coordinates":[-83.92293,33.01743]},
+{"dem":4879,"rep":6748,"total":12680,"name":"Brookings, South Dakota","coordinates":[-96.79779,44.37667]},
+{"dem":2913,"rep":9163,"total":12669,"name":"Currituck, North Carolina","coordinates":[-75.94122,36.37217]},
+{"dem":2470,"rep":9538,"total":12659,"name":"Preston, West Virginia","coordinates":[-79.66886,39.46902]},
+{"dem":2112,"rep":10294,"total":12634,"name":"Baker, Florida","coordinates":[-82.30228,30.32444]},
+{"dem":7314,"rep":3921,"total":12627,"name":"Teton, Wyoming","coordinates":[-110.42608,44.04866]},
+{"dem":3551,"rep":8270,"total":12621,"name":"Cowley, Kansas","coordinates":[-96.83724,37.2345]},
+{"dem":4300,"rep":7212,"total":12611,"name":"Curry, Oregon","coordinates":[-124.21092,42.46643]},
+{"dem":4979,"rep":6915,"total":12599,"name":"Manistee, Michigan","coordinates":[-86.60296,44.35038]},
+{"dem":3961,"rep":8305,"total":12551,"name":"Jones, Georgia","coordinates":[-83.56219,33.02166]},
+{"dem":3556,"rep":8266,"total":12538,"name":"Otsego, Michigan","coordinates":[-84.5766,45.02178]},
+{"dem":2248,"rep":9870,"total":12532,"name":"Campbell, Tennessee","coordinates":[-84.15924,36.40159]},
+{"dem":3794,"rep":8124,"total":12472,"name":"Gladwin, Michigan","coordinates":[-84.38981,43.98975]},
+{"dem":3521,"rep":8404,"total":12467,"name":"Posey, Indiana","coordinates":[-87.86865,38.02761]},
+{"dem":1800,"rep":10341,"total":12458,"name":"Murray, Georgia","coordinates":[-84.73798,34.79709]},
+{"dem":2220,"rep":9619,"total":12425,"name":"Lumpkin, Georgia","coordinates":[-83.99892,34.56814]},
+{"dem":3313,"rep":8181,"total":12401,"name":"Logan, Illinois","coordinates":[-89.3653,40.12927]},
+{"dem":6694,"rep":5420,"total":12379,"name":"Jim Wells, Texas","coordinates":[-98.09081,27.73351]},
+{"dem":2092,"rep":9897,"total":12359,"name":"Logan, West Virginia","coordinates":[-81.94085,37.83059]},
+{"dem":2391,"rep":9726,"total":12344,"name":"Cass, Texas","coordinates":[-94.35757,33.08369]},
+{"dem":1753,"rep":9755,"total":12322,"name":"Stark, North Dakota","coordinates":[-102.66202,46.81703]},
+{"dem":2920,"rep":8717,"total":12294,"name":"Hardin, Ohio","coordinates":[-83.66407,40.66041]},
+{"dem":4649,"rep":6552,"total":12288,"name":"Lyon, Kansas","coordinates":[-96.16164,38.4554]},
+{"dem":3191,"rep":8104,"total":12282,"name":"Meeker, Minnesota","coordinates":[-94.52734,45.12315]},
+{"dem":2320,"rep":9637,"total":12274,"name":"Austin, Texas","coordinates":[-96.27016,29.8919]},
+{"dem":6669,"rep":4809,"total":12260,"name":"Iowa, Wisconsin","coordinates":[-90.13369,43.00102]},
+{"dem":2426,"rep":9526,"total":12249,"name":"Obion, Tennessee","coordinates":[-89.15002,36.35799]},
+{"dem":2330,"rep":9521,"total":12246,"name":"Russell, Virginia","coordinates":[-82.09593,36.93341]},
+{"dem":3546,"rep":8118,"total":12242,"name":"New Kent, Virginia","coordinates":[-76.99932,37.51015]},
+{"dem":3026,"rep":8660,"total":12231,"name":"Meade, Kentucky","coordinates":[-86.20086,37.96747]},
+{"dem":4202,"rep":7226,"total":12225,"name":"Salem, Virginia","coordinates":[-80.05524,37.28533]},
+{"dem":3825,"rep":7256,"total":12215,"name":"Lyon, Minnesota","coordinates":[-95.84726,44.40919]},
+{"dem":3500,"rep":8366,"total":12196,"name":"Matagorda, Texas","coordinates":[-96.00153,28.77476]},
+{"dem":2663,"rep":9020,"total":12187,"name":"Jackson, West Virginia","coordinates":[-81.67771,38.83423]},
+{"dem":3440,"rep":8513,"total":12184,"name":"Ware, Georgia","coordinates":[-82.4215,31.05088]},
+{"dem":2772,"rep":9008,"total":12184,"name":"Weakley, Tennessee","coordinates":[-88.72119,36.30359]},
+{"dem":2637,"rep":8511,"total":12172,"name":"Crook, Oregon","coordinates":[-120.37158,44.16305]},
+{"dem":3301,"rep":8025,"total":12134,"name":"Graham, Arizona","coordinates":[-109.87831,32.93182]},
+{"dem":1981,"rep":9791,"total":12126,"name":"Cocke, Tennessee","coordinates":[-83.11922,35.91619]},
+{"dem":3063,"rep":6115,"total":12120,"name":"Wasatch, Utah","coordinates":[-111.16156,40.33488]},
+{"dem":2924,"rep":8913,"total":12098,"name":"Bradford, Florida","coordinates":[-82.16667,29.95238]},
+{"dem":4729,"rep":7061,"total":12092,"name":"Union, South Carolina","coordinates":[-81.61589,34.69039]},
+{"dem":4795,"rep":6691,"total":12092,"name":"Caldwell, Texas","coordinates":[-97.62814,29.83239]},
+{"dem":2101,"rep":9458,"total":12085,"name":"Cleburne, Arkansas","coordinates":[-92.05995,35.56631]},
+{"dem":6418,"rep":5456,"total":12085,"name":"St. James, Louisiana","coordinates":[-90.79395,30.02477]},
+{"dem":1963,"rep":9852,"total":12063,"name":"Union, Georgia","coordinates":[-83.98925,34.83333]},
+{"dem":4007,"rep":7341,"total":12059,"name":"King George, Virginia","coordinates":[-77.16263,38.27717]},
+{"dem":5185,"rep":5159,"total":12047,"name":"Orleans, Vermont","coordinates":[-72.25163,44.82844]},
+{"dem":2132,"rep":9548,"total":12044,"name":"Fannin, Texas","coordinates":[-96.10498,33.59116]},
+{"dem":2197,"rep":9466,"total":12040,"name":"Franklin, Alabama","coordinates":[-87.84281,34.44198]},
+{"dem":1761,"rep":9885,"total":12012,"name":"Knox, Kentucky","coordinates":[-83.85555,36.8885]},
+{"dem":2637,"rep":8679,"total":12004,"name":"Montgomery, Kansas","coordinates":[-95.7424,37.18953]},
+{"dem":3792,"rep":7669,"total":11999,"name":"Waushara, Wisconsin","coordinates":[-89.23978,44.11282]},
+{"dem":2425,"rep":9201,"total":11998,"name":"Madison, Georgia","coordinates":[-83.20373,34.12852]},
+{"dem":2783,"rep":8485,"total":11993,"name":"Todd, Minnesota","coordinates":[-94.90057,46.06656]},
+{"dem":5846,"rep":5897,"total":11964,"name":"Martin, North Carolina","coordinates":[-77.1196,35.8473]},
+{"dem":4781,"rep":5833,"total":11964,"name":"Wasco, Oregon","coordinates":[-121.16506,45.16453]},
+{"dem":3151,"rep":8145,"total":11960,"name":"Morgan, Colorado","coordinates":[-103.81221,40.26315]},
+{"dem":2742,"rep":8466,"total":11947,"name":"Ellis, Kansas","coordinates":[-99.31731,38.91459]},
+{"dem":3149,"rep":8172,"total":11944,"name":"Hot Spring, Arkansas","coordinates":[-92.94414,34.31517]},
+{"dem":2819,"rep":8531,"total":11936,"name":"Clinton, Indiana","coordinates":[-86.47756,40.30594]},
+{"dem":3973,"rep":7228,"total":11930,"name":"Oceana, Michigan","coordinates":[-86.80757,43.64725]},
+{"dem":3539,"rep":7902,"total":11879,"name":"Pike, Ohio","coordinates":[-83.05291,39.07134]},
+{"dem":5155,"rep":6502,"total":11852,"name":"Morehouse, Louisiana","coordinates":[-91.80039,32.82]},
+{"dem":3356,"rep":7411,"total":11842,"name":"Lawrence, South Dakota","coordinates":[-103.80494,44.34876]},
+{"dem":3866,"rep":6989,"total":11832,"name":"Wabasha, Minnesota","coordinates":[-92.23334,44.28969]},
+{"dem":1674,"rep":9761,"total":11823,"name":"White, Georgia","coordinates":[-83.74341,34.64377]},
+{"dem":1923,"rep":9632,"total":11812,"name":"Fannin, Georgia","coordinates":[-84.31733,34.86654]},
+{"dem":1448,"rep":9900,"total":11765,"name":"Dawson, Georgia","coordinates":[-84.17326,34.4426]},
+{"dem":4764,"rep":6789,"total":11761,"name":"Pointe Coupee, Louisiana","coordinates":[-91.60462,30.70831]},
+{"dem":1525,"rep":9994,"total":11758,"name":"Geneva, Alabama","coordinates":[-85.82102,31.09238]},
+{"dem":9289,"rep":2224,"total":11740,"name":"Starr, Texas","coordinates":[-98.74023,26.5309]},
+{"dem":4073,"rep":7123,"total":11732,"name":"Juneau, Wisconsin","coordinates":[-90.11398,43.93283]},
+{"dem":5834,"rep":5637,"total":11698,"name":"Dillon, South Carolina","coordinates":[-79.37496,34.39017]},
+{"dem":3677,"rep":7836,"total":11693,"name":"Marion, Mississippi","coordinates":[-89.82171,31.23016]},
+{"dem":3174,"rep":7764,"total":11669,"name":"Codington, South Dakota","coordinates":[-97.19883,44.96628]},
+{"dem":4491,"rep":6842,"total":11644,"name":"Edgefield, South Carolina","coordinates":[-81.96824,33.77649]},
+{"dem":3926,"rep":7495,"total":11627,"name":"Tate, Mississippi","coordinates":[-89.9431,34.64955]},
+{"dem":2223,"rep":8441,"total":11621,"name":"Meade, South Dakota","coordinates":[-102.71416,44.60528]},
+{"dem":2050,"rep":9070,"total":11564,"name":"Mineral, West Virginia","coordinates":[-78.95668,39.40478]},
+{"dem":4150,"rep":7130,"total":11540,"name":"Montgomery, North Carolina","coordinates":[-79.9066,35.33441]},
+{"dem":3423,"rep":7261,"total":11505,"name":"Hubbard, Minnesota","coordinates":[-94.91328,47.09555]},
+{"dem":8400,"rep":2477,"total":11502,"name":"Dukes, Massachusetts","coordinates":[-70.70149,41.38096]},
+{"dem":2012,"rep":9235,"total":11496,"name":"Union, Mississippi","coordinates":[-89.00233,34.48953]},
+{"dem":976,"rep":8436,"total":11475,"name":"Jefferson, Idaho","coordinates":[-112.31858,43.79696]},
+{"dem":2852,"rep":8184,"total":11455,"name":"Marshall, Tennessee","coordinates":[-86.76586,35.46834]},
+{"dem":3158,"rep":7856,"total":11452,"name":"Montgomery, Kentucky","coordinates":[-83.91241,38.0381]},
+{"dem":5956,"rep":5187,"total":11427,"name":"Jasper, South Carolina","coordinates":[-81.02162,32.43059]},
+{"dem":2634,"rep":8242,"total":11422,"name":"Anderson, Kentucky","coordinates":[-84.98641,38.00539]},
+{"dem":3874,"rep":7393,"total":11419,"name":"Simpson, Mississippi","coordinates":[-89.9177,31.9025]},
+{"dem":1750,"rep":9285,"total":11416,"name":"Miller, Missouri","coordinates":[-92.42987,38.21668]},
+{"dem":2572,"rep":8276,"total":11384,"name":"Saline, Illinois","coordinates":[-88.54502,37.7515]},
+{"dem":2636,"rep":8209,"total":11382,"name":"Washington, Indiana","coordinates":[-86.10475,38.60061]},
+{"dem":5254,"rep":5344,"total":11362,"name":"Winneshiek, Iowa","coordinates":[-91.85078,43.29298]},
+{"dem":2326,"rep":8659,"total":11359,"name":"Adams, Ohio","coordinates":[-83.47808,38.83446]},
+{"dem":1475,"rep":9585,"total":11357,"name":"Haralson, Georgia","coordinates":[-85.22006,33.79516]},
+{"dem":4462,"rep":6121,"total":11334,"name":"Jo Daviess, Illinois","coordinates":[-90.21147,42.36239]},
+{"dem":3146,"rep":7400,"total":11325,"name":"Lewis, New York","coordinates":[-75.44414,43.78268]},
+{"dem":2553,"rep":8320,"total":11306,"name":"Taylor, Kentucky","coordinates":[-85.32805,37.36621]},
+{"dem":2306,"rep":8531,"total":11282,"name":"Clay, Indiana","coordinates":[-87.11585,39.39392]},
+{"dem":3926,"rep":6783,"total":11269,"name":"Madison, North Carolina","coordinates":[-82.71262,35.8642]},
+{"dem":6945,"rep":4027,"total":11267,"name":"Fairfield, South Carolina","coordinates":[-81.127,34.39566]},
+{"dem":6707,"rep":3744,"total":11264,"name":"Fredericksburg, Virginia","coordinates":[-77.48665,38.29927]},
+{"dem":5333,"rep":5133,"total":11255,"name":"Staunton, Virginia","coordinates":[-79.06187,38.15797]},
+{"dem":4888,"rep":5391,"total":11250,"name":"Chaffee, Colorado","coordinates":[-106.31668,38.73822]},
+{"dem":2144,"rep":8743,"total":11174,"name":"Fayette, Texas","coordinates":[-96.92123,29.87788]},
+{"dem":2739,"rep":7995,"total":11162,"name":"Fayette, Ohio","coordinates":[-83.46189,39.55524]},
+{"dem":2264,"rep":8637,"total":11156,"name":"Washington, Florida","coordinates":[-85.66279,30.60221]},
+{"dem":2364,"rep":8224,"total":11150,"name":"Jennings, Indiana","coordinates":[-85.6281,38.99622]},
+{"dem":7787,"rep":3212,"total":11140,"name":"Leflore, Mississippi","coordinates":[-90.29493,33.54978]},
+{"dem":2917,"rep":7970,"total":11137,"name":"Giles, Tennessee","coordinates":[-87.03531,35.20272]},
+{"dem":2121,"rep":8490,"total":11127,"name":"Decatur, Indiana","coordinates":[-85.49983,39.30597]},
+{"dem":4615,"rep":6195,"total":11115,"name":"Hendry, Florida","coordinates":[-81.15211,26.53996]},
+{"dem":4792,"rep":6026,"total":11070,"name":"Caswell, North Carolina","coordinates":[-79.3396,36.39429]},
+{"dem":1942,"rep":8660,"total":11062,"name":"Rhea, Tennessee","coordinates":[-84.94954,35.60059]},
+{"dem":3872,"rep":6271,"total":11055,"name":"Fillmore, Minnesota","coordinates":[-92.09393,43.67918]},
+{"dem":1788,"rep":8720,"total":11054,"name":"Holmes, Ohio","coordinates":[-81.93,40.56559]},
+{"dem":1969,"rep":8669,"total":11013,"name":"Franklin, Indiana","coordinates":[-85.06696,39.40976]},
+{"dem":2288,"rep":8229,"total":11010,"name":"Shelby, Illinois","coordinates":[-88.79886,39.38492]},
+{"dem":5615,"rep":5233,"total":10994,"name":"Marengo, Alabama","coordinates":[-87.79109,32.24759]},
+{"dem":2679,"rep":7748,"total":10991,"name":"Jersey, Illinois","coordinates":[-90.36138,39.08019]},
+{"dem":5520,"rep":5276,"total":10974,"name":"Sumter, Georgia","coordinates":[-84.20429,32.04226]},
+{"dem":2892,"rep":7185,"total":10965,"name":"Franklin, Kansas","coordinates":[-95.27896,38.55801]},
+{"dem":1728,"rep":8875,"total":10956,"name":"Texas, Missouri","coordinates":[-91.96447,37.31425]},
+{"dem":2210,"rep":7830,"total":10938,"name":"Churchill, Nevada","coordinates":[-118.26416,39.5377]},
+{"dem":3475,"rep":7292,"total":10934,"name":"Upson, Georgia","coordinates":[-84.29228,32.88183]},
+{"dem":3735,"rep":6768,"total":10934,"name":"Polk, North Carolina","coordinates":[-82.16762,35.2779]},
+{"dem":3943,"rep":6173,"total":10929,"name":"Washington, Iowa","coordinates":[-91.72505,41.3294]},
+{"dem":6510,"rep":3272,"total":10910,"name":"Hood River, Oregon","coordinates":[-121.65597,45.51177]},
+{"dem":3931,"rep":6714,"total":10904,"name":"Assumption, Louisiana","coordinates":[-91.05246,29.89885]},
+{"dem":2755,"rep":7778,"total":10899,"name":"Logan, Kentucky","coordinates":[-86.88128,36.8596]},
+{"dem":2691,"rep":7972,"total":10894,"name":"Union, Louisiana","coordinates":[-92.37565,32.82934]},
+{"dem":5562,"rep":3359,"total":10885,"name":"Los Alamos, New Mexico","coordinates":[-106.30796,35.87004]},
+{"dem":2735,"rep":7629,"total":10876,"name":"Randolph, West Virginia","coordinates":[-79.86778,38.78109]},
+{"dem":3090,"rep":7104,"total":10869,"name":"Ray, Missouri","coordinates":[-93.99574,39.3084]},
+{"dem":2832,"rep":7696,"total":10862,"name":"Marion, Tennessee","coordinates":[-85.61839,35.13342]},
+{"dem":2523,"rep":7555,"total":10860,"name":"Saunders, Nebraska","coordinates":[-96.64209,41.22338]},
+{"dem":2623,"rep":7424,"total":10832,"name":"Washington, Nebraska","coordinates":[-96.22457,41.53397]},
+{"dem":3781,"rep":6778,"total":10818,"name":"Desoto, Florida","coordinates":[-81.80625,27.19058]},
+{"dem":3508,"rep":6680,"total":10795,"name":"Rockbridge, Virginia","coordinates":[-79.44775,37.81451]},
+{"dem":3741,"rep":6763,"total":10775,"name":"Abbeville, South Carolina","coordinates":[-82.45405,34.22904]},
+{"dem":7172,"rep":2688,"total":10774,"name":"San Juan, Washington","coordinates":[-123.10376,48.50719]},
+{"dem":4194,"rep":5789,"total":10769,"name":"Klickitat, Washington","coordinates":[-120.7793,45.87044]},
+{"dem":1800,"rep":8545,"total":10768,"name":"Daviess, Indiana","coordinates":[-87.07694,38.69608]},
+{"dem":3539,"rep":6702,"total":10768,"name":"Menominee, Michigan","coordinates":[-87.50181,45.5362]},
+{"dem":3342,"rep":6786,"total":10758,"name":"Carroll, Arkansas","coordinates":[-93.54097,36.33737]},
+{"dem":3623,"rep":6616,"total":10758,"name":"Kewaunee, Wisconsin","coordinates":[-87.1633,44.50103]},
+{"dem":1372,"rep":9129,"total":10757,"name":"Harlan, Kentucky","coordinates":[-83.22149,36.85922]},
+{"dem":5100,"rep":5413,"total":10752,"name":"Peach, Georgia","coordinates":[-83.83197,32.57132]},
+{"dem":7285,"rep":2313,"total":10751,"name":"San Miguel, New Mexico","coordinates":[-104.80351,35.47685]},
+{"dem":1832,"rep":8602,"total":10740,"name":"Claiborne, Tennessee","coordinates":[-83.66069,36.50157]},
+{"dem":2514,"rep":7831,"total":10740,"name":"Page, Virginia","coordinates":[-78.49187,38.6232]},
+{"dem":1547,"rep":8953,"total":10733,"name":"Cherokee, Alabama","coordinates":[-85.65424,34.06951]},
+{"dem":1802,"rep":8656,"total":10726,"name":"McCurtain, Oklahoma","coordinates":[-94.76608,34.11707]},
+{"dem":6416,"rep":3340,"total":10724,"name":"Blaine, Idaho","coordinates":[-113.95537,43.39419]},
+{"dem":4620,"rep":5360,"total":10716,"name":"Pacific, Washington","coordinates":[-123.78241,46.55658]},
+{"dem":2225,"rep":7612,"total":10693,"name":"Pottawatomie, Kansas","coordinates":[-96.33711,39.38218]},
+{"dem":2584,"rep":7631,"total":10690,"name":"Ottawa, Oklahoma","coordinates":[-94.80268,36.83576]},
+{"dem":5164,"rep":4790,"total":10667,"name":"Winchester, Virginia","coordinates":[-78.17635,39.17386]},
+{"dem":3102,"rep":6527,"total":10654,"name":"Dodge, Minnesota","coordinates":[-92.86935,44.0207]},
+{"dem":2619,"rep":7432,"total":10632,"name":"Mahaska, Iowa","coordinates":[-92.63636,41.33079]},
+{"dem":2705,"rep":7336,"total":10609,"name":"Osceola, Michigan","coordinates":[-85.32228,43.99755]},
+{"dem":4145,"rep":5616,"total":10604,"name":"Houston, Minnesota","coordinates":[-91.50155,43.66698]},
+{"dem":2515,"rep":7468,"total":10592,"name":"Wyandot, Ohio","coordinates":[-83.31368,40.83978]},
+{"dem":2395,"rep":7740,"total":10585,"name":"Mercer, Kentucky","coordinates":[-84.87969,37.81208]},
+{"dem":2360,"rep":8026,"total":10578,"name":"Dunklin, Missouri","coordinates":[-90.06539,36.3069]},
+{"dem":1959,"rep":8219,"total":10576,"name":"Grayson, Kentucky","coordinates":[-86.34401,37.45857]},
+{"dem":3347,"rep":6900,"total":10573,"name":"Plaquemines, Louisiana","coordinates":[-89.57606,29.28244]},
+{"dem":2136,"rep":8158,"total":10572,"name":"Perry, Kentucky","coordinates":[-83.21777,37.24128]},
+{"dem":2715,"rep":7679,"total":10553,"name":"Neshoba, Mississippi","coordinates":[-89.11927,32.75251]},
+{"dem":1855,"rep":8253,"total":10546,"name":"Garvin, Oklahoma","coordinates":[-97.31272,34.70934]},
+{"dem":5859,"rep":4506,"total":10545,"name":"Anson, North Carolina","coordinates":[-80.10976,34.97497]},
+{"dem":3309,"rep":6638,"total":10544,"name":"Carroll, Iowa","coordinates":[-94.86764,42.03949]},
+{"dem":2104,"rep":7826,"total":10541,"name":"Custer, Oklahoma","coordinates":[-98.99738,35.6456]},
+{"dem":2733,"rep":7062,"total":10531,"name":"Martin, Minnesota","coordinates":[-94.53725,43.67711]},
+{"dem":2224,"rep":7574,"total":10524,"name":"Lassen, California","coordinates":[-120.62995,40.72108]},
+{"dem":7333,"rep":2550,"total":10523,"name":"Pitkin, Colorado","coordinates":[-106.91615,39.21753]},
+{"dem":4268,"rep":6122,"total":10522,"name":"Scott, Mississippi","coordinates":[-89.53348,32.41195]},
+{"dem":4424,"rep":5970,"total":10513,"name":"Grenada, Mississippi","coordinates":[-89.80274,33.77003]},
+{"dem":2465,"rep":7740,"total":10512,"name":"Aransas, Texas","coordinates":[-96.9675,28.12262]},
+{"dem":4871,"rep":5454,"total":10469,"name":"Barbour, Alabama","coordinates":[-85.4051,31.87025]},
+{"dem":2446,"rep":7517,"total":10458,"name":"Randolph, Indiana","coordinates":[-85.00578,40.16407]},
+{"dem":1821,"rep":8273,"total":10454,"name":"Juniata, Pennsylvania","coordinates":[-77.40043,40.53067]},
+{"dem":1825,"rep":8299,"total":10447,"name":"Llano, Texas","coordinates":[-98.68469,30.70758]},
+{"dem":2246,"rep":7194,"total":10435,"name":"Malheur, Oregon","coordinates":[-117.60319,43.18862]},
+{"dem":3421,"rep":6135,"total":10417,"name":"Park, Colorado","coordinates":[-105.71764,39.11891]},
+{"dem":1835,"rep":8445,"total":10416,"name":"Panola, Texas","coordinates":[-94.30515,32.16397]},
+{"dem":2041,"rep":8153,"total":10413,"name":"Wayne, Georgia","coordinates":[-81.91237,31.54784]},
+{"dem":2080,"rep":7942,"total":10398,"name":"Ohio, Kentucky","coordinates":[-86.84487,37.47785]},
+{"dem":5954,"rep":4267,"total":10389,"name":"Marlboro, South Carolina","coordinates":[-79.67943,34.60167]},
+{"dem":3030,"rep":6827,"total":10387,"name":"Ogemaw, Michigan","coordinates":[-84.12807,44.33328]},
+{"dem":2327,"rep":7756,"total":10384,"name":"Carroll, Tennessee","coordinates":[-88.45237,35.96574]},
+{"dem":3056,"rep":6753,"total":10354,"name":"Dickinson, Iowa","coordinates":[-95.19605,43.38961]},
+{"dem":2038,"rep":8059,"total":10343,"name":"San Jacinto, Texas","coordinates":[-95.16313,30.57438]},
+{"dem":872,"rep":9228,"total":10313,"name":"Winston, Alabama","coordinates":[-87.36534,34.15456]},
+{"dem":3837,"rep":5824,"total":10310,"name":"Jackson, Iowa","coordinates":[-90.57458,42.16422]},
+{"dem":2283,"rep":7529,"total":10309,"name":"Randolph, Missouri","coordinates":[-92.49295,39.43924]},
+{"dem":4124,"rep":6020,"total":10286,"name":"Decatur, Georgia","coordinates":[-84.58389,30.88064]},
+{"dem":2276,"rep":7587,"total":10278,"name":"Carter, Kentucky","coordinates":[-83.04879,38.30954]},
+{"dem":4332,"rep":5795,"total":10271,"name":"Monroe, Alabama","coordinates":[-87.38326,31.58033]},
+{"dem":1708,"rep":8284,"total":10270,"name":"Palo Pinto, Texas","coordinates":[-98.31796,32.7522]},
+{"dem":1839,"rep":7888,"total":10269,"name":"Barton, Kansas","coordinates":[-98.76783,38.48123]},
+{"dem":3970,"rep":5510,"total":10252,"name":"Buchanan, Iowa","coordinates":[-91.83866,42.47032]},
+{"dem":4108,"rep":5539,"total":10228,"name":"Benzie, Michigan","coordinates":[-86.49432,44.64862]},
+{"dem":3500,"rep":6030,"total":10226,"name":"Adair, Missouri","coordinates":[-92.60359,40.19066]},
+{"dem":1726,"rep":8163,"total":10218,"name":"Bandera, Texas","coordinates":[-99.24828,29.75638]},
+{"dem":1800,"rep":8138,"total":10217,"name":"Henderson, Tennessee","coordinates":[-88.38767,35.65399]},
+{"dem":2572,"rep":7067,"total":10208,"name":"Clinton, Missouri","coordinates":[-94.3958,39.60872]},
+{"dem":2291,"rep":7705,"total":10187,"name":"Randolph, Alabama","coordinates":[-85.46406,33.29647]},
+{"dem":6910,"rep":3099,"total":10186,"name":"Hertford, North Carolina","coordinates":[-76.98161,36.36351]},
+{"dem":2081,"rep":7654,"total":10186,"name":"Mason, West Virginia","coordinates":[-82.029,38.77091]},
+{"dem":1061,"rep":6673,"total":10164,"name":"Sanpete, Utah","coordinates":[-111.57288,39.38253]},
+{"dem":3770,"rep":5983,"total":10164,"name":"Adams, Wisconsin","coordinates":[-89.76722,43.97375]},
+{"dem":3195,"rep":6350,"total":10159,"name":"Finney, Kansas","coordinates":[-100.73996,38.0498]},
+{"dem":2498,"rep":6718,"total":10155,"name":"Stutsman, North Dakota","coordinates":[-98.95612,46.97222]},
+{"dem":3787,"rep":5720,"total":10133,"name":"Jones, Iowa","coordinates":[-91.11691,42.12511]},
+{"dem":3260,"rep":6436,"total":10132,"name":"Langlade, Wisconsin","coordinates":[-89.06772,45.26238]},
+{"dem":2585,"rep":7286,"total":10117,"name":"Hart, Georgia","coordinates":[-82.96329,34.34873]},
+{"dem":1581,"rep":8247,"total":10100,"name":"Scott, Virginia","coordinates":[-82.61362,36.71277]},
+{"dem":5369,"rep":4598,"total":10070,"name":"Yazoo, Mississippi","coordinates":[-90.38792,32.76567]},
+{"dem":3659,"rep":5660,"total":10066,"name":"Yates, New York","coordinates":[-77.10432,42.63823]},
+{"dem":2570,"rep":6981,"total":10061,"name":"Audrain, Missouri","coordinates":[-91.84341,39.21448]},
+{"dem":2590,"rep":6893,"total":10053,"name":"White, Indiana","coordinates":[-86.86429,40.75094]},
+{"dem":2935,"rep":6380,"total":10048,"name":"Gage, Nebraska","coordinates":[-96.68345,40.25523]},
+{"dem":4235,"rep":5569,"total":10042,"name":"East Feliciana, Louisiana","coordinates":[-91.04343,30.83978]},
+{"dem":1848,"rep":7841,"total":10038,"name":"McNairy, Tennessee","coordinates":[-88.56373,35.17537]},
+{"dem":4575,"rep":4876,"total":10021,"name":"Kent, Maryland","coordinates":[-76.12598,39.24127]},
+{"dem":5722,"rep":4150,"total":10003,"name":"Clay, Mississippi","coordinates":[-88.78246,33.65967]},
+{"dem":2260,"rep":7309,"total":9985,"name":"Meigs, Ohio","coordinates":[-82.02839,39.0898]},
+{"dem":2861,"rep":6572,"total":9979,"name":"Spencer, Indiana","coordinates":[-87.01037,38.00969]},
+{"dem":3689,"rep":5620,"total":9975,"name":"Fayette, Iowa","coordinates":[-91.84037,42.86412]},
+{"dem":3196,"rep":6385,"total":9960,"name":"Yancey, North Carolina","coordinates":[-82.30395,35.88932]},
+{"dem":1622,"rep":8012,"total":9949,"name":"Hardin, Tennessee","coordinates":[-88.18569,35.20189]},
+{"dem":4321,"rep":5351,"total":9935,"name":"Ouachita, Arkansas","coordinates":[-92.87841,33.59116]},
+{"dem":4196,"rep":5341,"total":9900,"name":"Somerset, Maryland","coordinates":[-75.85332,38.07445]},
+{"dem":1027,"rep":8696,"total":9891,"name":"George, Mississippi","coordinates":[-88.64226,30.85543]},
+{"dem":2067,"rep":7648,"total":9872,"name":"Prentiss, Mississippi","coordinates":[-88.52218,34.62056]},
+{"dem":2357,"rep":7075,"total":9866,"name":"Henry, Missouri","coordinates":[-93.79262,38.38649]},
+{"dem":2462,"rep":6855,"total":9853,"name":"Perry, Illinois","coordinates":[-89.36852,38.08438]},
+{"dem":6144,"rep":3582,"total":9848,"name":"Northampton, North Carolina","coordinates":[-77.39835,36.42177]},
+{"dem":6413,"rep":3214,"total":9842,"name":"Warren, North Carolina","coordinates":[-78.09989,36.3981]},
+{"dem":4304,"rep":4946,"total":9833,"name":"Poweshiek, Iowa","coordinates":[-92.52288,41.68452]},
+{"dem":1845,"rep":7671,"total":9825,"name":"White, Tennessee","coordinates":[-85.45578,35.92704]},
+{"dem":1837,"rep":7686,"total":9815,"name":"Stephens, Georgia","coordinates":[-83.29021,34.55291]},
+{"dem":1703,"rep":7879,"total":9787,"name":"Sabine, Louisiana","coordinates":[-93.55957,31.5604]},
+{"dem":1117,"rep":8470,"total":9737,"name":"Itawamba, Mississippi","coordinates":[-88.36312,34.28107]},
+{"dem":3134,"rep":5741,"total":9736,"name":"Asotin, Washington","coordinates":[-117.22778,46.18186]},
+{"dem":1851,"rep":7282,"total":9722,"name":"Logan, Colorado","coordinates":[-103.09046,40.72809]},
+{"dem":2076,"rep":6984,"total":9722,"name":"Sumner, Kansas","coordinates":[-97.49335,37.23666]},
+{"dem":1720,"rep":7764,"total":9718,"name":"Bell, Kentucky","coordinates":[-83.68071,36.72892]},
+{"dem":1824,"rep":7724,"total":9696,"name":"Crawford, Missouri","coordinates":[-91.31393,37.96656]},
+{"dem":3459,"rep":5420,"total":9676,"name":"Plumas, California","coordinates":[-120.82437,39.99229]},
+{"dem":2838,"rep":5967,"total":9653,"name":"Waseca, Minnesota","coordinates":[-93.58984,44.01845]},
+{"dem":3301,"rep":5659,"total":9623,"name":"Yankton, South Dakota","coordinates":[-97.38836,43.0066]},
+{"dem":2568,"rep":6625,"total":9613,"name":"Brooke, West Virginia","coordinates":[-80.57869,40.27264]},
+{"dem":2924,"rep":5945,"total":9608,"name":"Greene, Virginia","coordinates":[-78.47016,38.29798]},
+{"dem":3524,"rep":5990,"total":9599,"name":"Wayne, Mississippi","coordinates":[-88.67821,31.6425]},
+{"dem":6725,"rep":2794,"total":9598,"name":"Sunflower, Mississippi","coordinates":[-90.59509,33.60552]},
+{"dem":3157,"rep":6287,"total":9597,"name":"Richland, Louisiana","coordinates":[-91.74835,32.41315]},
+{"dem":1819,"rep":7372,"total":9585,"name":"Fayette, Illinois","coordinates":[-89.01792,39.00112]},
+{"dem":1250,"rep":8043,"total":9572,"name":"Johnson, Kentucky","coordinates":[-82.83012,37.84775]},
+{"dem":2080,"rep":7025,"total":9566,"name":"LaGrange, Indiana","coordinates":[-85.42784,41.64246]},
+{"dem":1865,"rep":7338,"total":9561,"name":"Lincoln, Kentucky","coordinates":[-84.65833,37.45717]},
+{"dem":1910,"rep":7268,"total":9559,"name":"Grant, Kentucky","coordinates":[-84.62592,38.64916]},
+{"dem":3485,"rep":5134,"total":9558,"name":"Del Norte, California","coordinates":[-124.00361,41.76395]},
+{"dem":3972,"rep":5456,"total":9542,"name":"Pickens, Alabama","coordinates":[-88.09686,33.29679]},
+{"dem":3599,"rep":5295,"total":9541,"name":"Cedar, Iowa","coordinates":[-91.13261,41.77236]},
+{"dem":2194,"rep":7065,"total":9533,"name":"Grimes, Texas","coordinates":[-95.98808,30.54323]},
+{"dem":2252,"rep":6839,"total":9530,"name":"Fayette, Indiana","coordinates":[-85.18503,39.63965]},
+{"dem":4954,"rep":4125,"total":9529,"name":"Bayfield, Wisconsin","coordinates":[-91.17728,46.63419]},
+{"dem":1921,"rep":7196,"total":9515,"name":"Spencer, Kentucky","coordinates":[-85.31717,38.02541]},
+{"dem":2566,"rep":6717,"total":9514,"name":"Butts, Georgia","coordinates":[-83.95822,33.29035]},
+{"dem":4716,"rep":4367,"total":9512,"name":"Kleberg, Texas","coordinates":[-97.66062,27.43873]},
+{"dem":1370,"rep":7911,"total":9510,"name":"Mingo, West Virginia","coordinates":[-82.15898,37.72116]},
+{"dem":1840,"rep":7251,"total":9491,"name":"Nicholas, West Virginia","coordinates":[-80.79751,38.29143]},
+{"dem":2758,"rep":6544,"total":9488,"name":"Putnam, Georgia","coordinates":[-83.37178,33.32106]},
+{"dem":4400,"rep":4889,"total":9485,"name":"Barnwell, South Carolina","coordinates":[-81.43422,33.26055]},
+{"dem":2398,"rep":6589,"total":9484,"name":"Taylor, Wisconsin","coordinates":[-90.50485,45.21165]},
+{"dem":2663,"rep":6559,"total":9475,"name":"Morgan, Georgia","coordinates":[-83.49943,33.59869]},
+{"dem":3065,"rep":5788,"total":9470,"name":"Glenn, California","coordinates":[-122.40169,39.60254]},
+{"dem":2980,"rep":5483,"total":9459,"name":"Jefferson, Oregon","coordinates":[-121.17863,44.64515]},
+{"dem":2529,"rep":6380,"total":9458,"name":"Nodaway, Missouri","coordinates":[-94.88314,40.36113]},
+{"dem":2756,"rep":6548,"total":9438,"name":"Newton, Mississippi","coordinates":[-89.11841,32.40197]},
+{"dem":2597,"rep":6511,"total":9419,"name":"Titus, Texas","coordinates":[-94.96678,33.21459]},
+{"dem":5128,"rep":3289,"total":9412,"name":"Gunnison, Colorado","coordinates":[-107.05687,38.67049]},
+{"dem":2904,"rep":5779,"total":9404,"name":"Henry, Iowa","coordinates":[-91.54725,40.9848]},
+{"dem":1627,"rep":7543,"total":9399,"name":"Lee, Virginia","coordinates":[-83.13011,36.70172]},
+{"dem":2701,"rep":6213,"total":9388,"name":"Green Lake, Wisconsin","coordinates":[-88.97037,43.78024]},
+{"dem":3595,"rep":4980,"total":9359,"name":"Park, Montana","coordinates":[-110.53276,45.42142]},
+{"dem":4731,"rep":4491,"total":9351,"name":"Burke, Georgia","coordinates":[-82.00016,33.06018]},
+{"dem":2420,"rep":6482,"total":9348,"name":"Caddo, Oklahoma","coordinates":[-98.38104,35.16792]},
+{"dem":5778,"rep":3456,"total":9347,"name":"Bertie, North Carolina","coordinates":[-76.96236,36.05904]},
+{"dem":2041,"rep":6729,"total":9330,"name":"Lincoln, Montana","coordinates":[-115.46318,48.55238]},
+{"dem":2025,"rep":7213,"total":9312,"name":"Benton, Missouri","coordinates":[-93.28794,38.30103]},
+{"dem":2152,"rep":6930,"total":9290,"name":"Taylor, Florida","coordinates":[-83.60948,30.0099]},
+{"dem":1926,"rep":7048,"total":9282,"name":"Washington, Missouri","coordinates":[-90.89701,37.94261]},
+{"dem":2789,"rep":5977,"total":9274,"name":"Saline, Missouri","coordinates":[-93.20416,39.13584]},
+{"dem":4185,"rep":4919,"total":9273,"name":"Hardeman, Tennessee","coordinates":[-88.98869,35.21878]},
+{"dem":3821,"rep":4907,"total":9272,"name":"Jackson, Wisconsin","coordinates":[-90.79951,44.32458]},
+{"dem":3699,"rep":5432,"total":9268,"name":"McDuffie, Georgia","coordinates":[-82.47873,33.47962]},
+{"dem":1721,"rep":7296,"total":9247,"name":"Buchanan, Virginia","coordinates":[-82.03815,37.26811]},
+{"dem":2106,"rep":6867,"total":9245,"name":"Allen, Louisiana","coordinates":[-92.8196,30.65274]},
+{"dem":2957,"rep":5694,"total":9241,"name":"Delaware, Iowa","coordinates":[-91.36676,42.47293]},
+{"dem":1842,"rep":7240,"total":9235,"name":"Tippah, Mississippi","coordinates":[-88.91881,34.76361]},
+{"dem":3134,"rep":5516,"total":9231,"name":"Aitkin, Minnesota","coordinates":[-93.41976,46.60244]},
+{"dem":2489,"rep":6367,"total":9226,"name":"Starke, Indiana","coordinates":[-86.64463,41.28447]},
+{"dem":1766,"rep":7005,"total":9218,"name":"Upshur, West Virginia","coordinates":[-80.2316,38.90253]},
+{"dem":3804,"rep":5222,"total":9217,"name":"Meriwether, Georgia","coordinates":[-84.66705,33.02926]},
+{"dem":3013,"rep":6053,"total":9213,"name":"Grady, Georgia","coordinates":[-84.24508,30.8759]},
+{"dem":3764,"rep":4801,"total":9204,"name":"Waynesboro, Virginia","coordinates":[-78.90141,38.06715]},
+{"dem":3098,"rep":5406,"total":9182,"name":"Piscataquis, Maine","coordinates":[-69.10223,45.91563]},
+{"dem":2506,"rep":6514,"total":9162,"name":"Franklin, Louisiana","coordinates":[-91.67237,32.13907]},
+{"dem":2760,"rep":5975,"total":9161,"name":"King William, Virginia","coordinates":[-77.09105,37.70826]},
+{"dem":3284,"rep":5404,"total":9148,"name":"Washburn, Wisconsin","coordinates":[-91.79642,45.89248]},
+{"dem":4591,"rep":4101,"total":9143,"name":"Prince Edward, Virginia","coordinates":[-78.43295,37.22488]},
+{"dem":7566,"rep":1431,"total":9140,"name":"Macon, Alabama","coordinates":[-85.69288,32.38702]},
+{"dem":2045,"rep":6665,"total":9140,"name":"Andrew, Missouri","coordinates":[-94.80355,39.98886]},
+{"dem":2338,"rep":6615,"total":9138,"name":"Toombs, Georgia","coordinates":[-82.33062,32.11781]},
+{"dem":1542,"rep":7293,"total":9134,"name":"Letcher, Kentucky","coordinates":[-82.86125,37.11853]},
+{"dem":3237,"rep":5317,"total":9129,"name":"Clayton, Iowa","coordinates":[-91.32357,42.84098]},
+{"dem":2139,"rep":6430,"total":9121,"name":"Hancock, Illinois","coordinates":[-91.1688,40.40131]},
+{"dem":3504,"rep":5185,"total":9121,"name":"Sawyer, Wisconsin","coordinates":[-91.14713,45.86491]},
+{"dem":2427,"rep":6091,"total":9112,"name":"Johnson, Arkansas","coordinates":[-93.46632,35.57335]},
+{"dem":2642,"rep":6074,"total":9101,"name":"Scott, Indiana","coordinates":[-85.75189,38.67943]},
+{"dem":1758,"rep":7179,"total":9086,"name":"Shelby, Texas","coordinates":[-94.14257,31.79013]},
+{"dem":2093,"rep":6500,"total":9047,"name":"Paulding, Ohio","coordinates":[-84.58212,41.11894]},
+{"dem":2645,"rep":5634,"total":9008,"name":"Piatt, Illinois","coordinates":[-88.59235,40.00903]},
+{"dem":4724,"rep":3885,"total":9008,"name":"Hopewell, Virginia","coordinates":[-77.29894,37.291]},
+{"dem":3867,"rep":4835,"total":8964,"name":"Uvalde, Texas","coordinates":[-99.76842,29.3503]},
+{"dem":6378,"rep":2426,"total":8912,"name":"Coahoma, Mississippi","coordinates":[-90.60316,34.22866]},
+{"dem":3084,"rep":5205,"total":8904,"name":"Iowa, Iowa","coordinates":[-92.05912,41.68391]},
+{"dem":2331,"rep":5896,"total":8902,"name":"Lincoln, New Mexico","coordinates":[-105.4498,33.74084]},
+{"dem":3140,"rep":5456,"total":8887,"name":"Columbia, Arkansas","coordinates":[-93.23284,33.22303]},
+{"dem":3850,"rep":4910,"total":8881,"name":"Winston, Mississippi","coordinates":[-89.03739,33.07872]},
+{"dem":3595,"rep":5035,"total":8878,"name":"Southampton, Virginia","coordinates":[-77.10381,36.72006]},
+{"dem":3122,"rep":5185,"total":8877,"name":"Mariposa, California","coordinates":[-119.91286,37.57002]},
+{"dem":1105,"rep":6779,"total":8875,"name":"Lincoln, Wyoming","coordinates":[-110.68296,42.22999]},
+{"dem":3272,"rep":5477,"total":8872,"name":"Concordia, Louisiana","coordinates":[-91.62631,31.4698]},
+{"dem":2101,"rep":6366,"total":8858,"name":"Hale, Texas","coordinates":[-101.82288,34.06843]},
+{"dem":3199,"rep":5490,"total":8852,"name":"Greene, Georgia","coordinates":[-83.16661,33.57674]},
+{"dem":3295,"rep":5174,"total":8848,"name":"Rowan, Kentucky","coordinates":[-83.42807,38.20426]},
+{"dem":2280,"rep":6116,"total":8833,"name":"Kalkaska, Michigan","coordinates":[-85.08899,44.67888]},
+{"dem":1181,"rep":7408,"total":8821,"name":"Grant, Louisiana","coordinates":[-92.56171,31.59778]},
+{"dem":1768,"rep":6760,"total":8821,"name":"Morgan, Missouri","coordinates":[-92.87483,38.4208]},
+{"dem":1874,"rep":6738,"total":8819,"name":"Bibb, Alabama","coordinates":[-87.12714,33.01589]},
+{"dem":3276,"rep":5435,"total":8811,"name":"Covington, Mississippi","coordinates":[-89.54889,31.63333]},
+{"dem":5170,"rep":3488,"total":8806,"name":"Hampton, South Carolina","coordinates":[-81.14382,32.77833]},
+{"dem":2791,"rep":5569,"total":8803,"name":"Bourbon, Kentucky","coordinates":[-84.20986,38.20256]},
+{"dem":1797,"rep":6218,"total":8779,"name":"Baker, Oregon","coordinates":[-117.69193,44.70342]},
+{"dem":1960,"rep":6484,"total":8774,"name":"Breckinridge, Kentucky","coordinates":[-86.43291,37.77798]},
+{"dem":3091,"rep":5050,"total":8772,"name":"Schuyler, New York","coordinates":[-76.9386,42.41977]},
+{"dem":3196,"rep":4971,"total":8752,"name":"Tama, Iowa","coordinates":[-92.52941,42.07484]},
+{"dem":2948,"rep":5412,"total":8743,"name":"Burnett, Wisconsin","coordinates":[-92.37573,45.86689]},
+{"dem":1520,"rep":6908,"total":8740,"name":"Perry, Missouri","coordinates":[-89.80212,37.71112]},
+{"dem":3726,"rep":4901,"total":8732,"name":"Butler, Alabama","coordinates":[-86.68196,31.75166]},
+{"dem":1992,"rep":6277,"total":8728,"name":"Crawford, Illinois","coordinates":[-87.76061,39.00278]},
+{"dem":1240,"rep":7278,"total":8725,"name":"Pike, Georgia","coordinates":[-84.38984,33.08122]},
+{"dem":1770,"rep":6637,"total":8723,"name":"Howard, Texas","coordinates":[-101.43872,32.30342]},
+{"dem":1507,"rep":6489,"total":8704,"name":"Payette, Idaho","coordinates":[-116.75023,44.00243]},
+{"dem":1790,"rep":6504,"total":8683,"name":"Boone, West Virginia","coordinates":[-81.71353,38.02281]},
+{"dem":2051,"rep":6364,"total":8664,"name":"Milam, Texas","coordinates":[-96.98439,30.79124]},
+{"dem":1170,"rep":7347,"total":8661,"name":"Lavaca, Texas","coordinates":[-96.92363,29.38257]},
+{"dem":695,"rep":6740,"total":8654,"name":"Sevier, Utah","coordinates":[-111.81192,38.74682]},
+{"dem":1892,"rep":6273,"total":8643,"name":"Carroll, Indiana","coordinates":[-86.56514,40.58498]},
+{"dem":2678,"rep":5360,"total":8636,"name":"Madison, Iowa","coordinates":[-94.01518,41.33062]},
+{"dem":2136,"rep":5984,"total":8635,"name":"Dawson, Nebraska","coordinates":[-99.81515,40.86737]},
+{"dem":2733,"rep":5299,"total":8632,"name":"Nobles, Minnesota","coordinates":[-95.76313,43.67768]},
+{"dem":2005,"rep":6182,"total":8620,"name":"Cherokee, Kansas","coordinates":[-94.84569,37.16939]},
+{"dem":2249,"rep":5877,"total":8617,"name":"Clay, Iowa","coordinates":[-95.14987,43.08122]},
+{"dem":1580,"rep":6692,"total":8608,"name":"Hampshire, West Virginia","coordinates":[-78.61198,39.31213]},
+{"dem":2543,"rep":5653,"total":8607,"name":"Kossuth, Iowa","coordinates":[-94.21398,43.21247]},
+{"dem":885,"rep":7526,"total":8604,"name":"Montague, Texas","coordinates":[-97.72501,33.67835]},
+{"dem":1707,"rep":6533,"total":8599,"name":"Vernon, Missouri","coordinates":[-94.34159,37.85019]},
+{"dem":3358,"rep":4494,"total":8588,"name":"Grand, Colorado","coordinates":[-106.11083,40.11306]},
+{"dem":3836,"rep":4448,"total":8574,"name":"Westmoreland, Virginia","coordinates":[-76.80393,38.10931]},
+{"dem":2813,"rep":5526,"total":8564,"name":"Saluda, South Carolina","coordinates":[-81.7279,34.00527]},
+{"dem":2113,"rep":6138,"total":8559,"name":"Sullivan, Indiana","coordinates":[-87.41584,39.08922]},
+{"dem":1946,"rep":6153,"total":8557,"name":"Owen, Indiana","coordinates":[-86.83884,39.31733]},
+{"dem":2857,"rep":5288,"total":8556,"name":"Montour, Pennsylvania","coordinates":[-76.66522,41.02928]},
+{"dem":2402,"rep":5790,"total":8537,"name":"Union, Illinois","coordinates":[-89.24463,37.48565]},
+{"dem":2374,"rep":6042,"total":8533,"name":"Washington, Alabama","coordinates":[-88.19756,31.40521]},
+{"dem":2787,"rep":5254,"total":8533,"name":"Hardin, Iowa","coordinates":[-93.24166,42.3902]},
+{"dem":3620,"rep":4404,"total":8526,"name":"Clark, Arkansas","coordinates":[-93.1762,34.05331]},
+{"dem":3071,"rep":4807,"total":8525,"name":"Mercer, Illinois","coordinates":[-90.74176,41.2056]},
+{"dem":1768,"rep":6454,"total":8525,"name":"Patrick, Virginia","coordinates":[-80.28641,36.66713]},
+{"dem":1814,"rep":5816,"total":8522,"name":"Elmore, Idaho","coordinates":[-115.4712,43.39469]},
+{"dem":853,"rep":7483,"total":8514,"name":"Holmes, Florida","coordinates":[-85.81593,30.862]},
+{"dem":1987,"rep":6325,"total":8513,"name":"Colorado, Texas","coordinates":[-96.50893,29.59629]},
+{"dem":3526,"rep":4851,"total":8505,"name":"Madison, Florida","coordinates":[-83.47041,30.44723]},
+{"dem":1243,"rep":7054,"total":8502,"name":"Franklin, Georgia","coordinates":[-83.22753,34.37526]},
+{"dem":3444,"rep":4744,"total":8485,"name":"Bee, Texas","coordinates":[-97.74258,28.41607]},
+{"dem":4368,"rep":4038,"total":8475,"name":"Jasper, Mississippi","coordinates":[-89.11943,32.01698]},
+{"dem":1202,"rep":6154,"total":8470,"name":"Uinta, Wyoming","coordinates":[-110.55894,41.28472]},
+{"dem":2542,"rep":5496,"total":8469,"name":"Ste. Genevieve, Missouri","coordinates":[-90.16153,37.88584]},
+{"dem":4200,"rep":4149,"total":8461,"name":"Washington, Georgia","coordinates":[-82.79811,32.97184]},
+{"dem":2367,"rep":5681,"total":8457,"name":"Colonial Heights, Virginia","coordinates":[-77.3968,37.26168]},
+{"dem":2943,"rep":4928,"total":8452,"name":"Otero, Colorado","coordinates":[-103.72125,37.88416]},
+{"dem":3584,"rep":4782,"total":8449,"name":"Leake, Mississippi","coordinates":[-89.52224,32.76063]},
+{"dem":1458,"rep":6740,"total":8420,"name":"Gilchrist, Florida","coordinates":[-82.7958,29.72345]},
+{"dem":1960,"rep":6010,"total":8374,"name":"Fulton, Indiana","coordinates":[-86.265,41.05038]},
+{"dem":999,"rep":7166,"total":8371,"name":"Tishomingo, Mississippi","coordinates":[-88.23606,34.73769]},
+{"dem":1978,"rep":6205,"total":8353,"name":"Houston, Texas","coordinates":[-95.42159,31.32303]},
+{"dem":2518,"rep":5213,"total":8337,"name":"Jefferson, Kansas","coordinates":[-95.37531,39.23964]},
+{"dem":3689,"rep":4154,"total":8318,"name":"Nelson, Virginia","coordinates":[-78.88343,37.78907]},
+{"dem":2020,"rep":6152,"total":8295,"name":"Worth, Georgia","coordinates":[-83.84995,31.55177]},
+{"dem":2856,"rep":4903,"total":8278,"name":"Buena Vista, Iowa","coordinates":[-95.14143,42.74152]},
+{"dem":1048,"rep":6967,"total":8261,"name":"Wayne, Illinois","coordinates":[-88.43243,38.43185]},
+{"dem":3242,"rep":4897,"total":8256,"name":"Attala, Mississippi","coordinates":[-89.58862,33.09046]},
+{"dem":1613,"rep":6462,"total":8252,"name":"Chattooga, Georgia","coordinates":[-85.34528,34.47417]},
+{"dem":1362,"rep":6712,"total":8249,"name":"Fayette, Alabama","coordinates":[-87.76429,33.71615]},
+{"dem":1689,"rep":6298,"total":8249,"name":"Avery, North Carolina","coordinates":[-81.92028,36.07209]},
+{"dem":1329,"rep":6599,"total":8242,"name":"McDonald, Missouri","coordinates":[-94.34395,36.63021]},
+{"dem":1196,"rep":6441,"total":8233,"name":"Idaho, Idaho","coordinates":[-115.46733,45.84964]},
+{"dem":1323,"rep":6637,"total":8233,"name":"Adair, Kentucky","coordinates":[-85.28137,37.10555]},
+{"dem":1212,"rep":6618,"total":8231,"name":"Polk, Arkansas","coordinates":[-94.23088,34.49091]},
+{"dem":1945,"rep":6059,"total":8229,"name":"Overton, Tennessee","coordinates":[-85.28307,36.34485]},
+{"dem":3051,"rep":4661,"total":8213,"name":"Clarke, Virginia","coordinates":[-77.99074,39.1153]},
+{"dem":1950,"rep":5910,"total":8212,"name":"Giles, Virginia","coordinates":[-80.69832,37.31807]},
+{"dem":1609,"rep":6029,"total":8210,"name":"Dickinson, Kansas","coordinates":[-97.15794,38.86773]},
+{"dem":1483,"rep":6385,"total":8205,"name":"Lampasas, Texas","coordinates":[-98.24088,31.19673]},
+{"dem":2048,"rep":5803,"total":8192,"name":"Orange, Indiana","coordinates":[-86.48925,38.54738]},
+{"dem":1036,"rep":5949,"total":8178,"name":"Cassia, Idaho","coordinates":[-113.62632,42.28231]},
+{"dem":2327,"rep":5230,"total":8177,"name":"Kanabec, Minnesota","coordinates":[-93.29778,45.94775]},
+{"dem":2450,"rep":5174,"total":8175,"name":"Hughes, South Dakota","coordinates":[-99.97568,44.38445]},
+{"dem":1093,"rep":6863,"total":8174,"name":"Russell, Kentucky","coordinates":[-85.05495,36.99058]},
+{"dem":1949,"rep":5698,"total":8169,"name":"Douglas, Illinois","coordinates":[-88.22286,39.76607]},
+{"dem":3710,"rep":3748,"total":8156,"name":"Jefferson, Iowa","coordinates":[-91.96663,41.00588]},
+{"dem":5199,"rep":2803,"total":8156,"name":"Lee, South Carolina","coordinates":[-80.2512,34.15864]},
+{"dem":854,"rep":7042,"total":8155,"name":"Hutchinson, Texas","coordinates":[-101.36274,35.83704]},
+{"dem":1170,"rep":6707,"total":8119,"name":"Wright, Missouri","coordinates":[-92.47998,37.26763]},
+{"dem":2679,"rep":5122,"total":8111,"name":"Marion, Kentucky","coordinates":[-85.26895,37.5526]},
+{"dem":2291,"rep":5335,"total":8107,"name":"Labette, Kansas","coordinates":[-95.29747,37.19146]},
+{"dem":1349,"rep":6466,"total":8096,"name":"Allen, Kentucky","coordinates":[-86.19245,36.75077]},
+{"dem":1596,"rep":6282,"total":8096,"name":"Mitchell, North Carolina","coordinates":[-82.16355,36.0131]},
+{"dem":3605,"rep":4374,"total":8095,"name":"Greene, North Carolina","coordinates":[-77.68168,35.48195]},
+{"dem":3056,"rep":4884,"total":8087,"name":"Lauderdale, Tennessee","coordinates":[-89.62773,35.76295]},
+{"dem":3155,"rep":4248,"total":8086,"name":"Inyo, California","coordinates":[-117.40392,36.56197]},
+{"dem":2408,"rep":5338,"total":8083,"name":"Ashley, Arkansas","coordinates":[-91.77226,33.19083]},
+{"dem":6689,"rep":1309,"total":8076,"name":"Holmes, Mississippi","coordinates":[-90.09119,33.12594]},
+{"dem":2292,"rep":5632,"total":8072,"name":"Henry, Alabama","coordinates":[-85.23997,31.51697]},
+{"dem":3741,"rep":3195,"total":8063,"name":"Cibola, New Mexico","coordinates":[-107.99268,34.92827]},
+{"dem":3179,"rep":4375,"total":8060,"name":"Floyd, Iowa","coordinates":[-92.78736,43.05274]},
+{"dem":3062,"rep":4556,"total":8055,"name":"Perry, Indiana","coordinates":[-86.62653,38.08143]},
+{"dem":3577,"rep":4023,"total":8055,"name":"Richland, Wisconsin","coordinates":[-90.43569,43.37619]},
+{"dem":2300,"rep":5293,"total":8051,"name":"Floyd, Virginia","coordinates":[-80.35026,36.93143]},
+{"dem":4775,"rep":3173,"total":8040,"name":"Hale, Alabama","coordinates":[-87.62306,32.75279]},
+{"dem":2071,"rep":5613,"total":8037,"name":"Seminole, Oklahoma","coordinates":[-96.60285,35.15836]},
+{"dem":4228,"rep":3302,"total":8029,"name":"Ashland, Wisconsin","coordinates":[-90.67969,46.54442]},
+{"dem":1618,"rep":6001,"total":8023,"name":"Bates, Missouri","coordinates":[-94.33924,38.25721]},
+{"dem":1248,"rep":6624,"total":8016,"name":"Tyler, Texas","coordinates":[-94.37565,30.76929]},
+{"dem":2023,"rep":5715,"total":8011,"name":"Appomattox, Virginia","coordinates":[-78.81094,37.37072]},
+{"dem":1154,"rep":6626,"total":8008,"name":"Grainger, Tennessee","coordinates":[-83.50954,36.2775]},
+{"dem":1444,"rep":6287,"total":7992,"name":"Rabun, Georgia","coordinates":[-83.40487,34.88393]},
+{"dem":1431,"rep":6371,"total":7992,"name":"Wayne, Kentucky","coordinates":[-84.82658,36.80077]},
+{"dem":2539,"rep":5292,"total":7987,"name":"Elbert, Georgia","coordinates":[-82.8419,34.11641]},
+{"dem":1889,"rep":5697,"total":7986,"name":"Jay, Indiana","coordinates":[-85.00233,40.43495]},
+{"dem":1932,"rep":5624,"total":7986,"name":"Cooper, Missouri","coordinates":[-92.81232,38.84538]},
+{"dem":2123,"rep":5505,"total":7963,"name":"McIntosh, Oklahoma","coordinates":[-95.67178,35.3691]},
+{"dem":1229,"rep":5980,"total":7954,"name":"Gem, Idaho","coordinates":[-116.39878,44.06147]},
+{"dem":2355,"rep":5157,"total":7952,"name":"Davison, South Dakota","coordinates":[-98.15586,43.68043]},
+{"dem":1717,"rep":5275,"total":7952,"name":"Carbon, Utah","coordinates":[-110.58848,39.67328]},
+{"dem":2518,"rep":5016,"total":7945,"name":"Brown, Indiana","coordinates":[-86.23012,39.19511]},
+{"dem":1877,"rep":5622,"total":7928,"name":"Clark, Illinois","coordinates":[-87.79168,39.33233]},
+{"dem":2656,"rep":4849,"total":7927,"name":"Conway, Arkansas","coordinates":[-92.68924,35.2657]},
+{"dem":1875,"rep":5454,"total":7922,"name":"Seward, Nebraska","coordinates":[-97.14038,40.87194]},
+{"dem":1715,"rep":5746,"total":7921,"name":"Logan, Arkansas","coordinates":[-93.72091,35.21865]},
+{"dem":2227,"rep":5290,"total":7897,"name":"Union, South Dakota","coordinates":[-96.65082,42.8311]},
+{"dem":2809,"rep":4714,"total":7893,"name":"Marquette, Wisconsin","coordinates":[-89.40909,43.82605]},
+{"dem":3649,"rep":4127,"total":7890,"name":"Chickasaw, Mississippi","coordinates":[-88.94755,33.93327]},
+{"dem":3493,"rep":4279,"total":7880,"name":"Mitchell, Georgia","coordinates":[-84.19203,31.22899]},
+{"dem":1793,"rep":5645,"total":7873,"name":"Edgar, Illinois","coordinates":[-87.74711,39.67903]},
+{"dem":2435,"rep":5335,"total":7860,"name":"Emanuel, Georgia","coordinates":[-82.29976,32.59109]},
+{"dem":1278,"rep":6339,"total":7838,"name":"Bosque, Texas","coordinates":[-97.63764,31.90081]},
+{"dem":1062,"rep":6547,"total":7831,"name":"Wyoming, West Virginia","coordinates":[-81.54903,37.60366]},
+{"dem":1824,"rep":5695,"total":7813,"name":"Hickman, Tennessee","coordinates":[-87.46711,35.80232]},
+{"dem":2987,"rep":4275,"total":7807,"name":"Warren, Illinois","coordinates":[-90.62022,40.85044]},
+{"dem":1473,"rep":5969,"total":7806,"name":"Jackson, Oklahoma","coordinates":[-99.41223,34.594]},
+{"dem":1856,"rep":5451,"total":7804,"name":"Roseau, Minnesota","coordinates":[-95.8215,48.76106]},
+{"dem":2585,"rep":5137,"total":7791,"name":"Clarke, Mississippi","coordinates":[-88.68797,32.04537]},
+{"dem":1302,"rep":6251,"total":7784,"name":"Potter, Pennsylvania","coordinates":[-77.89443,41.74858]},
+{"dem":2031,"rep":5435,"total":7781,"name":"Harrison, Kentucky","coordinates":[-84.33413,38.44457]},
+{"dem":1954,"rep":5193,"total":7774,"name":"Sibley, Minnesota","coordinates":[-94.23012,44.57573]},
+{"dem":5819,"rep":1324,"total":7757,"name":"Falls Church, Virginia","coordinates":[-77.1756,38.88472]},
+{"dem":3425,"rep":3844,"total":7744,"name":"Crawford, Wisconsin","coordinates":[-90.95123,43.24991]},
+{"dem":1778,"rep":5796,"total":7739,"name":"Limestone, Texas","coordinates":[-96.59362,31.54754]},
+{"dem":1880,"rep":5502,"total":7722,"name":"Poinsett, Arkansas","coordinates":[-90.6811,35.56887]},
+{"dem":2149,"rep":5114,"total":7718,"name":"Ford, Kansas","coordinates":[-99.88474,37.68841]},
+{"dem":876,"rep":6601,"total":7707,"name":"Young, Texas","coordinates":[-98.67838,33.15877]},
+{"dem":2090,"rep":5067,"total":7698,"name":"Mills, Iowa","coordinates":[-95.6191,41.0337]},
+{"dem":2384,"rep":4950,"total":7696,"name":"Arenac, Michigan","coordinates":[-83.74067,44.03683]},
+{"dem":2726,"rep":4463,"total":7694,"name":"Hamilton, Iowa","coordinates":[-93.70919,42.39076]},
+{"dem":1584,"rep":5739,"total":7684,"name":"Richland, Illinois","coordinates":[-88.08545,38.71218]},
+{"dem":1471,"rep":6026,"total":7684,"name":"Freestone, Texas","coordinates":[-96.14495,31.70174]},
+{"dem":4481,"rep":3046,"total":7669,"name":"Brunswick, Virginia","coordinates":[-77.86148,36.7642]},
+{"dem":3288,"rep":3977,"total":7662,"name":"Lafayette, Wisconsin","coordinates":[-90.13029,42.65557]},
+{"dem":1573,"rep":5732,"total":7654,"name":"Morgan, West Virginia","coordinates":[-78.25734,39.555]},
+{"dem":3541,"rep":3930,"total":7645,"name":"Jefferson, Florida","coordinates":[-83.89085,30.42455]},
+{"dem":1617,"rep":5928,"total":7627,"name":"Smith, Mississippi","coordinates":[-89.49487,32.01902]},
+{"dem":5206,"rep":1925,"total":7626,"name":"Williamsburg, Virginia","coordinates":[-76.70819,37.26948]},
+{"dem":1453,"rep":5904,"total":7623,"name":"Garrard, Kentucky","coordinates":[-84.54585,37.63016]},
+{"dem":1548,"rep":5798,"total":7621,"name":"Macon, Missouri","coordinates":[-92.56434,39.82979]},
+{"dem":2270,"rep":5190,"total":7612,"name":"Lamar, Georgia","coordinates":[-84.14668,33.07444]},
+{"dem":1887,"rep":5137,"total":7611,"name":"Redwood, Minnesota","coordinates":[-95.25424,44.40353]},
+{"dem":2117,"rep":4890,"total":7606,"name":"Renville, Minnesota","coordinates":[-94.95561,44.72369]},
+{"dem":873,"rep":6347,"total":7595,"name":"Woodward, Oklahoma","coordinates":[-99.27366,36.42561]},
+{"dem":2064,"rep":4767,"total":7592,"name":"Richland, North Dakota","coordinates":[-96.93795,46.26521]},
+{"dem":2149,"rep":5242,"total":7583,"name":"Hardee, Florida","coordinates":[-81.82157,27.49284]},
+{"dem":2669,"rep":4562,"total":7577,"name":"Price, Wisconsin","coordinates":[-90.35964,45.67907]},
+{"dem":960,"rep":6308,"total":7552,"name":"Beckham, Oklahoma","coordinates":[-99.69005,35.2706]},
+{"dem":3573,"rep":3787,"total":7549,"name":"Calhoun, South Carolina","coordinates":[-80.78034,33.67478]},
+{"dem":1910,"rep":5077,"total":7543,"name":"De Witt, Illinois","coordinates":[-88.90185,40.18149]},
+{"dem":2144,"rep":5077,"total":7531,"name":"Simpson, Kentucky","coordinates":[-86.58179,36.74093]},
+{"dem":1413,"rep":5754,"total":7530,"name":"Pike, Illinois","coordinates":[-90.88903,39.6251]},
+{"dem":2068,"rep":4888,"total":7530,"name":"Bond, Illinois","coordinates":[-89.43659,38.88592]},
+{"dem":2157,"rep":4921,"total":7513,"name":"Butler, Iowa","coordinates":[-92.78015,42.73475]},
+{"dem":2837,"rep":4549,"total":7512,"name":"Crisp, Georgia","coordinates":[-83.75353,31.91514]},
+{"dem":1587,"rep":5589,"total":7510,"name":"Tipton, Indiana","coordinates":[-86.0562,40.31022]},
+{"dem":2722,"rep":4274,"total":7504,"name":"Geary, Kansas","coordinates":[-96.76809,39.00213]},
+{"dem":1072,"rep":6263,"total":7504,"name":"Macon, Tennessee","coordinates":[-86.00095,36.53775]},
+{"dem":1476,"rep":5662,"total":7492,"name":"Fountain, Indiana","coordinates":[-87.23487,40.12123]},
+{"dem":2131,"rep":4902,"total":7465,"name":"Harrison, Iowa","coordinates":[-95.82714,41.68858]},
+{"dem":2139,"rep":5169,"total":7464,"name":"Jackson, Louisiana","coordinates":[-92.56169,32.30429]},
+{"dem":2025,"rep":4860,"total":7457,"name":"Otoe, Nebraska","coordinates":[-96.13102,40.63799]},
+{"dem":1272,"rep":5895,"total":7453,"name":"Dallas, Missouri","coordinates":[-93.03381,37.68358]},
+{"dem":1373,"rep":5725,"total":7445,"name":"Grant, Arkansas","coordinates":[-92.42297,34.28556]},
+{"dem":2447,"rep":4434,"total":7445,"name":"Carroll, Illinois","coordinates":[-89.92418,42.0709]},
+{"dem":1520,"rep":5670,"total":7445,"name":"Gasconade, Missouri","coordinates":[-91.50577,38.44118]},
+{"dem":909,"rep":6391,"total":7439,"name":"Leon, Texas","coordinates":[-95.99562,31.30049]},
+{"dem":3294,"rep":3203,"total":7436,"name":"District 16, Alaska","coordinates":[179.62118,51.94896]},
+{"dem":1689,"rep":5494,"total":7436,"name":"Smith, Tennessee","coordinates":[-85.94191,36.25664]},
+{"dem":4031,"rep":3195,"total":7430,"name":"St. Francis, Arkansas","coordinates":[-90.7515,35.02283]},
+{"dem":1448,"rep":5571,"total":7427,"name":"Washington, Illinois","coordinates":[-89.41718,38.35314]},
+{"dem":2153,"rep":4659,"total":7412,"name":"Faribault, Minnesota","coordinates":[-93.94723,43.67652]},
+{"dem":1315,"rep":5752,"total":7406,"name":"O'Brien, Iowa","coordinates":[-95.62562,43.08374]},
+{"dem":701,"rep":6500,"total":7405,"name":"Gray, Texas","coordinates":[-100.81237,35.40254]},
+{"dem":2852,"rep":4302,"total":7398,"name":"Northumberland, Virginia","coordinates":[-76.37968,37.85697]},
+{"dem":1806,"rep":5274,"total":7382,"name":"Pike, Missouri","coordinates":[-91.1716,39.33995]},
+{"dem":1933,"rep":5270,"total":7357,"name":"New Madrid, Missouri","coordinates":[-89.65594,36.59426]},
+{"dem":1549,"rep":5382,"total":7339,"name":"Van Buren, Arkansas","coordinates":[-92.51597,35.58295]},
+{"dem":2500,"rep":4264,"total":7339,"name":"Archuleta, Colorado","coordinates":[-107.05086,37.20239]},
+{"dem":1412,"rep":5640,"total":7335,"name":"White, Illinois","coordinates":[-88.17862,38.08732]},
+{"dem":1100,"rep":6038,"total":7333,"name":"Fentress, Tennessee","coordinates":[-84.93776,36.36989]},
+{"dem":2925,"rep":4018,"total":7329,"name":"Gogebic, Michigan","coordinates":[-89.80686,46.46151]},
+{"dem":2166,"rep":4874,"total":7325,"name":"Alleghany, Virginia","coordinates":[-80.00866,37.7879]},
+{"dem":1565,"rep":5386,"total":7317,"name":"Missaukee, Michigan","coordinates":[-85.08547,44.32542]},
+{"dem":903,"rep":6302,"total":7311,"name":"Pierce, Georgia","coordinates":[-82.21037,31.35399]},
+{"dem":1260,"rep":5809,"total":7311,"name":"Hockley, Texas","coordinates":[-102.34339,33.60593]},
+{"dem":3195,"rep":3478,"total":7295,"name":"Luna, New Mexico","coordinates":[-107.74719,32.18452]},
+{"dem":3128,"rep":3950,"total":7295,"name":"Buckingham, Virginia","coordinates":[-78.52916,37.57392]},
+{"dem":1720,"rep":5329,"total":7293,"name":"Gulf, Florida","coordinates":[-85.25653,29.90725]},
+{"dem":3109,"rep":4106,"total":7292,"name":"Choctaw, Alabama","coordinates":[-88.24888,31.99095]},
+{"dem":1407,"rep":5592,"total":7285,"name":"Grayson, Virginia","coordinates":[-81.21532,36.65222]},
+{"dem":1730,"rep":5320,"total":7264,"name":"Hart, Kentucky","coordinates":[-85.88212,37.30909]},
+{"dem":1472,"rep":5407,"total":7249,"name":"Sharp, Arkansas","coordinates":[-91.47106,36.17339]},
+{"dem":2992,"rep":4014,"total":7228,"name":"Chowan, North Carolina","coordinates":[-76.60275,36.12897]},
+{"dem":1970,"rep":4944,"total":7219,"name":"Mason, Kentucky","coordinates":[-83.82812,38.59413]},
+{"dem":2400,"rep":4488,"total":7218,"name":"Presque Isle, Michigan","coordinates":[-83.38401,45.48951]},
+{"dem":1525,"rep":5292,"total":7214,"name":"Rush, Indiana","coordinates":[-85.46644,39.62237]},
+{"dem":1270,"rep":5822,"total":7202,"name":"Dixie, Florida","coordinates":[-83.19566,29.58089]},
+{"dem":1262,"rep":5671,"total":7195,"name":"Unicoi, Tennessee","coordinates":[-82.41821,36.10012]},
+{"dem":1601,"rep":5092,"total":7177,"name":"Poquoson, Virginia","coordinates":[-76.30353,37.12835]},
+{"dem":1967,"rep":4930,"total":7153,"name":"Humphreys, Tennessee","coordinates":[-87.79045,36.04082]},
+{"dem":1828,"rep":4944,"total":7149,"name":"Henry, Kentucky","coordinates":[-85.11964,38.45138]},
+{"dem":4151,"rep":2187,"total":7140,"name":"District 20, Alaska","coordinates":[-149.28432,61.17425]},
+{"dem":1951,"rep":4761,"total":7125,"name":"Cass, Iowa","coordinates":[-94.9333,41.33382]},
+{"dem":934,"rep":6044,"total":7123,"name":"Scott, Tennessee","coordinates":[-84.50352,36.43523]},
+{"dem":1434,"rep":5336,"total":7107,"name":"Marion, Arkansas","coordinates":[-92.67857,36.26666]},
+{"dem":998,"rep":5856,"total":7090,"name":"Osage, Missouri","coordinates":[-91.8595,38.46425]},
+{"dem":2171,"rep":4564,"total":7087,"name":"Rusk, Wisconsin","coordinates":[-91.13674,45.47273]},
+{"dem":1688,"rep":5098,"total":7079,"name":"Harrison, Ohio","coordinates":[-81.09156,40.29231]},
+{"dem":1459,"rep":5307,"total":7066,"name":"Lincoln, West Virginia","coordinates":[-82.07762,38.17176]},
+{"dem":2697,"rep":4289,"total":7050,"name":"Amite, Mississippi","coordinates":[-90.79554,31.20393]},
+{"dem":2377,"rep":4401,"total":7049,"name":"Hempstead, Arkansas","coordinates":[-93.66435,33.73595]},
+{"dem":1753,"rep":4826,"total":7046,"name":"Osage, Kansas","coordinates":[-95.70825,38.65021]},
+{"dem":1573,"rep":5306,"total":7045,"name":"Stone, Mississippi","coordinates":[-89.11229,30.79018]},
+{"dem":1807,"rep":4893,"total":7044,"name":"Page, Iowa","coordinates":[-95.14428,40.73909]},
+{"dem":2128,"rep":4708,"total":7040,"name":"Amelia, Virginia","coordinates":[-77.97746,37.33192]},
+{"dem":2203,"rep":4668,"total":7035,"name":"Robertson, Texas","coordinates":[-96.51494,31.02548]},
+{"dem":1835,"rep":4892,"total":7032,"name":"Bristol, Virginia","coordinates":[-82.15756,36.61695]},
+{"dem":1434,"rep":5494,"total":7012,"name":"Appling, Georgia","coordinates":[-82.2901,31.73971]},
+{"dem":1839,"rep":5021,"total":7009,"name":"Dodge, Georgia","coordinates":[-83.16786,32.16436]},
+{"dem":3129,"rep":3756,"total":7005,"name":"Bienville, Louisiana","coordinates":[-93.04115,32.34095]},
+{"dem":2531,"rep":4049,"total":6988,"name":"Buffalo, Wisconsin","coordinates":[-91.76129,44.38563]},
+{"dem":2203,"rep":4419,"total":6979,"name":"Madison, Virginia","coordinates":[-78.27696,38.41205]},
+{"dem":684,"rep":6134,"total":6975,"name":"Banks, Georgia","coordinates":[-83.49844,34.35192]},
+{"dem":3821,"rep":3063,"total":6968,"name":"Jefferson, Georgia","coordinates":[-82.42,33.05817]},
+{"dem":1036,"rep":5823,"total":6966,"name":"Lamar, Alabama","coordinates":[-88.08743,33.78708]},
+{"dem":2118,"rep":4638,"total":6965,"name":"Calhoun, Texas","coordinates":[-96.57957,28.44171]},
+{"dem":776,"rep":6011,"total":6963,"name":"Eastland, Texas","coordinates":[-98.83655,32.32464]},
+{"dem":1491,"rep":5316,"total":6960,"name":"Burleson, Texas","coordinates":[-96.62209,30.49348]},
+{"dem":1569,"rep":5171,"total":6955,"name":"DeKalb, Tennessee","coordinates":[-85.83359,35.98221]},
+{"dem":4310,"rep":2446,"total":6953,"name":"Phillips, Arkansas","coordinates":[-90.85559,34.42368]},
+{"dem":500,"rep":5508,"total":6942,"name":"Duchesne, Utah","coordinates":[-110.42958,40.28939]},
+{"dem":3189,"rep":3046,"total":6939,"name":"Alamosa, Colorado","coordinates":[-105.78804,37.56844]},
+{"dem":2081,"rep":4513,"total":6939,"name":"Vermillion, Indiana","coordinates":[-87.46207,39.85404]},
+{"dem":1991,"rep":4617,"total":6935,"name":"Crawford, Iowa","coordinates":[-95.38909,42.04311]},
+{"dem":1684,"rep":4837,"total":6934,"name":"Wadena, Minnesota","coordinates":[-94.9886,46.58698]},
+{"dem":1347,"rep":5274,"total":6928,"name":"Lewis, West Virginia","coordinates":[-80.49547,38.98887]},
+{"dem":2421,"rep":4093,"total":6923,"name":"Allamakee, Iowa","coordinates":[-91.38275,43.27496]},
+{"dem":2790,"rep":4056,"total":6919,"name":"Walthall, Mississippi","coordinates":[-90.10343,31.16449]},
+{"dem":1681,"rep":5096,"total":6903,"name":"Tattnall, Georgia","coordinates":[-82.0592,32.04376]},
+{"dem":1999,"rep":4584,"total":6874,"name":"Cross, Arkansas","coordinates":[-90.76398,35.28569]},
+{"dem":1856,"rep":4527,"total":6872,"name":"Grundy, Iowa","coordinates":[-92.79024,42.40333]},
+{"dem":1167,"rep":4887,"total":6871,"name":"Minidoka, Idaho","coordinates":[-113.63984,42.85721]},
+{"dem":2448,"rep":4258,"total":6870,"name":"Pamlico, North Carolina","coordinates":[-76.66526,35.14757]},
+{"dem":3313,"rep":2616,"total":6868,"name":"Socorro, New Mexico","coordinates":[-106.93913,33.99165]},
+{"dem":2110,"rep":4354,"total":6844,"name":"Crawford, Michigan","coordinates":[-84.61134,44.68017]},
+{"dem":1163,"rep":5519,"total":6844,"name":"Dewitt, Texas","coordinates":[-97.36165,29.08234]},
+{"dem":1588,"rep":4928,"total":6841,"name":"Madison, Arkansas","coordinates":[-93.72405,36.01254]},
+{"dem":3711,"rep":3013,"total":6834,"name":"Haywood, Tennessee","coordinates":[-89.28269,35.58667]},
+{"dem":1237,"rep":5347,"total":6830,"name":"Moniteau, Missouri","coordinates":[-92.58364,38.63303]},
+{"dem":1934,"rep":4373,"total":6802,"name":"Pend Oreille, Washington","coordinates":[-117.23219,48.54382]},
+{"dem":1662,"rep":4868,"total":6795,"name":"Monroe, Ohio","coordinates":[-81.09098,39.72625]},
+{"dem":2650,"rep":3710,"total":6793,"name":"Las Animas, Colorado","coordinates":[-104.04411,37.31883]},
+{"dem":978,"rep":5600,"total":6791,"name":"Dent, Missouri","coordinates":[-91.48971,37.60307]},
+{"dem":2314,"rep":4038,"total":6786,"name":"Lake, South Dakota","coordinates":[-97.12322,44.02844]},
+{"dem":1912,"rep":4455,"total":6772,"name":"Beadle, South Dakota","coordinates":[-98.27942,44.41826]},
+{"dem":912,"rep":5694,"total":6771,"name":"Fulton, Pennsylvania","coordinates":[-78.12261,39.91075]},
+{"dem":1376,"rep":5039,"total":6770,"name":"Franklin, Arkansas","coordinates":[-93.88766,35.50855]},
+{"dem":752,"rep":5861,"total":6767,"name":"Clay, Kentucky","coordinates":[-83.71547,37.16427]},
+{"dem":1210,"rep":5383,"total":6764,"name":"Towns, Georgia","coordinates":[-83.73226,34.90252]},
+{"dem":1329,"rep":4644,"total":6751,"name":"Jerome, Idaho","coordinates":[-114.26208,42.69139]},
+{"dem":1587,"rep":4931,"total":6751,"name":"Trigg, Kentucky","coordinates":[-87.85865,36.80768]},
+{"dem":2829,"rep":3712,"total":6744,"name":"Nottoway, Virginia","coordinates":[-78.05386,37.14116]},
+{"dem":2147,"rep":4000,"total":6715,"name":"Pennington, Minnesota","coordinates":[-96.03772,48.06924]},
+{"dem":1998,"rep":4177,"total":6714,"name":"Jefferson, Montana","coordinates":[-112.05942,46.12423]},
+{"dem":2319,"rep":4177,"total":6708,"name":"Perquimans, North Carolina","coordinates":[-76.40324,36.18089]},
+{"dem":1054,"rep":5441,"total":6705,"name":"Morgan, Tennessee","coordinates":[-84.63926,36.13869]},
+{"dem":915,"rep":5609,"total":6691,"name":"Rockcastle, Kentucky","coordinates":[-84.31436,37.36105]},
+{"dem":4883,"rep":1751,"total":6684,"name":"Lowndes, Alabama","coordinates":[-86.65058,32.14788]},
+{"dem":1558,"rep":4846,"total":6683,"name":"Massac, Illinois","coordinates":[-88.70565,37.21611]},
+{"dem":1831,"rep":4625,"total":6674,"name":"Oglethorpe, Georgia","coordinates":[-83.07408,33.8668]},
+{"dem":984,"rep":5486,"total":6666,"name":"Douglas, Missouri","coordinates":[-92.51589,36.94651]},
+{"dem":668,"rep":5520,"total":6654,"name":"Converse, Wyoming","coordinates":[-105.52475,42.98462]},
+{"dem":2869,"rep":3523,"total":6645,"name":"Lancaster, Virginia","coordinates":[-76.41266,37.70484]},
+{"dem":2661,"rep":3551,"total":6632,"name":"Colusa, California","coordinates":[-122.23756,39.17773]},
+{"dem":1237,"rep":5245,"total":6624,"name":"Clay, Alabama","coordinates":[-85.86352,33.27039]},
+{"dem":2365,"rep":3968,"total":6595,"name":"Drew, Arkansas","coordinates":[-91.72277,33.58724]},
+{"dem":684,"rep":5764,"total":6593,"name":"Cleburne, Alabama","coordinates":[-85.51612,33.67196]},
+{"dem":1047,"rep":5422,"total":6590,"name":"Berrien, Georgia","coordinates":[-83.22786,31.28865]},
+{"dem":3080,"rep":3420,"total":6585,"name":"Conecuh, Alabama","coordinates":[-86.98872,31.43092]},
+{"dem":1441,"rep":4863,"total":6582,"name":"Parke, Indiana","coordinates":[-87.19695,39.77424]},
+{"dem":988,"rep":5410,"total":6579,"name":"Johnson, Tennessee","coordinates":[-81.86124,36.4532]},
+{"dem":1989,"rep":4049,"total":6575,"name":"Atchison, Kansas","coordinates":[-95.31339,39.53254]},
+{"dem":605,"rep":5836,"total":6569,"name":"La Salle, Louisiana","coordinates":[-92.16159,31.68008]},
+{"dem":1491,"rep":4733,"total":6538,"name":"Taylor, West Virginia","coordinates":[-80.04655,39.33247]},
+{"dem":1372,"rep":4997,"total":6535,"name":"Lee, Texas","coordinates":[-96.97682,30.32149]},
+{"dem":1684,"rep":4028,"total":6533,"name":"District 13, Alaska","coordinates":[-161.99747,55.24504]},
+{"dem":874,"rep":5305,"total":6525,"name":"Moffat, Colorado","coordinates":[-108.21715,40.61086]},
+{"dem":3077,"rep":2932,"total":6521,"name":"Lake, Minnesota","coordinates":[-91.4117,47.51711]},
+{"dem":1252,"rep":5097,"total":6520,"name":"Polk, Tennessee","coordinates":[-84.54111,35.10943]},
+{"dem":1817,"rep":4231,"total":6515,"name":"Menard, Illinois","coordinates":[-89.79413,40.02256]},
+{"dem":1382,"rep":4787,"total":6513,"name":"Adair, Oklahoma","coordinates":[-94.65102,35.89804]},
+{"dem":1243,"rep":5081,"total":6507,"name":"Chester, Tennessee","coordinates":[-88.61135,35.42025]},
+{"dem":2014,"rep":4058,"total":6486,"name":"Mason, Illinois","coordinates":[-89.91357,40.23699]},
+{"dem":2371,"rep":3478,"total":6445,"name":"Hill, Montana","coordinates":[-110.10632,48.63195]},
+{"dem":1736,"rep":4431,"total":6443,"name":"Morgan, Ohio","coordinates":[-81.86169,39.62494]},
+{"dem":1335,"rep":4932,"total":6440,"name":"Dickenson, Virginia","coordinates":[-82.34921,37.1367]},
+{"dem":1480,"rep":4608,"total":6439,"name":"Yell, Arkansas","coordinates":[-93.4083,34.99771]},
+{"dem":767,"rep":5482,"total":6439,"name":"Casey, Kentucky","coordinates":[-84.92821,37.32196]},
+{"dem":2266,"rep":3742,"total":6435,"name":"Chickasaw, Iowa","coordinates":[-92.31721,43.05974]},
+{"dem":1386,"rep":4521,"total":6433,"name":"Humboldt, Nevada","coordinates":[-118.12759,41.40791]},
+{"dem":2717,"rep":3585,"total":6421,"name":"Claiborne, Louisiana","coordinates":[-92.98972,32.82715]},
+{"dem":1265,"rep":4879,"total":6421,"name":"Livingston, Missouri","coordinates":[-93.5482,39.77858]},
+{"dem":4746,"rep":1581,"total":6411,"name":"Sumter, Alabama","coordinates":[-88.20005,32.59748]},
+{"dem":4146,"rep":1892,"total":6406,"name":"Nantucket, Massachusetts","coordinates":[-70.1419,41.30587]},
+{"dem":1414,"rep":4480,"total":6396,"name":"Ford, Illinois","coordinates":[-88.22458,40.59653]},
+{"dem":1910,"rep":4390,"total":6396,"name":"Calhoun, Mississippi","coordinates":[-89.33711,33.93663]},
+{"dem":1186,"rep":4700,"total":6381,"name":"York, Nebraska","coordinates":[-97.59674,40.87305]},
+{"dem":1425,"rep":4509,"total":6379,"name":"Randolph, Arkansas","coordinates":[-91.02844,36.34129]},
+{"dem":920,"rep":5192,"total":6377,"name":"Lyon, Iowa","coordinates":[-96.2072,43.38357]},
+{"dem":1279,"rep":4409,"total":6374,"name":"Carbon, Wyoming","coordinates":[-106.93315,41.70359]},
+{"dem":1644,"rep":4608,"total":6372,"name":"Winn, Louisiana","coordinates":[-92.64126,31.94118]},
+{"dem":1662,"rep":4362,"total":6370,"name":"Shelby, Iowa","coordinates":[-95.30891,41.67901]},
+{"dem":1278,"rep":4799,"total":6367,"name":"Larue, Kentucky","coordinates":[-85.69684,37.54446]},
+{"dem":2195,"rep":4091,"total":6364,"name":"Lawrence, Mississippi","coordinates":[-90.10752,31.55]},
+{"dem":1344,"rep":4729,"total":6364,"name":"Pawnee, Oklahoma","coordinates":[-96.69666,36.3137]},
+{"dem":2306,"rep":3569,"total":6363,"name":"Koochiching, Minnesota","coordinates":[-93.78289,48.24537]},
+{"dem":1020,"rep":5021,"total":6350,"name":"Clay, Illinois","coordinates":[-88.48232,38.74681]},
+{"dem":2528,"rep":3701,"total":6336,"name":"Brooks, Georgia","coordinates":[-83.5819,30.82293]},
+{"dem":1571,"rep":4587,"total":6334,"name":"Gonzales, Texas","coordinates":[-97.49192,29.46191]},
+{"dem":1474,"rep":4716,"total":6328,"name":"Benton, Tennessee","coordinates":[-88.07123,36.07094]},
+{"dem":1785,"rep":3714,"total":6324,"name":"Torrance, New Mexico","coordinates":[-105.89055,34.55497]},
+{"dem":2106,"rep":3793,"total":6319,"name":"Pope, Minnesota","coordinates":[-95.4467,45.58962]},
+{"dem":1501,"rep":4431,"total":6314,"name":"Neosho, Kansas","coordinates":[-95.31568,37.56428]},
+{"dem":619,"rep":5567,"total":6301,"name":"Brantley, Georgia","coordinates":[-81.98297,31.19733]},
+{"dem":1011,"rep":5021,"total":6288,"name":"Cedar, Missouri","coordinates":[-93.85001,37.73365]},
+{"dem":1481,"rep":4455,"total":6283,"name":"Moultrie, Illinois","coordinates":[-88.62572,39.63689]},
+{"dem":2314,"rep":3616,"total":6279,"name":"Dakota, Nebraska","coordinates":[-96.56135,42.39164]},
+{"dem":1664,"rep":4513,"total":6267,"name":"Crenshaw, Alabama","coordinates":[-86.31922,31.73282]},
+{"dem":1359,"rep":4519,"total":6265,"name":"Wetzel, West Virginia","coordinates":[-80.63539,39.59818]},
+{"dem":1348,"rep":4722,"total":6260,"name":"Fleming, Kentucky","coordinates":[-83.6992,38.36784]},
+{"dem":1679,"rep":4192,"total":6258,"name":"Cherokee, Iowa","coordinates":[-95.63326,42.74273]},
+{"dem":1012,"rep":5053,"total":6247,"name":"Union, Tennessee","coordinates":[-83.83608,36.28414]},
+{"dem":965,"rep":5051,"total":6242,"name":"Dade, Georgia","coordinates":[-85.5062,34.85242]},
+{"dem":3720,"rep":2466,"total":6237,"name":"Jefferson Davis, Mississippi","coordinates":[-89.82708,31.5648]},
+{"dem":1978,"rep":3764,"total":6222,"name":"Chippewa, Minnesota","coordinates":[-95.5641,45.02862]},
+{"dem":3898,"rep":2204,"total":6214,"name":"Bamberg, South Carolina","coordinates":[-81.05316,33.20302]},
+{"dem":1939,"rep":3826,"total":6212,"name":"Arkansas, Arkansas","coordinates":[-91.37654,34.28956]},
+{"dem":1331,"rep":4701,"total":6211,"name":"Union, Kentucky","coordinates":[-87.95164,37.65802]},
+{"dem":1438,"rep":4629,"total":6203,"name":"McDowell, West Virginia","coordinates":[-81.65818,37.38272]},
+{"dem":1732,"rep":4201,"total":6198,"name":"Alcona, Michigan","coordinates":[-82.83407,44.68253]},
+{"dem":3255,"rep":2686,"total":6172,"name":"Northampton, Virginia","coordinates":[-75.92401,37.30277]},
+{"dem":3510,"rep":2564,"total":6165,"name":"Washington, North Carolina","coordinates":[-76.57229,35.84471]},
+{"dem":1814,"rep":4033,"total":6136,"name":"Appanoose, Iowa","coordinates":[-92.87306,40.74429]},
+{"dem":786,"rep":5156,"total":6131,"name":"Kingfisher, Oklahoma","coordinates":[-97.93455,35.94943]},
+{"dem":2196,"rep":3565,"total":6124,"name":"Swain, North Carolina","coordinates":[-83.46561,35.56884]},
+{"dem":4339,"rep":1737,"total":6118,"name":"Wilcox, Alabama","coordinates":[-87.30493,31.99008]},
+{"dem":2085,"rep":3744,"total":6097,"name":"Mackinac, Michigan","coordinates":[-85.30376,46.16786]},
+{"dem":1290,"rep":4521,"total":6094,"name":"Lawrence, Illinois","coordinates":[-87.73022,38.71895]},
+{"dem":1336,"rep":4424,"total":6093,"name":"Bourbon, Kansas","coordinates":[-94.85092,37.85609]},
+{"dem":1142,"rep":4649,"total":6089,"name":"Johnson, Illinois","coordinates":[-88.88213,37.4607]},
+{"dem":2925,"rep":2638,"total":6085,"name":"Radford, Virginia","coordinates":[-80.55914,37.12011]},
+{"dem":1241,"rep":4655,"total":6081,"name":"Calhoun, Florida","coordinates":[-85.19791,30.3888]},
+{"dem":2582,"rep":3376,"total":6077,"name":"Yalobusha, Mississippi","coordinates":[-89.7038,34.03066]},
+{"dem":1753,"rep":4176,"total":6057,"name":"Cook, Georgia","coordinates":[-83.42944,31.15251]},
+{"dem":1222,"rep":4527,"total":6054,"name":"Barbour, West Virginia","coordinates":[-79.99694,39.13972]},
+{"dem":1544,"rep":4360,"total":6045,"name":"Jasper, Georgia","coordinates":[-83.68915,33.31698]},
+{"dem":1045,"rep":4816,"total":6042,"name":"Lawrence, Kentucky","coordinates":[-82.73829,38.07445]},
+{"dem":1947,"rep":3964,"total":6027,"name":"Pemiscot, Missouri","coordinates":[-89.78594,36.20991]},
+{"dem":1896,"rep":3800,"total":6026,"name":"Wright, Iowa","coordinates":[-93.73473,42.733]},
+{"dem":2108,"rep":3670,"total":6017,"name":"Middlesex, Virginia","coordinates":[-76.52808,37.60697]},
+{"dem":1744,"rep":4125,"total":6015,"name":"Franklin, Florida","coordinates":[-84.79917,29.81017]},
+{"dem":1221,"rep":4549,"total":6013,"name":"Noble, Ohio","coordinates":[-81.45249,39.76723]},
+{"dem":1367,"rep":4437,"total":6010,"name":"Clay, North Carolina","coordinates":[-83.75226,35.05299]},
+{"dem":1164,"rep":4604,"total":6007,"name":"Pendleton, Kentucky","coordinates":[-84.35194,38.69628]},
+{"dem":1828,"rep":3748,"total":5991,"name":"Carbon, Montana","coordinates":[-109.02855,45.22446]},
+{"dem":1154,"rep":4737,"total":5985,"name":"Trinity, Texas","coordinates":[-95.15168,31.09667]},
+{"dem":1789,"rep":3785,"total":5984,"name":"Marshall, Illinois","coordinates":[-89.34237,41.03111]},
+{"dem":1297,"rep":4398,"total":5977,"name":"Pike, Indiana","coordinates":[-87.23254,38.39796]},
+{"dem":1260,"rep":4507,"total":5975,"name":"Caldwell, Kentucky","coordinates":[-87.8705,37.14864]},
+{"dem":3353,"rep":2497,"total":5964,"name":"St. Helena, Louisiana","coordinates":[-90.7083,30.82253]},
+{"dem":936,"rep":4819,"total":5960,"name":"Jones, Texas","coordinates":[-99.87442,32.7437]},
+{"dem":1218,"rep":4286,"total":5953,"name":"Sanders, Montana","coordinates":[-115.1803,47.75649]},
+{"dem":1575,"rep":4003,"total":5951,"name":"La Paz, Arizona","coordinates":[-114.0388,33.72761]},
+{"dem":1454,"rep":3884,"total":5950,"name":"Roosevelt, New Mexico","coordinates":[-103.483,34.0212]},
+{"dem":795,"rep":4959,"total":5939,"name":"Barton, Missouri","coordinates":[-94.34408,37.50079]},
+{"dem":2101,"rep":3739,"total":5936,"name":"Ben Hill, Georgia","coordinates":[-83.14719,31.74077]},
+{"dem":2004,"rep":3675,"total":5910,"name":"Iron, Michigan","coordinates":[-88.54052,46.17025]},
+{"dem":3533,"rep":2149,"total":5907,"name":"Martinsville, Virginia","coordinates":[-79.86364,36.68352]},
+{"dem":2303,"rep":3487,"total":5903,"name":"McIntosh, Georgia","coordinates":[-81.37228,31.4885]},
+{"dem":1587,"rep":3977,"total":5871,"name":"Hancock, Iowa","coordinates":[-93.74369,43.07541]},
+{"dem":3337,"rep":2462,"total":5870,"name":"Tallahatchie, Mississippi","coordinates":[-90.17224,33.95452]},
+{"dem":2729,"rep":2575,"total":5866,"name":"Clear Creek, Colorado","coordinates":[-105.69256,39.66973]},
+{"dem":717,"rep":5036,"total":5857,"name":"Wayne, Tennessee","coordinates":[-87.81984,35.24284]},
+{"dem":1202,"rep":4269,"total":5840,"name":"Fergus, Montana","coordinates":[-109.23213,47.22522]},
+{"dem":1922,"rep":3525,"total":5832,"name":"Union, Iowa","coordinates":[-94.24509,41.02855]},
+{"dem":1512,"rep":3939,"total":5818,"name":"Jackson, Kansas","coordinates":[-95.79448,39.41114]},
+{"dem":2155,"rep":3479,"total":5808,"name":"Charlotte, Virginia","coordinates":[-78.65856,37.00904]},
+{"dem":1240,"rep":4397,"total":5805,"name":"Webster, Kentucky","coordinates":[-87.68479,37.51945]},
+{"dem":1111,"rep":4443,"total":5805,"name":"Monroe, West Virginia","coordinates":[-80.55032,37.55406]},
+{"dem":2248,"rep":3390,"total":5799,"name":"West Feliciana, Louisiana","coordinates":[-91.421,30.8727]},
+{"dem":924,"rep":4418,"total":5796,"name":"Goshen, Wyoming","coordinates":[-104.35354,42.08945]},
+{"dem":1404,"rep":4077,"total":5795,"name":"Newton, Indiana","coordinates":[-87.40217,40.96239]},
+{"dem":1931,"rep":3447,"total":5787,"name":"Winnebago, Iowa","coordinates":[-93.74348,43.37812]},
+{"dem":1252,"rep":4283,"total":5785,"name":"Craig, Oklahoma","coordinates":[-95.20155,36.76388]},
+{"dem":858,"rep":4621,"total":5780,"name":"Texas, Oklahoma","coordinates":[-101.48385,36.74631]},
+{"dem":664,"rep":5012,"total":5776,"name":"McCreary, Kentucky","coordinates":[-84.49105,36.73113]},
+{"dem":1245,"rep":4357,"total":5763,"name":"Knott, Kentucky","coordinates":[-82.95254,37.35436]},
+{"dem":1732,"rep":3628,"total":5750,"name":"Guthrie, Iowa","coordinates":[-94.50127,41.68357]},
+{"dem":1537,"rep":3991,"total":5738,"name":"Breathitt, Kentucky","coordinates":[-83.31715,37.5178]},
+{"dem":1678,"rep":3679,"total":5721,"name":"Cottonwood, Minnesota","coordinates":[-95.18315,44.01063]},
+{"dem":2300,"rep":3305,"total":5715,"name":"Screven, Georgia","coordinates":[-81.61758,32.74475]},
+{"dem":651,"rep":4090,"total":5715,"name":"Fremont, Idaho","coordinates":[-111.48442,44.21809]},
+{"dem":1244,"rep":4108,"total":5713,"name":"Lincoln, Washington","coordinates":[-118.41769,47.58274]},
+{"dem":1014,"rep":4568,"total":5694,"name":"Union, Florida","coordinates":[-82.36691,30.05427]},
+{"dem":1053,"rep":4441,"total":5694,"name":"Sequatchie, Tennessee","coordinates":[-85.41008,35.37233]},
+{"dem":2214,"rep":2812,"total":5686,"name":"Trinity, California","coordinates":[-123.11447,40.6478]},
+{"dem":1263,"rep":4064,"total":5685,"name":"Lawrence, Arkansas","coordinates":[-91.10115,36.04109]},
+{"dem":1244,"rep":4212,"total":5685,"name":"Blanco, Texas","coordinates":[-98.39921,30.26645]},
+{"dem":705,"rep":4827,"total":5676,"name":"Bollinger, Missouri","coordinates":[-90.02464,37.31842]},
+{"dem":948,"rep":4658,"total":5655,"name":"Wayne, Missouri","coordinates":[-90.45393,37.11107]},
+{"dem":641,"rep":4695,"total":5652,"name":"Custer, Nebraska","coordinates":[-99.72686,41.39389]},
+{"dem":1155,"rep":4274,"total":5643,"name":"Hardy, West Virginia","coordinates":[-78.84172,39.01136]},
+{"dem":2232,"rep":2928,"total":5639,"name":"Skamania, Washington","coordinates":[-121.95323,46.02478]},
+{"dem":1420,"rep":4013,"total":5636,"name":"Washington, Kentucky","coordinates":[-85.17541,37.7542]},
+{"dem":1204,"rep":4003,"total":5624,"name":"Marion, Kansas","coordinates":[-97.10277,38.35964]},
+{"dem":1203,"rep":4113,"total":5618,"name":"Stone, Arkansas","coordinates":[-92.14048,35.857]},
+{"dem":1240,"rep":4088,"total":5587,"name":"Linn, Missouri","coordinates":[-93.10801,39.86444]},
+{"dem":2227,"rep":3204,"total":5586,"name":"Lunenburg, Virginia","coordinates":[-78.24052,36.94555]},
+{"dem":1205,"rep":4145,"total":5585,"name":"Greene, Illinois","coordinates":[-90.38768,39.35543]},
+{"dem":569,"rep":4865,"total":5579,"name":"Callahan, Texas","coordinates":[-99.37224,32.29314]},
+{"dem":947,"rep":4428,"total":5576,"name":"Butler, Kentucky","coordinates":[-86.68247,37.20701]},
+{"dem":4347,"rep":1200,"total":5574,"name":"Noxubee, Mississippi","coordinates":[-88.566,33.1065]},
+{"dem":1031,"rep":4206,"total":5567,"name":"Cumberland, Illinois","coordinates":[-88.24061,39.27312]},
+{"dem":1108,"rep":4236,"total":5545,"name":"Estill, Kentucky","coordinates":[-83.96398,37.69244]},
+{"dem":2001,"rep":3085,"total":5534,"name":"Rio Grande, Colorado","coordinates":[-106.45312,37.48585]},
+{"dem":1156,"rep":4288,"total":5534,"name":"Newton, Texas","coordinates":[-93.73925,30.78671]},
+{"dem":1680,"rep":3799,"total":5528,"name":"Carroll, Mississippi","coordinates":[-89.91888,33.44079]},
+{"dem":1087,"rep":4175,"total":5528,"name":"Murray, Oklahoma","coordinates":[-97.07155,34.48576]},
+{"dem":830,"rep":4522,"total":5524,"name":"Ripley, Missouri","coordinates":[-90.87483,36.65017]},
+{"dem":1351,"rep":3883,"total":5502,"name":"Vinton, Ohio","coordinates":[-82.48596,39.25204]},
+{"dem":482,"rep":4889,"total":5501,"name":"Jackson, Kentucky","coordinates":[-84.02057,37.40345]},
+{"dem":385,"rep":3901,"total":5499,"name":"Franklin, Idaho","coordinates":[-111.82296,42.1736]},
+{"dem":1096,"rep":4206,"total":5492,"name":"Marshall, Oklahoma","coordinates":[-96.77053,34.027]},
+{"dem":1492,"rep":3609,"total":5484,"name":"Jackson, Minnesota","coordinates":[-95.14973,43.67111]},
+{"dem":1151,"rep":4047,"total":5464,"name":"Wabash, Illinois","coordinates":[-87.83916,38.44582]},
+{"dem":1904,"rep":3443,"total":5460,"name":"Hamilton, Florida","coordinates":[-82.95107,30.49118]},
+{"dem":1327,"rep":3854,"total":5459,"name":"Pulaski, Indiana","coordinates":[-86.69253,41.04527]},
+{"dem":1433,"rep":3651,"total":5454,"name":"Allen, Kansas","coordinates":[-95.30094,37.88422]},
+{"dem":1113,"rep":4042,"total":5448,"name":"Izard, Arkansas","coordinates":[-91.91362,36.09487]},
+{"dem":2042,"rep":2645,"total":5447,"name":"San Juan, Utah","coordinates":[-109.79157,37.60263]},
+{"dem":1220,"rep":4135,"total":5432,"name":"Perry, Mississippi","coordinates":[-88.98875,31.1693]},
+{"dem":1119,"rep":4127,"total":5429,"name":"Montgomery, Missouri","coordinates":[-91.46542,38.93518]},
+{"dem":1067,"rep":4206,"total":5426,"name":"Choctaw, Oklahoma","coordinates":[-95.5542,34.02764]},
+{"dem":1888,"rep":3190,"total":5417,"name":"Mitchell, Iowa","coordinates":[-92.78446,43.34856]},
+{"dem":2542,"rep":2657,"total":5408,"name":"Essex, Virginia","coordinates":[-76.94187,37.93948]},
+{"dem":2116,"rep":2799,"total":5398,"name":"Stevens, Minnesota","coordinates":[-95.99231,45.59346]},
+{"dem":1303,"rep":3982,"total":5397,"name":"Crockett, Tennessee","coordinates":[-89.13249,35.81879]},
+{"dem":2385,"rep":2874,"total":5392,"name":"Gates, North Carolina","coordinates":[-76.70235,36.44213]},
+{"dem":974,"rep":4335,"total":5369,"name":"Greene, Mississippi","coordinates":[-88.63481,31.21284]},
+{"dem":1913,"rep":2906,"total":5349,"name":"Valley, Idaho","coordinates":[-115.61806,44.85595]},
+{"dem":1597,"rep":3160,"total":5344,"name":"Barnes, North Dakota","coordinates":[-98.07019,46.94255]},
+{"dem":832,"rep":4372,"total":5333,"name":"Green, Kentucky","coordinates":[-85.57848,37.27538]},
+{"dem":2129,"rep":2585,"total":5332,"name":"Colfax, New Mexico","coordinates":[-104.64011,36.61296]},
+{"dem":1939,"rep":3159,"total":5328,"name":"Lake, Michigan","coordinates":[-85.81139,43.99518]},
+{"dem":1005,"rep":4102,"total":5321,"name":"Madison, Missouri","coordinates":[-90.34341,37.47448]},
+{"dem":604,"rep":4067,"total":5317,"name":"Big Horn, Wyoming","coordinates":[-107.99484,44.52511]},
+{"dem":1306,"rep":3814,"total":5315,"name":"Alleghany, North Carolina","coordinates":[-81.13229,36.48935]},
+{"dem":1081,"rep":3860,"total":5315,"name":"McLean, North Dakota","coordinates":[-101.35308,47.53045]},
+{"dem":1127,"rep":4007,"total":5314,"name":"Cannon, Tennessee","coordinates":[-86.0624,35.80839]},
+{"dem":1563,"rep":3517,"total":5311,"name":"Mathews, Virginia","coordinates":[-76.2688,37.42534]},
+{"dem":1505,"rep":3217,"total":5305,"name":"Ramsey, North Dakota","coordinates":[-98.73903,48.26616]},
+{"dem":904,"rep":4266,"total":5302,"name":"Jackson, Texas","coordinates":[-96.58908,28.9598]},
+{"dem":1222,"rep":3864,"total":5299,"name":"Stewart, Tennessee","coordinates":[-87.81188,36.45846]},
+{"dem":785,"rep":4363,"total":5298,"name":"Lewis, Kentucky","coordinates":[-83.37014,38.53504]},
+{"dem":733,"rep":4410,"total":5289,"name":"Scurry, Texas","coordinates":[-100.91334,32.74435]},
+{"dem":1098,"rep":3977,"total":5284,"name":"Moore, Texas","coordinates":[-101.8905,35.83567]},
+{"dem":3824,"rep":1407,"total":5278,"name":"Perry, Alabama","coordinates":[-87.29382,32.639]},
+{"dem":2773,"rep":2111,"total":5276,"name":"Mono, California","coordinates":[-118.87516,37.91583]},
+{"dem":1524,"rep":3382,"total":5276,"name":"Yellow Medicine, Minnesota","coordinates":[-95.86275,44.71573]},
+{"dem":1138,"rep":3969,"total":5266,"name":"Ralls, Missouri","coordinates":[-91.52478,39.55345]},
+{"dem":1782,"rep":3381,"total":5252,"name":"Coosa, Alabama","coordinates":[-86.24348,32.93144]},
+{"dem":1684,"rep":3441,"total":5248,"name":"Falls, Texas","coordinates":[-96.93412,31.25192]},
+{"dem":1222,"rep":3781,"total":5247,"name":"Roane, West Virginia","coordinates":[-81.35449,38.74294]},
+{"dem":979,"rep":4135,"total":5244,"name":"Edmonson, Kentucky","coordinates":[-86.21801,37.22751]},
+{"dem":431,"rep":3860,"total":5242,"name":"Millard, Utah","coordinates":[-113.13309,38.95674]},
+{"dem":789,"rep":4333,"total":5237,"name":"Comanche, Texas","coordinates":[-98.54961,31.95164]},
+{"dem":3204,"rep":1733,"total":5232,"name":"Manassas Park, Virginia","coordinates":[-77.44876,38.76894]},
+{"dem":1397,"rep":3605,"total":5227,"name":"Little River, Arkansas","coordinates":[-94.22977,33.69949]},
+{"dem":2479,"rep":2652,"total":5216,"name":"McCormick, South Carolina","coordinates":[-82.31619,33.89759]},
+{"dem":1270,"rep":3703,"total":5212,"name":"Sac, Iowa","coordinates":[-95.10522,42.38752]},
+{"dem":1199,"rep":3781,"total":5200,"name":"Clay, Arkansas","coordinates":[-90.4187,36.3673]},
+{"dem":577,"rep":3188,"total":5192,"name":"Morgan, Utah","coordinates":[-111.57788,41.09102]},
+{"dem":930,"rep":3743,"total":5191,"name":"Gooding, Idaho","coordinates":[-114.82142,42.97318]},
+{"dem":1176,"rep":3657,"total":5185,"name":"Custer, Montana","coordinates":[-105.55035,46.26141]},
+{"dem":1612,"rep":3010,"total":5181,"name":"Sierra, New Mexico","coordinates":[-107.18816,33.11946]},
+{"dem":1421,"rep":3635,"total":5176,"name":"Crawford, Georgia","coordinates":[-83.97918,32.70942]},
+{"dem":645,"rep":4258,"total":5170,"name":"Red Willow, Nebraska","coordinates":[-100.46857,40.16941]},
+{"dem":1458,"rep":3600,"total":5169,"name":"Mississippi, Missouri","coordinates":[-89.29592,36.82626]},
+{"dem":933,"rep":3789,"total":5163,"name":"Boundary, Idaho","coordinates":[-116.52466,48.77313]},
+{"dem":1149,"rep":3926,"total":5161,"name":"Red River, Texas","coordinates":[-95.04842,33.61962]},
+{"dem":1398,"rep":3468,"total":5159,"name":"Calhoun, Iowa","coordinates":[-94.64368,42.38616]},
+{"dem":1583,"rep":3267,"total":5156,"name":"Jackson, Arkansas","coordinates":[-91.2232,35.59646]},
+{"dem":924,"rep":3975,"total":5136,"name":"Jasper, Illinois","coordinates":[-88.15076,39.00487]},
+{"dem":1733,"rep":3004,"total":5136,"name":"Saline, Nebraska","coordinates":[-97.13175,40.5168]},
+{"dem":2065,"rep":2974,"total":5135,"name":"Jones, North Carolina","coordinates":[-77.35619,35.03226]},
+{"dem":1621,"rep":3216,"total":5124,"name":"Cass, Illinois","coordinates":[-90.2457,39.9692]},
+{"dem":725,"rep":4124,"total":5122,"name":"Nemaha, Kansas","coordinates":[-96.00538,39.79104]},
+{"dem":1384,"rep":3297,"total":5120,"name":"Shoshone, Idaho","coordinates":[-115.88509,47.34769]},
+{"dem":531,"rep":4354,"total":5118,"name":"Holt, Nebraska","coordinates":[-98.78476,42.45928]},
+{"dem":1172,"rep":3824,"total":5116,"name":"Magoffin, Kentucky","coordinates":[-83.06972,37.69898]},
+{"dem":901,"rep":4104,"total":5096,"name":"Jeff Davis, Georgia","coordinates":[-82.63682,31.81161]},
+{"dem":3422,"rep":1547,"total":5095,"name":"Willacy, Texas","coordinates":[-97.59473,26.48186]},
+{"dem":1321,"rep":3537,"total":5090,"name":"Braxton, West Virginia","coordinates":[-80.73165,38.69933]},
+{"dem":1252,"rep":3568,"total":5087,"name":"Humboldt, Iowa","coordinates":[-94.20277,42.78222]},
+{"dem":3121,"rep":1620,"total":5075,"name":"Glacier, Montana","coordinates":[-112.9905,48.70567]},
+{"dem":1019,"rep":3976,"total":5069,"name":"Webster, Mississippi","coordinates":[-89.28396,33.61206]},
+{"dem":2608,"rep":2109,"total":5069,"name":"Clay, South Dakota","coordinates":[-96.98046,42.91614]},
+{"dem":1314,"rep":3436,"total":5044,"name":"Montgomery, Iowa","coordinates":[-95.15778,41.02173]},
+{"dem":2879,"rep":2055,"total":5044,"name":"Sussex, Virginia","coordinates":[-77.25973,36.92664]},
+{"dem":1628,"rep":3159,"total":5038,"name":"Seward, Kansas","coordinates":[-100.85525,37.18095]},
+{"dem":795,"rep":4084,"total":5018,"name":"Atoka, Oklahoma","coordinates":[-96.03655,34.39246]},
+{"dem":536,"rep":4377,"total":5018,"name":"Clay, Texas","coordinates":[-98.21291,33.7859]},
+{"dem":1186,"rep":3531,"total":5016,"name":"Prowers, Colorado","coordinates":[-102.39216,37.95818]},
+{"dem":1287,"rep":3498,"total":5009,"name":"Montmorency, Michigan","coordinates":[-84.1301,45.02413]},
+{"dem":1648,"rep":3069,"total":5008,"name":"Louisa, Iowa","coordinates":[-91.25699,41.21821]},
+{"dem":1274,"rep":3546,"total":5006,"name":"Camden, North Carolina","coordinates":[-76.16248,36.34234]},
+{"dem":878,"rep":3783,"total":5004,"name":"Hamilton, Nebraska","coordinates":[-98.02232,40.87281]},
+{"dem":1062,"rep":3745,"total":5001,"name":"Owen, Kentucky","coordinates":[-84.84159,38.49939]},
+{"dem":1814,"rep":2768,"total":4998,"name":"Watonwan, Minnesota","coordinates":[-94.61379,43.9781]},
+{"dem":2115,"rep":2818,"total":4996,"name":"Montgomery, Mississippi","coordinates":[-89.63962,33.50071]},
+{"dem":1686,"rep":2963,"total":4994,"name":"Swift, Minnesota","coordinates":[-95.69012,45.27581]},
+{"dem":601,"rep":4278,"total":4991,"name":"Monroe, Kentucky","coordinates":[-85.7135,36.71407]},
+{"dem":1342,"rep":3390,"total":4985,"name":"Keokuk, Iowa","coordinates":[-92.16772,41.33118]},
+{"dem":2159,"rep":2167,"total":4976,"name":"Teton, Idaho","coordinates":[-111.21176,43.76099]},
+{"dem":1101,"rep":3719,"total":4974,"name":"Bleckley, Georgia","coordinates":[-83.33171,32.4354]},
+{"dem":1425,"rep":3446,"total":4973,"name":"Morris, Texas","coordinates":[-94.73126,33.11646]},
+{"dem":1493,"rep":3163,"total":4968,"name":"Franklin, Iowa","coordinates":[-93.27141,42.73654]},
+{"dem":1272,"rep":3513,"total":4957,"name":"Powell, Kentucky","coordinates":[-83.83135,37.8099]},
+{"dem":512,"rep":4346,"total":4956,"name":"Grant, West Virginia","coordinates":[-79.19506,39.10598]},
+{"dem":836,"rep":3927,"total":4943,"name":"Andrews, Texas","coordinates":[-102.6402,32.31225]},
+{"dem":965,"rep":3617,"total":4924,"name":"Box Butte, Nebraska","coordinates":[-103.08177,42.21038]},
+{"dem":2036,"rep":2697,"total":4906,"name":"Cumberland, Virginia","coordinates":[-78.25283,37.52018]},
+{"dem":4013,"rep":838,"total":4880,"name":"Greene, Alabama","coordinates":[-87.9642,32.84449]},
+{"dem":901,"rep":3715,"total":4878,"name":"Noble, Oklahoma","coordinates":[-97.23633,36.3849]},
+{"dem":908,"rep":3661,"total":4873,"name":"Stillwater, Montana","coordinates":[-109.38157,45.65854]},
+{"dem":671,"rep":3908,"total":4871,"name":"Richland, Montana","coordinates":[-104.5634,47.78563]},
+{"dem":1283,"rep":3277,"total":4868,"name":"Howard, Missouri","coordinates":[-92.69592,39.14336]},
+{"dem":1190,"rep":3455,"total":4862,"name":"Summers, West Virginia","coordinates":[-80.85632,37.65599]},
+{"dem":1029,"rep":3552,"total":4857,"name":"Nolan, Texas","coordinates":[-100.4181,32.31233]},
+{"dem":1322,"rep":3479,"total":4856,"name":"Catahoula, Louisiana","coordinates":[-91.8467,31.66651]},
+{"dem":1143,"rep":3353,"total":4849,"name":"Beaverhead, Montana","coordinates":[-112.89286,45.13386]},
+{"dem":1243,"rep":3350,"total":4839,"name":"Blackford, Indiana","coordinates":[-85.32372,40.47267]},
+{"dem":1373,"rep":3091,"total":4839,"name":"Rock, Minnesota","coordinates":[-96.26323,43.66958]},
+{"dem":1691,"rep":2820,"total":4821,"name":"Greene, Iowa","coordinates":[-94.3887,42.04249]},
+{"dem":1225,"rep":3208,"total":4817,"name":"Marshall, Minnesota","coordinates":[-96.35776,48.36272]},
+{"dem":881,"rep":3697,"total":4809,"name":"Martin, Indiana","coordinates":[-86.80184,38.70532]},
+{"dem":1127,"rep":3338,"total":4808,"name":"Pipestone, Minnesota","coordinates":[-96.25701,44.01536]},
+{"dem":726,"rep":3850,"total":4791,"name":"Yuma, Colorado","coordinates":[-102.42164,40.00077]},
+{"dem":2168,"rep":2552,"total":4785,"name":"Early, Georgia","coordinates":[-84.90672,31.32419]},
+{"dem":1042,"rep":3612,"total":4779,"name":"Todd, Kentucky","coordinates":[-87.18364,36.84033]},
+{"dem":1180,"rep":3297,"total":4778,"name":"Madison, Montana","coordinates":[-111.91379,45.32528]},
+{"dem":1006,"rep":3628,"total":4775,"name":"Morgan, Kentucky","coordinates":[-83.25894,37.92294]},
+{"dem":1067,"rep":3471,"total":4772,"name":"Fulton, Arkansas","coordinates":[-91.81966,36.38361]},
+{"dem":999,"rep":3636,"total":4763,"name":"Grundy, Tennessee","coordinates":[-85.71037,35.39338]},
+{"dem":715,"rep":3970,"total":4759,"name":"West Carroll, Louisiana","coordinates":[-91.45199,32.79247]},
+{"dem":1357,"rep":3124,"total":4753,"name":"Emmet, Iowa","coordinates":[-94.66937,43.37798]},
+{"dem":882,"rep":3701,"total":4738,"name":"Haskell, Oklahoma","coordinates":[-95.10957,35.23229]},
+{"dem":2744,"rep":1927,"total":4732,"name":"Madison, Louisiana","coordinates":[-91.23193,32.34687]},
+{"dem":1016,"rep":3542,"total":4724,"name":"Hickory, Missouri","coordinates":[-93.32298,37.9369]},
+{"dem":1121,"rep":3293,"total":4721,"name":"Custer, South Dakota","coordinates":[-103.46225,43.68494]},
+{"dem":711,"rep":3665,"total":4711,"name":"Cheyenne, Nebraska","coordinates":[-103.01192,41.21423]},
+{"dem":3530,"rep":1140,"total":4710,"name":"Bullock, Alabama","coordinates":[-85.71726,32.10175]},
+{"dem":1398,"rep":3081,"total":4703,"name":"Palo Alto, Iowa","coordinates":[-94.66905,43.07533]},
+{"dem":628,"rep":3968,"total":4701,"name":"Rains, Texas","coordinates":[-95.79544,32.87057]},
+{"dem":572,"rep":3849,"total":4695,"name":"Phelps, Nebraska","coordinates":[-99.40655,40.51636]},
+{"dem":788,"rep":3822,"total":4692,"name":"Caldwell, Louisiana","coordinates":[-92.11423,32.10121]},
+{"dem":621,"rep":3759,"total":4682,"name":"Mercer, North Dakota","coordinates":[-101.83332,47.30714]},
+{"dem":1351,"rep":3157,"total":4674,"name":"Howard, Arkansas","coordinates":[-93.99093,34.08306]},
+{"dem":1072,"rep":3307,"total":4673,"name":"Marshall, Kansas","coordinates":[-96.52124,39.7827]},
+{"dem":698,"rep":3670,"total":4672,"name":"McKenzie, North Dakota","coordinates":[-103.40321,47.74247]},
+{"dem":1295,"rep":2974,"total":4668,"name":"Murray, Minnesota","coordinates":[-95.76158,44.01559]},
+{"dem":865,"rep":3671,"total":4668,"name":"Oregon, Missouri","coordinates":[-91.40182,36.68531]},
+{"dem":897,"rep":3622,"total":4664,"name":"Bledsoe, Tennessee","coordinates":[-85.20591,35.59356]},
+{"dem":614,"rep":3998,"total":4651,"name":"Sabine, Texas","coordinates":[-93.85191,31.34329]},
+{"dem":887,"rep":3570,"total":4645,"name":"Livingston, Kentucky","coordinates":[-88.36342,37.20951]},
+{"dem":1299,"rep":3083,"total":4644,"name":"Adams, Washington","coordinates":[-118.51286,47.01123]},
+{"dem":2827,"rep":1778,"total":4639,"name":"Kemper, Mississippi","coordinates":[-88.62563,32.75013]},
+{"dem":1167,"rep":2995,"total":4636,"name":"Walsh, North Dakota","coordinates":[-97.72223,48.37697]},
+{"dem":588,"rep":3854,"total":4631,"name":"Washita, Oklahoma","coordinates":[-98.99143,35.28949]},
+{"dem":936,"rep":3501,"total":4630,"name":"St. Clair, Missouri","coordinates":[-93.77656,38.04223]},
+{"dem":890,"rep":3585,"total":4622,"name":"Lewis, Tennessee","coordinates":[-87.49698,35.52324]},
+{"dem":976,"rep":3491,"total":4620,"name":"Metcalfe, Kentucky","coordinates":[-85.63345,36.99242]},
+{"dem":597,"rep":3907,"total":4620,"name":"Gaines, Texas","coordinates":[-102.63156,32.74394]},
+{"dem":824,"rep":3540,"total":4594,"name":"DeKalb, Missouri","coordinates":[-94.40719,39.89466]},
+{"dem":1323,"rep":3015,"total":4593,"name":"Crawford, Indiana","coordinates":[-86.44087,38.28943]},
+{"dem":894,"rep":3588,"total":4592,"name":"Decatur, Tennessee","coordinates":[-88.11029,35.60313]},
+{"dem":1361,"rep":3082,"total":4587,"name":"Bath, Kentucky","coordinates":[-83.73764,38.15224]},
+{"dem":1247,"rep":3120,"total":4572,"name":"Monona, Iowa","coordinates":[-95.95656,42.04943]},
+{"dem":988,"rep":3381,"total":4566,"name":"McLean, Kentucky","coordinates":[-87.26559,37.5267]},
+{"dem":1075,"rep":3282,"total":4562,"name":"Sevier, Arkansas","coordinates":[-94.24327,33.99487]},
+{"dem":1677,"rep":2611,"total":4559,"name":"Howard, Iowa","coordinates":[-92.3219,43.36531]},
+{"dem":1260,"rep":3201,"total":4542,"name":"Camp, Texas","coordinates":[-94.97908,32.97458]},
+{"dem":1584,"rep":2788,"total":4540,"name":"Forest, Wisconsin","coordinates":[-88.77332,45.66688]},
+{"dem":1960,"rep":1975,"total":4533,"name":"Grand, Utah","coordinates":[-109.57345,38.97432]},
+{"dem":719,"rep":3437,"total":4529,"name":"Platte, Wyoming","coordinates":[-104.95396,42.13159]},
+{"dem":961,"rep":3388,"total":4526,"name":"Hughes, Oklahoma","coordinates":[-96.25118,35.05293]},
+{"dem":1663,"rep":2585,"total":4518,"name":"Alger, Michigan","coordinates":[-86.5641,47.08007]},
+{"dem":724,"rep":3639,"total":4505,"name":"Ozark, Missouri","coordinates":[-92.45854,36.64959]},
+{"dem":794,"rep":3561,"total":4500,"name":"Maries, Missouri","coordinates":[-91.9236,38.16261]},
+{"dem":400,"rep":4015,"total":4492,"name":"Leslie, Kentucky","coordinates":[-83.38861,37.08784]},
+{"dem":1848,"rep":2572,"total":4486,"name":"Wilkes, Georgia","coordinates":[-82.74792,33.77903]},
+{"dem":748,"rep":3581,"total":4483,"name":"Pushmataha, Oklahoma","coordinates":[-95.40808,34.37789]},
+{"dem":1747,"rep":2539,"total":4483,"name":"Rappahannock, Virginia","coordinates":[-78.16882,38.68452]},
+{"dem":1129,"rep":3236,"total":4466,"name":"Jackson, Tennessee","coordinates":[-85.67412,36.35424]},
+{"dem":547,"rep":3809,"total":4462,"name":"Clinton, Kentucky","coordinates":[-85.13609,36.72725]},
+{"dem":934,"rep":3344,"total":4456,"name":"Lewis, Missouri","coordinates":[-91.7288,40.08455]},
+{"dem":776,"rep":3283,"total":4455,"name":"Washington, Idaho","coordinates":[-116.79779,44.44822]},
+{"dem":1465,"rep":2713,"total":4454,"name":"Clarke, Iowa","coordinates":[-93.78409,41.02919]},
+{"dem":736,"rep":3484,"total":4427,"name":"Linn, Kansas","coordinates":[-94.84493,38.21654]},
+{"dem":1938,"rep":2391,"total":4422,"name":"Red River, Louisiana","coordinates":[-93.34905,32.10121]},
+{"dem":571,"rep":3532,"total":4420,"name":"Cedar, Nebraska","coordinates":[-97.25686,42.60456]},
+{"dem":638,"rep":3477,"total":4417,"name":"Johnson, Wyoming","coordinates":[-106.58854,44.04404]},
+{"dem":2444,"rep":1856,"total":4400,"name":"Frio, Texas","coordinates":[-99.10878,28.86933]},
+{"dem":644,"rep":3409,"total":4390,"name":"Sublette, Wyoming","coordinates":[-109.91617,42.76792]},
+{"dem":665,"rep":3585,"total":4380,"name":"Franklin, Texas","coordinates":[-95.21906,33.17584]},
+{"dem":787,"rep":3320,"total":4374,"name":"Dawson, Montana","coordinates":[-104.89827,47.26613]},
+{"dem":1116,"rep":2848,"total":4366,"name":"Wallowa, Oregon","coordinates":[-117.18557,45.59375]},
+{"dem":2558,"rep":1737,"total":4363,"name":"Greensville, Virginia","coordinates":[-77.56027,36.68033]},
+{"dem":745,"rep":3480,"total":4361,"name":"Carroll, Missouri","coordinates":[-93.50022,39.42737]},
+{"dem":1239,"rep":2877,"total":4354,"name":"Lucas, Iowa","coordinates":[-93.33146,41.03334]},
+{"dem":1271,"rep":2996,"total":4353,"name":"Glades, Florida","coordinates":[-81.19081,26.95481]},
+{"dem":696,"rep":3357,"total":4351,"name":"Butte, South Dakota","coordinates":[-103.50143,44.89622]},
+{"dem":739,"rep":3210,"total":4340,"name":"Grant, Oregon","coordinates":[-119.01405,44.49632]},
+{"dem":2975,"rep":1033,"total":4329,"name":"San Miguel, Colorado","coordinates":[-108.42726,38.00931]},
+{"dem":856,"rep":3342,"total":4320,"name":"Meigs, Tennessee","coordinates":[-84.8161,35.5122]},
+{"dem":838,"rep":3232,"total":4312,"name":"Caldwell, Missouri","coordinates":[-93.97917,39.65899]},
+{"dem":780,"rep":3462,"total":4310,"name":"Grundy, Missouri","coordinates":[-93.56505,40.11254]},
+{"dem":1049,"rep":3008,"total":4306,"name":"Perry, Arkansas","coordinates":[-92.92687,34.94636]},
+{"dem":742,"rep":3464,"total":4302,"name":"Live Oak, Texas","coordinates":[-98.12696,28.35153]},
+{"dem":1244,"rep":2788,"total":4295,"name":"Hancock, Kentucky","coordinates":[-86.79276,37.84332]},
+{"dem":1502,"rep":2721,"total":4290,"name":"Franklin, Mississippi","coordinates":[-90.89545,31.47777]},
+{"dem":881,"rep":3351,"total":4289,"name":"Madison, Texas","coordinates":[-95.93037,30.96687]},
+{"dem":380,"rep":3425,"total":4289,"name":"Emery, Utah","coordinates":[-110.72109,39.00902]},
+{"dem":2705,"rep":1540,"total":4287,"name":"Macon, Georgia","coordinates":[-84.05123,32.36268]},
+{"dem":1894,"rep":2333,"total":4287,"name":"Wilkinson, Georgia","coordinates":[-83.17551,32.80426]},
+{"dem":394,"rep":3786,"total":4283,"name":"Archer, Texas","coordinates":[-98.68726,33.6163]},
+{"dem":3708,"rep":540,"total":4272,"name":"Claiborne, Mississippi","coordinates":[-90.91542,31.9728]},
+{"dem":933,"rep":3173,"total":4269,"name":"Iron, Missouri","coordinates":[-90.98468,37.59436]},
+{"dem":2228,"rep":1919,"total":4257,"name":"Desha, Arkansas","coordinates":[-91.2441,33.82875]},
+{"dem":1530,"rep":2453,"total":4257,"name":"Worth, Iowa","coordinates":[-93.24853,43.37349]},
+{"dem":3071,"rep":1151,"total":4253,"name":"Humphreys, Mississippi","coordinates":[-90.52342,33.13099]},
+{"dem":1873,"rep":2077,"total":4252,"name":"Brewster, Texas","coordinates":[-103.25245,29.80899]},
+{"dem":1100,"rep":2925,"total":4245,"name":"Clearwater, Minnesota","coordinates":[-95.37111,47.57587]},
+{"dem":1165,"rep":2983,"total":4238,"name":"Marion, Texas","coordinates":[-94.35685,32.79818]},
+{"dem":2094,"rep":1853,"total":4237,"name":"Big Horn, Montana","coordinates":[-107.51816,45.40786]},
+{"dem":742,"rep":3321,"total":4237,"name":"Nowata, Oklahoma","coordinates":[-95.61331,36.78961]},
+{"dem":2272,"rep":1819,"total":4228,"name":"Surry, Virginia","coordinates":[-76.88017,37.11976]},
+{"dem":743,"rep":3370,"total":4223,"name":"Heard, Georgia","coordinates":[-85.13788,33.29134]},
+{"dem":2857,"rep":1318,"total":4218,"name":"Wilkinson, Mississippi","coordinates":[-91.32461,31.16109]},
+{"dem":1185,"rep":2911,"total":4216,"name":"Deaf Smith, Texas","coordinates":[-102.60756,34.94076]},
+{"dem":2058,"rep":1763,"total":4206,"name":"Deer Lodge, Montana","coordinates":[-113.14162,46.09467]},
+{"dem":1145,"rep":2965,"total":4198,"name":"Karnes, Texas","coordinates":[-97.8522,28.90899]},
+{"dem":2267,"rep":1874,"total":4189,"name":"Terrell, Georgia","coordinates":[-84.43944,31.77719]},
+{"dem":770,"rep":3103,"total":4185,"name":"Benewah, Idaho","coordinates":[-116.63354,47.21845]},
+{"dem":1554,"rep":2468,"total":4185,"name":"Pecos, Texas","coordinates":[-102.71815,30.77329]},
+{"dem":442,"rep":2827,"total":4177,"name":"Juab, Utah","coordinates":[-112.79047,39.71412]},
+{"dem":2350,"rep":1716,"total":4176,"name":"Chicot, Arkansas","coordinates":[-91.29715,33.26713]},
+{"dem":768,"rep":3283,"total":4168,"name":"Graham, North Carolina","coordinates":[-83.83091,35.34836]},
+{"dem":2783,"rep":1316,"total":4168,"name":"Duval, Texas","coordinates":[-98.49739,27.68112]},
+{"dem":1017,"rep":2721,"total":4167,"name":"Morrow, Oregon","coordinates":[-119.60231,45.42549]},
+{"dem":802,"rep":3206,"total":4166,"name":"Hamilton, Illinois","coordinates":[-88.539,38.08522]},
+{"dem":853,"rep":3159,"total":4156,"name":"Monroe, Missouri","coordinates":[-92.00645,39.49826]},
+{"dem":1369,"rep":2556,"total":4154,"name":"Schoolcraft, Michigan","coordinates":[-86.19702,46.02112]},
+{"dem":961,"rep":2937,"total":4150,"name":"Turner, South Dakota","coordinates":[-97.15018,43.30866]},
+{"dem":1360,"rep":2626,"total":4117,"name":"Long, Georgia","coordinates":[-81.74286,31.74956]},
+{"dem":720,"rep":3188,"total":4115,"name":"Knox, Nebraska","coordinates":[-97.89134,42.6344]},
+{"dem":2094,"rep":1487,"total":4110,"name":"Grand Isle, Vermont","coordinates":[-73.30075,44.80178]},
+{"dem":2496,"rep":1476,"total":4107,"name":"Charles City, Virginia","coordinates":[-77.05417,37.36105]},
+{"dem":1220,"rep":2582,"total":4106,"name":"Mountrail, North Dakota","coordinates":[-102.36489,48.21007]},
+{"dem":809,"rep":3166,"total":4105,"name":"Wilbarger, Texas","coordinates":[-99.24243,34.08491]},
+{"dem":1273,"rep":2759,"total":4102,"name":"Lincoln, Georgia","coordinates":[-82.44829,33.79215]},
+{"dem":816,"rep":3161,"total":4101,"name":"Ballard, Kentucky","coordinates":[-89.01036,37.05132]},
+{"dem":733,"rep":3011,"total":4096,"name":"Lemhi, Idaho","coordinates":[-113.88704,44.9285]},
+{"dem":496,"rep":3405,"total":4075,"name":"Ritchie, West Virginia","coordinates":[-81.06631,39.17711]},
+{"dem":719,"rep":3122,"total":4074,"name":"Cuming, Nebraska","coordinates":[-96.78851,41.91586]},
+{"dem":1044,"rep":2843,"total":4073,"name":"Oscoda, Michigan","coordinates":[-84.1269,44.68725]},
+{"dem":727,"rep":3050,"total":4068,"name":"Coffey, Kansas","coordinates":[-95.72913,38.23645]},
+{"dem":1218,"rep":2788,"total":4065,"name":"Choctaw, Mississippi","coordinates":[-89.25133,33.34596]},
+{"dem":1971,"rep":2035,"total":4059,"name":"Twiggs, Georgia","coordinates":[-83.42587,32.66584]},
+{"dem":797,"rep":3100,"total":4056,"name":"Latimer, Oklahoma","coordinates":[-95.27226,34.87513]},
+{"dem":617,"rep":3290,"total":4037,"name":"Crittenden, Kentucky","coordinates":[-88.10501,37.35814]},
+{"dem":863,"rep":2906,"total":4036,"name":"Brown, Kansas","coordinates":[-95.5699,39.82593]},
+{"dem":571,"rep":3235,"total":4034,"name":"Keith, Nebraska","coordinates":[-101.64444,41.19424]},
+{"dem":1771,"rep":1914,"total":4022,"name":"Conejos, Colorado","coordinates":[-106.17644,37.2134]},
+{"dem":608,"rep":3364,"total":4020,"name":"Bacon, Georgia","coordinates":[-82.45143,31.5502]},
+{"dem":786,"rep":3093,"total":4018,"name":"Johnston, Oklahoma","coordinates":[-96.65425,34.31345]},
+{"dem":1004,"rep":2951,"total":4016,"name":"Charlton, Georgia","coordinates":[-82.13964,30.7799]},
+{"dem":1719,"rep":2251,"total":4013,"name":"Benton, Mississippi","coordinates":[-89.20028,34.81051]},
+{"dem":771,"rep":3111,"total":3995,"name":"Lamb, Texas","coordinates":[-102.34801,34.06886]},
+{"dem":685,"rep":3150,"total":3981,"name":"Pike, Arkansas","coordinates":[-93.65865,34.15819]},
+{"dem":691,"rep":3079,"total":3981,"name":"Butler, Nebraska","coordinates":[-97.13203,41.22607]},
+{"dem":683,"rep":2912,"total":3974,"name":"Harney, Oregon","coordinates":[-118.98716,43.06444]},
+{"dem":888,"rep":2950,"total":3969,"name":"Chariton, Missouri","coordinates":[-92.96162,39.51796]},
+{"dem":1045,"rep":2789,"total":3962,"name":"Lyon, Kentucky","coordinates":[-88.08339,37.02397]},
+{"dem":363,"rep":3503,"total":3953,"name":"Martin, Kentucky","coordinates":[-82.50662,37.79677]},
+{"dem":637,"rep":3184,"total":3951,"name":"Dade, Missouri","coordinates":[-93.85487,37.43234]},
+{"dem":943,"rep":2800,"total":3943,"name":"Okfuskee, Oklahoma","coordinates":[-96.32776,35.4668]},
+{"dem":1241,"rep":2265,"total":3933,"name":"Traill, North Dakota","coordinates":[-97.16475,47.44621]},
+{"dem":839,"rep":2898,"total":3930,"name":"Warren, Indiana","coordinates":[-87.37584,40.35265]},
+{"dem":761,"rep":2919,"total":3930,"name":"Cloud, Kansas","coordinates":[-97.64138,39.48732]},
+{"dem":639,"rep":3022,"total":3930,"name":"Lake, Oregon","coordinates":[-120.38978,42.7884]},
+{"dem":591,"rep":3052,"total":3925,"name":"Owyhee, Idaho","coordinates":[-116.18969,42.57285]},
+{"dem":776,"rep":2966,"total":3904,"name":"Shannon, Missouri","coordinates":[-91.39132,37.15249]},
+{"dem":541,"rep":3206,"total":3897,"name":"Somervell, Texas","coordinates":[-97.76921,32.21807]},
+{"dem":886,"rep":2698,"total":3894,"name":"Valley, Montana","coordinates":[-106.67042,48.34984]},
+{"dem":1540,"rep":2144,"total":3889,"name":"Roberts, South Dakota","coordinates":[-96.94755,45.62339]},
+{"dem":977,"rep":2723,"total":3882,"name":"Davis, Iowa","coordinates":[-92.41034,40.74808]},
+{"dem":1056,"rep":2638,"total":3865,"name":"Monroe, Iowa","coordinates":[-92.86964,41.02884]},
+{"dem":963,"rep":2702,"total":3865,"name":"Pocahontas, Iowa","coordinates":[-94.67827,42.73403]},
+{"dem":1305,"rep":2293,"total":3860,"name":"Lac Qui Parle, Minnesota","coordinates":[-96.17683,44.99985]},
+{"dem":3337,"rep":490,"total":3860,"name":"Jefferson, Mississippi","coordinates":[-91.04387,31.73363]},
+{"dem":1872,"rep":1951,"total":3859,"name":"Dooly, Georgia","coordinates":[-83.80716,32.15199]},
+{"dem":1106,"rep":2588,"total":3855,"name":"Carroll, Kentucky","coordinates":[-85.12402,38.66839]},
+{"dem":771,"rep":2838,"total":3842,"name":"Pratt, Kansas","coordinates":[-98.74011,37.64759]},
+{"dem":1075,"rep":2524,"total":3828,"name":"Schuyler, Illinois","coordinates":[-90.61346,40.1569]},
+{"dem":1252,"rep":2455,"total":3826,"name":"Lincoln, Arkansas","coordinates":[-91.72762,33.95767]},
+{"dem":273,"rep":3348,"total":3826,"name":"Crook, Wyoming","coordinates":[-104.56729,44.58926]},
+{"dem":677,"rep":2891,"total":3820,"name":"Clay, Kansas","coordinates":[-97.16885,39.34496]},
+{"dem":777,"rep":2673,"total":3814,"name":"Boise, Idaho","coordinates":[-115.71511,43.98727]},
+{"dem":532,"rep":2911,"total":3814,"name":"Washakie, Wyoming","coordinates":[-107.66905,43.87883]},
+{"dem":1133,"rep":2461,"total":3811,"name":"Adair, Iowa","coordinates":[-94.47816,41.32852]},
+{"dem":818,"rep":2769,"total":3805,"name":"Richardson, Nebraska","coordinates":[-95.7186,40.12374]},
+{"dem":695,"rep":2837,"total":3804,"name":"Rice, Kansas","coordinates":[-98.20141,38.34717]},
+{"dem":704,"rep":2852,"total":3801,"name":"Clearwater, Idaho","coordinates":[-115.6535,46.67257]},
+{"dem":879,"rep":2771,"total":3798,"name":"Trimble, Kentucky","coordinates":[-85.3512,38.62004]},
+{"dem":1313,"rep":2450,"total":3796,"name":"Telfair, Georgia","coordinates":[-82.93106,31.91364]},
+{"dem":711,"rep":2884,"total":3793,"name":"Blaine, Oklahoma","coordinates":[-98.42893,35.87778]},
+{"dem":735,"rep":2922,"total":3789,"name":"Love, Oklahoma","coordinates":[-97.24509,33.9578]},
+{"dem":877,"rep":2696,"total":3788,"name":"Modoc, California","coordinates":[-120.71837,41.59291]},
+{"dem":602,"rep":2926,"total":3788,"name":"Merrick, Nebraska","coordinates":[-98.03105,41.16978]},
+{"dem":1633,"rep":1883,"total":3783,"name":"Huerfano, Colorado","coordinates":[-104.95992,37.68781]},
+{"dem":453,"rep":3250,"total":3782,"name":"Runnels, Texas","coordinates":[-99.98271,31.84511]},
+{"dem":835,"rep":2693,"total":3776,"name":"Wayne, Nebraska","coordinates":[-97.12624,42.21074]},
+{"dem":707,"rep":2723,"total":3773,"name":"White Pine, Nevada","coordinates":[-114.9006,39.41823]},
+{"dem":1026,"rep":2664,"total":3763,"name":"Candler, Georgia","coordinates":[-82.07126,32.40394]},
+{"dem":2099,"rep":1217,"total":3755,"name":"Rolette, North Dakota","coordinates":[-99.84046,48.76827]},
+{"dem":699,"rep":2875,"total":3753,"name":"Newton, Arkansas","coordinates":[-93.21589,35.91074]},
+{"dem":1345,"rep":2206,"total":3739,"name":"Pepin, Wisconsin","coordinates":[-91.83488,44.62743]},
+{"dem":1201,"rep":2296,"total":3734,"name":"Decatur, Iowa","coordinates":[-93.78457,40.73637]},
+{"dem":601,"rep":2955,"total":3728,"name":"Searcy, Arkansas","coordinates":[-92.69588,35.89638]},
+{"dem":973,"rep":2620,"total":3708,"name":"Goliad, Texas","coordinates":[-97.43041,28.6607]},
+{"dem":536,"rep":2967,"total":3702,"name":"Kit Carson, Colorado","coordinates":[-102.60302,39.30533]},
+{"dem":930,"rep":2558,"total":3699,"name":"Switzerland, Indiana","coordinates":[-85.02968,38.82585]},
+{"dem":1468,"rep":2099,"total":3697,"name":"King and Queen, Virginia","coordinates":[-76.90558,37.71777]},
+{"dem":323,"rep":3256,"total":3692,"name":"Cameron, Louisiana","coordinates":[-93.16494,29.87181]},
+{"dem":574,"rep":2965,"total":3689,"name":"Harrison, Missouri","coordinates":[-93.99258,40.34562]},
+{"dem":1136,"rep":2519,"total":3686,"name":"Johnson, Georgia","coordinates":[-82.66396,32.69458]},
+{"dem":801,"rep":2632,"total":3676,"name":"Dawes, Nebraska","coordinates":[-103.13487,42.71121]},
+{"dem":891,"rep":2716,"total":3670,"name":"Irwin, Georgia","coordinates":[-83.27703,31.6043]},
+{"dem":522,"rep":2947,"total":3668,"name":"Woods, Oklahoma","coordinates":[-98.86364,36.72698]},
+{"dem":860,"rep":2579,"total":3666,"name":"Benton, Indiana","coordinates":[-87.31478,40.60093]},
+{"dem":507,"rep":2996,"total":3654,"name":"Tyler, West Virginia","coordinates":[-80.87721,39.46563]},
+{"dem":1317,"rep":2164,"total":3653,"name":"Bradley, Arkansas","coordinates":[-92.16915,33.46654]},
+{"dem":1560,"rep":1797,"total":3652,"name":"Roosevelt, Montana","coordinates":[-104.99516,48.28274]},
+{"dem":928,"rep":2496,"total":3646,"name":"Pocahontas, West Virginia","coordinates":[-80.01012,38.3326]},
+{"dem":388,"rep":3177,"total":3643,"name":"Coleman, Texas","coordinates":[-99.34662,31.9142]},
+{"dem":382,"rep":3052,"total":3630,"name":"Pierce, Nebraska","coordinates":[-97.61099,42.27141]},
+{"dem":479,"rep":3060,"total":3620,"name":"Hamilton, Texas","coordinates":[-98.11175,31.70734]},
+{"dem":1130,"rep":2404,"total":3613,"name":"Evans, Georgia","coordinates":[-81.89015,32.15308]},
+{"dem":792,"rep":2655,"total":3612,"name":"Ida, Iowa","coordinates":[-95.50742,42.39186]},
+{"dem":1104,"rep":2437,"total":3605,"name":"Pulaski, Georgia","coordinates":[-83.48184,32.2388]},
+{"dem":1098,"rep":2202,"total":3601,"name":"Ferry, Washington","coordinates":[-118.53358,48.47325]},
+{"dem":963,"rep":2407,"total":3595,"name":"Fremont, Iowa","coordinates":[-95.59918,40.74259]},
+{"dem":730,"rep":2767,"total":3593,"name":"Daviess, Missouri","coordinates":[-93.97005,39.96283]},
+{"dem":2735,"rep":789,"total":3592,"name":"Allendale, South Carolina","coordinates":[-81.36326,32.97975]},
+{"dem":594,"rep":2788,"total":3591,"name":"Wilson, Kansas","coordinates":[-95.74517,37.55851]},
+{"dem":1189,"rep":2345,"total":3588,"name":"Seminole, Georgia","coordinates":[-84.86768,30.93395]},
+{"dem":2701,"rep":843,"total":3580,"name":"Hancock, Georgia","coordinates":[-83.00046,33.26921]},
+{"dem":1634,"rep":1566,"total":3576,"name":"Gilpin, Colorado","coordinates":[-105.52887,39.86115]},
+{"dem":847,"rep":2670,"total":3576,"name":"Montgomery, Georgia","coordinates":[-82.53334,32.1721]},
+{"dem":473,"rep":2908,"total":3576,"name":"Thomas, Kansas","coordinates":[-101.08338,39.35771]},
+{"dem":1017,"rep":2212,"total":3572,"name":"Quay, New Mexico","coordinates":[-103.54807,35.10701]},
+{"dem":910,"rep":2622,"total":3569,"name":"San Augustine, Texas","coordinates":[-94.16317,31.38244]},
+{"dem":2667,"rep":853,"total":3567,"name":"Tunica, Mississippi","coordinates":[-90.37176,34.6522]},
+{"dem":971,"rep":2382,"total":3564,"name":"Grant, South Dakota","coordinates":[-96.77226,45.17263]},
+{"dem":821,"rep":2511,"total":3563,"name":"Fall River, South Dakota","coordinates":[-103.5126,43.22161]},
+{"dem":835,"rep":2636,"total":3563,"name":"Dawson, Texas","coordinates":[-101.94877,32.74252]},
+{"dem":845,"rep":2527,"total":3561,"name":"Van Buren, Iowa","coordinates":[-91.95294,40.75411]},
+{"dem":748,"rep":2643,"total":3559,"name":"Montgomery, Arkansas","coordinates":[-93.66415,34.54565]},
+{"dem":930,"rep":2367,"total":3558,"name":"Burt, Nebraska","coordinates":[-96.33774,41.85417]},
+{"dem":705,"rep":2711,"total":3527,"name":"Bracken, Kentucky","coordinates":[-84.11523,38.68036]},
+{"dem":299,"rep":3033,"total":3526,"name":"Weston, Wyoming","coordinates":[-104.57002,43.84621]},
+{"dem":1155,"rep":2155,"total":3518,"name":"Henderson, Illinois","coordinates":[-90.94124,40.81447]},
+{"dem":602,"rep":2731,"total":3510,"name":"Scott, Arkansas","coordinates":[-94.06364,34.85886]},
+{"dem":741,"rep":2265,"total":3505,"name":"Kane, Utah","coordinates":[-111.81532,37.27508]},
+{"dem":1273,"rep":2090,"total":3497,"name":"Iron, Wisconsin","coordinates":[-90.26129,46.32655]},
+{"dem":837,"rep":2399,"total":3494,"name":"Jefferson, Nebraska","coordinates":[-97.1431,40.17573]},
+{"dem":736,"rep":2494,"total":3494,"name":"Bottineau, North Dakota","coordinates":[-100.83125,48.79441]},
+{"dem":767,"rep":2596,"total":3493,"name":"Kiowa, Oklahoma","coordinates":[-98.98161,34.92148]},
+{"dem":1156,"rep":2158,"total":3490,"name":"Baraga, Michigan","coordinates":[-88.36181,46.69585]},
+{"dem":751,"rep":2565,"total":3475,"name":"Tucker, West Virginia","coordinates":[-79.55996,39.11117]},
+{"dem":1105,"rep":2063,"total":3473,"name":"Grant, Minnesota","coordinates":[-96.01069,45.93074]},
+{"dem":348,"rep":3034,"total":3461,"name":"Stephens, Texas","coordinates":[-98.83934,32.73805]},
+{"dem":987,"rep":2253,"total":3453,"name":"Rosebud, Montana","coordinates":[-106.66674,46.17323]},
+{"dem":436,"rep":2791,"total":3450,"name":"Rio Blanco, Colorado","coordinates":[-108.20071,39.97262]},
+{"dem":783,"rep":2547,"total":3445,"name":"Ward, Texas","coordinates":[-103.10511,31.51306]},
+{"dem":814,"rep":2505,"total":3444,"name":"Prairie, Arkansas","coordinates":[-91.55362,34.83111]},
+{"dem":935,"rep":2382,"total":3433,"name":"Charles Mix, South Dakota","coordinates":[-98.59514,43.20618]},
+{"dem":1176,"rep":2066,"total":3426,"name":"Ontonagon, Michigan","coordinates":[-89.50046,47.2166]},
+{"dem":1080,"rep":2136,"total":3412,"name":"Audubon, Iowa","coordinates":[-94.90431,41.67917]},
+{"dem":1296,"rep":2064,"total":3408,"name":"Taylor, Georgia","coordinates":[-84.25142,32.55466]},
+{"dem":310,"rep":2948,"total":3407,"name":"Major, Oklahoma","coordinates":[-98.54201,36.31311]},
+{"dem":1246,"rep":2095,"total":3398,"name":"Turner, Georgia","coordinates":[-83.62031,31.7248]},
+{"dem":2636,"rep":694,"total":3396,"name":"Zavala, Texas","coordinates":[-99.75983,28.86465]},
+{"dem":1912,"rep":1156,"total":3395,"name":"Cook, Minnesota","coordinates":[-90.29018,47.53856]},
+{"dem":518,"rep":2809,"total":3392,"name":"Lafayette, Florida","coordinates":[-83.1785,29.99006]},
+{"dem":776,"rep":2372,"total":3380,"name":"Wabaunsee, Kansas","coordinates":[-96.20126,38.95515]},
+{"dem":587,"rep":2606,"total":3378,"name":"Doniphan, Kansas","coordinates":[-95.14722,39.7885]},
+{"dem":2312,"rep":1001,"total":3365,"name":"Quitman, Mississippi","coordinates":[-90.29017,34.25283]},
+{"dem":692,"rep":2517,"total":3365,"name":"Hutchinson, South Dakota","coordinates":[-97.74938,43.33671]},
+{"dem":753,"rep":2459,"total":3355,"name":"Terry, Texas","coordinates":[-102.33928,33.17122]},
+{"dem":723,"rep":2462,"total":3354,"name":"Cleveland, Arkansas","coordinates":[-92.18871,33.8932]},
+{"dem":672,"rep":2435,"total":3350,"name":"Anderson, Kansas","coordinates":[-95.29204,38.21511]},
+{"dem":314,"rep":2973,"total":3350,"name":"Jack, Texas","coordinates":[-98.17117,33.23216]},
+{"dem":434,"rep":2778,"total":3347,"name":"Edwards, Illinois","coordinates":[-88.04794,38.41709]},
+{"dem":749,"rep":2443,"total":3338,"name":"Gallatin, Kentucky","coordinates":[-84.86215,38.7601]},
+{"dem":599,"rep":2530,"total":3334,"name":"Kingman, Kansas","coordinates":[-98.14452,37.55295]},
+{"dem":1697,"rep":1351,"total":3310,"name":"Ouray, Colorado","coordinates":[-107.78848,38.15473]},
+{"dem":893,"rep":2129,"total":3302,"name":"Wilkin, Minnesota","coordinates":[-96.47665,46.36233]},
+{"dem":651,"rep":2543,"total":3296,"name":"Liberty, Florida","coordinates":[-84.86858,30.25984]},
+{"dem":550,"rep":2531,"total":3296,"name":"Kearney, Nebraska","coordinates":[-98.9476,40.50911]},
+{"dem":715,"rep":2445,"total":3291,"name":"Union, Indiana","coordinates":[-84.92515,39.62311]},
+{"dem":383,"rep":2732,"total":3281,"name":"Antelope, Nebraska","coordinates":[-98.05803,42.18322]},
+{"dem":1092,"rep":1892,"total":3270,"name":"Greenlee, Arizona","coordinates":[-109.24232,33.23887]},
+{"dem":1264,"rep":1699,"total":3261,"name":"Norman, Minnesota","coordinates":[-96.46377,47.32945]},
+{"dem":606,"rep":2524,"total":3255,"name":"Shelby, Missouri","coordinates":[-92.08871,39.79753]},
+{"dem":1157,"rep":2000,"total":3246,"name":"Nevada, Arkansas","coordinates":[-93.30507,33.66669]},
+{"dem":2002,"rep":1196,"total":3246,"name":"Talbot, Georgia","coordinates":[-84.53002,32.7046]},
+{"dem":949,"rep":2064,"total":3225,"name":"Hamilton, New York","coordinates":[-74.50245,43.65787]},
+{"dem":2173,"rep":974,"total":3225,"name":"Dimmit, Texas","coordinates":[-99.76587,28.42358]},
+{"dem":729,"rep":2398,"total":3225,"name":"Pendleton, West Virginia","coordinates":[-79.34061,38.67445]},
+{"dem":724,"rep":2458,"total":3215,"name":"Clark, Missouri","coordinates":[-91.72947,40.40727]},
+{"dem":859,"rep":2171,"total":3214,"name":"Colfax, Nebraska","coordinates":[-97.08894,41.57496]},
+{"dem":552,"rep":2531,"total":3213,"name":"Osceola, Iowa","coordinates":[-95.63378,43.37854]},
+{"dem":1616,"rep":1270,"total":3199,"name":"Lake, Colorado","coordinates":[-106.35007,39.20534]},
+{"dem":461,"rep":2574,"total":3193,"name":"Russell, Kansas","coordinates":[-98.77094,38.91603]},
+{"dem":1213,"rep":1921,"total":3190,"name":"Marion, Georgia","coordinates":[-84.52873,32.35931]},
+{"dem":808,"rep":2170,"total":3188,"name":"Teton, Montana","coordinates":[-112.28172,47.81903]},
+{"dem":1659,"rep":1417,"total":3184,"name":"Reeves, Texas","coordinates":[-103.7127,31.30836]},
+{"dem":866,"rep":2182,"total":3168,"name":"Houston, Tennessee","coordinates":[-87.70559,36.28578]},
+{"dem":785,"rep":2116,"total":3161,"name":"Nemaha, Nebraska","coordinates":[-95.85272,40.38738]},
+{"dem":946,"rep":2103,"total":3160,"name":"Trousdale, Tennessee","coordinates":[-86.15669,36.39302]},
+{"dem":681,"rep":2208,"total":3153,"name":"Pembina, North Dakota","coordinates":[-97.5454,48.76689]},
+{"dem":621,"rep":2358,"total":3150,"name":"Pleasants, West Virginia","coordinates":[-81.16117,39.36813]},
+{"dem":2063,"rep":1029,"total":3142,"name":"Zapata, Texas","coordinates":[-99.1826,26.99698]},
+{"dem":453,"rep":2573,"total":3139,"name":"Bland, Virginia","coordinates":[-81.12585,37.13061]},
+{"dem":750,"rep":2291,"total":3136,"name":"Sullivan, Pennsylvania","coordinates":[-76.51171,41.43928]},
+{"dem":573,"rep":2348,"total":3133,"name":"Broadwater, Montana","coordinates":[-111.49787,46.32984]},
+{"dem":317,"rep":2623,"total":3118,"name":"Cherry, Nebraska","coordinates":[-101.04765,42.57132]},
+{"dem":1147,"rep":1767,"total":3111,"name":"Putnam, Illinois","coordinates":[-89.29834,41.19896]},
+{"dem":482,"rep":2552,"total":3103,"name":"McCulloch, Texas","coordinates":[-99.35985,31.20547]},
+{"dem":797,"rep":2061,"total":3066,"name":"Custer, Colorado","coordinates":[-105.37351,38.10199]},
+{"dem":459,"rep":2502,"total":3066,"name":"Cumberland, Kentucky","coordinates":[-85.38848,36.78237]},
+{"dem":477,"rep":2422,"total":3065,"name":"Clay, Nebraska","coordinates":[-98.05085,40.52366]},
+{"dem":1123,"rep":1895,"total":3056,"name":"Jenkins, Georgia","coordinates":[-81.97152,32.79456]},
+{"dem":605,"rep":2304,"total":3043,"name":"Gentry, Missouri","coordinates":[-94.40532,40.20812]},
+{"dem":540,"rep":2406,"total":3038,"name":"Reynolds, Missouri","coordinates":[-90.97228,37.36646]},
+{"dem":271,"rep":2275,"total":3035,"name":"Caribou, Idaho","coordinates":[-111.54427,42.78607]},
+{"dem":758,"rep":2111,"total":3029,"name":"Taylor, Iowa","coordinates":[-94.6971,40.73794]},
+{"dem":1735,"rep":1229,"total":3026,"name":"Lee, Arkansas","coordinates":[-90.77971,34.7795]},
+{"dem":860,"rep":1931,"total":3019,"name":"Lincoln, Minnesota","coordinates":[-96.27203,44.40823]},
+{"dem":274,"rep":2628,"total":3002,"name":"Ochiltree, Texas","coordinates":[-100.81586,36.27874]},
+{"dem":544,"rep":2284,"total":2994,"name":"Howard, Nebraska","coordinates":[-98.51334,41.21685]},
+{"dem":556,"rep":2302,"total":2978,"name":"Webster, West Virginia","coordinates":[-80.44905,38.48345]},
+{"dem":852,"rep":2096,"total":2976,"name":"Wilcox, Georgia","coordinates":[-83.43825,31.96271]},
+{"dem":704,"rep":2105,"total":2974,"name":"Bon Homme, South Dakota","coordinates":[-97.88419,42.98579]},
+{"dem":568,"rep":2300,"total":2972,"name":"Clay, West Virginia","coordinates":[-81.08186,38.45982]},
+{"dem":249,"rep":2620,"total":2964,"name":"Carson, Texas","coordinates":[-101.35535,35.40549]},
+{"dem":919,"rep":1854,"total":2951,"name":"Spink, South Dakota","coordinates":[-98.33961,44.92377]},
+{"dem":1034,"rep":1830,"total":2948,"name":"Refugio, Texas","coordinates":[-97.16247,28.32211]},
+{"dem":477,"rep":2308,"total":2942,"name":"Mitchell, Kansas","coordinates":[-98.20736,39.39302]},
+{"dem":613,"rep":2130,"total":2941,"name":"Fillmore, Nebraska","coordinates":[-97.5967,40.52503]},
+{"dem":719,"rep":2069,"total":2940,"name":"Wayne, Iowa","coordinates":[-93.33261,40.73998]},
+{"dem":1838,"rep":1059,"total":2939,"name":"East Carroll, Louisiana","coordinates":[-91.23414,32.73016]},
+{"dem":1043,"rep":1731,"total":2933,"name":"Moody, South Dakota","coordinates":[-96.67605,44.01242]},
+{"dem":255,"rep":2203,"total":2928,"name":"Bear Lake, Idaho","coordinates":[-111.32751,42.28589]},
+{"dem":496,"rep":2325,"total":2926,"name":"Moore, Tennessee","coordinates":[-86.35868,35.28888]},
+{"dem":1019,"rep":1506,"total":2925,"name":"Essex, Vermont","coordinates":[-71.73273,44.72402]},
+{"dem":686,"rep":2118,"total":2921,"name":"Ohio, Indiana","coordinates":[-84.96429,38.94052]},
+{"dem":707,"rep":2141,"total":2920,"name":"Clay, Tennessee","coordinates":[-85.54571,36.54574]},
+{"dem":414,"rep":2299,"total":2905,"name":"Boone, Nebraska","coordinates":[-98.07047,41.70393]},
+{"dem":424,"rep":2283,"total":2903,"name":"Ottawa, Kansas","coordinates":[-97.6548,39.13796]},
+{"dem":1598,"rep":1271,"total":2899,"name":"Randolph, Georgia","coordinates":[-84.75231,31.76265]},
+{"dem":1312,"rep":1489,"total":2884,"name":"Monroe, Arkansas","coordinates":[-91.2033,34.67951]},
+{"dem":806,"rep":1984,"total":2871,"name":"Lanier, Georgia","coordinates":[-83.06316,31.03819]},
+{"dem":1032,"rep":1758,"total":2860,"name":"Lafayette, Arkansas","coordinates":[-93.61151,33.24062]},
+{"dem":740,"rep":2000,"total":2855,"name":"Elliott, Kentucky","coordinates":[-83.09611,38.11688]},
+{"dem":597,"rep":2167,"total":2855,"name":"Perry, Tennessee","coordinates":[-87.86932,35.66375]},
+{"dem":1262,"rep":1496,"total":2846,"name":"Alexander, Illinois","coordinates":[-89.34951,37.18365]},
+{"dem":436,"rep":2324,"total":2844,"name":"Carter, Missouri","coordinates":[-90.9457,36.94485]},
+{"dem":787,"rep":1957,"total":2841,"name":"Nicholas, Kentucky","coordinates":[-84.02622,38.33803]},
+{"dem":485,"rep":2160,"total":2840,"name":"Greenwood, Kansas","coordinates":[-96.24173,37.87934]},
+{"dem":362,"rep":2358,"total":2840,"name":"Doddridge, West Virginia","coordinates":[-80.70123,39.26348]},
+{"dem":1417,"rep":1147,"total":2835,"name":"Saguache, Colorado","coordinates":[-106.23466,38.03165]},
+{"dem":490,"rep":2050,"total":2820,"name":"McHenry, North Dakota","coordinates":[-100.63326,48.23384]},
+{"dem":417,"rep":2187,"total":2801,"name":"Stanton, Nebraska","coordinates":[-97.1771,41.90504]},
+{"dem":551,"rep":2029,"total":2794,"name":"Powell, Montana","coordinates":[-112.93109,46.84422]},
+{"dem":541,"rep":2140,"total":2794,"name":"Craig, Virginia","coordinates":[-80.23105,37.4736]},
+{"dem":556,"rep":2041,"total":2782,"name":"Dixon, Nebraska","coordinates":[-96.85586,42.48528]},
+{"dem":700,"rep":2010,"total":2779,"name":"Menifee, Kentucky","coordinates":[-83.58936,37.9355]},
+{"dem":1165,"rep":1509,"total":2771,"name":"Dallas, Arkansas","coordinates":[-92.65399,33.96782]},
+{"dem":387,"rep":2194,"total":2765,"name":"Washington, Kansas","coordinates":[-97.09561,39.77671]},
+{"dem":555,"rep":2051,"total":2762,"name":"Hamlin, South Dakota","coordinates":[-97.17859,44.68061]},
+{"dem":699,"rep":1666,"total":2758,"name":"Power, Idaho","coordinates":[-112.8444,42.69412]},
+{"dem":921,"rep":1608,"total":2755,"name":"Big Stone, Minnesota","coordinates":[-96.40222,45.41992]},
+{"dem":974,"rep":1627,"total":2747,"name":"Day, South Dakota","coordinates":[-97.58142,45.35516]},
+{"dem":751,"rep":1778,"total":2743,"name":"Stark, Illinois","coordinates":[-89.79741,41.0969]},
+{"dem":962,"rep":1675,"total":2735,"name":"Pulaski, Illinois","coordinates":[-89.12775,37.21561]},
+{"dem":296,"rep":2299,"total":2733,"name":"Washington, Colorado","coordinates":[-103.20974,39.96578]},
+{"dem":541,"rep":2060,"total":2724,"name":"Atchison, Missouri","coordinates":[-95.43755,40.43184]},
+{"dem":738,"rep":1799,"total":2723,"name":"Pondera, Montana","coordinates":[-112.22076,48.2286]},
+{"dem":657,"rep":1942,"total":2707,"name":"Gallatin, Illinois","coordinates":[-88.22796,37.76867]},
+{"dem":753,"rep":1824,"total":2707,"name":"Ringgold, Iowa","coordinates":[-94.24425,40.73533]},
+{"dem":657,"rep":1944,"total":2706,"name":"Tillman, Oklahoma","coordinates":[-98.9317,34.37108]},
+{"dem":862,"rep":1809,"total":2703,"name":"Treutlen, Georgia","coordinates":[-82.57088,32.40958]},
+{"dem":499,"rep":2051,"total":2690,"name":"Thayer, Nebraska","coordinates":[-97.59626,40.17384]},
+{"dem":1202,"rep":1268,"total":2684,"name":"Blaine, Montana","coordinates":[-108.96764,48.42828]},
+{"dem":521,"rep":1969,"total":2679,"name":"Ellsworth, Kansas","coordinates":[-98.20535,38.70084]},
+{"dem":444,"rep":2151,"total":2667,"name":"Lee, Kentucky","coordinates":[-83.71924,37.60811]},
+{"dem":300,"rep":2233,"total":2664,"name":"Phillips, Kansas","coordinates":[-99.34214,39.7845]},
+{"dem":579,"rep":1904,"total":2661,"name":"Pawnee, Kansas","coordinates":[-99.23477,38.18147]},
+{"dem":666,"rep":1897,"total":2657,"name":"Florence, Wisconsin","coordinates":[-88.40698,45.87182]},
+{"dem":753,"rep":1804,"total":2635,"name":"Wolfe, Kentucky","coordinates":[-83.4951,37.74389]},
+{"dem":462,"rep":2069,"total":2630,"name":"Tripp, South Dakota","coordinates":[-99.87621,43.34972]},
+{"dem":601,"rep":1820,"total":2624,"name":"Morris, Kansas","coordinates":[-96.65144,38.6882]},
+{"dem":456,"rep":2035,"total":2617,"name":"Calhoun, West Virginia","coordinates":[-81.11547,38.84415]},
+{"dem":536,"rep":2021,"total":2615,"name":"Pickett, Tennessee","coordinates":[-85.07574,36.55936]},
+{"dem":347,"rep":2089,"total":2612,"name":"Sherman, Kansas","coordinates":[-101.71985,39.35135]},
+{"dem":697,"rep":1878,"total":2610,"name":"Atkinson, Georgia","coordinates":[-82.87815,31.2968]},
+{"dem":535,"rep":1966,"total":2608,"name":"Scott, Illinois","coordinates":[-90.47777,39.637]},
+{"dem":287,"rep":2211,"total":2608,"name":"Sheridan, Nebraska","coordinates":[-102.36827,42.51228]},
+{"dem":732,"rep":1679,"total":2603,"name":"Chouteau, Montana","coordinates":[-110.4362,47.88683]},
+{"dem":424,"rep":2054,"total":2602,"name":"Cotton, Oklahoma","coordinates":[-98.37343,34.29067]},
+{"dem":432,"rep":2094,"total":2601,"name":"Carlisle, Kentucky","coordinates":[-88.97661,36.85718]},
+{"dem":1937,"rep":613,"total":2596,"name":"Brooks, Texas","coordinates":[-98.21527,27.03499]},
+{"dem":623,"rep":1794,"total":2587,"name":"McCook, South Dakota","coordinates":[-97.35804,43.68041]},
+{"dem":400,"rep":1939,"total":2586,"name":"Hot Springs, Wyoming","coordinates":[-108.43507,43.7202]},
+{"dem":413,"rep":2028,"total":2582,"name":"Polk, Nebraska","coordinates":[-97.57066,41.18792]},
+{"dem":681,"rep":1756,"total":2579,"name":"Luce, Michigan","coordinates":[-85.58236,46.9406]},
+{"dem":393,"rep":1996,"total":2578,"name":"Harper, Kansas","coordinates":[-98.06659,37.18818]},
+{"dem":1118,"rep":1347,"total":2571,"name":"Woodruff, Arkansas","coordinates":[-91.24453,35.19277]},
+{"dem":739,"rep":1721,"total":2571,"name":"Calhoun, Illinois","coordinates":[-90.66629,39.16426]},
+{"dem":752,"rep":1616,"total":2558,"name":"Storey, Nevada","coordinates":[-119.52464,39.43838]},
+{"dem":703,"rep":1680,"total":2551,"name":"Kingsbury, South Dakota","coordinates":[-97.49931,44.36296]},
+{"dem":1332,"rep":1182,"total":2548,"name":"Tensas, Louisiana","coordinates":[-91.34257,32.00148]},
+{"dem":623,"rep":1891,"total":2544,"name":"Miller, Georgia","coordinates":[-84.73039,31.16293]},
+{"dem":545,"rep":1896,"total":2543,"name":"Gilmer, West Virginia","coordinates":[-80.84941,38.91586]},
+{"dem":375,"rep":2024,"total":2529,"name":"Republic, Kansas","coordinates":[-97.65088,39.8289]},
+{"dem":264,"rep":1838,"total":2491,"name":"Beaver, Utah","coordinates":[-113.23894,38.35753]},
+{"dem":526,"rep":1884,"total":2486,"name":"Sullivan, Missouri","coordinates":[-93.10978,40.20958]},
+{"dem":457,"rep":1896,"total":2477,"name":"Walworth, South Dakota","coordinates":[-100.02785,45.4276]},
+{"dem":485,"rep":1915,"total":2466,"name":"Parmer, Texas","coordinates":[-102.78485,34.53216]},
+{"dem":1514,"rep":766,"total":2465,"name":"Lexington, Virginia","coordinates":[-79.44431,37.78233]},
+{"dem":686,"rep":1727,"total":2455,"name":"Clinch, Georgia","coordinates":[-82.70261,30.91765]},
+{"dem":332,"rep":1967,"total":2441,"name":"Musselshell, Montana","coordinates":[-108.43976,46.50528]},
+{"dem":1536,"rep":665,"total":2441,"name":"Mora, New Mexico","coordinates":[-104.92189,35.98284]},
+{"dem":409,"rep":1892,"total":2436,"name":"Lincoln, Colorado","coordinates":[-103.50755,38.99374]},
+{"dem":386,"rep":1911,"total":2422,"name":"Wirt, West Virginia","coordinates":[-81.38297,39.02003]},
+{"dem":275,"rep":2031,"total":2419,"name":"Rooks, Kansas","coordinates":[-99.32449,39.346]},
+{"dem":539,"rep":1820,"total":2419,"name":"Van Buren, Tennessee","coordinates":[-85.4584,35.69923]},
+{"dem":427,"rep":1777,"total":2414,"name":"Custer, Idaho","coordinates":[-114.25226,44.27335]},
+{"dem":403,"rep":1828,"total":2413,"name":"Lander, Nevada","coordinates":[-117.04723,39.90021]},
+{"dem":554,"rep":1667,"total":2407,"name":"Dickey, North Dakota","coordinates":[-98.49651,46.10775]},
+{"dem":693,"rep":1430,"total":2407,"name":"Buena Vista, Virginia","coordinates":[-79.35813,37.72934]},
+{"dem":626,"rep":1683,"total":2401,"name":"Forest, Pennsylvania","coordinates":[-79.2497,41.5133]},
+{"dem":411,"rep":1898,"total":2399,"name":"Coal, Oklahoma","coordinates":[-96.28803,34.58286]},
+{"dem":441,"rep":1804,"total":2389,"name":"Grant, Kansas","coordinates":[-101.29936,37.54753]},
+{"dem":823,"rep":1349,"total":2385,"name":"Kittson, Minnesota","coordinates":[-96.78034,48.77604]},
+{"dem":419,"rep":1796,"total":2383,"name":"Wells, North Dakota","coordinates":[-99.68221,47.58085]},
+{"dem":774,"rep":1549,"total":2382,"name":"Fulton, Kentucky","coordinates":[-89.18765,36.55251]},
+{"dem":914,"rep":1349,"total":2382,"name":"Covington, Virginia","coordinates":[-79.98543,37.78106]},
+{"dem":476,"rep":1796,"total":2379,"name":"Brown, Illinois","coordinates":[-90.7503,39.96206]},
+{"dem":681,"rep":1603,"total":2376,"name":"Galax, Virginia","coordinates":[-80.9143,36.66563]},
+{"dem":1530,"rep":789,"total":2367,"name":"Emporia, Virginia","coordinates":[-77.53597,36.69618]},
+{"dem":838,"rep":1210,"total":2359,"name":"Ransom, North Dakota","coordinates":[-97.64755,46.44927]},
+{"dem":832,"rep":1344,"total":2358,"name":"Wahkiakum, Washington","coordinates":[-123.42445,46.29463]},
+{"dem":293,"rep":2025,"total":2357,"name":"San Saba, Texas","coordinates":[-98.81929,31.15513]},
+{"dem":347,"rep":1926,"total":2355,"name":"Holt, Missouri","coordinates":[-95.21907,40.09572]},
+{"dem":365,"rep":1910,"total":2350,"name":"Jefferson, Oklahoma","coordinates":[-97.83888,34.10508]},
+{"dem":353,"rep":1936,"total":2346,"name":"Putnam, Missouri","coordinates":[-93.01453,40.4786]},
+{"dem":358,"rep":1606,"total":2344,"name":"Garfield, Utah","coordinates":[-111.4509,37.83166]},
+{"dem":304,"rep":1921,"total":2340,"name":"Furnas, Nebraska","coordinates":[-99.90966,40.19186]},
+{"dem":1314,"rep":991,"total":2334,"name":"Warren, Georgia","coordinates":[-82.68801,33.41916]},
+{"dem":436,"rep":1791,"total":2332,"name":"Phillips, Colorado","coordinates":[-102.3451,40.59471]},
+{"dem":194,"rep":2087,"total":2306,"name":"Wheeler, Texas","coordinates":[-100.2531,35.39259]},
+{"dem":965,"rep":1288,"total":2304,"name":"Hyde, North Carolina","coordinates":[-76.15368,35.40815]},
+{"dem":426,"rep":1797,"total":2303,"name":"Yoakum, Texas","coordinates":[-102.83224,33.16239]},
+{"dem":571,"rep":1565,"total":2288,"name":"Brule, South Dakota","coordinates":[-99.0929,43.72987]},
+{"dem":400,"rep":1836,"total":2281,"name":"Delta, Texas","coordinates":[-95.67335,33.38593]},
+{"dem":639,"rep":1556,"total":2269,"name":"Calhoun, Arkansas","coordinates":[-92.51387,33.56046]},
+{"dem":216,"rep":1933,"total":2258,"name":"Alfalfa, Oklahoma","coordinates":[-98.32344,36.7297]},
+{"dem":603,"rep":1548,"total":2253,"name":"Bath, Virginia","coordinates":[-79.7312,38.06836]},
+{"dem":286,"rep":1850,"total":2252,"name":"Barber, Kansas","coordinates":[-98.68505,37.2229]},
+{"dem":222,"rep":1965,"total":2248,"name":"Dewey, Oklahoma","coordinates":[-99.01438,35.97795]},
+{"dem":243,"rep":1951,"total":2245,"name":"Mills, Texas","coordinates":[-98.59462,31.49488]},
+{"dem":358,"rep":1771,"total":2243,"name":"Dunn, North Dakota","coordinates":[-102.61232,47.35455]},
+{"dem":176,"rep":1993,"total":2243,"name":"Beaver, Oklahoma","coordinates":[-100.48305,36.74833]},
+{"dem":553,"rep":1540,"total":2242,"name":"Lake of the Woods, Minnesota","coordinates":[-94.90463,48.7681]},
+{"dem":281,"rep":1840,"total":2234,"name":"Norton, Kansas","coordinates":[-99.89923,39.78386]},
+{"dem":322,"rep":1843,"total":2231,"name":"Hancock, Tennessee","coordinates":[-83.22749,36.52135]},
+{"dem":284,"rep":1802,"total":2209,"name":"Morrill, Nebraska","coordinates":[-102.99059,41.7322]},
+{"dem":1458,"rep":652,"total":2208,"name":"Presidio, Texas","coordinates":[-104.26161,30.00589]},
+{"dem":339,"rep":1780,"total":2205,"name":"Valley, Nebraska","coordinates":[-98.98348,41.56409]},
+{"dem":353,"rep":1726,"total":2205,"name":"Nuckolls, Nebraska","coordinates":[-98.04684,40.17649]},
+{"dem":462,"rep":1671,"total":2204,"name":"Swisher, Texas","coordinates":[-101.74386,34.52631]},
+{"dem":236,"rep":1865,"total":2202,"name":"Scott, Kansas","coordinates":[-100.90636,38.48187]},
+{"dem":288,"rep":1827,"total":2201,"name":"Grant, Oklahoma","coordinates":[-97.78815,36.78825]},
+{"dem":354,"rep":1780,"total":2196,"name":"Mitchell, Texas","coordinates":[-100.92439,32.30411]},
+{"dem":1479,"rep":692,"total":2190,"name":"Sharkey, Mississippi","coordinates":[-90.82761,32.89239]},
+{"dem":531,"rep":1589,"total":2186,"name":"Cameron, Pennsylvania","coordinates":[-78.19832,41.43829]},
+{"dem":415,"rep":1556,"total":2183,"name":"Adams, Idaho","coordinates":[-116.46162,44.877]},
+{"dem":526,"rep":1497,"total":2182,"name":"Columbia, Washington","coordinates":[-117.91163,46.29285]},
+{"dem":318,"rep":1723,"total":2171,"name":"Phillips, Montana","coordinates":[-107.92889,48.25014]},
+{"dem":449,"rep":1657,"total":2157,"name":"Hickman, Kentucky","coordinates":[-88.97208,36.67589]},
+{"dem":283,"rep":1753,"total":2153,"name":"Baca, Colorado","coordinates":[-102.54374,37.30978]},
+{"dem":502,"rep":1481,"total":2151,"name":"LaMoure, North Dakota","coordinates":[-98.52605,46.46419]},
+{"dem":420,"rep":1653,"total":2148,"name":"Hardin, Illinois","coordinates":[-88.26614,37.51785]},
+{"dem":375,"rep":1678,"total":2142,"name":"Pope, Illinois","coordinates":[-88.54237,37.41716]},
+{"dem":285,"rep":1671,"total":2132,"name":"Lincoln, Nevada","coordinates":[-114.86303,37.6346]},
+{"dem":1505,"rep":487,"total":2125,"name":"Todd, South Dakota","coordinates":[-100.70766,43.20879]},
+{"dem":1635,"rep":430,"total":2119,"name":"Jim Hogg, Texas","coordinates":[-98.74757,27.05323]},
+{"dem":402,"rep":1595,"total":2107,"name":"Sweet Grass, Montana","coordinates":[-109.94479,45.81129]},
+{"dem":565,"rep":1395,"total":2106,"name":"Adams, Iowa","coordinates":[-94.6969,41.02165]},
+{"dem":646,"rep":1421,"total":2102,"name":"Wheeler, Georgia","coordinates":[-82.73384,32.10525]},
+{"dem":391,"rep":1600,"total":2091,"name":"Gregory, South Dakota","coordinates":[-99.20659,43.17514]},
+{"dem":563,"rep":1355,"total":2089,"name":"Johnson, Nebraska","coordinates":[-96.26536,40.395]},
+{"dem":930,"rep":991,"total":2088,"name":"Mahnomen, Minnesota","coordinates":[-95.81108,47.32838]},
+{"dem":919,"rep":1043,"total":2088,"name":"Thurston, Nebraska","coordinates":[-96.53394,42.15406]},
+{"dem":253,"rep":1802,"total":2084,"name":"Childress, Texas","coordinates":[-100.20816,34.52462]},
+{"dem":570,"rep":1366,"total":2080,"name":"Deuel, South Dakota","coordinates":[-96.69023,44.75628]},
+{"dem":431,"rep":1437,"total":2071,"name":"Pierce, North Dakota","coordinates":[-99.96649,48.23888]},
+{"dem":184,"rep":1531,"total":2068,"name":"Oneida, Idaho","coordinates":[-112.52044,42.18389]},
+{"dem":263,"rep":1698,"total":2066,"name":"Gray, Kansas","coordinates":[-100.45171,37.74451]},
+{"dem":1129,"rep":872,"total":2059,"name":"La Salle, Texas","coordinates":[-99.09677,28.35109]},
+{"dem":1222,"rep":805,"total":2058,"name":"Stewart, Georgia","coordinates":[-84.83491,32.07322]},
+{"dem":354,"rep":1656,"total":2057,"name":"Mason, Texas","coordinates":[-99.2373,30.70391]},
+{"dem":427,"rep":1464,"total":2049,"name":"Catron, New Mexico","coordinates":[-108.39192,33.90162]},
+{"dem":297,"rep":1661,"total":2042,"name":"Smith, Kansas","coordinates":[-98.78542,39.78466]},
+{"dem":402,"rep":1497,"total":2037,"name":"Toole, Montana","coordinates":[-111.73347,48.64512]},
+{"dem":1179,"rep":830,"total":2025,"name":"Calhoun, Georgia","coordinates":[-84.62628,31.52127]},
+{"dem":519,"rep":1330,"total":2012,"name":"Mineral, Montana","coordinates":[-115.06562,47.15194]},
+{"dem":842,"rep":929,"total":2011,"name":"Benson, North Dakota","coordinates":[-99.35115,48.07174]},
+{"dem":403,"rep":1546,"total":2009,"name":"Lynn, Texas","coordinates":[-101.81849,33.17841]},
+{"dem":476,"rep":1357,"total":2006,"name":"Cavalier, North Dakota","coordinates":[-98.46379,48.76843]},
+{"dem":424,"rep":1497,"total":2006,"name":"Hanson, South Dakota","coordinates":[-97.79684,43.68061]},
+{"dem":637,"rep":1179,"total":1997,"name":"Mineral, Nevada","coordinates":[-118.41627,38.51664]},
+{"dem":694,"rep":1088,"total":1997,"name":"Sargent, North Dakota","coordinates":[-97.63005,46.1082]},
+{"dem":526,"rep":1414,"total":1997,"name":"Castro, Texas","coordinates":[-102.25878,34.53362]},
+{"dem":430,"rep":1403,"total":1982,"name":"Pershing, Nevada","coordinates":[-118.40947,40.43963]},
+{"dem":215,"rep":1677,"total":1981,"name":"Emmons, North Dakota","coordinates":[-100.23784,46.28425]},
+{"dem":577,"rep":1357,"total":1970,"name":"Lake, Tennessee","coordinates":[-89.48553,36.3339]},
+{"dem":365,"rep":1525,"total":1968,"name":"Scotland, Missouri","coordinates":[-92.14282,40.44768]},
+{"dem":435,"rep":1474,"total":1959,"name":"Floyd, Texas","coordinates":[-101.30327,34.07373]},
+{"dem":173,"rep":1730,"total":1952,"name":"Hartley, Texas","coordinates":[-102.61004,35.84024]},
+{"dem":206,"rep":1697,"total":1952,"name":"Kimble, Texas","coordinates":[-99.74639,30.47947]},
+{"dem":754,"rep":1056,"total":1947,"name":"Marshall, South Dakota","coordinates":[-97.58086,45.73704]},
+{"dem":171,"rep":1730,"total":1947,"name":"Hansford, Texas","coordinates":[-101.35693,36.27284]},
+{"dem":354,"rep":1505,"total":1936,"name":"Schuyler, Missouri","coordinates":[-92.51901,40.46936]},
+{"dem":590,"rep":1188,"total":1927,"name":"Bent, Colorado","coordinates":[-103.07758,37.93189]},
+{"dem":380,"rep":1433,"total":1918,"name":"Edmunds, South Dakota","coordinates":[-99.20536,45.41168]},
+{"dem":401,"rep":1472,"total":1909,"name":"Schley, Georgia","coordinates":[-84.3227,32.26344]},
+{"dem":171,"rep":1648,"total":1898,"name":"Chase, Nebraska","coordinates":[-101.69419,40.53039]},
+{"dem":304,"rep":1490,"total":1896,"name":"Stafford, Kansas","coordinates":[-98.71988,38.03563]},
+{"dem":323,"rep":1482,"total":1896,"name":"Greer, Oklahoma","coordinates":[-99.55296,34.93385]},
+{"dem":220,"rep":1599,"total":1891,"name":"Stevens, Kansas","coordinates":[-101.31726,37.2017]},
+{"dem":540,"rep":1141,"total":1881,"name":"Red Lake, Minnesota","coordinates":[-96.08718,47.86548]},
+{"dem":420,"rep":1403,"total":1876,"name":"Winkler, Texas","coordinates":[-103.05492,31.83286]},
+{"dem":784,"rep":910,"total":1872,"name":"Hidalgo, New Mexico","coordinates":[-108.75192,31.89805]},
+{"dem":379,"rep":1416,"total":1870,"name":"Knox, Missouri","coordinates":[-92.14683,40.13685]},
+{"dem":1125,"rep":588,"total":1848,"name":"Costilla, Colorado","coordinates":[-105.42893,37.27754]},
+{"dem":477,"rep":1241,"total":1835,"name":"Sheridan, Montana","coordinates":[-104.53391,48.70552]},
+{"dem":254,"rep":1496,"total":1832,"name":"Harlan, Nebraska","coordinates":[-99.40341,40.17876]},
+{"dem":601,"rep":1048,"total":1830,"name":"Sierra, California","coordinates":[-120.52199,39.57692]},
+{"dem":970,"rep":595,"total":1827,"name":"Guadalupe, New Mexico","coordinates":[-104.78496,34.86978]},
+{"dem":155,"rep":1611,"total":1827,"name":"Ellis, Oklahoma","coordinates":[-99.75013,36.22425]},
+{"dem":334,"rep":1391,"total":1818,"name":"Hand, South Dakota","coordinates":[-99.00457,44.54671]},
+{"dem":630,"rep":1049,"total":1798,"name":"Traverse, Minnesota","coordinates":[-96.47483,45.76993]},
+{"dem":397,"rep":1344,"total":1793,"name":"Bailey, Texas","coordinates":[-102.83034,34.06752]},
+{"dem":233,"rep":1460,"total":1788,"name":"Osborne, Kansas","coordinates":[-98.76794,39.34826]},
+{"dem":227,"rep":1446,"total":1787,"name":"Bowman, North Dakota","coordinates":[-103.50594,46.11014]},
+{"dem":472,"rep":1192,"total":1777,"name":"Granite, Montana","coordinates":[-113.42735,46.39595]},
+{"dem":314,"rep":1403,"total":1770,"name":"Haskell, Texas","coordinates":[-99.73077,33.17596]},
+{"dem":266,"rep":1455,"total":1762,"name":"Martin, Texas","coordinates":[-101.96183,32.30982]},
+{"dem":256,"rep":1474,"total":1759,"name":"Owsley, Kentucky","coordinates":[-83.69163,37.42362]},
+{"dem":151,"rep":1547,"total":1759,"name":"Roger Mills, Oklahoma","coordinates":[-99.74157,35.70855]},
+{"dem":360,"rep":1184,"total":1748,"name":"Lincoln, Idaho","coordinates":[-114.15389,42.98618]},
+{"dem":216,"rep":1486,"total":1745,"name":"Mercer, Missouri","coordinates":[-93.56763,40.42141]},
+{"dem":720,"rep":975,"total":1739,"name":"Tyrrell, North Carolina","coordinates":[-76.16534,35.87041]},
+{"dem":403,"rep":1265,"total":1729,"name":"Fisher, Texas","coordinates":[-100.40311,32.74047]},
+{"dem":468,"rep":1181,"total":1728,"name":"Crosby, Texas","coordinates":[-101.2987,33.60914]},
+{"dem":210,"rep":1415,"total":1720,"name":"Meade, Kansas","coordinates":[-100.36009,37.24388]},
+{"dem":347,"rep":1241,"total":1719,"name":"Foster, North Dakota","coordinates":[-98.87287,47.47143]},
+{"dem":536,"rep":1025,"total":1717,"name":"Nelson, North Dakota","coordinates":[-98.20442,47.91866]},
+{"dem":306,"rep":1330,"total":1708,"name":"Webster, Nebraska","coordinates":[-98.49858,40.18064]},
+{"dem":888,"rep":723,"total":1708,"name":"Dewey, South Dakota","coordinates":[-100.83795,45.14804]},
+{"dem":320,"rep":1216,"total":1702,"name":"Union, New Mexico","coordinates":[-103.47572,36.48808]},
+{"dem":181,"rep":1462,"total":1695,"name":"Hemphill, Texas","coordinates":[-100.27921,35.81595]},
+{"dem":262,"rep":1382,"total":1681,"name":"Real, Texas","coordinates":[-99.81254,29.83009]},
+{"dem":230,"rep":1330,"total":1677,"name":"Kimball, Nebraska","coordinates":[-103.70315,41.19927]},
+{"dem":250,"rep":1347,"total":1673,"name":"Franklin, Nebraska","coordinates":[-98.96208,40.1832]},
+{"dem":398,"rep":1139,"total":1657,"name":"Clark, South Dakota","coordinates":[-97.72491,44.85521]},
+{"dem":281,"rep":1261,"total":1621,"name":"Nance, Nebraska","coordinates":[-97.9914,41.40238]},
+{"dem":188,"rep":1333,"total":1606,"name":"Perkins, South Dakota","coordinates":[-102.46799,45.48338]},
+{"dem":214,"rep":1338,"total":1605,"name":"Douglas, South Dakota","coordinates":[-98.35843,43.3915]},
+{"dem":153,"rep":1385,"total":1597,"name":"Brown, Nebraska","coordinates":[-99.92391,42.35956]},
+{"dem":270,"rep":1202,"total":1590,"name":"Lewis, Idaho","coordinates":[-116.42376,46.23632]},
+{"dem":340,"rep":1150,"total":1573,"name":"Sherman, Nebraska","coordinates":[-98.97284,41.21874]},
+{"dem":329,"rep":1148,"total":1567,"name":"Stanley, South Dakota","coordinates":[-100.74916,44.41554]},
+{"dem":222,"rep":1261,"total":1544,"name":"Dallam, Texas","coordinates":[-102.59402,36.28636]},
+{"dem":339,"rep":1079,"total":1527,"name":"Crowley, Colorado","coordinates":[-103.77273,38.30618]},
+{"dem":249,"rep":1207,"total":1513,"name":"Hardeman, Texas","coordinates":[-99.74569,34.2899]},
+{"dem":103,"rep":1378,"total":1504,"name":"Shackelford, Texas","coordinates":[-99.347,32.74381]},
+{"dem":233,"rep":1197,"total":1503,"name":"Rush, Kansas","coordinates":[-99.30918,38.52359]},
+{"dem":134,"rep":1318,"total":1499,"name":"Harper, Oklahoma","coordinates":[-99.6628,36.80035]},
+{"dem":191,"rep":1267,"total":1499,"name":"Baylor, Texas","coordinates":[-99.20818,33.6188]},
+{"dem":180,"rep":1223,"total":1494,"name":"Jewell, Kansas","coordinates":[-98.22261,39.777]},
+{"dem":154,"rep":1279,"total":1484,"name":"Fallon, Montana","coordinates":[-104.40571,46.31818]},
+{"dem":230,"rep":1225,"total":1484,"name":"Garza, Texas","coordinates":[-101.30113,33.18379]},
+{"dem":198,"rep":1227,"total":1482,"name":"Trego, Kansas","coordinates":[-99.86542,38.9213]},
+{"dem":197,"rep":1236,"total":1481,"name":"Chautauqua, Kansas","coordinates":[-96.24539,37.15425]},
+{"dem":163,"rep":1220,"total":1472,"name":"Rawlins, Kansas","coordinates":[-101.07673,39.78619]},
+{"dem":161,"rep":1232,"total":1468,"name":"Hitchcock, Nebraska","coordinates":[-101.04421,40.17689]},
+{"dem":191,"rep":1225,"total":1465,"name":"Donley, Texas","coordinates":[-100.81584,34.95503]},
+{"dem":215,"rep":1179,"total":1464,"name":"Lincoln, Kansas","coordinates":[-98.21428,39.04728]},
+{"dem":383,"rep":1021,"total":1460,"name":"Norton, Virginia","coordinates":[-82.62599,36.93154]},
+{"dem":161,"rep":1217,"total":1455,"name":"Perkins, Nebraska","coordinates":[-101.62746,40.85764]},
+{"dem":162,"rep":1228,"total":1454,"name":"Ness, Kansas","coordinates":[-99.90874,38.48043]},
+{"dem":178,"rep":1210,"total":1452,"name":"Decatur, Kansas","coordinates":[-100.4597,39.78354]},
+{"dem":235,"rep":1100,"total":1446,"name":"McIntosh, North Dakota","coordinates":[-99.41648,46.10868]},
+{"dem":273,"rep":1082,"total":1443,"name":"Woodson, Kansas","coordinates":[-95.75846,37.88819]},
+{"dem":650,"rep":775,"total":1440,"name":"Baker, Georgia","coordinates":[-84.45488,31.31957]},
+{"dem":527,"rep":814,"total":1434,"name":"Keweenaw, Michigan","coordinates":[-88.14879,47.68197]},
+{"dem":458,"rep":936,"total":1430,"name":"Kinney, Texas","coordinates":[-100.4177,29.34708]},
+{"dem":140,"rep":1265,"total":1423,"name":"Coke, Texas","coordinates":[-100.63523,31.87711]},
+{"dem":369,"rep":977,"total":1421,"name":"Lyman, South Dakota","coordinates":[-99.84192,43.89481]},
+{"dem":271,"rep":966,"total":1421,"name":"Wayne, Utah","coordinates":[-110.99087,38.25984]},
+{"dem":313,"rep":1075,"total":1416,"name":"Sutton, Texas","coordinates":[-100.51335,30.52218]},
+{"dem":181,"rep":1173,"total":1407,"name":"Cheyenne, Kansas","coordinates":[-101.72732,39.78991]},
+{"dem":340,"rep":974,"total":1407,"name":"Aurora, South Dakota","coordinates":[-98.57758,43.72471]},
+{"dem":372,"rep":980,"total":1395,"name":"Crockett, Texas","coordinates":[-101.40421,30.71753]},
+{"dem":371,"rep":958,"total":1391,"name":"Highland, Virginia","coordinates":[-79.56447,38.36624]},
+{"dem":594,"rep":751,"total":1390,"name":"Chattahoochee, Georgia","coordinates":[-84.78802,32.34744]},
+{"dem":138,"rep":1235,"total":1390,"name":"Glascock, Georgia","coordinates":[-82.60691,33.22749]},
+{"dem":299,"rep":1049,"total":1384,"name":"Crane, Texas","coordinates":[-102.48777,31.42279]},
+{"dem":185,"rep":1108,"total":1381,"name":"Grant, North Dakota","coordinates":[-101.63904,46.35782]},
+{"dem":179,"rep":1111,"total":1376,"name":"Kidder, North Dakota","coordinates":[-99.73119,46.93827]},
+{"dem":127,"rep":1197,"total":1374,"name":"Sheridan, Kansas","coordinates":[-100.44122,39.35054]},
+{"dem":316,"rep":969,"total":1369,"name":"Chase, Kansas","coordinates":[-96.59402,38.29947]},
+{"dem":247,"rep":1078,"total":1367,"name":"Knox, Texas","coordinates":[-99.73035,33.61188]},
+{"dem":267,"rep":1015,"total":1364,"name":"Sedgwick, Colorado","coordinates":[-102.35535,40.87156]},
+{"dem":149,"rep":1132,"total":1357,"name":"Logan, Kansas","coordinates":[-101.1574,38.91327]},
+{"dem":245,"rep":1040,"total":1354,"name":"Haskell, Kansas","coordinates":[-100.87995,37.55497]},
+{"dem":286,"rep":1007,"total":1347,"name":"Upton, Texas","coordinates":[-102.04154,31.35381]},
+{"dem":149,"rep":1140,"total":1343,"name":"Gove, Kansas","coordinates":[-100.48735,38.91723]},
+{"dem":215,"rep":1071,"total":1337,"name":"Potter, South Dakota","coordinates":[-99.962,45.05271]},
+{"dem":135,"rep":1159,"total":1332,"name":"Lipscomb, Texas","coordinates":[-100.27268,36.28019]},
+{"dem":161,"rep":1110,"total":1328,"name":"Frontier, Nebraska","coordinates":[-100.40668,40.53094]},
+{"dem":279,"rep":974,"total":1327,"name":"Pawnee, Nebraska","coordinates":[-96.24522,40.13784]},
+{"dem":212,"rep":1037,"total":1319,"name":"Edwards, Kansas","coordinates":[-99.30474,37.88359]},
+{"dem":174,"rep":1075,"total":1316,"name":"Kearny, Kansas","coordinates":[-101.30813,37.99446]},
+{"dem":115,"rep":1116,"total":1314,"name":"Niobrara, Wyoming","coordinates":[-104.46837,43.06215]},
+{"dem":168,"rep":1050,"total":1296,"name":"Hettinger, North Dakota","coordinates":[-102.45423,46.4357]},
+{"dem":201,"rep":993,"total":1293,"name":"Renville, North Dakota","coordinates":[-101.65815,48.71278]},
+{"dem":188,"rep":1025,"total":1284,"name":"Graham, Kansas","coordinates":[-99.87989,39.35497]},
+{"dem":1003,"rep":269,"total":1279,"name":"Menominee, Wisconsin","coordinates":[-88.66925,44.9913]},
+{"dem":697,"rep":566,"total":1273,"name":"Clay, Georgia","coordinates":[-84.99258,31.61983]},
+{"dem":298,"rep":847,"total":1265,"name":"Griggs, North Dakota","coordinates":[-98.23228,47.45633]},
+{"dem":160,"rep":1048,"total":1259,"name":"Elk, Kansas","coordinates":[-96.24464,37.45602]},
+{"dem":242,"rep":944,"total":1255,"name":"Dolores, Colorado","coordinates":[-108.52411,37.71172]},
+{"dem":279,"rep":851,"total":1246,"name":"Garfield, Washington","coordinates":[-117.53671,46.42947]},
+{"dem":758,"rep":260,"total":1232,"name":"Sioux, North Dakota","coordinates":[-101.06128,46.11061]},
+{"dem":355,"rep":791,"total":1231,"name":"Eddy, North Dakota","coordinates":[-98.90047,47.72343]},
+{"dem":160,"rep":914,"total":1230,"name":"Butte, Idaho","coordinates":[-113.17763,43.6851]},
+{"dem":245,"rep":867,"total":1219,"name":"Divide, North Dakota","coordinates":[-103.50932,48.81475]},
+{"dem":216,"rep":909,"total":1218,"name":"Adams, North Dakota","coordinates":[-102.53319,46.09681]},
+{"dem":235,"rep":872,"total":1208,"name":"Judith Basin, Montana","coordinates":[-110.30532,47.03255]},
+{"dem":147,"rep":995,"total":1192,"name":"Morton, Kansas","coordinates":[-101.80951,37.18524]},
+{"dem":422,"rep":695,"total":1191,"name":"Jeff Davis, Texas","coordinates":[-104.19187,30.62535]},
+{"dem":156,"rep":1007,"total":1182,"name":"Echols, Georgia","coordinates":[-82.89737,30.714]},
+{"dem":210,"rep":912,"total":1175,"name":"Greeley, Nebraska","coordinates":[-98.53056,41.56757]},
+{"dem":535,"rep":588,"total":1175,"name":"Corson, South Dakota","coordinates":[-101.17966,45.68567]},
+{"dem":305,"rep":733,"total":1157,"name":"Towner, North Dakota","coordinates":[-99.24815,48.68218]},
+{"dem":128,"rep":983,"total":1156,"name":"Boyd, Nebraska","coordinates":[-98.77302,42.89444]},
+{"dem":145,"rep":983,"total":1156,"name":"Collingsworth, Texas","coordinates":[-100.27213,34.96335]},
+{"dem":412,"rep":666,"total":1149,"name":"Bennett, South Dakota","coordinates":[-101.67718,43.18691]},
+{"dem":192,"rep":892,"total":1137,"name":"McPherson, South Dakota","coordinates":[-99.21142,45.78424]},
+{"dem":241,"rep":819,"total":1123,"name":"Sanborn, South Dakota","coordinates":[-98.0917,44.01894]},
+{"dem":204,"rep":858,"total":1118,"name":"Faulk, South Dakota","coordinates":[-99.15356,45.06547]},
+{"dem":473,"rep":630,"total":1116,"name":"Webster, Georgia","coordinates":[-84.55382,32.04669]},
+{"dem":104,"rep":797,"total":1109,"name":"Rich, Utah","coordinates":[-111.24022,41.62759]},
+{"dem":132,"rep":925,"total":1102,"name":"Cheyenne, Colorado","coordinates":[-102.60179,38.83564]},
+{"dem":323,"rep":722,"total":1095,"name":"Jackson, South Dakota","coordinates":[-101.62632,43.6775]},
+{"dem":164,"rep":893,"total":1091,"name":"Hall, Texas","coordinates":[-100.76389,34.65562]},
+{"dem":114,"rep":900,"total":1079,"name":"Kiowa, Kansas","coordinates":[-99.28653,37.56123]},
+{"dem":71,"rep":963,"total":1079,"name":"Cimarron, Oklahoma","coordinates":[-102.51769,36.74839]},
+{"dem":153,"rep":869,"total":1075,"name":"Garden, Nebraska","coordinates":[-102.30298,41.63336]},
+{"dem":303,"rep":746,"total":1073,"name":"Edwards, Texas","coordinates":[-100.30737,29.98587]},
+{"dem":148,"rep":885,"total":1068,"name":"Concho, Texas","coordinates":[-99.86364,31.31888]},
+{"dem":114,"rep":888,"total":1067,"name":"Logan, North Dakota","coordinates":[-99.50458,46.46927]},
+{"dem":281,"rep":706,"total":1064,"name":"Miner, South Dakota","coordinates":[-97.60812,44.02154]},
+{"dem":154,"rep":862,"total":1060,"name":"McCone, Montana","coordinates":[-105.75722,47.62962]},
+{"dem":208,"rep":821,"total":1059,"name":"Schleicher, Texas","coordinates":[-100.52721,30.89623]},
+{"dem":127,"rep":884,"total":1053,"name":"Powder River, Montana","coordinates":[-105.55534,45.40892]},
+{"dem":119,"rep":895,"total":1052,"name":"Burke, North Dakota","coordinates":[-102.52008,48.78645]},
+{"dem":195,"rep":808,"total":1046,"name":"Worth, Missouri","coordinates":[-94.41919,40.48049]},
+{"dem":461,"rep":575,"total":1044,"name":"Quitman, Georgia","coordinates":[-85.00479,31.86293]},
+{"dem":77,"rep":936,"total":1044,"name":"Haakon, South Dakota","coordinates":[-101.59544,44.28288]},
+{"dem":70,"rep":924,"total":1021,"name":"Armstrong, Texas","coordinates":[-101.35663,34.96417]},
+{"dem":239,"rep":671,"total":1019,"name":"Gilliam, Oregon","coordinates":[-120.3199,45.43059]},
+{"dem":124,"rep":855,"total":1017,"name":"Hodgeman, Kansas","coordinates":[-99.8984,38.08749]},
+{"dem":119,"rep":830,"total":1017,"name":"Oliver, North Dakota","coordinates":[-101.33141,47.11807]},
+{"dem":202,"rep":732,"total":1017,"name":"Sherman, Oregon","coordinates":[-120.67851,45.39921]},
+{"dem":222,"rep":759,"total":1013,"name":"Robertson, Kentucky","coordinates":[-84.06423,38.51347]},
+{"dem":166,"rep":794,"total":1010,"name":"Gosper, Nebraska","coordinates":[-99.8232,40.50909]},
+{"dem":120,"rep":825,"total":1005,"name":"Clark, Kansas","coordinates":[-99.81386,37.23383]},
+{"dem":361,"rep":538,"total":999,"name":"Steele, North Dakota","coordinates":[-97.71892,47.45106]},
+{"dem":120,"rep":809,"total":984,"name":"Deuel, Nebraska","coordinates":[-102.3326,41.1119]},
+{"dem":121,"rep":821,"total":980,"name":"Garfield, Nebraska","coordinates":[-98.95123,41.90686]},
+{"dem":193,"rep":729,"total":977,"name":"Meagher, Montana","coordinates":[-110.92173,46.58569]},
+{"dem":225,"rep":715,"total":977,"name":"Harmon, Oklahoma","coordinates":[-99.84419,34.74597]},
+{"dem":264,"rep":648,"total":967,"name":"Jerauld, South Dakota","coordinates":[-98.62317,44.0634]},
+{"dem":168,"rep":730,"total":962,"name":"Daniels, Montana","coordinates":[-105.54173,48.79442]},
+{"dem":206,"rep":698,"total":961,"name":"Liberty, Montana","coordinates":[-111.03692,48.55965]},
+{"dem":99,"rep":796,"total":957,"name":"Golden Valley, North Dakota","coordinates":[-103.84461,46.93892]},
+{"dem":140,"rep":769,"total":956,"name":"Wichita, Kansas","coordinates":[-101.34743,38.48192]},
+{"dem":89,"rep":823,"total":953,"name":"Dundy, Nebraska","coordinates":[-101.68113,40.18016]},
+{"dem":78,"rep":850,"total":948,"name":"Oldham, Texas","coordinates":[-102.59762,35.40192]},
+{"dem":179,"rep":702,"total":946,"name":"Wheatland, Montana","coordinates":[-109.85714,46.49704]},
+{"dem":96,"rep":807,"total":935,"name":"Sherman, Texas","coordinates":[-101.89926,36.27859]},
+{"dem":193,"rep":620,"total":910,"name":"De Baca, New Mexico","coordinates":[-104.36869,34.35927]},
+{"dem":128,"rep":755,"total":909,"name":"Dickens, Texas","coordinates":[-100.78761,33.61536]},
+{"dem":167,"rep":709,"total":904,"name":"Reagan, Texas","coordinates":[-101.51439,31.37519]},
+{"dem":190,"rep":679,"total":901,"name":"Cochran, Texas","coordinates":[-102.83044,33.60844]},
+{"dem":545,"rep":349,"total":897,"name":"Taliaferro, Georgia","coordinates":[-82.87527,33.55931]},
+{"dem":121,"rep":705,"total":876,"name":"Hamilton, Kansas","coordinates":[-101.79368,37.99524]},
+{"dem":106,"rep":718,"total":871,"name":"Lane, Kansas","coordinates":[-100.46618,38.48128]},
+{"dem":324,"rep":503,"total":871,"name":"Hudspeth, Texas","coordinates":[-105.37754,31.45086]},
+{"dem":102,"rep":715,"total":867,"name":"Comanche, Kansas","coordinates":[-99.25129,37.18144]},
+{"dem":154,"rep":682,"total":864,"name":"Menard, Texas","coordinates":[-99.85886,30.88526]},
+{"dem":171,"rep":629,"total":861,"name":"Jackson, Colorado","coordinates":[-106.32924,40.66343]},
+{"dem":137,"rep":679,"total":861,"name":"Sully, South Dakota","coordinates":[-100.13139,44.72232]},
+{"dem":91,"rep":728,"total":855,"name":"Kiowa, Colorado","coordinates":[-102.75684,38.38766]},
+{"dem":74,"rep":723,"total":854,"name":"Eureka, Nevada","coordinates":[-116.2722,39.97778]},
+{"dem":105,"rep":704,"total":831,"name":"Campbell, South Dakota","coordinates":[-100.0021,45.78557]},
+{"dem":155,"rep":591,"total":818,"name":"Wheeler, Oregon","coordinates":[-120.02686,44.73641]},
+{"dem":84,"rep":715,"total":808,"name":"Throckmorton, Texas","coordinates":[-99.20579,33.17069]},
+{"dem":46,"rep":721,"total":798,"name":"Wallace, Kansas","coordinates":[-101.7711,38.92662]},
+{"dem":70,"rep":687,"total":798,"name":"Rock, Nebraska","coordinates":[-99.42085,42.39474]},
+{"dem":95,"rep":650,"total":787,"name":"Sheridan, North Dakota","coordinates":[-100.33098,47.58135]},
+{"dem":70,"rep":678,"total":786,"name":"Carter, Montana","coordinates":[-104.51532,45.51682]},
+{"dem":38,"rep":695,"total":770,"name":"Harding, South Dakota","coordinates":[-103.47387,45.59661]},
+{"dem":353,"rep":368,"total":767,"name":"Ziebach, South Dakota","coordinates":[-101.66082,44.98976]},
+{"dem":454,"rep":280,"total":767,"name":"Culberson, Texas","coordinates":[-104.52694,31.4459]},
+{"dem":90,"rep":660,"total":766,"name":"Irion, Texas","coordinates":[-100.9813,31.30342]},
+{"dem":81,"rep":616,"total":736,"name":"Sioux, Nebraska","coordinates":[-103.73217,42.47066]},
+{"dem":91,"rep":625,"total":736,"name":"Briscoe, Texas","coordinates":[-101.20589,34.52517]},
+{"dem":47,"rep":626,"total":729,"name":"Piute, Utah","coordinates":[-112.12937,38.33588]},
+{"dem":34,"rep":653,"total":718,"name":"Garfield, Montana","coordinates":[-106.99599,47.26718]},
+{"dem":135,"rep":555,"total":701,"name":"Stonewall, Texas","coordinates":[-100.2538,33.17957]},
+{"dem":395,"rep":298,"total":699,"name":"Issaquena, Mississippi","coordinates":[-91.00353,32.75553]},
+{"dem":125,"rep":543,"total":690,"name":"Hyde, South Dakota","coordinates":[-99.47273,44.53717]},
+{"dem":100,"rep":556,"total":689,"name":"Prairie, Montana","coordinates":[-105.50399,46.81238]},
+{"dem":238,"rep":402,"total":683,"name":"Mellette, South Dakota","coordinates":[-100.76095,43.58468]},
+{"dem":237,"rep":344,"total":652,"name":"Mineral, Colorado","coordinates":[-107.00323,37.54906]},
+{"dem":83,"rep":534,"total":650,"name":"Greeley, Kansas","coordinates":[-101.80596,38.4804]},
+{"dem":115,"rep":492,"total":637,"name":"Stanton, Kansas","coordinates":[-101.78938,37.56593]},
+{"dem":70,"rep":549,"total":633,"name":"Sterling, Texas","coordinates":[-101.05491,31.83577]},
+{"dem":40,"rep":566,"total":615,"name":"Motley, Texas","coordinates":[-100.79315,34.05789]},
+{"dem":92,"rep":506,"total":612,"name":"Cottle, Texas","coordinates":[-100.27644,34.0919]},
+{"dem":59,"rep":495,"total":605,"name":"Billings, North Dakota","coordinates":[-103.36401,47.00704]},
+{"dem":34,"rep":553,"total":604,"name":"Glasscock, Texas","coordinates":[-101.52149,31.868]},
+{"dem":334,"rep":217,"total":602,"name":"Alpine, California","coordinates":[-119.79835,38.62178]},
+{"dem":110,"rep":410,"total":590,"name":"Camas, Idaho","coordinates":[-114.77213,43.50255]},
+{"dem":197,"rep":339,"total":589,"name":"Hinsdale, Colorado","coordinates":[-107.33826,37.82116]},
+{"dem":69,"rep":450,"total":558,"name":"Jones, South Dakota","coordinates":[-100.68613,43.95199]},
+{"dem":20,"rep":524,"total":554,"name":"Roberts, Texas","coordinates":[-100.83668,35.83859]},
+{"dem":55,"rep":463,"total":541,"name":"Wibaux, Montana","coordinates":[-104.27451,46.96296]},
+{"dem":156,"rep":311,"total":527,"name":"Harding, New Mexico","coordinates":[-103.84792,35.85851]},
+{"dem":40,"rep":460,"total":519,"name":"Keya Paha, Nebraska","coordinates":[-99.71835,42.87548]},
+{"dem":30,"rep":472,"total":514,"name":"Hayes, Nebraska","coordinates":[-101.04796,40.53723]},
+{"dem":113,"rep":383,"total":513,"name":"Foard, Texas","coordinates":[-99.81682,33.9633]},
+{"dem":265,"rep":215,"total":506,"name":"San Juan, Colorado","coordinates":[-107.67025,37.78104]},
+{"dem":40,"rep":454,"total":499,"name":"McMullen, Texas","coordinates":[-98.57885,28.38492]},
+{"dem":296,"rep":171,"total":490,"name":"Buffalo, South Dakota","coordinates":[-99.20399,44.0443]},
+{"dem":71,"rep":365,"total":474,"name":"Golden Valley, Montana","coordinates":[-109.17458,46.38062]},
+{"dem":77,"rep":331,"total":474,"name":"Daggett, Utah","coordinates":[-109.50578,40.89009]},
+{"dem":62,"rep":377,"total":465,"name":"Wheeler, Nebraska","coordinates":[-98.52085,41.92257]},
+{"dem":32,"rep":400,"total":453,"name":"Logan, Nebraska","coordinates":[-100.44366,41.54215]},
+{"dem":59,"rep":351,"total":443,"name":"Treasure, Montana","coordinates":[-107.28577,46.22944]},
+{"dem":140,"rep":288,"total":438,"name":"Terrell, Texas","coordinates":[-102.07251,30.23234]},
+{"dem":59,"rep":360,"total":434,"name":"Kent, Texas","coordinates":[-100.76971,33.18477]},
+{"dem":43,"rep":362,"total":430,"name":"Slope, North Dakota","coordinates":[-103.46246,46.44583]},
+{"dem":65,"rep":329,"total":423,"name":"Esmeralda, Nevada","coordinates":[-117.63238,37.77896]},
+{"dem":40,"rep":355,"total":417,"name":"Hooker, Nebraska","coordinates":[-101.11732,41.92031]},
+{"dem":20,"rep":367,"total":405,"name":"Grant, Nebraska","coordinates":[-101.75596,41.91395]},
+{"dem":19,"rep":357,"total":402,"name":"Banner, Nebraska","coordinates":[-103.72626,41.53974]},
+{"dem":30,"rep":344,"total":393,"name":"Thomas, Nebraska","coordinates":[-100.5247,41.85572]},
+{"dem":48,"rep":323,"total":385,"name":"Loup, Nebraska","coordinates":[-99.50985,41.90318]},
+{"dem":31,"rep":330,"total":365,"name":"Borden, Texas","coordinates":[-101.43919,32.73858]},
+{"dem":30,"rep":278,"total":322,"name":"Petroleum, Montana","coordinates":[-108.22657,47.14191]},
+{"dem":30,"rep":276,"total":317,"name":"Blaine, Nebraska","coordinates":[-99.9964,41.93194]},
+{"dem":14,"rep":257,"total":287,"name":"McPherson, Nebraska","coordinates":[-101.12085,41.64841]},
+{"dem":44,"rep":203,"total":283,"name":"Clark, Idaho","coordinates":[-112.35461,44.29021]},
+{"dem":17,"rep":244,"total":273,"name":"Arthur, Nebraska","coordinates":[-101.69591,41.57192]},
+{"dem":99,"rep":84,"total":186,"name":"Kenedy, Texas","coordinates":[-97.59114,26.89021]},
+{"dem":5,"rep":149,"total":159,"name":"King, Texas","coordinates":[-100.24534,33.61426]},
+{"dem":4,"rep":58,"total":65,"name":"Loving, Texas","coordinates":[-103.56122,31.84493]}]
\ No newline at end of file
diff --git a/packages/map/src/demo/.data/us-income.geojson b/packages/map/src/demo/.data/us-income.geojson
new file mode 100644
index 0000000..0a3ba94
--- /dev/null
+++ b/packages/map/src/demo/.data/us-income.geojson
@@ -0,0 +1,56 @@
+{
+ "type": "FeatureCollection",
+ "features": [
+{"type":"Feature","properties":{"name":"Maine","income":{"1995":31189,"1996":33002,"1997":33140,"1998":35560,"1999":36902,"2000":37589,"2001":38036,"2002":37963,"2003":39212,"2004":41287,"2005":42648,"2006":43472,"2007":45832,"2008":46419,"2009":45708,"2010":45882,"2011":46160,"2012":46856,"2013":47095,"2014":49381,"2015":51419}},"geometry":{"type":"MultiPolygon","coordinates":[[[[-68.92401,43.885407],[-68.874784,43.904715],[-68.849009,43.849841],[-68.888483,43.803781],[-68.944433,43.835326],[-68.92401,43.885407]]],[[[-71.083924,45.305451],[-71.03821,45.311922],[-71.012757,45.34476],[-70.949365,45.331536],[-70.912111,45.296197],[-70.892822,45.239172],[-70.84443,45.234513],[-70.83401953744008,45.27179440239679],[-70.82979,45.286941],[-70.808613,45.311606],[-70.819471,45.341435],[-70.806244,45.376558],[-70.825612,45.400305],[-70.781471,45.431159],[-70.755567,45.428361],[-70.729972,45.399359],[-70.677995,45.394362],[-70.634661,45.383608],[-70.635498,45.427817],[-70.674903,45.452399],[-70.723396,45.510394],[-70.688214,45.563981],[-70.649578,45.598147],[-70.591275,45.630551],[-70.5528239033785,45.66780605788509],[-70.552793,45.667836],[-70.446903,45.704044],[-70.383552,45.734869],[-70.415684,45.786158],[-70.39662,45.808486],[-70.329748,45.853795],[-70.259117,45.890755],[-70.252526,45.933176],[-70.26541,45.962692],[-70.31297,45.961856],[-70.303034,45.998976],[-70.317629,46.01908],[-70.306734,46.061344],[-70.266349,46.100993],[-70.239566,46.142762],[-70.290896,46.185838],[-70.255492,46.246444],[-70.232682,46.284428],[-70.205719,46.299865],[-70.207415,46.331316],[-70.161337,46.360984],[-70.118597,46.384233],[-70.080292,46.410531],[-70.053748,46.429236],[-70.02301978705616,46.57348647251729],[-69.997086,46.69523],[-69.818552,46.87503],[-69.566383,47.125032],[-69.439198,47.250033],[-69.219996,47.457159],[-69.156074,47.451035],[-69.108215,47.435831],[-69.039301,47.42217],[-69.053885,47.377878],[-69.0402,47.2451],[-68.966433,47.212712],[-68.900985,47.178519],[-68.803537,47.216033],[-68.675913,47.242626],[-68.604819,47.249418],[-68.588725,47.281721],[-68.507432,47.296636],[-68.460064,47.286065],[-68.375615,47.292268],[-68.384281,47.326943],[-68.361559,47.355605],[-68.26971,47.353733],[-68.204263,47.33973],[-68.153509,47.314038],[-68.082896,47.271921],[-67.998171,47.217842],[-67.952269,47.196142],[-67.889155,47.118772],[-67.789761,47.065744],[-67.789799,46.794868],[-67.788406,46.601795],[-67.782114,46.279381],[-67.780438,46.038452],[-67.779984,45.938163],[-67.750422,45.917898],[-67.803678,45.869379],[-67.763955,45.829983],[-67.803626,45.781624],[-67.781892,45.731189],[-67.80289429507708,45.67892788546318],[-67.803313,45.677886],[-67.710464,45.679372],[-67.675417,45.630959],[-67.631762,45.621409],[-67.534919,45.595428],[-67.455406,45.604665],[-67.423646,45.572153],[-67.417417,45.501985],[-67.476855,45.49724],[-67.484328,45.451955],[-67.427243,45.37369],[-67.460554,45.300379],[-67.480256,45.268185],[-67.453473,45.241127],[-67.390579,45.154114],[-67.339869,45.125594],[-67.298209,45.146672],[-67.271076,45.191081],[-67.203933,45.171407],[-67.161247,45.162879],[-67.112414,45.112323],[-67.090786,45.068721],[-67.082074,45.029608],[-67.033474,44.939923],[-66.983558,44.903277],[-66.99296,44.849181],[-66.949895,44.817419],[-67.02615,44.768199],[-67.073439,44.741957],[-67.116745,44.706106],[-67.169857,44.662105],[-67.234275,44.637201],[-67.293403,44.599265],[-67.368269,44.624672],[-67.398987,44.602631],[-67.448513,44.600322],[-67.491751,44.556123],[-67.521168,44.50991],[-67.503208,44.476918],[-67.579726,44.429131],[-67.634806,44.487054],[-67.653123,44.525823],[-67.70668,44.501975],[-67.793589,44.494779],[-67.837938,44.46467],[-67.855108,44.419434],[-67.899571,44.394078],[-67.936531,44.411187],[-67.94384395705518,44.407015790843],[-67.978876,44.387034],[-68.01399,44.390255],[-68.049334,44.33073],[-68.103757,44.364362],[-68.125624,44.387127],[-68.189155,44.373833],[-68.173608,44.328397],[-68.191924,44.306675],[-68.22949,44.266918],[-68.17433,44.225908],[-68.306519,44.234829],[-68.314789,44.197157],[-68.331032,44.10758],[-68.438518,44.11618],[-68.502942,44.099722],[-68.53141420235178,44.08985238025649],[-68.584101,44.071589],[-68.617085,44.010097],[-68.657031,44.003823],[-68.669383,44.076359],[-68.77965,44.057754],[-68.874139,44.025359],[-68.905098,44.077344],[-68.935327,44.13038],[-68.888597,44.15955],[-68.93497643176178,44.20290747393729],[-68.95189,44.218719],[-69.02107454500458,44.23043531412289],[-69.040193,44.233673],[-69.054546,44.171542],[-69.075667,44.129991],[-69.031878,44.079036],[-69.068112,44.039768],[-69.043912,44.006336],[-69.077028,43.973654],[-69.131536,43.976089],[-69.17498,43.976949],[-69.212939,43.921404],[-69.242812,43.918818],[-69.279918,43.879579],[-69.321031,43.856708],[-69.354577,43.917765],[-69.38048971934309,43.943640233556486],[-69.393288,43.95642],[-69.422048,43.923047],[-69.438066,43.909539],[-69.50329,43.837673],[-69.552606,43.841347],[-69.578527,43.823316],[-69.650818,43.803785],[-69.69581545625987,43.79605496729129],[-69.717074,43.792403],[-69.754091,43.743866],[-69.807359,43.728081],[-69.833471,43.701281],[-69.855081,43.704746],[-69.862155,43.758962],[-69.88740612415768,43.766593379451784],[-69.915593,43.775112],[-69.983685,43.744395],[-70.001273,43.710388],[-70.06277666023647,43.71335994651279],[-70.071304,43.713772],[-70.096039,43.672276],[-70.168227,43.675136],[-70.190704,43.645582],[-70.217087,43.596717],[-70.206123,43.557627],[-70.245499,43.539635],[-70.321116,43.527262],[-70.33873747724839,43.52810927936889],[-70.361214,43.52919],[-70.385615,43.487031],[-70.327303,43.458521],[-70.383981,43.41294],[-70.416311,43.361059],[-70.465975,43.340246],[-70.517695,43.344037],[-70.53414906595059,43.33395724074578],[-70.553854,43.321886],[-70.585184,43.270113],[-70.57698663416599,43.228019173145185],[-70.575787,43.221859],[-70.596185,43.163466],[-70.62251,43.134573],[-70.665958,43.076234],[-70.703818,43.059825],[-70.756397,43.079988],[-70.819549285713,43.123230973431184],[-70.8281,43.129086],[-70.824801,43.179685],[-70.82477671206809,43.1797631051822],[-70.813119,43.217252],[-70.872585,43.270152],[-70.923949,43.324768],[-70.984335,43.376128],[-70.968359,43.429283],[-70.96078889604699,43.47408873362158],[-70.954755,43.509802],[-70.96379267980639,43.54022095536649],[-70.972716,43.570255],[-70.981946,43.70096],[-70.98725804674599,43.79297359288418],[-70.989929,43.839239],[-71.001367,44.092931],[-71.008736,44.258825],[-71.01027116786828,44.284888321572],[-71.01127,44.301846],[-71.01357590381458,44.34083745255949],[-71.01946172948549,44.44036323978749],[-71.022992,44.500058],[-71.036705,44.736498],[-71.057861,45.000049],[-71.083924,45.305451]]]]}},
+{"type":"Feature","properties":{"name":"Hawaii","income":{"1995":43973,"1996":43677,"1997":43627,"1998":41627,"1999":44755,"2000":49005,"2001":46535,"2002":47424,"2003":48274,"2004":51359,"2005":56133,"2006":60554,"2007":62613,"2008":66701,"2009":63741,"2010":62774,"2011":62071,"2012":66086,"2013":67798,"2014":69549,"2015":73097}},"geometry":{"type":"MultiPolygon","coordinates":[[[[-156.049651,19.780452],[-156.006267,19.81758],[-155.976651,19.85053],[-155.949251,19.857034],[-155.915662,19.887126],[-155.892533,19.932162],[-155.856588,19.968885],[-155.831948,19.982775],[-155.825473,20.025944],[-155.850385,20.062506],[-155.890646,20.123576],[-155.90278,20.177073],[-155.890663,20.25524],[-155.853293,20.271548],[-155.798884,20.254115],[-155.737004,20.222773],[-155.704331,20.191695],[-155.637459,20.153051],[-155.598033,20.124539],[-155.558933,20.13157],[-155.502561,20.114155],[-155.387578,20.067119],[-155.270316,20.014525],[-155.166625,19.93789],[-155.124618,19.897288],[-155.086341,19.855399],[-155.091216,19.776368],[-155.087118,19.728013],[-155.045382,19.739824],[-155.006423,19.739286],[-154.981102,19.690687],[-154.974342,19.633201],[-154.947106,19.604856],[-154.852618,19.549172],[-154.814417,19.53009],[-154.816009,19.500648],[-154.876618,19.433223],[-154.944185,19.381852],[-155.020537,19.331317],[-155.113272,19.290613],[-155.159635,19.268375],[-155.205892,19.260907],[-155.264619,19.274213],[-155.31337,19.250698],[-155.360631,19.20893],[-155.390701,19.201171],[-155.453516,19.151952],[-155.505281,19.137908],[-155.555326,19.069377],[-155.590697,19.007673],[-155.613966,18.970399],[-155.638054,18.941723],[-155.672005,18.917466],[-155.726043,18.969437],[-155.806109,19.013967],[-155.88155,19.036644],[-155.914216,19.099147],[-155.912069,19.179114],[-155.902565,19.258427],[-155.890842,19.298905],[-155.888701,19.348031],[-155.909087,19.415455],[-155.924732,19.45391],[-155.95149,19.486649],[-155.96935,19.555963],[-155.978206,19.608159],[-155.997728,19.642816],[-156.028982,19.650098],[-156.033326,19.66923],[-156.064364,19.730766],[-156.049651,19.780452]]],[[[-156.69989,20.920629],[-156.680905,20.980262],[-156.619581,21.027793],[-156.562773,21.016167],[-156.518707,20.954662],[-156.481055,20.898199],[-156.403304,20.915826],[-156.332817,20.94645],[-156.242555,20.937838],[-156.19471,20.891975],[-156.132669,20.861369],[-156.059788,20.81054],[-156.003532,20.795545],[-155.985413,20.744245],[-156.00187,20.698064],[-156.043786,20.664902],[-156.129898,20.627523],[-156.210258,20.628518],[-156.284391,20.596488],[-156.377633,20.578427],[-156.431872,20.598143],[-156.443673,20.656018],[-156.458438,20.736676],[-156.462242,20.753952],[-156.473562,20.790756],[-156.506026,20.799463],[-156.537752,20.778408],[-156.554617,20.786096],[-156.631794,20.82124],[-156.687804,20.89072],[-156.69989,20.920629]]],[[[-156.670469,20.559909],[-156.610734,20.59377],[-156.56714,20.604895],[-156.543034,20.580115],[-156.539643,20.527644],[-156.586238,20.511711],[-156.668809,20.504738],[-156.702265,20.532451],[-156.670469,20.559909]]],[[[-157.05913,20.913407],[-157.010001,20.929757],[-156.937529,20.925274],[-156.873125,20.894679],[-156.837047,20.863575],[-156.808469,20.820396],[-156.838321,20.764575],[-156.890295,20.744855],[-156.909081,20.739533],[-156.96789,20.73508],[-156.990678,20.775902],[-156.991834,20.826603],[-157.010911,20.854476],[-157.059663,20.884634],[-157.05913,20.913407]]],[[[-157.27722,21.158431],[-157.249695,21.184401],[-157.26069,21.225684],[-157.202125,21.219298],[-157.128207,21.201488],[-157.039987,21.190909],[-157.01426786929898,21.200694266258296],[-156.984032,21.212198],[-156.962847,21.212131],[-156.921108,21.169068],[-156.91785956119898,21.1690213462811],[-156.841592,21.167926],[-156.742231,21.176214],[-156.709106,21.158655],[-156.739342,21.111336],[-156.8022,21.067095],[-156.877137,21.0493],[-156.953872,21.066128],[-157.02617,21.089015],[-157.08066,21.101976],[-157.171606,21.090701],[-157.252534,21.08767],[-157.310748,21.101627],[-157.27722,21.158431]]],[[[-158.232192,21.583806],[-158.12561,21.586739],[-158.079895,21.628101],[-158.050692,21.671215],[-157.9923,21.708],[-157.968628,21.712704],[-157.924591,21.651183],[-157.87735,21.575277],[-157.836945,21.529945],[-157.84549,21.466747],[-157.8139,21.4403],[-157.764572,21.461335],[-157.722506,21.459225],[-157.724324,21.403311],[-157.7106,21.3585],[-157.6518,21.3139],[-157.65510785904,21.309280288451294],[-157.673069,21.284196],[-157.7001,21.264],[-157.7572,21.278],[-157.779944,21.265252],[-157.8096,21.2577],[-157.851048,21.28453],[-157.89,21.3065],[-157.950736,21.312509],[-157.981525,21.315898],[-158.0245,21.3093],[-158.0883,21.2988],[-158.1033,21.2979],[-158.129371,21.344818],[-158.13093136645998,21.34895584799669],[-158.1403,21.3738],[-158.1792,21.4043],[-158.182648,21.430073],[-158.233,21.4876],[-158.231171,21.523857],[-158.277679,21.578789],[-158.232192,21.583806]]],[[[-159.783746,22.064897],[-159.745247,22.097508],[-159.730544,22.139953],[-159.705531,22.159321],[-159.61165,22.201388],[-159.581058,22.223488],[-159.543924,22.221695],[-159.510756,22.203548],[-159.487939,22.229512],[-159.431707,22.220015],[-159.402466,22.232603],[-159.361507,22.214092],[-159.312293,22.183082],[-159.293013,22.12296],[-159.31828,22.061417],[-159.334489,22.041698],[-159.332564,21.999352],[-159.33768,21.951173],[-159.385271,21.912439],[-159.444868,21.868627],[-159.526918,21.883886],[-159.574521,21.892806],[-159.603279,21.892248],[-159.649766,21.933848],[-159.707795,21.961229],[-159.754795,21.977772],[-159.786702,22.018801],[-159.783746,22.064897]]],[[[-160.24961,21.815145],[-160.228965,21.889117],[-160.193959,21.922386],[-160.13705,21.948632],[-160.122262,21.962881],[-160.112746,21.995245],[-160.072123,22.003334],[-160.058543,21.99638],[-160.051128,21.98106],[-160.070292,21.963951],[-160.085787,21.927295],[-160.079065,21.89608],[-160.124283,21.876789],[-160.156092,21.86793],[-160.174796,21.846923],[-160.189782,21.82245],[-160.205851,21.779518],[-160.230373,21.789675],[-160.24961,21.815145]]]]}},
+{"type":"Feature","properties":{"name":"Arizona","income":{"1995":31736,"1996":32708,"1997":34751,"1998":37281,"1999":38642,"2000":40437,"2001":41403,"2002":40724,"2003":41963,"2004":43696,"2005":44402,"2006":47315,"2007":49923,"2008":51009,"2009":48711,"2010":46787,"2011":46710,"2012":47796,"2013":48504,"2014":50036,"2015":51473}},"geometry":{"type":"Polygon","coordinates":[[[-114.799683,32.593621],[-114.809393,32.617119],[-114.76495,32.649391],[-114.719633,32.718763],[-114.705717,32.741581],[-114.667493,32.734226],[-114.61738652396197,32.74105277317659],[-114.570675,32.747417],[-114.531746,32.782503],[-114.468971,32.845155],[-114.463127,32.901884],[-114.47664,32.923628],[-114.481315,32.972064],[-114.511343,33.023455],[-114.51706679028098,33.024628763568494],[-114.575161,33.036542],[-114.628293,33.031052],[-114.670803,33.037984],[-114.706175,33.105335],[-114.679359,33.159519],[-114.678097,33.2303],[-114.674491,33.255597],[-114.723259,33.288079],[-114.707962,33.323421],[-114.707348,33.376628],[-114.725282,33.405048],[-114.673901,33.418299],[-114.635183,33.422726],[-114.62914651818897,33.43354499999979],[-114.597283,33.490653],[-114.524599,33.552231],[-114.529186,33.60665],[-114.525201,33.661583],[-114.504993,33.693022],[-114.496565,33.719155],[-114.504863,33.760465],[-114.520465,33.827778],[-114.505638,33.864276],[-114.508708,33.90064],[-114.534987,33.928499],[-114.509568,33.957264],[-114.454807,34.010968],[-114.435504,34.042615],[-114.43009113851998,34.07893140627949],[-114.428026,34.092787],[-114.405941,34.11154],[-114.348052,34.134458],[-114.292806,34.166725],[-114.229715,34.186928],[-114.17805,34.239969],[-114.139055,34.259538],[-114.14081715127998,34.30312751388169],[-114.14093,34.305919],[-114.172845,34.344979],[-114.264317,34.401329],[-114.335372,34.450038],[-114.378852,34.450376],[-114.378223,34.516521],[-114.422382,34.580711],[-114.465246,34.691202],[-114.490971,34.724848],[-114.576452,34.8153],[-114.634382,34.87289],[-114.629769,34.94304],[-114.633487,35.001857],[-114.625069,35.068478],[-114.619905,35.121632],[-114.59912,35.12105],[-114.572747,35.138725],[-114.587129,35.262376],[-114.627137,35.409504],[-114.6645,35.449497],[-114.663105,35.524491],[-114.653406,35.610789],[-114.689407,35.651412],[-114.697309,35.733686],[-114.70371,35.814585],[-114.669687,35.865084],[-114.700271,35.901772],[-114.731159,35.943916],[-114.742779,36.009963],[-114.74329924588599,36.06593517376009],[-114.743342,36.070535],[-114.736165,36.104367],[-114.666538,36.117343],[-114.627855,36.141012],[-114.572031,36.15161],[-114.511721,36.150956],[-114.487034,36.129396],[-114.448654,36.12641],[-114.41695,36.145761],[-114.372106,36.143114],[-114.337273,36.10802],[-114.316109,36.063109],[-114.270645,36.03572],[-114.21369,36.015613],[-114.151725,36.024563],[-114.138203,36.053161],[-114.09987,36.121654],[-114.046838,36.194069],[-114.048226,36.268874],[-114.047584,36.325573],[-114.049493,36.604059],[-114.05016077608799,36.84314153968939],[-114.0506,37.000396],[-113.965907,37.000025],[-112.966471,37.000219],[-112.89919089761598,37.000301228628395],[-112.82950194437198,37.000386401314394],[-112.545094,37.000734],[-112.538571,37.000744128882],[-112.35769,37.001025],[-111.41278398787297,37.001477687156],[-111.405869,37.001481],[-111.278286,37.000465],[-111.066496,37.002389],[-110.75069,37.003197],[-110.75068647892799,37.00319693472519],[-110.47019,36.997997],[-110.00068181858897,36.99796800029759],[-110.000677,36.997968],[-109.495338,36.999105],[-109.045223,36.999084],[-109.045433,36.874589],[-109.045729,36.117028],[-109.04587116820498,36.002701630519],[-109.046024,35.8798],[-109.046296,35.614251],[-109.046796,35.363606],[-109.04635589438398,35.17550718835119],[-109.04585123518297,34.959818515836695],[-109.045851,34.959718],[-109.04613893536299,34.57929101281789],[-109.046182,34.522393],[-109.046426,33.875052],[-109.04660747392198,33.77822380035048],[-109.047298,33.409783],[-109.047237,33.208965],[-109.04723698053698,33.20889503155078],[-109.04711706230997,32.777794000947694],[-109.047117,32.77757],[-109.047612,32.426377],[-109.04761200321998,32.426375388514195],[-109.048296,32.084093],[-109.049195,31.796551],[-109.050044,31.332502],[-109.829689,31.334067],[-110.46017261044499,31.333141378991595],[-111.074825,31.332239],[-111.36696937116398,31.424824287191587],[-112.365043,31.74113],[-113.33376797301499,32.04024908009009],[-113.750756,32.169005],[-114.813613,32.494277],[-114.811536,32.522834],[-114.795635,32.550956],[-114.814185,32.564788],[-114.799683,32.593621]]]}},
+{"type":"Feature","properties":{"name":"Arkansas","income":{"1995":26515,"1996":27367,"1997":27875,"1998":29212,"1999":31217,"2000":31496,"2001":32864,"2002":32819,"2003":33445,"2004":35295,"2005":35041,"2006":36627,"2007":38239,"2008":38820,"2009":37888,"2010":38413,"2011":38889,"2012":40151,"2013":40605,"2014":41335,"2015":42046}},"geometry":{"type":"Polygon","coordinates":[[[-94.617919,36.499414],[-94.361203,36.4996],[-94.07708826689347,36.49897595722189],[-93.95919,36.498717],[-93.86675821167105,36.49886616468489],[-93.700171,36.499135],[-93.58428154735566,36.498901678628286],[-93.426989,36.498585],[-93.31532710652907,36.49831272629789],[-93.29344735563399,36.49825937523429],[-93.125969,36.497851],[-92.85404911498487,36.498023381141586],[-92.838876,36.498033],[-92.77233389337206,36.498083154079396],[-92.564238,36.49824],[-92.52913658104367,36.498165682985295],[-92.350277,36.497787],[-92.15030624950118,36.498140333324194],[-92.12042910438808,36.49819312399969],[-91.985802,36.498431],[-91.67234245644367,36.499256633798886],[-91.64259,36.499335],[-91.45000491813738,36.49754021318469],[-91.40713744351747,36.497140711948596],[-91.404915,36.49712],[-91.12653887456469,36.497797701019394],[-91.017974,36.498062],[-90.78424415513118,36.49846220012908],[-90.765672,36.498494],[-90.57617906556729,36.498405927798],[-90.494575,36.498368],[-90.22074905391537,36.495937592194494],[-90.153871,36.495344],[-90.141399,36.459874],[-90.131038,36.415069],[-90.066136,36.386272],[-90.063526,36.356911],[-90.06398,36.303038],[-90.114922,36.265595],[-90.155928,36.214074],[-90.18912798221689,36.19898660866739],[-90.220425,36.184764],[-90.235585,36.139474],[-90.294492,36.112949],[-90.339343,36.047112],[-90.368718,35.995812],[-90.28894791527279,35.99651400421139],[-90.103842,35.998143],[-89.95937529517369,35.99901411015688],[-89.901183,35.999365],[-89.733095,36.000608],[-89.686924,35.947716],[-89.652279,35.921462],[-89.64890497034517,35.90358348231259],[-89.64727,35.89492],[-89.722634,35.873718],[-89.729517,35.847632],[-89.723426,35.809382],[-89.797053,35.782648],[-89.863874,35.747592],[-89.915491,35.754917],[-89.956589,35.695486],[-89.898916,35.650904],[-89.876548,35.626653],[-89.9325,35.607865],[-89.944754,35.560308],[-89.958498,35.541703],[-90.037615,35.550329],[-90.045805,35.496533],[-90.022064,35.457375],[-90.045306,35.415435],[-90.070549,35.423291],[-90.112504,35.410153],[-90.087903,35.36327],[-90.121864,35.304535],[-90.166594,35.274588],[-90.097947,35.249983],[-90.093285,35.203282],[-90.099777,35.164474],[-90.09061,35.118287],[-90.160058,35.12883],[-90.181387,35.091401],[-90.197146,35.050731],[-90.265296,35.040293],[-90.300697,35.028793],[-90.309297,34.995694],[-90.244476,34.937596],[-90.250095,34.90732],[-90.31142425034518,34.87285114409999],[-90.313476,34.871698],[-90.401633,34.835305],[-90.40798275379427,34.83526597928069],[-90.463795,34.834923],[-90.473527,34.788835],[-90.505494,34.764568],[-90.546053,34.702076],[-90.550158,34.663445],[-90.57328841261827,34.63367050646799],[-90.587224,34.615732],[-90.549244,34.568101],[-90.569347,34.524867],[-90.583717,34.458829],[-90.575336,34.415152],[-90.641398,34.383869],[-90.660404,34.33576],[-90.729131,34.364206],[-90.765174,34.342818],[-90.752681,34.289266],[-90.812829,34.279438],[-90.839981,34.236114],[-90.89456,34.22438],[-90.882701,34.184364],[-90.894385,34.160953],[-90.938064,34.148754],[-90.94408076019378,34.12006529477739],[-90.94479552430947,34.11665720531419],[-90.946323,34.109374],[-90.90113,34.094667],[-90.874541,34.072041],[-90.89242,34.02686],[-90.942662,34.01805],[-90.979945,34.000106],[-91.004981,33.977011],[-91.048367,33.985078],[-91.088696,33.961334],[-91.035961,33.943758],[-91.026382,33.90798],[-91.061247,33.877505],[-91.052819,33.824181],[-91.025173,33.805953],[-91.026782,33.763642],[-91.08551,33.77641],[-91.111494,33.774568],[-91.143287,33.747141],[-91.075389,33.714403],[-91.10098,33.660551],[-91.178311,33.651109],[-91.130902,33.610919],[-91.188942,33.576225],[-91.20564498594787,33.54697837093289],[-91.215671,33.529423],[-91.189375,33.493005],[-91.171799,33.462342],[-91.147663,33.427172],[-91.113764,33.393124],[-91.142219,33.348989],[-91.125539,33.280255],[-91.086137,33.273652],[-91.068708,33.232936],[-91.084366,33.180856],[-91.104317,33.131598],[-91.153015,33.135093],[-91.180836,33.098364],[-91.120379,33.05453],[-91.15960609801297,33.01124232130679],[-91.166073,33.004106],[-91.26456405022049,33.00473882427039],[-91.43593108033177,33.0058398909721],[-91.4603917718319,33.00599705570149],[-91.489176,33.006182],[-91.875128,33.007728],[-92.06910375856128,33.008482263699584],[-92.06914659248126,33.00848243025689],[-92.222825,33.00908],[-92.501383,33.01216],[-92.723553,33.014328],[-92.72474317317926,33.01434176767479],[-92.971137,33.017192],[-92.988707610715,33.01725094015219],[-93.197402,33.017951],[-93.23860696239936,33.01801587995659],[-93.377134,33.018234],[-93.49051240012037,33.01863459566629],[-93.52099355377158,33.018742293588],[-93.723273,33.019457],[-93.80490777463038,33.01939622545089],[-93.81455301343377,33.01938904487079],[-94.042964,33.019219],[-94.042719,33.160291],[-94.04294584717597,33.27124208413979],[-94.043067,33.330498],[-94.042988,33.435824],[-94.043428,33.551425],[-94.04383374780107,33.551713735585594],[-94.07267,33.572234],[-94.143024,33.577725],[-94.183395,33.592212],[-94.213605,33.570622],[-94.238868,33.576722],[-94.303742,33.564486],[-94.338422,33.567082],[-94.354165,33.556452],[-94.388052,33.565511],[-94.419057,33.577217],[-94.485875,33.637867],[-94.481842,33.789008],[-94.47726674152977,33.94091092793479],[-94.474895,34.019655],[-94.47015267816208,34.189864292126096],[-94.465425,34.359548],[-94.46116868615587,34.50745665157249],[-94.4575,34.634945],[-94.45439503413786,34.72895867317939],[-94.449058,34.890556],[-94.44750953578428,34.93397621215719],[-94.44292586168999,35.06250620957269],[-94.435316,35.275893],[-94.431515,35.369591],[-94.43391344383237,35.38636176989869],[-94.43488928759668,35.39318521558748],[-94.449696,35.496719],[-94.47311939064667,35.63854715252939],[-94.49304007242698,35.759166474327294],[-94.494549,35.768303],[-94.532071,35.987852],[-94.55190628260627,36.10222560566859],[-94.56226800249247,36.16197304097529],[-94.5862,36.299969],[-94.617919,36.499414]]]}},
+{"type":"Feature","properties":{"name":"Delaware","income":{"1995":37345,"1996":39701,"1997":41315,"1998":42662,"1999":45201,"2000":47812,"2001":47876,"2002":48096,"2003":48770,"2004":49545,"2005":52508,"2006":53714,"2007":55988,"2008":58380,"2009":56985,"2010":56172,"2011":58159,"2012":58326,"2013":58244,"2014":59853,"2015":61327}},"geometry":{"type":"Polygon","coordinates":[[[-75.773786,39.7222],[-75.753228,39.757989],[-75.717059,39.792325],[-75.662846,39.821425],[-75.59431690522008,39.834594973091285],[-75.570433,39.839185],[-75.481207,39.829191],[-75.415062,39.801919],[-75.459439,39.765813],[-75.47764,39.715013],[-75.509742,39.686113],[-75.535144,39.647212],[-75.559446,39.629812],[-75.543965,39.596],[-75.512732,39.578],[-75.527676,39.535278],[-75.528088,39.498114],[-75.593068,39.479186],[-75.57183,39.438897],[-75.521682,39.387871],[-75.50564316735286,39.37039456007959],[-75.469324,39.33082],[-75.408376,39.264698],[-75.39479,39.188354],[-75.407473,39.133706],[-75.396277,39.057884],[-75.34089,39.01996],[-75.30665210950967,38.94766016332839],[-75.302552,38.939002],[-75.304078,38.91316],[-75.232029,38.844254],[-75.159022,38.790193],[-75.113331,38.782998],[-75.089473,38.797198],[-75.071805,38.696497],[-75.053973,38.536273],[-75.048939,38.451263],[-75.185455,38.451012],[-75.34128732034819,38.45243652595549],[-75.479283,38.453698],[-75.693721,38.460128],[-75.700382,38.542743],[-75.70177751524498,38.560766929078596],[-75.707551,38.635335],[-75.70755502642899,38.635385355059896],[-75.72310269333266,38.82982655652769],[-75.74815481425408,39.14313173095969],[-75.75643521556849,39.2466875371253],[-75.76044141645049,39.29678962110009],[-75.766895,39.377499],[-75.76690460670918,39.37765159355119],[-75.788596,39.722199],[-75.773786,39.7222]]]}},
+{"type":"Feature","properties":{"name":"Georgia","income":{"1995":33623,"1996":33763,"1997":36372,"1998":37826,"1999":39910,"2000":42057,"2001":42006,"2002":42359,"2003":42421,"2004":42679,"2005":45564,"2006":46808,"2007":49080,"2008":50834,"2009":47469,"2010":46252,"2011":45886,"2012":47125,"2013":47765,"2014":49240,"2015":51225}},"geometry":{"type":"Polygon","coordinates":[[[-85.605165,34.984678],[-85.47433884313428,34.98367332679109],[-85.384967,34.982987],[-85.36391902893108,34.983376563140496],[-85.277556,34.984975],[-85.26505502171578,34.985077644741686],[-85.045183,34.986883],[-84.97985402523149,34.98720561397559],[-84.97697380659228,34.987219837354885],[-84.861314,34.987791],[-84.81047746688638,34.98787795522919],[-84.77583767129727,34.98793720614929],[-84.727434,34.98802],[-84.621483,34.988329],[-84.509052,34.988033],[-84.321869,34.988408],[-84.12944696263588,34.98794695395529],[-84.00533673343827,34.98764958401229],[-83.936646,34.987485],[-83.93642734425198,34.98748438337969],[-83.619985,34.986592],[-83.54918075350466,34.988803195913995],[-83.48287320429068,34.990873961286795],[-83.322768,34.995874],[-83.10861299650726,35.00065884367769],[-83.108606,35.000659],[-83.124378,34.95524],[-83.140621,34.924915],[-83.201183,34.884653],[-83.252582,34.853483],[-83.284812,34.823043],[-83.323866,34.789712],[-83.320062,34.759616],[-83.353238,34.728648],[-83.34960851091326,34.71701058262729],[-83.34003910678457,34.686327710412094],[-83.33869,34.682002],[-83.27796,34.644853],[-83.221402,34.609947],[-83.154577,34.588198],[-83.10287382603569,34.53743090976538],[-83.096858,34.531524],[-83.05057296410239,34.49505365216909],[-83.048289,34.493254],[-82.99509,34.472483],[-82.99138815318229,34.47298062723579],[-82.925766,34.481802],[-82.873831,34.471508],[-82.841997,34.399766],[-82.82342,34.358872],[-82.780308,34.296701],[-82.77462873101207,34.28836681825469],[-82.744982,34.244861],[-82.73510798894158,34.21261481224289],[-82.715373,34.148165],[-82.642797,34.081312],[-82.59502579260727,34.013517809209596],[-82.591855,34.009018],[-82.56299679858088,33.95655491052689],[-82.556835,33.945353],[-82.51295,33.936969],[-82.43115,33.867051],[-82.32448,33.820033],[-82.239098,33.730872],[-82.21593836474749,33.68775497531869],[-82.199747,33.657611],[-82.161908,33.610643],[-82.14245647450088,33.60539959999209],[-82.11465383858477,33.59790505457],[-82.10624,33.595637],[-82.028238,33.544934],[-82.01655587044488,33.529055386425895],[-81.990938,33.494235],[-81.926336,33.462937],[-81.920121,33.410753],[-81.932737,33.343541],[-81.846136,33.303843],[-81.84650053235788,33.24725208542989],[-81.846536,33.241746],[-81.763535,33.203648],[-81.76250598279576,33.197265888297295],[-81.755135,33.15155],[-81.658433,33.103152],[-81.61595571078908,33.08933853936399],[-81.601655,33.084688],[-81.54396622431388,33.04439995414439],[-81.50203,33.015113],[-81.499566,32.943722],[-81.464069,32.897814],[-81.42062,32.831223],[-81.4131167951736,32.744261327961496],[-81.41267,32.739083],[-81.393818,32.653491],[-81.397106,32.605587],[-81.38690190269416,32.59896485389979],[-81.328753,32.561228],[-81.28423838176558,32.547110946284995],[-81.274927,32.544158],[-81.194829,32.465086],[-81.194931,32.411489],[-81.17347379448609,32.38490278088669],[-81.133032,32.334794],[-81.128034,32.276297],[-81.153531,32.237687],[-81.14759517045536,32.22716944659709],[-81.119361,32.177142],[-81.113334,32.113205],[-81.038265,32.084469],[-81.006745,32.101152],[-80.943226,32.057824],[-80.885517,32.0346],[-80.84313,32.024226],[-80.848441,31.988279],[-80.911207,31.943769],[-80.941359,31.912984],[-81.000317,31.856744],[-81.036873,31.812721],[-81.077057,31.761256],[-81.130634,31.722692],[-81.13529859020048,31.710564597966087],[-81.139394,31.699917],[-81.133493,31.623348],[-81.173079,31.555908],[-81.17483263659058,31.53959644949479],[-81.177254,31.517074],[-81.213493,31.462818],[-81.258616,31.404425],[-81.279338,31.351127],[-81.260958,31.30391],[-81.26437794808837,31.294599064745494],[-81.282842,31.24433],[-81.304957,31.206173],[-81.368241,31.136534],[-81.402096,31.125383],[-81.401267,31.072781],[-81.420474,31.016703],[-81.41251803557948,30.990834503508392],[-81.408484,30.977718],[-81.405153,30.908203],[-81.44013,30.821369],[-81.460061,30.769912],[-81.444124,30.709714],[-81.507218,30.722936],[-81.528281,30.723359],[-81.56171,30.715597],[-81.633273,30.729603],[-81.668283,30.744644],[-81.732238,30.749635],[-81.763384,30.773821],[-81.808543,30.790016],[-81.868624,30.792756],[-81.902354,30.82082],[-81.90597843940638,30.82140734150199],[-81.943187,30.827437],[-81.994992,30.786074],[-82.032667,30.750674],[-82.041834,30.692374],[-82.049529,30.655544],[-82.015728,30.601698],[-82.018381,30.531176],[-82.028232,30.447385],[-82.042011,30.403253],[-82.040766,30.370144],[-82.05098298168086,30.368367775944893],[-82.094709,30.360766],[-82.143306,30.363378],[-82.180043,30.36861],[-82.210318,30.424577],[-82.200965,30.474427],[-82.229427,30.520814],[-82.218607,30.564395],[-82.41898411217848,30.580916669731494],[-82.459581,30.584264],[-82.45979243541368,30.58427652830619],[-82.58400518641946,30.591636579087588],[-82.68952979847276,30.597889290641792],[-82.877311,30.609016],[-83.131431,30.623575],[-83.13661885820359,30.623885944893093],[-83.30934712159579,30.634238766671597],[-83.35771631362809,30.637137873134193],[-83.499951,30.645663],[-83.61170405882639,30.651560093708593],[-83.743729,30.65852691375049],[-83.820973,30.662603],[-84.007454,30.67206996846919],[-84.08375308229998,30.67594339796799],[-84.124993,30.678037],[-84.28551450903947,30.684809171948],[-84.38075418355248,30.688827197045892],[-84.474519,30.692783],[-84.812997,30.70965],[-84.86346384438247,30.711497014654395],[-84.864693,30.711542],[-84.91815,30.772082],[-84.934283,30.834033],[-84.935698,30.878703],[-84.983757,30.936984],[-85.006062,30.977039],[-85.002499,31.000682],[-85.011392,31.053546],[-85.02110756236277,31.075463872306393],[-85.035615,31.108192],[-85.107516,31.186451],[-85.108192,31.258591],[-85.089774,31.295026],[-85.08882996353047,31.30864775549659],[-85.087929,31.321648],[-85.092487,31.362881],[-85.066005,31.431363],[-85.071621,31.468384],[-85.05168142950619,31.51954032914169],[-85.041881,31.544684],[-85.05796,31.57084],[-85.058169,31.620227],[-85.12553,31.694965],[-85.11893,31.732664],[-85.12544057734247,31.76296870341829],[-85.12915931558317,31.780278268076593],[-85.141831,31.839261],[-85.114031,31.89336],[-85.067829,31.967358],[-85.06359054298467,31.991857],[-85.05141112791277,32.062256083621996],[-85.047063,32.087389],[-85.058749,32.136018],[-84.997765,32.185445],[-84.930127,32.219051],[-84.91994214792587,32.230848200933295],[-84.891841,32.263398],[-84.955704,32.30591],[-85.008096,32.336677],[-84.983466,32.363186],[-84.98115029413368,32.37904007668179],[-84.971831,32.442843],[-84.99978675631009,32.5070669687837],[-85.00113083912366,32.51015478839779],[-85.0071,32.523868],[-85.069848,32.583146],[-85.07607237260477,32.60806747515709],[-85.088533,32.657958],[-85.11425,32.730447],[-85.12453322275059,32.75162960675139],[-85.160963,32.826672],[-85.1844,32.861317],[-85.18611740178916,32.87013826997159],[-85.232441,33.108075],[-85.23244140518726,33.108077093933595],[-85.23659537125276,33.12954402825069],[-85.29434686434526,33.42799314636459],[-85.30494383322488,33.4827563368455],[-85.314048,33.529805],[-85.33811629990588,33.653114391601385],[-85.360532,33.767957],[-85.38667057377278,33.90170149400329],[-85.398871,33.964128],[-85.398871244842,33.964129286779496],[-85.42107317522878,34.080812652607186],[-85.429499,34.125095],[-85.46314082477578,34.28619098850549],[-85.47514728110428,34.34368465787619],[-85.502471,34.474526],[-85.51304422927326,34.52394647132369],[-85.52689481816098,34.58868569273349],[-85.53440525781537,34.62379033843579],[-85.561424,34.750079],[-85.58281233378527,34.86043547447759],[-85.595165,34.924171],[-85.605165,34.984678]]]}},
+{"type":"Feature","properties":{"name":"Minnesota","income":{"1995":37483,"1996":39791,"1997":41591,"1998":45311,"1999":46153,"2000":49170,"2001":49619,"2002":50157,"2003":50750,"2004":51202,"2005":52048,"2006":54022,"2007":55664,"2008":57318,"2009":55621,"2010":55422,"2011":56944,"2012":58828,"2013":60664,"2014":61473,"2015":63459}},"geometry":{"type":"Polygon","coordinates":[[[-97.229039,49.000687],[-96.93096,48.999984],[-96.405408,48.999984],[-95.97539,48.999984],[-95.340962,48.99874],[-95.31988878347217,48.99875834401038],[-95.153711,48.998903],[-95.153309,49.18488],[-95.15333,49.309287],[-95.153314,49.384358],[-95.058404,49.35317],[-94.988908,49.368897],[-94.952111,49.368679],[-94.878454,49.333193],[-94.816222,49.320987],[-94.797244,49.214284],[-94.774228,49.124994],[-94.750221,49.099763],[-94.750218,48.999992],[-94.718932,48.999991],[-94.683069,48.883929],[-94.685681,48.840119],[-94.694312,48.789352],[-94.61901,48.737374],[-94.508862,48.700362],[-94.446604,48.6929],[-94.43020127923407,48.69830878552848],[-94.388848,48.711945],[-94.281797,48.705255],[-94.251169,48.683514],[-94.250191,48.656323],[-94.091244,48.643669],[-93.927004,48.63122],[-93.844008,48.629395],[-93.80527,48.570299],[-93.815178,48.526508],[-93.674568,48.516297],[-93.562062,48.528897],[-93.467504,48.545664],[-93.464308,48.591792],[-93.371156,48.605085],[-93.347528,48.62662],[-93.207398,48.642474],[-93.14242,48.624924],[-93.08845453528609,48.626814218496484],[-92.954876,48.631493],[-92.894687,48.594915],[-92.728046,48.53929],[-92.634931,48.542873],[-92.631117,48.508252],[-92.657101,48.466915],[-92.575636,48.440827],[-92.51491,48.448313],[-92.456325,48.414204],[-92.469948,48.351836],[-92.416285,48.295463],[-92.369174,48.220268],[-92.314665,48.240527],[-92.295668,48.278118],[-92.295412,48.323957],[-92.26228,48.354933],[-92.162161,48.363279],[-92.055228,48.359213],[-92.000133,48.321355],[-91.980772,48.247801],[-91.89347,48.237699],[-91.79728357990868,48.20577591545358],[-91.781182,48.200432],[-91.714931,48.19913],[-91.692366,48.11933],[-91.559272,48.108268],[-91.542512,48.053268],[-91.465499,48.06677],[-91.336578,48.069627],[-91.250112,48.084087],[-91.156107,48.140475],[-91.03555,48.189459],[-91.03253946126509,48.19057882189869],[-90.906829,48.237339],[-90.843624,48.243576],[-90.804207,48.177833],[-90.775962,48.122229],[-90.703702,48.096009],[-90.566113,48.12262],[-90.471019,48.106076],[-90.31723,48.103793],[-90.136191,48.112136],[-90.029626,48.087588],[-89.973433,48.02035],[-89.868153,47.989898],[-89.749314,48.023325],[-89.625087,48.011517],[-89.489226,48.014528],[-89.555015,47.974849],[-89.660616,47.951216],[-89.737539,47.918183],[-89.793539,47.891358],[-89.923649,47.862062],[-89.974296,47.830514],[-90.072025,47.811105],[-90.187636,47.77813],[-90.323446,47.753771],[-90.42139,47.73515],[-90.537105,47.703055],[-90.647837,47.656176],[-90.735927,47.624343],[-90.86827,47.5569],[-91.023124,47.464964],[-91.02312471770206,47.464963516060784],[-91.146958,47.381464],[-91.262512,47.27929],[-91.387021,47.187293],[-91.456965,47.139156],[-91.573817,47.089917],[-91.644564,47.026491],[-91.737098,46.982853],[-91.79399591208139,46.94278064714189],[-91.806851,46.933727],[-91.906483,46.891236],[-92.013405,46.833727],[-92.062088,46.804038],[-92.01529,46.706469],[-92.050819,46.710517],[-92.100255,46.734446],[-92.143338,46.731596],[-92.183091,46.695241],[-92.205492,46.664741],[-92.292192,46.663242],[-92.292371,46.495585],[-92.29275980242826,46.417219502879995],[-92.293619,46.244043],[-92.29383060857869,46.157321306495994],[-92.294033,46.074377],[-92.338239,46.052149],[-92.35176,46.015685],[-92.392681,46.01954],[-92.44963,46.002252],[-92.472761,45.972952],[-92.545682,45.970118],[-92.580565,45.94625],[-92.656125,45.924442],[-92.721128,45.883805],[-92.759458,45.835341],[-92.776496,45.790014],[-92.826013,45.73665],[-92.84074210662547,45.72939673446969],[-92.869689,45.715142],[-92.88669712440898,45.644148],[-92.887929,45.639006],[-92.881136,45.573409],[-92.801503,45.562854],[-92.756906,45.557499],[-92.728023,45.525652],[-92.686793,45.472271],[-92.646768,45.437929],[-92.658486,45.396058],[-92.698967,45.336374],[-92.74826767468588,45.29605938650979],[-92.761868,45.284938],[-92.76609140867366,45.210021702422694],[-92.766932,45.195111],[-92.74382347936557,45.123646262323],[-92.740509,45.113396],[-92.802911,45.065403],[-92.761904,45.022467],[-92.750802,44.941567],[-92.76702326575186,44.861976737097685],[-92.76711733435718,44.86151518587589],[-92.768574,44.854368],[-92.805287,44.768361],[-92.79236079967048,44.758983813697085],[-92.73162385130317,44.71492278525959],[-92.696491,44.689436],[-92.618025,44.61287],[-92.54928,44.577704],[-92.399281,44.558292],[-92.361518,44.558935],[-92.31693313340578,44.539276012202684],[-92.314071,44.538014],[-92.291005,44.485464],[-92.24536464900538,44.454251124351785],[-92.232472,44.445434],[-92.111085,44.413948],[-92.08452858049277,44.404614314800995],[-91.9636,44.362112],[-91.916191,44.318094],[-91.892698,44.231105],[-91.85449997529766,44.197226519552196],[-91.817302,44.164235],[-91.719097,44.128853],[-91.647873,44.064109],[-91.573283,44.026901],[-91.55921556303969,44.024209316581185],[-91.440536,44.001501],[-91.42356869981727,43.984296880322596],[-91.357426,43.917231],[-91.291002,43.852733],[-91.28765562736709,43.847065],[-91.243955,43.773046],[-91.25700015600567,43.72565873722238],[-91.273252,43.666623],[-91.252926,43.600363],[-91.232812,43.564842],[-91.217706,43.50055],[-91.491042,43.50069],[-91.61083500055437,43.500687846779286],[-91.73021699783769,43.50068570094609],[-91.824848,43.500684],[-92.07980199312827,43.50070488517658],[-92.178863,43.500713],[-92.44894795143777,43.50041498856269],[-92.55312809051877,43.50030003631229],[-92.553161,43.5003],[-92.870277,43.499548],[-93.02434790054187,43.49955616363],[-93.04919200781647,43.49955748002459],[-93.228861,43.499567],[-93.49735132522038,43.49953072451169],[-93.576728,43.49952],[-93.64853303117357,43.49953548967509],[-93.97076,43.499605],[-93.97076155852818,43.499605003207385],[-94.24796744155518,43.50017547670759],[-94.390597,43.500469],[-94.44284998971817,43.50047850765469],[-94.85455506761066,43.50055341915219],[-94.874235,43.500557],[-94.91461348471358,43.50059587298608],[-95.214938,43.500885],[-95.38778759402187,43.50047872890739],[-95.45443223866057,43.50032208525],[-95.486803,43.500246],[-95.834421,43.499966],[-95.86094620157228,43.49999288490559],[-96.05316283450999,43.50018770815748],[-96.198484,43.500335],[-96.45326,43.50039],[-96.453315,43.552299],[-96.45290957436626,43.84950689301839],[-96.45290957169317,43.849508852637186],[-96.45243585466946,44.19677954009509],[-96.45243582459547,44.196801586664996],[-96.452213,44.360149],[-96.45329131359868,44.543636801817996],[-96.45380669966707,44.63133583194799],[-96.45483051555378,44.80555020404578],[-96.45584011363358,44.97734524827999],[-96.45755349848498,45.26889792871839],[-96.457781,45.30761],[-96.47007760304926,45.32679964939229],[-96.482556,45.346273],[-96.521787,45.375645],[-96.562142,45.38609],[-96.617726,45.408092],[-96.675447,45.410216],[-96.710786,45.43693],[-96.742509,45.478723],[-96.781036,45.535972],[-96.83541916197808,45.58612869288079],[-96.843957,45.594003],[-96.851621,45.619412],[-96.82616,45.654164],[-96.745086,45.701576],[-96.672665,45.732336],[-96.630512,45.781157],[-96.587093,45.816445],[-96.571871,45.871846],[-96.563672,45.935245],[-96.574264,46.016545],[-96.57269749419397,46.02189167135768],[-96.554507,46.083978],[-96.59567,46.21985],[-96.60104,46.319554],[-96.647296,46.358499],[-96.709095,46.435294],[-96.744436,46.56596],[-96.78578618259849,46.629590849260886],[-96.78978651304978,46.63574667271669],[-96.790523,46.63688],[-96.786845,46.692805],[-96.788803,46.777575],[-96.763973,46.912507],[-96.833504,47.01011],[-96.819078,47.081152],[-96.82656912722827,47.150539],[-96.83600959454186,47.237981875487094],[-96.84022,47.276981],[-96.85748,47.440457],[-96.85595934905318,47.49917322952899],[-96.854073,47.57201],[-96.882376,47.649025],[-96.89349330133977,47.672126959443695],[-96.928506,47.744884],[-96.996364,47.844398],[-97.037354,47.933279],[-97.068987,48.026267],[-97.105616,48.091362],[-97.146745,48.168556],[-97.14584495947489,48.17322348299049],[-97.14191038719827,48.19362761887449],[-97.129533,48.257815],[-97.137904,48.344585],[-97.139173,48.430528],[-97.149122,48.532305],[-97.14810346613356,48.54074404618669],[-97.14772356830088,48.54389168365058],[-97.142915,48.583733],[-97.100009,48.667926],[-97.121253,48.713593],[-97.152588,48.772602],[-97.187362,48.867598],[-97.227854,48.945864],[-97.229039,49.000687]]]}},
+{"type":"Feature","properties":{"name":"Alaska","income":{"1995":42255,"1996":44797,"1997":43657,"1998":47177,"1999":49133,"2000":51433,"2001":52332,"2002":51844,"2003":52391,"2004":52141,"2005":55477,"2006":58572,"2007":62854,"2008":67332,"2009":66712,"2010":63456,"2011":65699,"2012":66503,"2013":70058,"2014":70898,"2015":73391}},"geometry":{"type":"MultiPolygon","coordinates":[[[[179.481318,51.975301],[179.582857,52.016841],[179.636846,52.025712],[179.773922,51.970693],[179.743012,51.911749],[179.649484,51.87367],[179.543516,51.890926],[179.484634,51.921268],[179.481318,51.975301]]],[[[178.600493,51.655256],[178.6606,51.683065],[178.92533,51.623904],[179.195247,51.477871],[179.295785,51.419232],[179.41824,51.416195],[179.480418,51.36386],[179.253271,51.337239],[179.031533,51.449884],[178.930219,51.530089],[178.869249,51.556986],[178.7724,51.554119],[178.604866,51.616015],[178.600493,51.655256]]],[[[178.463385,51.987849],[178.552612,51.973968],[178.591597,51.952652],[178.539395,51.903246],[178.502493,51.899644],[178.432461,51.965533],[178.463385,51.987849]]],[[[178.204442,51.83089],[178.329699,51.836792],[178.378009,51.792626],[178.374074,51.747856],[178.270955,51.765186],[178.204442,51.83089]]],[[[178.093673,52.055141],[178.154769,52.061421],[178.201313,52.031502],[178.2009,51.991156],[178.120941,51.977012],[178.079214,52.01896],[178.093673,52.055141]]],[[[177.213086,51.920358],[177.310827,51.933273],[177.367363,51.968375],[177.460539,51.999751],[177.521006,52.063062],[177.581271,52.144927],[177.648654,52.1309],[177.675952,52.092167],[177.609087,52.028518],[177.572068,52.001812],[177.611553,51.950829],[177.601005,51.922254],[177.49928,51.922033],[177.409536,51.930821],[177.371263,51.901945],[177.334229,51.866769],[177.311768,51.825971],[177.262195,51.861891],[177.178789,51.879219],[177.213086,51.920358]]],[[[173.863992,52.792483],[174.067293,52.757637],[174.140115,52.750737],[174.158146,52.706059],[173.975116,52.707459],[173.819039,52.759805],[173.863992,52.792483]]],[[[173.439026,52.470528],[173.555739,52.479472],[173.638061,52.524209],[173.772799,52.509905],[173.702252,52.434804],[173.748301,52.392346],[173.725696,52.356579],[173.651293,52.35637],[173.543778,52.392666],[173.48638,52.368613],[173.319948,52.412058],[173.439026,52.470528]]],[[[172.458911,52.954548],[172.643266,53.004979],[172.792872,53.008568],[173.121988,52.990352],[173.251326,52.944362],[173.425362,52.868345],[173.423819,52.828799],[173.284417,52.827933],[173.204948,52.848911],[173.166899,52.795229],[173.096237,52.786782],[172.9826,52.79108],[172.903628,52.761667],[172.809387,52.78929],[172.763366,52.823656],[172.754236,52.87749],[172.669943,52.913011],[172.585075,52.921327],[172.472857,52.890234],[172.458911,52.954548]]],[[[-133.935016,55.920689],[-133.816363,55.964025],[-133.7314,56.028857],[-133.659241,56.083818],[-133.643817,56.127739],[-133.6721,56.222734],[-133.656889,56.281228],[-133.656415,56.326909],[-133.582116,56.352506],[-133.41837,56.332132],[-133.197009,56.333016],[-133.158233,56.314768],[-133.07823,56.246802],[-133.03996415325298,56.23905793430999],[-132.966922,56.224276],[-132.887585,56.172938],[-132.833864,56.103904],[-132.896433,56.099744],[-132.85963305440296,56.05257720308869],[-132.837592,56.024327],[-132.618464,55.911476],[-132.470697,55.782162],[-132.462531,55.673854],[-132.382505,55.665336],[-132.301119,55.55096],[-132.142945,55.457941],[-132.258056,55.416142],[-132.126398,55.288418],[-132.037122,55.275144],[-131.977397,55.180949],[-132.027513,55.104675],[-131.984592,55.027978],[-131.983324,54.897813],[-131.957914,54.791239],[-131.999591,54.731975],[-132.029747,54.701189],[-132.165182,54.69405],[-132.228223,54.72517],[-132.307943,54.718714],[-132.366389,54.751197],[-132.403533,54.784596],[-132.509371,54.781258],[-132.639032,54.753251],[-132.674324,54.674652],[-132.753019,54.673244],[-132.866355,54.700386],[-132.87721,54.753772],[-132.918751,54.783253],[-132.990589,54.820994],[-133.099047,54.919007],[-133.164788,54.976909],[-133.197719,55.033404],[-133.239695,55.092415],[-133.215086,55.136876],[-133.232491,55.198828],[-133.281979,55.217117],[-133.341259,55.205701],[-133.404497,55.214992],[-133.471938,55.247527],[-133.468217,55.281678],[-133.586605,55.3088],[-133.596762,55.218233],[-133.658359,55.232674],[-133.690174,55.304409],[-133.633006,55.361299],[-133.630945,55.416114],[-133.697898,55.454759],[-133.789055,55.457892],[-133.75287,55.544282],[-133.728549,55.593128],[-133.716665,55.660223],[-133.643324,55.729037],[-133.701152,55.78516],[-133.700468,55.837421],[-133.861039,55.848844],[-133.92025,55.860295],[-133.935016,55.920689]]],[[[-134.392983,56.864284],[-134.270459,56.93558],[-134.193751,56.933598],[-134.147103,56.95697],[-134.047753,56.923],[-134.006635,56.851587],[-133.942936,56.805551],[-133.86904,56.845938],[-133.921451,56.961511],[-134.049218,57.029203],[-134.008856,57.074578],[-133.887957,57.097744],[-133.739433,57.072184],[-133.536258,57.0387],[-133.334272,57.002442],[-133.317871026437,57.002674737699685],[-133.104611,57.005701],[-132.98137,56.92738],[-132.903211,56.80361],[-132.796602,56.776932],[-132.743207,56.71372],[-132.619258,56.660778],[-132.611326,56.599913],[-132.671154,56.543071],[-132.806838,56.505492],[-132.933042,56.5222],[-133.041726,56.518356],[-133.183493,56.454241],[-133.300571,56.462343],[-133.41508342926295,56.45646009323308],[-133.460634,56.45412],[-133.655468,56.442279],[-133.821628,56.391602],[-133.834555,56.319801],[-133.876624,56.275884],[-133.88114,56.223197],[-133.941986,56.180095],[-133.927725,56.145949],[-133.960525,56.091359],[-134.018043,56.088176],[-134.087446,56.094939],[-134.121868,56.029895],[-134.099805,55.98414],[-134.118062,55.914642],[-134.208251,55.876709],[-134.255096,55.844614],[-134.311763,55.812285],[-134.344652,55.846312],[-134.374965,55.928492],[-134.291804,55.926219],[-134.202178,56.035175],[-134.259749,56.13444],[-134.282212,56.254789],[-134.294679,56.335888],[-134.243126,56.395778],[-134.25192,56.44455],[-134.197967,56.531028],[-134.241938,56.555531],[-134.320134,56.554484],[-134.30112,56.620317],[-134.376274,56.668608],[-134.418534,56.822333],[-134.392983,56.864284]]],[[[-134.960502,58.403758],[-134.865084,58.357276],[-134.788441,58.28909],[-134.735829,58.234597],[-134.72359064048297,58.20965732961439],[-134.699956,58.161494],[-134.608911,58.171637],[-134.46176,58.159289],[-134.329872,58.13499],[-134.256223,58.144793],[-134.255797473354,58.144691601466484],[-134.174352,58.125284],[-134.183983,58.077295],[-134.138231,58.047103],[-134.087572,57.996475],[-133.999948,57.91481],[-133.904874,57.807406],[-133.896846,57.685524],[-133.808285,57.609604],[-133.8176,57.568353],[-133.871581,57.484158],[-133.866931,57.367869],[-133.786398,57.311528],[-133.840895,57.271074],[-133.875673,57.267613],[-133.983501,57.302838],[-134.100118,57.266285],[-134.193629,57.184879],[-134.302721,57.136562],[-134.378359,57.115016],[-134.386052,57.087392],[-134.443786,57.062292],[-134.497718,57.031194],[-134.565687,57.023737],[-134.634565,57.109863],[-134.640169,57.239852],[-134.55554,57.407428],[-134.607557,57.513042],[-134.695428,57.685335],[-134.709024,57.780498],[-134.752398,57.938956],[-134.783772,58.082292],[-134.864299,58.180489],[-134.958171,58.322057],[-134.960502,58.403758]]],[[[-136.563223,58.035052],[-136.538708,58.093482],[-136.446286,58.11334],[-136.365544,58.148854],[-136.387113,58.252414],[-136.290349,58.251761],[-136.176442,58.265111],[-136.033678,58.276728],[-135.877468,58.259852],[-135.78338,58.286709],[-135.712398,58.231892],[-135.497911,58.168882],[-135.275797,58.097024],[-135.108896,58.08827],[-134.950844,58.036993],[-134.926395,57.921919],[-135.004952,57.884338],[-134.95133740536397,57.78480125349048],[-134.939924,57.763612],[-134.824891,57.500067],[-134.825579,57.372143],[-134.854948,57.264766],[-134.738223,56.975741],[-134.695735,56.900791],[-134.663434,56.804687],[-134.62967,56.709596],[-134.615955,56.637289],[-134.626943,56.553868],[-134.669778,56.524129],[-134.64177,56.445479],[-134.634828,56.345297],[-134.634668,56.265832],[-134.653827,56.198385],[-134.674028,56.166925],[-134.763535,56.210363],[-134.810171,56.244987],[-134.839411,56.309403],[-134.915911,56.360555],[-134.977082,56.437294],[-135.058238,56.529453],[-135.123389,56.602823],[-135.175826,56.677876],[-135.21583,56.66534],[-135.305077,56.726382],[-135.362241,56.758742],[-135.467177,56.77141],[-135.550718,56.841228],[-135.506869,56.865978],[-135.476817,56.891232],[-135.442339,56.942355],[-135.353447,57.020905],[-135.457907,57.070165],[-135.571504,57.105697],[-135.604555,57.045834],[-135.63688,57.009874],[-135.825598,56.989032],[-135.856021,56.995636],[-135.844612,57.083568],[-135.755007,57.123972],[-135.753581,57.167168],[-135.832253,57.170647],[-135.870519,57.221639],[-135.837719,57.282068],[-135.85816,57.321358],[-135.892131,57.408048],[-135.943766,57.45878],[-136.047547,57.513762],[-136.088071,57.555291],[-136.163059,57.558861],[-136.238166,57.625991],[-136.250818,57.684831],[-136.304684,57.771051],[-136.371358700179,57.83166131938589],[-136.372377,57.832587],[-136.458829,57.853901],[-136.484259,57.89646],[-136.573288,57.926844],[-136.563223,58.035052]]],[[[-152.064099,60.417137],[-151.952456,60.510609],[-151.839194,60.485862],[-151.891542,60.440177],[-151.956263,60.367841],[-152.079995,60.341191],[-152.064099,60.417137]]],[[[-153.597411,59.386827],[-153.489005,59.41523],[-153.412493,59.415105],[-153.347772,59.377985],[-153.386898,59.33075],[-153.515286,59.320878],[-153.546695,59.331348],[-153.597411,59.386827]]],[[[-154.779663,57.366335],[-154.69331,57.446085],[-154.618704,57.514972],[-154.52206,57.577786],[-154.411385,57.598452],[-154.292471,57.644223],[-154.196959,57.664639],[-153.994572,57.656905],[-153.930279,57.696791],[-153.93522,57.813047],[-153.781408,57.876417],[-153.721176,57.890615],[-153.648798,57.880103],[-153.512024,57.909156],[-153.533204,57.941117],[-153.484603,57.9765],[-153.386422,57.936526],[-153.299009,57.985626],[-153.365574,58.039052],[-153.419783,58.059638],[-153.362281,58.106786],[-153.316127,58.14039],[-153.223709,58.16212],[-153.202801,58.20808],[-153.101841,58.257938],[-153.044316,58.306336],[-152.925586,58.339686],[-152.883107,58.400443],[-152.787776,58.411313],[-152.733845,58.460662],[-152.640313,58.469868],[-152.66622,58.544087],[-152.61613,58.601852],[-152.560171,58.61968],[-152.453817,58.618515],[-152.354709,58.63828],[-152.337212,58.589095],[-152.38761,58.52287],[-152.467197,58.476609],[-152.512483,58.427349],[-152.49848,58.372351],[-152.432235,58.355221],[-152.387343,58.359499],[-152.34486,58.39163],[-152.35609,58.42347],[-152.301713,58.428697],[-152.227835,58.376424],[-152.129257,58.396414],[-152.08925,58.367644],[-151.981781,58.347971],[-151.817111,58.263444],[-151.795696,58.211096],[-151.862321,58.168265],[-152.03412,58.183737],[-152.112205,58.148559],[-152.265111,58.135732],[-152.374399,58.120014],[-152.482674,58.129813],[-152.529036,58.093779],[-152.656801,58.061049],[-152.766673,58.029887],[-152.722524,57.987364],[-152.751978,57.933466],[-152.804807,57.899175],[-152.790211,57.858058],[-152.753437,57.834452],[-152.681204,57.875675],[-152.635378,57.91861],[-152.526283,57.913266],[-152.432608,57.976029],[-152.422573,57.948662],[-152.324103,57.916604],[-152.351152,57.834768],[-152.212247,57.791433],[-152.298762,57.745925],[-152.440182,57.72664],[-152.386805,57.667923],[-152.313974,57.63642],[-152.161617,57.623287],[-152.159677,57.593614],[-152.259641,57.527156],[-152.323683,57.467861],[-152.253603,57.384019],[-152.323687,57.34266],[-152.474883,57.434204],[-152.570527,57.448909],[-152.601148,57.382165],[-152.630441,57.322668],[-152.695698,57.281318],[-152.818187,57.265368],[-152.943463,57.256956],[-152.949333,57.187346],[-152.880321,57.164798],[-152.90054,57.132076],[-153.06433,57.10379],[-153.200217,57.042039],[-153.266822,56.999643],[-153.342018,56.982825],[-153.404263,57.080511],[-153.48652,57.085915],[-153.580831,57.049048],[-153.543429,56.995245],[-153.541492,56.887875],[-153.603624,56.887336],[-153.699409,56.855382],[-153.776468,56.830315],[-153.83964,56.822099],[-153.90215,56.771208],[-153.97178,56.744861],[-154.017042,56.689311],[-154.153147,56.681697],[-154.129017,56.742168],[-154.305713,56.846871],[-154.312888,56.918673],[-154.40749,56.968334],[-154.528538,57.001892],[-154.523432,57.129106],[-154.594977,57.257161],[-154.691855,57.28411],[-154.79384,57.288862],[-154.779663,57.366335]]],[[[-154.840415,56.42032],[-154.70614,56.521273],[-154.514078,56.604059],[-154.210336,56.609684],[-154.095833,56.617786],[-154.025041,56.572517],[-153.878764,56.565925],[-153.887678,56.533637],[-154.02093,56.482025],[-154.266332,56.496366],[-154.529507,56.502655],[-154.624282,56.475181],[-154.742887,56.401678],[-154.840415,56.42032]]],[[[-155.750002,55.821849],[-155.688098,55.864886],[-155.605373,55.928826],[-155.530591,55.912213],[-155.554245,55.84646],[-155.566307,55.789488],[-155.591002,55.761725],[-155.718593,55.772356],[-155.750002,55.821849]]],[[[-156.733628,56.077593],[-156.683003,56.09881],[-156.614757,56.065178],[-156.618202,56.017802],[-156.681814,55.994337],[-156.735292,56.02264],[-156.733628,56.077593]]],[[[-157.288702,56.566039],[-157.172027,56.598039],[-157.091146,56.581134],[-156.975549,56.540446],[-157.047173,56.519931],[-157.168777,56.53021],[-157.326059,56.525169],[-157.288702,56.566039]]],[[[-160.252749,54.913251],[-160.192058,55.038157],[-160.187261,55.118376],[-160.137102,55.171565],[-160.025257,55.203914],[-159.870591,55.284889],[-159.843859,55.249367],[-159.816419,55.178051],[-159.670305,55.182337],[-159.521096,55.253393],[-159.488766,55.188812],[-159.33847,55.046683],[-159.203228,54.914842],[-159.272354,54.864204],[-159.309681,54.865813],[-159.447982,54.941374],[-159.504434,55.027316],[-159.635226,55.037294],[-159.752779,55.066139],[-159.813625,55.027467],[-160.027035,55.02091],[-160.099295,54.962853],[-160.226967,54.864075],[-160.252749,54.913251]]],[[[-160.856621,55.318488],[-160.808929,55.370122],[-160.687442,55.402198],[-160.517513,55.379378],[-160.333421,55.436928],[-160.260565,55.463674],[-160.137032,55.450709],[-160.154038,55.377518],[-160.30655,55.303275],[-160.341217,55.251799],[-160.468262,55.288925],[-160.527617,55.256374],[-160.486511,55.181951],[-160.525226,55.129871],[-160.655577,55.160261],[-160.734942,55.151311],[-160.821381,55.117851],[-160.841917,55.20444],[-160.856621,55.318488]]],[[[-161.078486,58.635577],[-161.056595,58.702202],[-160.918586,58.746935],[-160.700627,58.817368],[-160.679309,58.780226],[-160.880515,58.581325],[-160.961416,58.553723],[-161.07563,58.549916],[-161.078486,58.635577]]],[[[-161.426005,55.216563],[-161.356726,55.221262],[-161.329875,55.219418],[-161.344152,55.158504],[-161.451286,55.178027],[-161.426005,55.216563]]],[[[-161.697129,55.249148],[-161.523434,55.271659],[-161.560207,55.207045],[-161.691553,55.198479],[-161.697129,55.249148]]],[[[-162.844362,54.510428],[-162.585315,54.447995],[-162.34484,54.401336],[-162.388754,54.367623],[-162.46695,54.342692],[-162.608608,54.369147],[-162.760247,54.372193],[-162.861736,54.424771],[-162.844362,54.510428]]],[[[-165.602225,54.045267],[-165.468221,54.079641],[-165.28077,54.115625],[-165.140978,54.131079],[-165.00791,54.134934],[-164.883134,54.196187],[-164.824183,54.225527],[-164.7637,54.223153],[-164.816166,54.158754],[-164.956139,54.060988],[-165.088283,54.072491],[-165.287665,54.038349],[-165.555768,54.023551],[-165.602225,54.045267]]],[[[-166.06155,54.185092],[-165.959751,54.220982],[-165.868192,54.214884],[-165.62555,54.298964],[-165.478452,54.295333],[-165.383719,54.196731],[-165.549217,54.112196],[-165.784434,54.069435],[-165.875129,54.03642],[-165.901649,54.06287],[-166.046438,54.044186],[-166.112242,54.122528],[-166.06155,54.185092]]],[[[-167.430619,60.197006],[-167.317602,60.231541],[-167.112841,60.231482],[-166.93866,60.214704],[-166.842599,60.21047],[-166.813127,60.249768],[-166.835825,60.268751],[-166.713539,60.327341],[-166.616566,60.319221],[-166.548589,60.361856],[-166.490358,60.389466],[-166.371874,60.355156],[-166.241032,60.38882],[-166.149763,60.4367],[-166.103296,60.367321],[-166.03734,60.319456],[-165.883086,60.343368],[-165.67987,60.292435],[-165.722533,60.236468],[-165.683554,60.198335],[-165.723484,60.163824],[-165.666679,60.124304],[-165.709223,60.066003],[-165.633879,60.019597],[-165.532633,59.953425],[-165.582302,59.908242],[-165.706609,59.883564],[-165.769832,59.900495],[-165.856822,59.869728],[-165.982317,59.871637],[-166.084995,59.839649],[-166.084282,59.776059],[-166.190406,59.750206],[-166.272168,59.811455],[-166.36213,59.838604],[-166.512819,59.846425],[-166.665528,59.878168],[-166.795194,59.913185],[-166.939572,59.965483],[-167.06578,59.98796],[-167.225739,60.04088],[-167.333289,60.066626],[-167.343509,60.126287],[-167.430619,60.197006]]],[[[-167.790928,53.33552],[-167.694484,53.388034],[-167.591219,53.393346],[-167.457366,53.442793],[-167.369791,53.450646],[-167.278827,53.478565],[-167.188033,53.524073],[-167.135695,53.551227],[-167.16164,53.605909],[-167.107836,53.633056],[-167.071823,53.66556],[-167.041245,53.707929],[-167.005778,53.755446],[-167.098135,53.799987],[-167.141966,53.826932],[-167.140992,53.866774],[-167.031252,53.945204],[-166.879488,53.988716],[-166.742587,54.015501],[-166.644627,54.014495],[-166.587393,53.959831],[-166.508388,53.923949],[-166.437083,53.955644],[-166.357117,54.002343],[-166.264519,53.97755],[-166.225644,53.986229105084995],[-166.172365,53.998124],[-166.075283,53.969571],[-166.16119973358198,53.93552905940859],[-166.210685,53.915922],[-166.250935,53.876851],[-166.320004,53.869527],[-166.404896,53.809345],[-166.336768,53.78709],[-166.198751,53.8361],[-166.113037,53.853716],[-166.09753,53.826933],[-166.138657,53.731082],[-166.244056,53.710708],[-166.320262,53.674276],[-166.444909,53.640646],[-166.508982,53.5838],[-166.581011,53.530449],[-166.656234,53.487119],[-166.749158,53.440944],[-166.878087,53.429884],[-166.994329,53.429201],[-167.075386,53.424979],[-167.166348,53.412793],[-167.291831,53.364102],[-167.308126,53.33433],[-167.417713,53.329856],[-167.488215,53.269121],[-167.539247,53.277864],[-167.622173,53.250362],[-167.747754,53.273564],[-167.851511,53.308668],[-167.790928,53.33552]]],[[[-168.12893,65.655744],[-167.979889,65.727972],[-167.650051,65.795703],[-167.282753,65.897386],[-166.768944,66.068582],[-166.038082,66.269512],[-165.407204,66.420441],[-164.816093,66.525025],[-164.400724,66.58111],[-164.39594359152198,66.58119763891509],[-163.824166,66.59168],[-163.603956,66.558089],[-163.728308,66.498552],[-163.798687,66.436875],[-163.873106,66.389015],[-163.849163,66.307639],[-163.843108,66.259869],[-163.925152,66.225078],[-163.916551,66.190494],[-163.80358,66.100059],[-163.695394,66.059552],[-163.495845,66.085388],[-163.372072,66.085029],[-163.146726,66.059487],[-162.997473,66.076845],[-162.750705,66.09016],[-162.622284,66.039526],[-162.423726,66.048984],[-162.331284,66.031403],[-162.137424,66.078547],[-161.838018,66.022582],[-161.775537,66.073732],[-161.613943,66.176693],[-161.548429,66.239912],[-161.484539,66.262426],[-161.341189,66.2551],[-161.320778,66.223591],[-161.198971,66.210949],[-160.993965,66.234444],[-161.089161,66.31514],[-161.322126,66.368554],[-161.575413,66.396806],[-161.694404,66.396174],[-161.916309,66.349481],[-161.86369,66.459487],[-161.87488,66.511446],[-162.105641,66.622584],[-162.175398,66.687789],[-162.349774,66.726713],[-162.501415,66.742503],[-162.626696,66.859572],[-162.582856,66.904292],[-162.466702,66.950998],[-162.468441,66.980604],[-162.63547,66.998434],[-162.842979,66.991177],[-163.011676,67.029538],[-163.299266,67.060748],[-163.591216,67.092373],[-163.702045,67.109375],[-163.74082,67.20996],[-163.878781,67.416125],[-164.051288,67.566351],[-164.256634,67.651651],[-164.533937,67.725606],[-165.094228,67.931963],[-165.35005,68.02586],[-165.39652029650296,68.03473051869818],[-165.688137,68.090396],[-165.872088,68.110047],[-165.97497,68.14091],[-166.089453,68.221299],[-166.313138,68.289164],[-166.60089,68.333637],[-166.838969,68.337186],[-166.591802,68.405551],[-166.328459,68.442261],[-166.28312,68.521247],[-166.229761,68.613771],[-166.193421,68.726649],[-166.224187,68.873175],[-165.923734,68.868432],[-165.522358,68.855839],[-164.967542,68.88303],[-164.526887,68.917909],[-164.253157,68.930938],[-163.926999,69.000802],[-163.574034,69.124077],[-163.244656,69.306081],[-163.151351,69.430262],[-163.151261,69.61263],[-163.071903,69.737605],[-162.989084,69.82525],[-162.78808,69.929097],[-162.503572,70.100393],[-162.302314,70.204227],[-161.879266,70.329269],[-161.581911,70.302877],[-161.288197,70.296772],[-160.81279,70.376696],[-160.214828,70.559087],[-159.869172,70.706397],[-159.648383,70.794368],[-159.17181,70.875103],[-159.114972,70.817402],[-158.85342,70.792352],[-158.573913,70.79495],[-158.366302,70.819712],[-158.032397,70.832263],[-157.768452,70.875842],[-157.421001,70.976805],[-157.176077,71.095549],[-156.906165,71.239616],[-156.809653,71.286886],[-156.56865,71.352561],[-156.531124,71.296338],[-156.309908,71.259881],[-156.074411,71.242489],[-156.044615,71.184701],[-155.895105,71.193899],[-155.587702,71.17256],[-155.520737,71.102476],[-155.533347,71.067683],[-155.705487,71.020153],[-155.762068,70.985644],[-155.95205,70.964831],[-155.979264,70.918524],[-155.924955,70.85272],[-155.731842,70.83116],[-155.543031,70.847175],[-155.485915,70.885905],[-155.513293,70.940579],[-155.36416,70.994195],[-155.262602,71.079149],[-155.060764,71.145422],[-154.942864,71.126264],[-154.581129,71.007321],[-154.608314,70.942405],[-154.572458,70.82594],[-154.430229,70.831258],[-154.290317,70.821495],[-154.127487,70.778133],[-153.89048,70.885719],[-153.666363,70.883448],[-153.426265,70.890131],[-153.23848,70.922467],[-153.049207,70.913102],[-152.904243,70.883877],[-152.696868,70.882086],[-152.423534,70.858708],[-152.223053,70.824594],[-152.19246,70.795294],[-152.348417,70.744382],[-152.352196,70.697802],[-152.473348,70.683669],[-152.433781,70.616926],[-152.29669,70.602287],[-152.078663,70.584504],[-151.975785,70.563215],[-151.697258,70.547741],[-151.734287,70.503492],[-151.739862,70.436207],[-151.504417,70.431103],[-151.297598,70.400748],[-151.175187,70.375558],[-151.020441,70.433841],[-150.903765,70.46091],[-150.786327,70.463271],[-150.557415,70.481643],[-150.414358,70.459694],[-150.301516,70.418392],[-150.074461,70.439333],[-149.866698,70.510769],[-149.740188,70.498151],[-149.461755,70.518271],[-149.179148,70.4857],[-148.928979,70.426835],[-148.667017,70.430084],[-148.477044,70.359068],[-148.46615,70.313609],[-148.351437,70.304453],[-148.203477,70.348188],[-147.9615,70.314201],[-147.863719,70.293317],[-147.765104,70.219806],[-147.431532,70.188826],[-147.233327,70.207553],[-147.161601,70.155612],[-146.991109,70.14761],[-146.885771,70.185917],[-146.508133,70.186044],[-146.129579,70.158948],[-146.006411,70.140402],[-145.858297,70.165996],[-145.623306,70.084375],[-145.43483,70.036994],[-145.175073,69.991707],[-144.902304,69.96451],[-144.792614,69.979796],[-144.672305,69.966876],[-144.455421,70.035244],[-144.274904,70.048711],[-143.914244,70.115696],[-143.5173,70.138418],[-143.425199,70.124928],[-143.281878,70.151052],[-142.99979,70.088305],[-142.746807,70.042531],[-142.452927,69.958125],[-142.404366,69.916511],[-142.239873,69.896598],[-142.015641,69.837976],[-141.713369,69.789497],[-141.43084,69.695144],[-141.210456,69.68419],[-141.002672,69.645609],[-141.00260959768698,68.49839100459099],[-141.002465,65.840075],[-141.00246492613797,65.8394210007989],[-141.00202022967997,61.90192202866048],[-141.00184966564296,60.39168800082828],[-141.00184,60.306105],[-140.53509,60.224224],[-140.472292,60.31059],[-139.989142,60.18524],[-139.698361,60.340421],[-139.086669,60.357654],[-139.082246,60.323825],[-139.200346,60.090701],[-139.046426,59.998235],[-138.702053,59.910245],[-138.643422,59.792502],[-138.584819,59.752453],[-137.604277,59.243057],[-137.498558,58.986694],[-137.526424,58.906834],[-137.52529495766598,58.90687226753729],[-137.447383,58.909513],[-137.264752,59.002352],[-136.863896,59.138472],[-136.826633,59.158389],[-136.581521,59.164909],[-136.48788291245395,59.262332415357186],[-136.466815,59.284252],[-136.474326,59.464194],[-136.358141,59.449799],[-136.234229,59.524731],[-136.23734,59.558734],[-136.350622,59.599326],[-136.190352,59.639854],[-135.945905,59.663802],[-135.72179346258997,59.72877903254028],[-135.477436,59.799626],[-135.231148,59.697176],[-135.214344,59.664343],[-135.114588,59.623415],[-135.027456,59.563692],[-135.026328,59.474658],[-135.067356,59.421855],[-135.010033,59.381288],[-135.029245,59.345364],[-134.961972,59.280376],[-134.702383,59.247836],[-134.66407,59.181172],[-134.566689,59.128278],[-134.481241,59.128071],[-134.379771,59.034961],[-134.401042,58.976221],[-134.327982,58.963431],[-134.328964,58.919593],[-134.250526,58.858046],[-133.840392,58.727991],[-133.699835,58.60729],[-133.379908,58.427909],[-133.461475,58.385526],[-133.343725,58.270915],[-133.176444,58.150151],[-133.076421,57.999762],[-132.869318,57.842941],[-132.756813,57.705093],[-132.65527865044697,57.60174461048348],[-132.559178,57.503927],[-132.367984,57.348685],[-132.252187,57.215655],[-132.371312,57.095229],[-132.051044,57.051155],[-132.11892319358697,56.89121697272269],[-132.125934,56.874698],[-131.871725,56.804965],[-131.90176,56.753158],[-131.835133,56.601849],[-131.581221,56.613275],[-131.461806,56.547904],[-131.167925,56.448361],[-131.087433314232,56.40741960071618],[-131.085704,56.40654],[-130.810707,56.371063],[-130.740619,56.342953],[-130.622482,56.267939],[-130.466874,56.239789],[-130.425575,56.140676],[-130.343716,56.127162],[-130.24554,56.096876],[-130.102761,56.116696],[-130.00426,55.993379],[-130.013198,55.916382],[-130.08451,55.823997],[-130.12372,55.80704],[-130.13824416414798,55.76296133152988],[-130.150061,55.727099],[-130.111677,55.682051],[-130.120132,55.563919],[-130.085413,55.491517],[-130.039928,55.429422],[-130.023558,55.338259],[-129.982348,55.302079],[-130.001735,55.264557],[-130.104749,55.188975],[-130.169294,55.105424],[-130.221512,55.02599],[-130.339504,54.921376],[-130.529228,54.8109],[-130.636745,54.778456],[-130.62807,54.739341],[-130.686192,54.71691],[-130.737423,54.753545],[-130.792122,54.784784],[-130.844145,54.765801],[-130.866866,54.769068],[-130.932454,54.806938],[-130.947338,54.886733],[-130.9604,54.933685],[-130.97503,54.974853],[-131.012061,54.996238],[-130.997057,55.044256],[-131.013215,55.090069],[-131.052298,55.11816],[-131.087497,55.163036],[-131.093806,55.191335],[-131.160492,55.197481],[-131.190628,55.108013],[-131.190033,55.043173],[-131.246018,54.989555],[-131.245988,54.940491],[-131.195197,54.919767],[-131.253671,54.866779],[-131.327624,54.859122],[-131.433473,54.896535],[-131.491504,54.930392],[-131.594567,54.93113],[-131.621948,54.946531],[-131.61087324495597,54.98588252108478],[-131.605661,55.004403],[-131.646276,55.035579],[-131.589387,55.08894],[-131.605302,55.107436],[-131.620261271871,55.10964822187079],[-131.748334,55.128588],[-131.828395,55.198482],[-131.862162,55.289284],[-131.854297,55.421074],[-131.844157,55.456742],[-131.971792,55.498279],[-132.114654,55.550623],[-132.183207,55.588128],[-132.20148784904697,55.63884575205138],[-132.224167,55.701766],[-132.265071,55.762174],[-132.130413,55.811419],[-132.067412,55.875078],[-132.170198,55.919231],[-132.279962,55.924839],[-132.323242,55.851878],[-132.397304,55.878867],[-132.449834,55.956186],[-132.492795,56.066436],[-132.594235,56.021858],[-132.708697,56.112124],[-132.718342,56.217704],[-132.843716,56.238933],[-132.877582,56.240322],[-132.926759,56.266188],[-132.961082,56.296167],[-133.029712,56.3157],[-133.070056,56.330951],[-133.0696,56.346323],[-133.060361,56.358378],[-132.977163,56.439673],[-132.896342,56.457978],[-132.791872,56.449169],[-132.627544,56.46287],[-132.528637,56.529269],[-132.45079,56.564098],[-132.529037,56.63797],[-132.542885,56.701905],[-132.54582226332,56.71362123587958],[-132.556758,56.757242],[-132.792089,56.856152],[-132.892388,56.993016],[-132.93752,57.048321],[-133.161448,57.086264],[-133.247414,57.136802],[-133.322359,57.112727],[-133.466932,57.159356],[-133.544817,57.24257],[-133.489738,57.305192],[-133.472039,57.368651],[-133.514964,57.473345],[-133.519598,57.530705],[-133.62076,57.578919],[-133.676449,57.625192],[-133.65453,57.713689],[-133.703097,57.792152],[-133.70880313739897,57.797764483718886],[-133.848776,57.93544],[-134.049603,58.062027],[-134.078155,58.152046],[-134.146685,58.199084],[-134.234572,58.197234],[-134.375579,58.208705],[-134.464635,58.227388],[-134.631203,58.247446],[-134.750586,58.391533],[-134.936897,58.457474],[-135.06423719858296,58.45123226565487],[-135.104413,58.449263],[-135.068437,58.374157],[-135.049062,58.309295],[-135.10121,58.292607],[-135.087872,58.200073],[-135.227736,58.2369],[-135.306507,58.242916],[-135.408059,58.342999],[-135.45583352463998,58.338517835625986],[-135.544213,58.330228],[-135.649861,58.324517],[-135.728054,58.397067],[-135.917917,58.381237],[-136.041818,58.380161],[-136.11193,58.34253],[-136.265906,58.314499],[-136.437152,58.302417],[-136.544776,58.316665],[-136.576799,58.277951],[-136.567956,58.245153],[-136.591924,58.217886],[-136.70125,58.219416],[-136.717093,58.273508],[-136.857605,58.31636],[-136.911713,58.370252],[-136.986384,58.404043],[-137.078109,58.397474],[-137.239366,58.453159],[-137.355328,58.492374],[-137.568216,58.587989],[-137.653709,58.608324],[-137.681633,58.656452],[-137.836448,58.741563],[-137.941828,58.794322],[-137.938546754526,58.803774349767075],[-137.924608,58.843928],[-137.951995,58.886029],[-138.066332,58.957126],[-138.224323,59.032216],[-138.357909,59.069394],[-138.636702,59.130585],[-138.807186,59.208772],[-138.919749,59.248531],[-139.07148,59.28715],[-139.271031,59.337421],[-139.420168,59.37976],[-139.632896,59.459906],[-139.861306,59.546678],[-139.74266,59.623871],[-139.585789,59.642765],[-139.588777,59.708968],[-139.608545,59.821961],[-139.776836,59.833835],[-139.871222,59.802611],[-140.080423,59.756299],[-140.176224,59.735965],[-140.242577,59.687888],[-140.4119,59.699649],[-140.792511,59.728573],[-140.922635,59.751687],[-141.156497,59.813582],[-141.392811,59.870028],[-141.485207,59.925024],[-141.595376,59.961905],[-141.73624,59.961905],[-141.912218,60.009779],[-142.062454,60.023781],[-142.426572,60.071066],[-142.744868,60.09413],[-142.908859,60.090328],[-143.0687,60.068603],[-143.267818,60.058655],[-143.624152,60.037257],[-143.781649,60.010354],[-143.885431593397,59.988392171256784],[-143.897029,59.985938],[-144.005879,60.012981],[-144.052539,60.041759],[-144.1103,60.098939],[-144.186745,60.116967],[-144.348913,60.091184],[-144.429249,60.14802],[-144.555093,60.178485],[-144.654899,60.204882],[-144.929327,60.228253],[-144.957848,60.288152],[-145.089139,60.320014],[-145.136728,60.296219],[-145.254749,60.311448],[-145.380064,60.352829],[-145.51081,60.318296],[-145.639204,60.301971],[-145.831202,60.350293],[-145.988546,60.387427],[-146.088134,60.364987],[-146.197229,60.348294],[-146.232681,60.338851],[-146.393256,60.327476],[-146.490804,60.294939],[-146.607692,60.241182],[-146.650852,60.242982],[-146.694034,60.279608],[-146.916487,60.290973],[-146.993353,60.24008],[-147.145205,60.171321],[-147.257795,60.107883],[-147.376397,60.016192],[-147.339794,59.962102],[-147.452217,59.954011],[-147.470281,59.906732],[-147.391846,59.87776],[-147.508309,59.841957],[-147.646045,59.817828],[-147.765122,59.795954],[-147.876475,59.763893],[-147.92924,59.783875],[-147.913316,59.837181],[-147.855084,59.871915],[-147.956775,59.9594],[-148.101239,59.952794],[-148.25406,59.932357],[-148.220554,59.97635],[-148.313962,60.033859],[-148.401666,59.977836],[-148.478881,59.935806],[-148.634777,59.915747],[-148.68591911504097,59.94280832785479],[-148.689496,59.944701],[-148.801325,59.952794],[-148.859556,59.924398],[-148.936406,59.953429],[-149.036467,59.942137],[-149.123262,59.968559],[-149.221067,59.938748],[-149.270623,59.872067],[-149.376593,59.835879],[-149.472227,59.903693],[-149.572714,59.852317],[-149.595531,59.79772],[-149.506758,59.770927],[-149.527793,59.706846],[-149.626311,59.73441],[-149.731966,59.706783],[-149.74622,59.637585],[-149.842672,59.7013],[-149.919444,59.691836],[-150.002337,59.630563],[-150.133747,59.556786],[-150.280838,59.466833],[-150.297108,59.424747],[-150.358992,59.399684],[-150.385341,59.341963],[-150.430144,59.343357],[-150.477717,59.422111],[-150.4989,59.456298],[-150.581182,59.445233],[-150.609488,59.386314],[-150.680872,59.305412],[-150.721799,59.292087],[-150.822768,59.330763],[-150.912817,59.305214],[-150.887821,59.26792],[-150.942212,59.233136],[-151.001196,59.224149],[-151.126247,59.209923],[-151.287771,59.219417],[-151.341601,59.222231],[-151.470623,59.242621],[-151.43339,59.135517],[-151.662368,59.089735],[-151.858124,59.144234],[-151.915684,59.227522],[-151.984101,59.278696],[-151.96313,59.344958],[-151.886513,59.421033],[-151.742915,59.468286],[-151.516339,59.52352],[-151.327803,59.573047],[-151.205459,59.630284],[-151.296895,59.696861],[-151.448669,59.648171],[-151.643061,59.646966],[-151.746815,59.686234],[-151.869468,59.769159],[-151.813619,59.844297],[-151.757693,59.917637],[-151.71801,60.009473],[-151.606881,60.099558],[-151.421702,60.212931],[-151.381959,60.296951],[-151.366874,60.372655],[-151.30609,60.387257],[-151.28181,60.496034],[-151.303125,60.561326],[-151.350154,60.63466],[-151.410273,60.711023],[-151.370515,60.733572],[-151.261319,60.769801],[-151.062558,60.787429],[-150.895508,60.853166],[-150.705812,60.937792],[-150.501923,61.007957],[-150.401859,61.036227],[-150.341709,61.024201],[-150.194128,60.90134],[-150.109276,60.890357],[-149.985374,60.879033],[-149.900135,60.940043],[-149.853693,60.967395],[-149.753183946415,60.99971962333039],[-149.717167,61.011303],[-149.831922,61.076197],[-150.005041,61.138556],[-150.065646,61.151079],[-150.265894,61.127365],[-150.228774,61.162581],[-150.22015374698398,61.19758435319138],[-150.204894,61.259548],[-150.425,61.245552],[-150.535997,61.269724],[-150.679902,61.265888],[-150.827295,61.22839],[-150.939251,61.210299],[-150.97184335367095,61.19545496070848],[-151.047736,61.16089],[-151.121692,61.083574],[-151.166606,61.046404],[-151.252384,61.039968],[-151.349004,61.010004],[-151.4803,61.010902],[-151.600126,60.965589],[-151.720815,60.904257],[-151.800264,60.853672],[-151.77731,60.810461],[-151.703802,60.732376],[-151.716379,60.710415],[-151.89792,60.72175],[-152.039381,60.660517],[-152.13616,60.578475],[-152.261497,60.538237],[-152.331365,60.473525],[-152.30195,60.414328],[-152.234199,60.393888],[-152.376743,60.345613],[-152.411281,60.287864],[-152.539843,60.241644],[-152.574938,60.206451],[-152.57873,60.16987],[-152.550177,60.113715],[-152.575153,60.04826],[-152.679402,59.968054],[-152.700822,59.920309],[-152.860867,59.875033],[-152.967267,59.881494],[-153.009084,59.830643],[-153.016353,59.751127],[-153.051559,59.691562],[-153.155019,59.654344],[-153.240018,59.632426],[-153.308837,59.625706],[-153.409422,59.636328],[-153.542466,59.630236],[-153.553163,59.597046],[-153.577828,59.555991],[-153.684925,59.552865],[-153.76148,59.543411],[-153.699025,59.463603],[-153.747201,59.429657],[-153.862199,59.424124],[-153.925307,59.405254],[-153.998506,59.384723],[-154.030807,59.32704],[-154.122681,59.287622],[-154.141192,59.216598],[-154.172944,59.172496],[-154.180691,59.123235],[-154.063489,59.07214],[-153.932824,59.062677],[-153.793972,59.071416],[-153.695664,59.073994],[-153.596489,59.000192],[-153.479939,58.995286],[-153.393101,58.951097],[-153.322843,58.907849],[-153.267407,58.867218],[-153.29739542924597,58.85370229945068],[-153.369389,58.821255],[-153.402472,58.742607],[-153.445002,58.70931],[-153.55265,58.687176],[-153.591635,58.640084],[-153.731019,58.608224],[-153.851432,58.611872],[-153.909994,58.561213],[-153.930473,58.497482],[-154.001918,58.492346],[-154.07066,58.440018],[-153.985416,58.390877],[-154.074145,58.352661],[-154.103412,58.280161],[-154.145277,58.210931],[-154.222465,58.132566],[-154.340449,58.090921],[-154.477979,58.052379],[-154.581547,58.019285],[-154.765287,58.00371],[-154.876559,58.027722],[-155.026275,57.999302],[-155.118648,57.953925],[-155.061806,57.90433],[-155.097095,57.865356],[-155.272917,57.823981],[-155.285339,57.758726],[-155.354011,57.715261],[-155.506533,57.76097],[-155.609353,57.777699],[-155.615203,57.688074],[-155.629912,57.656376],[-155.724167,57.633445],[-155.732779,57.549732],[-155.915261,57.535331],[-156.046804,57.525724],[-156.012841,57.451394],[-156.091668,57.439829],[-156.220105,57.445295],[-156.362039,57.400474],[-156.336427,57.336081],[-156.342943,57.248056],[-156.334404,57.1823],[-156.37428730155398,57.15925012072409],[-156.44301,57.119533],[-156.479111,57.068395],[-156.55052,56.98461],[-156.63784,56.993905],[-156.704216,56.987079],[-156.825982,56.897667],[-156.935629,56.920087],[-157.034624,56.884487],[-157.073453,56.838345],[-157.183636,56.769079],[-157.290511,56.804713],[-157.411488,56.778351],[-157.530765,56.753775],[-157.563802,56.703426],[-157.45216,56.64322],[-157.496523,56.616897],[-157.605231,56.621315],[-157.674587,56.609507],[-157.719048,56.653084],[-157.791844,56.670692],[-157.918541,56.643137],[-157.869897,56.566837],[-157.817826,56.51421],[-157.869124,56.456612],[-157.971711,56.476737],[-158.12744,56.460805],[-158.246144,56.466124],[-158.284699,56.481089],[-158.371953,56.467334],[-158.438414,56.427471],[-158.489546,56.341865],[-158.415095,56.336228],[-158.288369,56.316089],[-158.207387,56.294354],[-158.117797,56.230742],[-158.283191,56.173212],[-158.374324,56.134522],[-158.394922,56.064721],[-158.431471,55.994452],[-158.50984,55.979617],[-158.638211,55.994743],[-158.653214,55.958615],[-158.74856,55.959365],[-158.898116,55.951041],[-159.096187,55.91475],[-159.086217,55.834869],[-159.394595,55.714944],[-159.532754,55.676424],[-159.564401971435,55.63724485474748],[-159.572125,55.627684],[-159.696713,55.573306],[-159.733899,55.569985],[-159.760365,55.615203],[-159.679201,55.655895],[-159.673191,55.750961],[-159.627482,55.803248],[-159.679792,55.838765],[-159.770298,55.852357],[-159.847359,55.80253],[-159.937089,55.803306],[-160.026282,55.792295],[-160.058443,55.721734],[-160.130445,55.681419],[-160.279827,55.641384],[-160.392587,55.602771],[-160.464301,55.533243],[-160.462745,55.506654],[-160.521335,55.47442],[-160.654117,55.512596],[-160.666917,55.459776],[-160.781401,55.45178],[-160.836725,55.473135],[-160.976551,55.472736],[-161.080549,55.408498],[-161.253977,55.355896],[-161.486114,55.359322],[-161.514211,55.385254],[-161.478303,55.4406],[-161.469271,55.49683],[-161.376102,55.569794],[-161.392613,55.628221],[-161.482064,55.633979],[-161.587047,55.62006],[-161.658262,55.560447],[-161.700069,55.51439],[-161.686495,55.408041],[-161.777414,55.329377],[-161.863339,55.266989],[-161.817232,55.176529],[-161.718614,55.154166],[-161.576643,55.103831],[-161.550357,55.065734],[-161.690346,55.0785],[-161.792297,55.052278],[-161.906434,55.10032],[-161.956595,55.112174],[-162.053281,55.074212],[-162.11874,55.102911],[-162.190348,55.066981],[-162.219326,55.028975],[-162.235675,54.962601],[-162.236806,54.88163],[-162.282944,54.841216],[-162.349315,54.836049],[-162.428237,54.895434],[-162.435473,54.929249],[-162.41351,55.03656],[-162.471364,55.051932],[-162.569291,55.004599],[-162.587967,54.97201],[-162.708453,54.95848],[-162.834245,54.926851],[-162.913684,54.950273],[-162.962205,54.993538],[-163.065602,54.926172],[-163.14958,54.885906],[-163.254588,54.838907],[-163.352997,54.810174],[-163.281379,54.77673],[-163.184295,54.774912],[-163.068952,54.712605],[-163.037788,54.646995],[-163.223179,54.676895],[-163.392198,54.658496],[-163.572383,54.623211],[-163.80359,54.636498],[-164.03827,54.624688],[-164.257585,54.572722],[-164.337538,54.524259],[-164.352704,54.465023],[-164.456554,54.419856],[-164.640457,54.391166],[-164.743977,54.394216],[-164.861475,54.431353],[-164.904077,54.499195],[-164.944636,54.532903],[-164.948789,54.579877],[-164.864333,54.620188],[-164.741815,54.645441],[-164.674836,54.702596],[-164.576896,54.824564],[-164.57626,54.895342],[-164.43528,54.933126],[-164.343534,54.894139],[-164.204897,54.93124],[-164.119196,54.969416],[-163.994179,54.983315],[-163.894695,55.039115],[-163.774093,55.05578],[-163.527109,55.040871],[-163.429548,54.954759],[-163.343768,54.974439],[-163.280771,55.032959],[-163.314652,55.126312],[-163.132007,55.179629],[-163.032256,55.172147],[-162.86152,55.198339],[-162.900027,55.252466],[-162.813255,55.299458],[-162.64165,55.392576],[-162.565411,55.466849],[-162.365467,55.604586],[-162.219551,55.710867],[-162.120886,55.749089],[-162.05063,55.790897],[-161.898956,55.833464],[-161.807833,55.891954],[-161.712283,55.904232],[-161.450442,55.954485],[-161.15687,56.012216],[-160.964744,56.023754],[-160.807119,56.02398],[-160.811041,55.94723],[-160.793215,55.88596],[-160.564014,55.863719],[-160.508433,55.869379],[-160.457194,55.917233],[-160.533685,55.95995],[-160.589569,55.983048],[-160.488708,56.077214],[-160.405869,56.207938],[-160.385922,56.279706],[-160.222878,56.346868],[-160.146252,56.400176],[-159.985615,56.449743],[-159.828049,56.543935],[-159.534961,56.626529],[-159.219956,56.73953],[-158.972735,56.842138],[-158.89320784818497,56.809167533379984],[-158.853294,56.79262],[-158.744534,56.795112],[-158.656355,56.810012],[-158.646812,56.846992],[-158.686184,56.911555],[-158.679293,56.988625],[-158.531328,57.132156],[-158.32018,57.281558],[-158.229883,57.321534],[-158.083785,57.357181],[-157.931624,57.476208],[-157.772496,57.547055],[-157.678891,57.563888],[-157.684282,57.609974],[-157.709179,57.657459],[-157.683349,57.753695],[-157.642226,57.868777],[-157.596601,58.08867],[-157.556556,58.148445],[-157.48013,58.217354],[-157.547209,58.277535],[-157.541041,58.377302],[-157.481487,58.480771],[-157.313572,58.565043],[-157.24485909580898,58.609791],[-157.135927,58.680731],[-157.06223,58.740187],[-156.993548,58.836798],[-157.016088,58.86349],[-157.116866,58.867533],[-157.15324823205194,58.85920839833087],[-157.388651,58.805346],[-157.572524,58.750839],[-157.777937,58.703288],[-158.140307,58.61502],[-158.232276,58.619902],[-158.332093,58.665313],[-158.376873,58.748043],[-158.423828,58.769847],[-158.564833,58.802715],[-158.520327,58.857105],[-158.619684,58.911048],[-158.767748,58.864264],[-158.790378,58.804712],[-158.780136,58.75379],[-158.861207,58.69558],[-158.827852,58.626432],[-158.704052,58.482759],[-158.795316,58.408032],[-158.880927,58.39067],[-159.063346,58.423139],[-159.228398,58.603047],[-159.409779,58.773611],[-159.532347,58.833609],[-159.643549,58.845063],[-159.601899,58.884671],[-159.61612,58.931601],[-159.712114,58.929468],[-159.748183,58.875827],[-159.792923,58.823971],[-159.908386,58.779903],[-159.979344,58.835535],[-160.150528,58.866062],[-160.232788,58.901127],[-160.322922,58.953953],[-160.256592,58.99448],[-160.31778,59.070477],[-160.516426,59.01124],[-160.730971,58.921186],[-160.823489,58.829136],[-160.872003,58.878472],[-161.001101,58.849693],[-161.03450951839997,58.838808201815084],[-161.08615609474398,58.82198127900158],[-161.221942,58.777741],[-161.337982,58.742912],[-161.341328838373,58.73543103831018],[-161.372314,58.666172],[-161.550537,58.61116],[-161.751999,58.551842],[-161.802156,58.612318],[-162.027363,58.60705],[-162.171722,58.648441],[-161.994644,58.688828],[-161.824107,58.734549],[-161.764791,58.846235],[-161.804034,58.991717],[-161.910267,59.093503],[-161.996859,59.174126],[-162.048584,59.254177],[-161.992903,59.338385],[-161.848988,59.432494],[-161.790375,59.468197],[-161.70253,59.490906],[-161.772979,59.566243],[-161.873944,59.649487],[-161.88552,59.69839],[-162.046547,59.849688],[-162.108772,59.920107],[-162.143049,59.967506],[-162.228371,60.056313],[-162.37224,60.167009],[-162.45128,60.174367],[-162.49418,60.130271],[-162.495608,60.078949],[-162.487649,60.028082],[-162.515276,59.976183],[-162.622569,59.971809],[-162.737447,59.972254],[-162.808513,59.933933],[-162.929135,59.908054],[-163.172633,59.845058],[-163.458092,59.809958],[-163.772229,59.795624],[-163.930798,59.803853],[-164.133393,59.845612],[-164.208475,59.934461],[-164.178705,59.96181],[-164.13181,59.991177],[-164.272808,60.046194],[-164.411016,60.097675],[-164.517647,60.199493],[-164.619501,60.234938],[-164.698889,60.296298],[-164.777233,60.293833],[-164.984527,60.349929],[-165.129403,60.433707],[-165.069693,60.460893],[-165.015155,60.471414],[-164.956788,60.527837],[-164.986952,60.542406],[-165.093939,60.531862],[-165.190449,60.498001],[-165.274867,60.499021],[-165.362975,60.506866],[-165.420349,60.550692],[-165.367676,60.581158],[-165.206433,60.610227],[-165.073091,60.684217],[-164.991665,60.69884],[-165.010452,60.744789],[-165.040843,60.77266],[-165.030183,60.83805],[-165.08509,60.913763],[-165.10849499277896,60.926575398622894],[-165.194945,60.9739],[-165.133937,61.01125],[-165.057842,61.059746],[-165.139403,61.092946],[-165.203757,61.150341],[-165.325552,61.169306],[-165.385437,61.079574],[-165.459236,61.083424],[-165.55514,61.092674],[-165.640289,61.138066],[-165.63288,61.227965],[-165.623317,61.278431],[-165.787442,61.310063],[-165.831365,61.306719],[-165.921194,61.40308],[-165.877104,61.431149],[-165.791085,61.449852],[-165.746352,61.489304],[-165.865668,61.535046],[-165.912496,61.5562],[-165.999535,61.53972],[-166.075398,61.49298],[-166.149577,61.513288],[-166.211787,61.608373],[-166.143757,61.724352],[-166.050997,61.766689],[-166.094312,61.813859],[-165.940864,61.84908],[-165.803979,61.825685],[-165.639516,61.847006],[-165.650103,61.874153],[-165.743528,61.962533],[-165.754295,62.055955],[-165.672037,62.13989],[-165.458499,62.282847],[-165.26927,62.427352],[-165.096155,62.522452],[-165.052202,62.598217],[-164.962432,62.658246],[-164.837703,62.685267],[-164.864367,62.752042],[-164.87564,62.806254],[-164.813007,62.903919],[-164.685213,63.022191],[-164.607425,63.112899],[-164.442368,63.202672],[-164.209475,63.251472],[-164.066991,63.262276],[-163.885059,63.222308],[-163.73265,63.213257],[-163.616272,63.141213],[-163.529938,63.1354],[-163.316203,63.037763],[-163.053996,63.058334],[-162.919727,63.120153],[-162.844559,63.154191],[-162.821122,63.205596],[-162.72408,63.214615],[-162.59665194674793,63.28038731501158],[-162.526588,63.316551],[-162.42153,63.409014],[-162.352274,63.454069],[-162.562007,63.537105],[-162.707559,63.577607],[-162.587527,63.625115],[-162.401203,63.634367],[-162.252411,63.541753],[-162.073156,63.513768],[-161.982168,63.446313],[-161.676526,63.465003],[-161.421085,63.46015],[-161.191163,63.490072],[-161.073573,63.5617],[-160.783304,63.752893],[-160.76562,63.828714],[-160.900464,63.99834],[-160.941096,64.066319],[-160.962007,64.220575],[-161.177712,64.343541],[-161.263519,64.398166],[-161.504903,64.423074],[-161.469046,64.506575],[-161.389879,64.547833],[-161.198029,64.496626],[-160.992894,64.541295],[-160.793356,64.619317],[-160.783398,64.71716],[-160.935974,64.82237],[-161.079718,64.869549],[-161.133062,64.898219],[-161.213756,64.883324],[-161.327848,64.829836],[-161.376985,64.773036],[-161.518211,64.75325],[-161.64552,64.776452],[-161.772978,64.749258],[-161.878363,64.709476],[-162.060291,64.692872],[-162.188146,64.672395],[-162.234477,64.619336],[-162.539996,64.530931],[-162.603236,64.479904],[-162.632242,64.385734],[-162.768424,64.333516],[-162.83654,64.436702],[-162.857562,64.49978],[-162.940776,64.542417],[-163.033231,64.519314],[-163.027158,64.477945],[-163.091486,64.437736],[-163.133172,64.381844],[-163.249092,64.456223],[-163.4129,64.524986],[-163.686337,64.568798],[-163.829739,64.574965],[-163.974352,64.55137],[-164.147059,64.564552],[-164.307273,64.561488],[-164.548298,64.516738],[-164.807747,64.449432],[-165.001961,64.433917],[-165.291644,64.480731],[-165.819595,64.540171],[-166.236939,64.583558],[-166.413926,64.651229],[-166.482682,64.755101],[-166.478978,64.797036],[-166.407315,64.852281],[-166.432246,64.88316],[-166.586066,64.955712],[-166.697808,64.991201],[-166.73725,65.027526],[-166.911922,65.125965],[-166.886677,65.138763],[-166.634449,65.125873],[-166.479913,65.167249],[-166.451711,65.236178],[-166.347189,65.276341],[-166.439404,65.319058],[-166.596964,65.336246],[-166.750702,65.333172],[-166.899681,65.360642],[-167.067707,65.385117],[-167.348739,65.397891],[-167.474024,65.412744],[-167.684378,65.489079],[-167.851234,65.538181],[-168.04762,65.569149],[-168.12893,65.655744]]],[[[-169.28652,52.784747],[-169.044466,52.893927],[-168.95946,52.936739],[-168.861061,53.016384],[-168.785236,53.045038],[-168.804901,53.120015],[-168.763331,53.182812],[-168.581891,53.286521],[-168.445083,53.26533],[-168.420521,53.322743],[-168.395355,53.397776],[-168.342127,53.475992],[-168.238321,53.521902],[-168.027006,53.562755],[-167.914669,53.522716],[-167.789164,53.519329],[-167.808117,53.473861],[-167.856837,53.428609],[-167.842328,53.386489],[-167.959096,53.341788],[-168.092011,53.28827],[-168.296229,53.227235],[-168.343075,53.170553],[-168.412522,53.110683],[-168.457103,53.055839],[-168.613964,53.008776],[-168.688468,52.9664],[-168.755531,52.907507],[-168.851017,52.90804],[-169.005038,52.829992],[-169.170371,52.776663],[-169.261765,52.754897],[-169.28652,52.784747]]],[[[-169.81831,56.633612],[-169.613691,56.622761],[-169.474322,56.625183],[-169.453786,56.583786],[-169.582624,56.536939],[-169.685825,56.539717],[-169.81831,56.633612]]],[[[-170.170683,52.784918],[-170.092221,52.919387],[-170.026342,52.944912],[-169.857567,52.908533],[-169.76274,52.97805],[-169.820198,53.06679],[-169.747457,53.0932],[-169.680033,53.035075],[-169.662385,52.951752],[-169.666512,52.864349],[-169.703873,52.777117],[-169.818548,52.791577],[-169.951498,52.788615],[-170.077734,52.720416],[-170.207887,52.708899],[-170.170683,52.784918]]],[[[-170.420047,57.212917],[-170.303091,57.238029],[-170.143996,57.242804],[-170.133884,57.181329],[-170.286318,57.128169],[-170.421867,57.161202],[-170.420047,57.212917]]],[[[-170.817943,52.636275],[-170.671545,52.698082],[-170.532144,52.679971],[-170.58496,52.587186],[-170.685914,52.581228],[-170.788495,52.54024],[-170.841936,52.558171],[-170.817943,52.636275]]],[[[-171.312658,52.493502],[-171.256768,52.52858],[-171.196013,52.500106],[-171.226729,52.434269],[-171.30417,52.449952],[-171.312658,52.493502]]],[[[-171.83683,63.564883],[-171.791881,63.620625],[-171.802824,63.716391],[-171.743398,63.782971],[-171.613182,63.785065],[-171.58305,63.715557],[-171.552856,63.666251],[-171.309333,63.621085],[-170.950817,63.570127],[-170.859032,63.587503],[-170.606282,63.672732],[-170.488192,63.696723],[-170.344855,63.694225],[-170.26748,63.675816],[-170.176413,63.625489],[-170.095833,63.612701],[-170.048963,63.537958],[-170.007943,63.475428],[-169.857078,63.441975],[-169.656474,63.429929],[-169.566562,63.388725],[-169.462733,63.360458],[-169.087914,63.340937],[-168.937385,63.333789],[-168.685145,63.296427],[-168.751537,63.217962],[-168.841654,63.153844],[-168.93915,63.137653],[-169.07503,63.177689],[-169.230523,63.172948],[-169.436748,63.113579],[-169.534984,63.074355],[-169.576965,63.027025],[-169.568016,62.976879],[-169.638309,62.937527],[-169.757249,62.960087],[-169.788466,63.043015],[-169.88123,63.105848],[-170.049622,63.163377],[-170.186485,63.181618],[-170.263032,63.179147],[-170.30363,63.238692],[-170.430656,63.314284],[-170.663536,63.376109],[-170.896167,63.417745],[-171.067663,63.424579],[-171.226326,63.395108],[-171.285411,63.366464],[-171.433319,63.307578],[-171.528084,63.324933],[-171.667115,63.356166],[-171.760112,63.381633],[-171.849984,63.485039],[-171.83683,63.564883]]],[[[-172.612274,52.306828],[-172.545116,52.357863],[-172.448182,52.391439],[-172.326444,52.366472],[-172.301445,52.329951],[-172.414419,52.27674],[-172.528095,52.254336],[-172.639992,52.244765],[-172.612274,52.306828]]],[[[-173.074642,60.704657],[-172.912636,60.604129],[-172.847344,60.516742],[-172.545912,60.412225],[-172.380946,60.382764],[-172.238862,60.336642],[-172.254263,60.297375],[-172.416534,60.314347],[-172.630272,60.334922],[-172.895998,60.450587],[-173.0638,60.502589],[-173.115569,60.658971],[-173.074642,60.704657]]],[[[-175.301556,52.055602],[-175.031213,52.092109],[-174.887242,52.128602],[-174.715205,52.127375],[-174.55467,52.160405],[-174.462962,52.213031],[-174.455979,52.31369],[-174.329818,52.373548],[-174.185347,52.417788],[-174.068248,52.390331],[-173.985203,52.3176],[-174.046994,52.236262],[-174.022638,52.133713],[-173.899966,52.139949],[-173.654404,52.146192],[-173.529923,52.159364],[-173.375229,52.108228],[-173.174403,52.126278],[-172.947811,52.107371],[-172.980222,52.064049],[-173.169557,52.04385],[-173.39397,52.028674],[-173.513047,52.02531],[-173.695316,52.055319],[-173.820692,52.043312],[-173.901075,52.049435],[-174.099836,52.072078],[-174.278279,52.089489],[-174.382661,52.081658],[-174.408693,52.012811],[-174.556278,52.036733],[-174.736592,52.007308],[-174.892306,52.019687],[-175.014807,52.007],[-175.155673,52.011512],[-175.323322,52.007488],[-175.301556,52.055602]]],[[[-176.950128,51.686719],[-176.917088,51.797016],[-176.781889,51.832373],[-176.762478,51.867878],[-176.810433,51.927089],[-176.774023,51.965895],[-176.698771,51.964454],[-176.579975,52.003238],[-176.549119,51.955561],[-176.554661,51.909834],[-176.576381,51.842275],[-176.431673,51.861169],[-176.311573,51.872463],[-176.173871,51.882449],[-176.168643,51.948025],[-176.183023,51.998904],[-176.211188,52.064706],[-176.14951,52.11757],[-176.055983,52.109469],[-176.007589,52.066228],[-175.887514,51.995142],[-175.807848,51.989665],[-175.664274,51.993862],[-175.45047,52.012742],[-175.424859,51.972332],[-175.639739,51.933645],[-175.789118,51.919323],[-175.963041,51.846253],[-175.998464,51.801542],[-176.158185,51.768901],[-176.289921,51.741678],[-176.46705,51.726668],[-176.543948,51.698719],[-176.656005,51.658306],[-176.715424,51.620422],[-176.809,51.616235],[-176.938917,51.590982],[-176.987383,51.606872],[-176.950128,51.686719]]],[[[-177.670119,51.743381],[-177.492124,51.770306],[-177.313149,51.778223],[-177.228177,51.803783],[-177.199539,51.910239],[-177.181271,51.943167],[-177.099266,51.936119],[-177.04509,51.898605],[-177.098661,51.829647],[-177.105188,51.719333],[-177.18994,51.697217],[-177.275121,51.68051],[-177.34801,51.696513],[-177.483959,51.682278],[-177.651386,51.653604],[-177.707802,51.703268],[-177.670119,51.743381]]],[[[-178.19709,51.905464],[-178.090632,51.919399],[-177.952094,51.915348],[-177.887423,51.85089],[-177.757429,51.847042],[-177.615311,51.85508],[-177.649278,51.801851],[-177.755022,51.772834],[-177.827524,51.712086],[-177.86796,51.679374],[-177.909185,51.596671],[-178.04566,51.630062],[-178.117864,51.677831],[-178.054798,51.704768],[-177.98163,51.715617],[-177.995272,51.781535],[-178.086074,51.808047],[-178.224129,51.864881],[-178.19709,51.905464]]],[[[-178.889347,51.570352],[-178.678149,51.62601],[-178.551475,51.610175],[-178.584789,51.56386],[-178.734585,51.542326],[-178.825956,51.547085],[-178.889347,51.570352]]],[[[-178.876843,51.837917],[-178.779657,51.851547],[-178.733355,51.783947],[-178.792409,51.746071],[-178.895958,51.779219],[-178.876843,51.837917]]],[[[-179.174265,51.279057],[-178.995591,51.414484],[-178.926874,51.38364],[-178.908883,51.340582],[-179.07232,51.250963],[-179.126856,51.219862],[-179.174265,51.279057]]]]}},
+{"type":"Feature","properties":{"name":"California","income":{"1995":36767,"1996":38691,"1997":39595,"1998":41003,"1999":43924,"2000":46836,"2001":47064,"2002":47323,"2003":48440,"2004":49894,"2005":53627,"2006":56646,"2007":59928,"2008":61017,"2009":58925,"2010":57664,"2011":57275,"2012":58322,"2013":60185,"2014":61927,"2015":64483}},"geometry":{"type":"MultiPolygon","coordinates":[[[[-118.593969,33.467198],[-118.484785,33.487483],[-118.370323,33.409285],[-118.286261,33.351463],[-118.325244,33.299075],[-118.374768,33.320065],[-118.465368,33.326056],[-118.482609,33.369914],[-118.563442,33.434381],[-118.593969,33.467198]]],[[[-118.594033,33.035951],[-118.540069,32.980933],[-118.446771,32.895424],[-118.353504,32.821962],[-118.425634,32.800595],[-118.487908,32.84459],[-118.581513,32.931672],[-118.641578,33.017129],[-118.594033,33.035951]]],[[[-119.578942,33.278628],[-119.510489,33.307269],[-119.427171,33.266023],[-119.429559,33.228167],[-119.464725,33.215432],[-119.545872,33.233406],[-119.578942,33.278628]]],[[[-119.916216,34.058351],[-119.857304,34.071298],[-119.739472,34.049299],[-119.5667,34.053452],[-119.47073665694398,34.053996622103995],[-119.442654,34.054156],[-119.364214,34.050794],[-119.363065,34.000548],[-119.391587,33.994636],[-119.48771955738198,33.996515154389286],[-119.554472,33.99782],[-119.662825,33.985889],[-119.721206,33.959583],[-119.795938,33.962929],[-119.873358,33.980375],[-119.876916,34.023527],[-119.916216,34.058351]]],[[[-120.368278,34.076465],[-120.24248,34.057172],[-120.135853,34.026087],[-120.055107,34.037729],[-119.984316,33.983948],[-119.973691,33.942481],[-120.049682,33.914563],[-120.121817,33.895712],[-120.179049,33.927994],[-120.200085,33.956904],[-120.36484,33.991781],[-120.454134,34.028081],[-120.368278,34.076465]]],[[[-124.387023,40.504954],[-124.301355,40.659643],[-124.176715,40.843618],[-124.118147,40.989263],[-124.125448,41.048504],[-124.154513,41.087159],[-124.163988,41.138675],[-124.122677,41.189726],[-124.092284,41.287695],[-124.063076,41.439579],[-124.06747365942198,41.46473618849088],[-124.081987,41.547761],[-124.116037,41.628849],[-124.143479,41.709284],[-124.154246,41.728801],[-124.19104,41.736079],[-124.245027,41.7923],[-124.219592,41.846432],[-124.203402,41.940964],[-124.211605,41.99846],[-124.001188,41.996146],[-123.82203759858797,41.995620816946996],[-123.656998,41.995137],[-123.51911283680398,41.999172518032886],[-123.43477,42.001641],[-123.347562,41.999108],[-123.23100126057798,42.00497006225599],[-123.145959,42.009247],[-123.045254,42.003049],[-122.80008,42.004071],[-122.501135,42.00846],[-122.289749096157,42.00776473049658],[-122.289527,42.007764],[-122.101922,42.005766],[-121.846712,42.00307],[-121.675348,42.000351],[-121.44753999804797,41.99719003327258],[-121.43961,41.99708],[-121.251099,41.99757],[-121.035195,41.993323],[-120.87992571023597,41.993483259984885],[-120.692219,41.993677],[-120.501069,41.993785],[-120.181563,41.994588],[-119.999168,41.99454],[-119.999276,41.874891],[-119.99828,41.618765],[-119.999866,41.183974],[-119.999231,40.865899],[-119.997533,40.720992],[-119.996155,40.32125],[-119.997124,40.126363],[-119.997634,39.956505],[-119.99993544808497,39.72240692472418],[-120.00174,39.538852],[-120.00302891965698,39.44504577616049],[-120.00479551230397,39.31647501195848],[-120.005142,39.291258],[-120.00336402883298,39.16562676406879],[-120.00261484291299,39.11268937409578],[-120.00197525086698,39.06749587446829],[-120.001014,38.999574],[-119.904315,38.933324],[-119.587679,38.714734],[-119.58540614483898,38.713150900671195],[-119.32870452107596,38.534351927797495],[-119.279262,38.499914],[-119.157226100872,38.41439197176128],[-118.949673,38.26894],[-118.500958,37.949019],[-118.42799532515699,37.896224280909784],[-118.022181,37.602583],[-117.83350404414396,37.46493876624449],[-117.68061,37.353399],[-117.244917,37.030244],[-117.166000564031,36.97120753859029],[-117.000895,36.847694],[-116.488233,36.459097],[-116.375875,36.372562],[-116.093601,36.155805],[-115.892975,35.999967],[-115.84611392276199,35.96355267311089],[-115.64803201962498,35.80962921260289],[-115.647683,35.809358],[-115.404537,35.617605],[-115.303743,35.538207],[-115.160068,35.424129],[-115.043812,35.332012],[-114.804249,35.139689],[-114.633487,35.001857],[-114.629769,34.94304],[-114.634382,34.87289],[-114.576452,34.8153],[-114.490971,34.724848],[-114.465246,34.691202],[-114.422382,34.580711],[-114.378223,34.516521],[-114.378852,34.450376],[-114.335372,34.450038],[-114.264317,34.401329],[-114.172845,34.344979],[-114.14093,34.305919],[-114.14081715127998,34.30312751388169],[-114.139055,34.259538],[-114.17805,34.239969],[-114.229715,34.186928],[-114.292806,34.166725],[-114.348052,34.134458],[-114.405941,34.11154],[-114.428026,34.092787],[-114.43009113851998,34.07893140627949],[-114.435504,34.042615],[-114.454807,34.010968],[-114.509568,33.957264],[-114.534987,33.928499],[-114.508708,33.90064],[-114.505638,33.864276],[-114.520465,33.827778],[-114.504863,33.760465],[-114.496565,33.719155],[-114.504993,33.693022],[-114.525201,33.661583],[-114.529186,33.60665],[-114.524599,33.552231],[-114.597283,33.490653],[-114.62914651818897,33.43354499999979],[-114.635183,33.422726],[-114.673901,33.418299],[-114.725282,33.405048],[-114.707348,33.376628],[-114.707962,33.323421],[-114.723259,33.288079],[-114.674491,33.255597],[-114.678097,33.2303],[-114.679359,33.159519],[-114.706175,33.105335],[-114.670803,33.037984],[-114.628293,33.031052],[-114.575161,33.036542],[-114.51706679028098,33.024628763568494],[-114.511343,33.023455],[-114.481315,32.972064],[-114.47664,32.923628],[-114.463127,32.901884],[-114.468971,32.845155],[-114.531746,32.782503],[-114.570675,32.747417],[-114.61738652396197,32.74105277317659],[-114.667493,32.734226],[-114.705717,32.741581],[-114.719633,32.718763],[-115.000802,32.699676],[-115.465164,32.6671],[-116.04662,32.623353],[-116.10617888905,32.61857814263559],[-116.540643,32.583747],[-116.62705,32.576261],[-116.857154,32.557459],[-117.124862,32.534156],[-117.13203895573798,32.58560118738209],[-117.136664,32.618754],[-117.168866,32.671952],[-117.17719654844998,32.67699762339179],[-117.196767,32.688851],[-117.246069,32.669352],[-117.255169,32.700051],[-117.25497,32.786948],[-117.280971,32.822247],[-117.28217,32.839547],[-117.27387,32.851447],[-117.262905,32.849349],[-117.25617,32.859447],[-117.25616053514898,32.85967359410169],[-117.25447,32.900146],[-117.27213942717798,32.97552458254879],[-117.28077,33.012343],[-117.315278,33.093504],[-117.362572,33.168437],[-117.445583,33.268517],[-117.547693,33.365491],[-117.59588,33.386629],[-117.59618868573698,33.38696499431989],[-117.645582,33.440728],[-117.715349,33.460556],[-117.726486,33.483427],[-117.732258297614,33.48795502397859],[-117.814188,33.552224],[-117.840289,33.573523],[-117.927091,33.605521],[-118.000593,33.654319],[-118.088896,33.729817],[-118.11507672288198,33.74380332289499],[-118.132698,33.753217],[-118.1837,33.736118],[-118.231926185873,33.71529546782749],[-118.258687,33.703741],[-118.317205,33.712818],[-118.33329589297698,33.721184835257695],[-118.354705,33.732317],[-118.396606,33.735917],[-118.428407,33.774715],[-118.394307,33.804315],[-118.412708,33.883913],[-118.460611,33.969111],[-118.519514,34.027509],[-118.603572,34.039048],[-118.679366,34.033255],[-118.744952,34.032103],[-118.805114,34.001239],[-118.854653,34.034215],[-118.94447951145897,34.046738953350996],[-118.954722,34.048167],[-119.069959,34.09047],[-119.109784,34.094566],[-119.227743,34.161728],[-119.257043,34.213304],[-119.270144,34.252903],[-119.27661425185897,34.256340425014294],[-119.313034,34.275689],[-119.37578,34.321118],[-119.461036,34.374064],[-119.47794670672397,34.37883755877559],[-119.536957,34.395495],[-119.616862,34.420995],[-119.684666,34.408297],[-119.709067,34.395397],[-119.785871,34.415997],[-119.835771,34.415796],[-119.873971,34.408795],[-119.971951,34.444641],[-120.050682,34.461651],[-120.141165,34.473405],[-120.295051,34.470623],[-120.451425,34.447094],[-120.511421,34.522953],[-120.550092,34.542794],[-120.581293,34.556959],[-120.622575,34.554017],[-120.645739,34.581035],[-120.60197,34.692095],[-120.614852,34.730709],[-120.62632,34.738072],[-120.610266,34.85818],[-120.670835,34.904115],[-120.65030521183999,34.9751663022687],[-120.63357,35.033085],[-120.629583,35.078362],[-120.635787,35.123805],[-120.675074,35.153061],[-120.714185,35.175998],[-120.756086,35.160459],[-120.846674,35.204429],[-120.89679,35.247877],[-120.87957,35.294184],[-120.862133,35.360763],[-120.884757,35.430196],[-120.955863,35.453743],[-121.003359,35.46071],[-121.11424,35.57172],[-121.166712,35.635399],[-121.272322,35.666711],[-121.314632,35.71331],[-121.332449,35.783106],[-121.34705395600398,35.795186203814595],[-121.406823,35.844623],[-121.462264,35.885618],[-121.4862,35.970348],[-121.531876,36.014368],[-121.574602,36.025156],[-121.622009,36.099695],[-121.680145,36.165818],[-121.779851,36.227407],[-121.826425,36.24186],[-121.888491,36.30281],[-121.903195,36.393603],[-121.9416,36.485602],[-121.970427,36.582754],[-121.923866,36.634559],[-121.860604,36.611136],[-121.814462,36.682858],[-121.796826,36.777543],[-121.791544,36.815186],[-121.81273242676198,36.85004944374549],[-121.862266,36.931552],[-121.906468,36.96895],[-121.95167,36.97145],[-122.027174,36.95115],[-122.06731672905995,36.953595689731394],[-122.105976,36.955951],[-122.20618,37.013949],[-122.260481,37.072548],[-122.284882,37.101747],[-122.29431019191298,37.105141386717996],[-122.322971,37.11546],[-122.344029,37.144099],[-122.397065,37.187249],[-122.418452,37.248521],[-122.40559014390097,37.314965037743896],[-122.401323,37.337009],[-122.409258,37.374805],[-122.443687,37.435941],[-122.445987,37.461541],[-122.493789,37.492341],[-122.516689,37.52134],[-122.518088,37.576138],[-122.496786,37.612136],[-122.496784,37.686433],[-122.50067801908298,37.708132568017895],[-122.50560125134498,37.73556746524069],[-122.511983,37.77113],[-122.465396,37.800879],[-122.398139,37.80563],[-122.385323,37.790724],[-122.376462,37.738558],[-122.356784,37.729505],[-122.361749,37.71501],[-122.38982687658799,37.708331],[-122.39319,37.707531],[-122.360219,37.592501],[-122.244372,37.55814],[-122.168449,37.504143],[-122.12919970222397,37.52132199859079],[-122.111998,37.528851],[-122.144396,37.581866],[-122.152905,37.640771],[-122.16280251946198,37.667273013369694],[-122.163049,37.667933],[-122.213774,37.698695],[-122.24981,37.726406],[-122.252452,37.755129],[-122.312974,37.777244],[-122.333711,37.809797],[-122.303931,37.830087],[-122.32871428740698,37.89383234632079],[-122.33453,37.908791],[-122.378709,37.905191],[-122.425258,37.955672],[-122.367582,37.978168],[-122.368891,38.007948],[-122.34280385218798,38.00925387778169],[-122.321706,38.01031],[-122.262861,38.051473],[-122.26932005491696,38.060374497531186],[-122.301804,38.105142],[-122.393588,38.143449],[-122.397581230624,38.142003597253286],[-122.488499639259,38.10909447430819],[-122.491283,38.108087],[-122.499465,38.032165],[-122.452995,37.996167],[-122.488665,37.966714],[-122.486375,37.921881],[-122.448413,37.89341],[-122.41847,37.852721],[-122.483483,37.826728],[-122.537285,37.830328],[-122.60129,37.875126],[-122.678474,37.906604],[-122.70264,37.89382],[-122.754606,37.935527],[-122.797405,37.976657],[-122.856573,38.016717],[-122.939711,38.031908],[-122.97439,37.992429],[-123.011533,38.003438],[-122.960889,38.112962],[-122.953629,38.17567],[-122.987149,38.237538],[-122.986319,38.273164],[-123.00314647705598,38.29570523871448],[-123.004122,38.297012],[-123.053504,38.299385],[-123.068437,38.33521],[-123.085572,38.390525],[-123.166428,38.474947],[-123.249797,38.511045],[-123.331899,38.565542],[-123.349612,38.596805],[-123.441774,38.699744],[-123.514784,38.741966],[-123.54092201163398,38.76765621603928],[-123.571987,38.798189],[-123.638637,38.843865],[-123.659846,38.872529],[-123.71054,38.91323],[-123.732892,38.954994],[-123.69074,39.021293],[-123.721505,39.125327],[-123.765891,39.193657],[-123.798991,39.271355],[-123.825331,39.360814],[-123.81469,39.446538],[-123.766475,39.552803],[-123.782322,39.621486],[-123.792659,39.684122],[-123.829545,39.723071],[-123.851714,39.832041],[-123.907664,39.863028],[-123.954952,39.922373],[-124.02520517453,40.00129934166899],[-124.035904,40.013319],[-124.068908,40.021307],[-124.087086,40.078442],[-124.139952,40.11635],[-124.187874,40.130542],[-124.258405,40.184277],[-124.34307,40.243979],[-124.363414,40.260974],[-124.353124,40.331425],[-124.365357,40.374855],[-124.409591,40.438076],[-124.387023,40.504954]]]]}},
+{"type":"Feature","properties":{"name":"District of Columbia","income":{"1995":33682,"1996":34436,"1997":34980,"1998":36442,"1999":38654,"2000":40606,"2001":41112,"2002":40617,"2003":43215,"2004":46211,"2005":48078,"2006":51746,"2007":54812,"2008":58553,"2009":58906,"2010":60729,"2011":62087,"2012":65231,"2013":66326,"2014":69992,"2015":73115}},"geometry":{"type":"Polygon","coordinates":[[[-77.119759,38.934343],[-77.041018,38.995548],[-77.00254624424699,38.96553170044589],[-76.909393,38.892852],[-76.979497,38.837812],[-77.039006,38.791645],[-77.03906635676466,38.841271889518595],[-77.039099,38.868112],[-77.0902,38.904211],[-77.119759,38.934343]]]}},
+{"type":"Feature","properties":{"name":"Florida","income":{"1995":29998,"1996":31008,"1997":32877,"1998":34757,"1999":36309,"2000":38784,"2001":37319,"2002":38226,"2003":38985,"2004":40900,"2005":42437,"2006":45494,"2007":47804,"2008":47802,"2009":44755,"2010":44390,"2011":44250,"2012":45006,"2013":46021,"2014":47439,"2015":49416}},"geometry":{"type":"MultiPolygon","coordinates":[[[[-81.811693,24.568745],[-81.751266,24.653517],[-81.672338,24.699514],[-81.584599,24.736696],[-81.571151,24.756354],[-81.44351,24.813364],[-81.305054,24.755185],[-81.243232,24.673998],[-81.342192,24.637774],[-81.401889,24.623544],[-81.443915,24.642677],[-81.517404,24.621239],[-81.595334,24.593107],[-81.685243,24.558676],[-81.812536,24.545469],[-81.811693,24.568745]]],[[[-82.01491,24.543071],[-81.983908,24.580682],[-81.868711,24.58412],[-81.918855,24.498131],[-82.028091,24.498716],[-82.01491,24.543071]]],[[[-82.188031,24.574699],[-82.144099,24.622481],[-82.086643,24.590071],[-82.100757,24.533288],[-82.179454,24.52947],[-82.188031,24.574699]]],[[[-87.592064,30.95146],[-87.598937,30.997422],[-87.59882894626209,30.99742217690529],[-87.519533,30.997552],[-87.425791,30.998058],[-87.312206,30.998404],[-87.16308069276556,30.99902418387759],[-87.162644,30.999026],[-86.927851,30.997678],[-86.831979,30.997354],[-86.78569197600586,30.99698299351679],[-86.68824096424608,30.99620189000149],[-86.563494,30.995202],[-86.38864466200037,30.994528215275192],[-86.364974,30.994437],[-86.18724804898129,30.994066723462193],[-86.03503810495057,30.993749607302295],[-85.893632,30.993455],[-85.749715,30.995282],[-85.57949757633826,30.99702874841089],[-85.49800158508948,30.99786504936139],[-85.48829828893909,30.99796462328729],[-85.333319,30.999555],[-85.145959,31.000693],[-85.031285,31.000647],[-85.002499,31.000682],[-85.006062,30.977039],[-84.983757,30.936984],[-84.935698,30.878703],[-84.934283,30.834033],[-84.91815,30.772082],[-84.864693,30.711542],[-84.86346384438247,30.711497014654395],[-84.812997,30.70965],[-84.474519,30.692783],[-84.38075418355248,30.688827197045892],[-84.28551450903947,30.684809171948],[-84.124993,30.678037],[-84.08375308229998,30.67594339796799],[-84.007454,30.67206996846919],[-83.820973,30.662603],[-83.743729,30.65852691375049],[-83.61170405882639,30.651560093708593],[-83.499951,30.645663],[-83.35771631362809,30.637137873134193],[-83.30934712159579,30.634238766671597],[-83.13661885820359,30.623885944893093],[-83.131431,30.623575],[-82.877311,30.609016],[-82.68952979847276,30.597889290641792],[-82.58400518641946,30.591636579087588],[-82.45979243541368,30.58427652830619],[-82.459581,30.584264],[-82.41898411217848,30.580916669731494],[-82.218607,30.564395],[-82.229427,30.520814],[-82.200965,30.474427],[-82.210318,30.424577],[-82.180043,30.36861],[-82.143306,30.363378],[-82.094709,30.360766],[-82.05098298168086,30.368367775944893],[-82.040766,30.370144],[-82.042011,30.403253],[-82.028232,30.447385],[-82.018381,30.531176],[-82.015728,30.601698],[-82.049529,30.655544],[-82.041834,30.692374],[-82.032667,30.750674],[-81.994992,30.786074],[-81.943187,30.827437],[-81.90597843940638,30.82140734150199],[-81.902354,30.82082],[-81.868624,30.792756],[-81.808543,30.790016],[-81.763384,30.773821],[-81.732238,30.749635],[-81.668283,30.744644],[-81.633273,30.729603],[-81.56171,30.715597],[-81.528281,30.723359],[-81.507218,30.722936],[-81.444124,30.709714],[-81.42742,30.69802],[-81.443099,30.600938],[-81.434064,30.522569],[-81.42895473764328,30.50618307416519],[-81.42601,30.496739],[-81.410809,30.482039],[-81.396407,30.34004],[-81.37437612802329,30.252931],[-81.288955,29.91518],[-81.270442,29.883106],[-81.26193346057477,29.82212348667609],[-81.256711,29.784693],[-81.21040959655379,29.67064080570429],[-81.163581,29.55529],[-81.10296735174536,29.426996650451994],[-81.046678,29.307856],[-80.966176,29.14796],[-80.907275,29.064262],[-80.787021,28.875266],[-80.72750567007368,28.791192871322696],[-80.647288,28.677875],[-80.583884,28.597705],[-80.525094,28.459454],[-80.587813,28.410856],[-80.606874,28.336484],[-80.604214,28.257733],[-80.589975,28.17799],[-80.547675,28.048795],[-80.44767694921757,27.860513513360996],[-80.383695,27.740045],[-80.330956,27.597541],[-80.31668661162037,27.557340024607594],[-80.253665,27.37979],[-80.19802135265869,27.263008803672495],[-80.153375,27.169308],[-80.138605,27.111517],[-80.116772,27.072397],[-80.0830776297553,26.970534],[-80.046263,26.859238],[-80.038962,26.813960752739895],[-80.033770917966,26.781768189419893],[-80.03212,26.77153],[-80.035763,26.676043],[-80.03556853593979,26.645076056888396],[-80.035363,26.612346],[-80.038863,26.569347],[-80.050363,26.509549],[-80.06159101082606,26.426527042783494],[-80.07587443944318,26.320912769880195],[-80.085565,26.249259],[-80.10865850558918,26.093293886255392],[-80.109566,26.087165],[-80.11297825128537,26.017023960833995],[-80.11501796449997,25.97509633226789],[-80.11512892389007,25.972815490010593],[-80.117904,25.915772],[-80.11451424410777,25.87419963469209],[-80.11438522427608,25.87261732028789],[-80.109953,25.81826],[-80.123806,25.762767],[-80.154972,25.66549],[-80.176916,25.685062],[-80.229107,25.732509],[-80.265879,25.658373],[-80.301464,25.613299],[-80.313918,25.539164],[-80.31597598143269,25.532620827266093],[-80.337049,25.465621],[-80.31036,25.389707],[-80.234849,25.42196],[-80.176024,25.521154],[-80.163156,25.452184],[-80.23239055893038,25.337069459412696],[-80.238555,25.32682],[-80.358183,25.153228],[-80.496761,24.999324],[-80.651189,24.866131],[-80.966245,24.707852],[-81.103373,24.669463],[-81.148718,24.710477],[-81.038908,24.772596],[-80.847471,24.851753],[-80.610869,25.006995],[-80.516571,25.095457],[-80.500513,25.156674],[-80.495394,25.199808],[-80.542391,25.206379],[-80.650532,25.189097],[-80.710607,25.15253],[-80.747746,25.147441],[-80.812133,25.186039],[-80.85817004003059,25.177520326526093],[-80.87546,25.174321],[-80.915924,25.141301],[-81.009598,25.125403],[-81.079859,25.118797],[-81.142278,25.183],[-81.170907,25.245857],[-81.148103,25.332793],[-81.146765,25.407577],[-81.208201,25.504937],[-81.240519,25.599041],[-81.289901,25.673554],[-81.355986,25.703526],[-81.38381,25.776751],[-81.44186477179917,25.803129028430995],[-81.472239,25.81693],[-81.614735,25.893977],[-81.64023695805679,25.877537579285093],[-81.672633,25.856654],[-81.727086,25.907207],[-81.757463,26.000374],[-81.808833,26.152246],[-81.844555,26.327712],[-81.84648524796168,26.330372048502795],[-81.923611,26.436658],[-81.956611,26.452358],[-82.013913,26.452058],[-82.075015,26.422059],[-82.126671,26.436279],[-82.180717,26.476257],[-82.245395,26.601094],[-82.264351,26.698496],[-82.264682,26.756836],[-82.28054127762877,26.78930858644309],[-82.314277,26.858384],[-82.36920139216907,26.946081025633497],[-82.452673,27.079359],[-82.51658542278818,27.20782630324179],[-82.539719,27.254326],[-82.610581,27.348817],[-82.64817061685946,27.38972],[-82.691821,27.437218],[-82.743017,27.531086],[-82.719852,27.528933],[-82.65072,27.523115],[-82.584629,27.596021],[-82.55288720706358,27.64544759636549],[-82.514265,27.705588],[-82.477638,27.723004],[-82.43198,27.768092],[-82.448786,27.810036],[-82.47344674878919,27.81758562552729],[-82.489849,27.822607],[-82.553946,27.848462],[-82.56638042463608,27.836338311914194],[-82.586519,27.816703],[-82.622723,27.779868],[-82.62502,27.732706],[-82.652521,27.700307],[-82.705017,27.62531],[-82.733076,27.612972],[-82.738467,27.678504],[-82.746223,27.731306],[-82.790224,27.791603],[-82.846526,27.854301],[-82.840882,27.937162],[-82.82835468921638,28.01887958165689],[-82.828163,28.02013],[-82.850881,28.102451],[-82.85938495603288,28.172175074604493],[-82.859624,28.174135],[-82.764103,28.244345],[-82.73146,28.325075],[-82.697433,28.420166],[-82.69079501337606,28.43334192576269],[-82.665055,28.484434],[-82.656694,28.544814],[-82.668149,28.622411],[-82.66871140214478,28.69430326858519],[-82.668722,28.695658],[-82.712373,28.720921],[-82.713121,28.800283],[-82.730245,28.850155],[-82.688864,28.905609],[-82.723861,28.953506],[-82.75557380869569,29.000930118260392],[-82.759378,29.006619],[-82.759704,29.054192],[-82.823659,29.098902],[-82.798876,29.114504],[-82.827073,29.158425],[-82.927107,29.168907],[-82.996144,29.178074],[-83.016248,29.125371],[-83.053207,29.130839],[-83.078986,29.196944],[-83.074734,29.247975],[-83.107477,29.268889],[-83.16592181158639,29.28909184264659],[-83.169576,29.290355],[-83.175518,29.34469],[-83.202446,29.394422],[-83.240509,29.433178],[-83.294747,29.437923],[-83.307828,29.468861],[-83.401552,29.523291],[-83.405068,29.59557],[-83.41412651315848,29.666065224482697],[-83.414701,29.670536],[-83.483567,29.698542],[-83.537645,29.72306],[-83.583045,29.787307],[-83.625026,29.856892],[-83.679219,29.918513],[-83.788729,29.976982],[-83.93151,30.039068],[-83.99231034047799,30.089268737728688],[-84.000716,30.096209],[-84.06299,30.101378],[-84.07613207191139,30.09908988373009],[-84.124889,30.090601],[-84.179149,30.073187],[-84.20801,30.084776],[-84.289727,30.057197],[-84.366115,30.008662],[-84.341439,29.962208],[-84.34114883318158,29.960756336105394],[-84.333746,29.923721],[-84.349066,29.896812],[-84.423834,29.902996],[-84.470323,29.924524],[-84.535873,29.910092],[-84.57744,29.887828],[-84.564976,29.81018],[-84.604003,29.786021],[-84.692619,29.763039],[-84.776954,29.692191],[-84.876731,29.655758],[-85.045074,29.586991],[-85.15731,29.64289],[-85.22842513307309,29.669559997761997],[-85.259719,29.681296],[-85.352615,29.659787],[-85.40283,29.758782],[-85.416548,29.842628],[-85.38473,29.920949],[-85.38924003323199,29.92411486260369],[-85.425956,29.949888],[-85.487764,29.961227],[-85.571907,30.02644],[-85.601178,30.056342],[-85.69681,30.09689],[-85.811219,30.17832],[-85.99610259397598,30.268901381209094],[-85.999937,30.27078],[-86.089963,30.303569],[-86.222561,30.343585],[-86.39737960650238,30.37749528041909],[-86.412076,30.380346],[-86.632953,30.396299],[-86.80035135196587,30.38450808737759],[-86.850625,30.380967],[-86.91920474980078,30.368991472122488],[-87.155392,30.327748],[-87.22976581136477,30.319632929800992],[-87.267827,30.31548],[-87.319518,30.317814],[-87.419859,30.297128],[-87.518324,30.280435],[-87.452282,30.344097],[-87.431784,30.403193],[-87.366601,30.436643],[-87.414685,30.457289],[-87.444722,30.507484],[-87.43145,30.550252],[-87.401189,30.604383],[-87.400189,30.657201],[-87.442291,30.692661],[-87.523621,30.738285],[-87.542268,30.767481],[-87.634943,30.865857],[-87.592064,30.95146]]]]}},
+{"type":"Feature","properties":{"name":"Idaho","income":{"1995":32003,"1996":33279,"1997":33612,"1998":35863,"1999":36656,"2000":37929,"2001":38459,"2002":38242,"2003":39859,"2004":40509,"2005":41269,"2006":42846,"2007":46136,"2008":47561,"2009":44644,"2010":43259,"2011":43345,"2012":45296,"2013":46621,"2014":47572,"2015":48311}},"geometry":{"type":"Polygon","coordinates":[[[-117.243027,44.390974],[-117.215072,44.427162],[-117.225932,44.479389],[-117.167187,44.523431],[-117.14293,44.557236],[-117.094968,44.652011],[-117.062273,44.727143],[-117.013802,44.756841],[-116.9318,44.787181],[-116.88929518696699,44.84052977815328],[-116.865338,44.870599],[-116.833632,44.928976],[-116.858313,44.978761],[-116.841314,45.030907],[-116.78371,45.076972],[-116.78312826326696,45.07771250500999],[-116.754643,45.113972],[-116.696047,45.254679],[-116.69092662009098,45.26895523844489],[-116.674648,45.314342],[-116.588195,45.44292],[-116.502756,45.566608],[-116.463504,45.615785],[-116.528272,45.681473],[-116.535698,45.734231],[-116.593004,45.778541],[-116.665344,45.781998],[-116.736268,45.826179],[-116.78752,45.840204],[-116.79920453250098,45.851045435482895],[-116.859795,45.907264],[-116.886843,45.958617],[-116.915989,45.995413],[-116.942656,46.061],[-116.981962,46.084915],[-116.935473,46.142448],[-116.923958,46.17092],[-116.962966,46.19968],[-116.964379,46.253282],[-116.99726,46.303151],[-117.062748,46.353624],[-117.035545,46.410012],[-117.036645748421,46.426100482655386],[-117.039771,46.471779],[-117.03977765556199,46.541708992038096],[-117.03983338602796,47.12726899225409],[-117.039836,47.154734],[-117.04015975186299,47.259272],[-117.04049037556798,47.36602888669798],[-117.041634,47.7353],[-117.04130644645898,47.97745592002679],[-117.04121445346098,48.04546510380278],[-117.041107,48.124904],[-117.035289,48.422732],[-117.033671,48.656902],[-117.03293918211699,48.84666792120148],[-117.032351,48.999188],[-116.757234,48.999943],[-116.417503,49.000099],[-116.049193,49.000912],[-116.04915652064899,48.50204248175808],[-116.049155,48.481247],[-116.048948,48.309847],[-116.04892924777596,48.216127947927085],[-116.048911,48.12493],[-116.049153,47.999923],[-116.03856582987298,47.98463425644169],[-116.030751,47.973349],[-115.959946,47.898142],[-115.900934,47.843064],[-115.845474,47.814967],[-115.835365,47.760957],[-115.72377,47.696671],[-115.73627,47.654762],[-115.694284,47.62346],[-115.721207,47.576323],[-115.717024,47.532693],[-115.634684,47.48176],[-115.69293,47.457237],[-115.71034,47.417784],[-115.578619,47.367007],[-115.531971,47.314121],[-115.470959,47.284873],[-115.371825,47.265213],[-115.326903,47.255912],[-115.29211,47.209861],[-115.255786,47.174725],[-115.189451,47.131032],[-115.120917,47.061237],[-115.071254,47.022083],[-115.031651,46.971548],[-114.961422906068,46.932893875970784],[-114.927432,46.914185],[-114.943281,46.867971],[-114.880588,46.811791],[-114.79004,46.778729],[-114.76718,46.738828],[-114.699008,46.740223],[-114.67682716269498,46.73183873981309],[-114.626695,46.712889],[-114.621483,46.658143],[-114.59124789474797,46.65257477007719],[-114.547321,46.644485],[-114.453239,46.649266],[-114.360709,46.669059],[-114.33572493540497,46.65527296735359],[-114.320665,46.646963],[-114.331338,46.577781],[-114.351655,46.508119],[-114.403019,46.498675],[-114.384756,46.411784],[-114.422458,46.387097],[-114.431708,46.310744],[-114.441326,46.2738],[-114.449819,46.237119],[-114.445928,46.173933],[-114.514706,46.167726],[-114.5213,46.125287],[-114.460049,46.097104],[-114.480241,46.030325],[-114.441185,45.988453],[-114.402261,45.961489],[-114.413168,45.911479],[-114.388243,45.88234],[-114.422963,45.855381],[-114.517143,45.835993],[-114.562509,45.779927],[-114.504869,45.722176],[-114.499637,45.669035],[-114.53577,45.650613],[-114.538132,45.606834],[-114.52371067493497,45.58523308600019],[-114.506341,45.559216],[-114.456764,45.543983],[-114.36852,45.492716],[-114.279217,45.480616],[-114.251836,45.537812],[-114.18647,45.545539],[-114.083149,45.603996],[-114.014973,45.654008],[-114.015633,45.696127],[-113.971565,45.700636],[-113.94832148257,45.68257735844148],[-113.898883,45.644167],[-113.861404,45.62366],[-113.806729,45.602146],[-113.802849,45.523159],[-113.759986,45.480735],[-113.763368,45.427732],[-113.73239,45.385058],[-113.735601,45.325265],[-113.650064,45.23471],[-113.57467,45.128411],[-113.510819,45.099902],[-113.45197,45.059247],[-113.437726,45.006967],[-113.448958,44.953544],[-113.474573,44.910846],[-113.422376,44.842595],[-113.377153,44.834858],[-113.301508,44.798985],[-113.247166,44.82295],[-113.131387,44.764738],[-113.101154,44.708578],[-113.049349,44.62938],[-113.061071,44.577329],[-113.006828,44.518439],[-113.006846,44.471715],[-112.951146,44.416699],[-112.881769,44.380315],[-112.82682688126498,44.40520243176749],[-112.821896,44.407436],[-112.828191,44.442472],[-112.735084,44.499159],[-112.707815,44.503023],[-112.601863,44.491015],[-112.473207,44.480027],[-112.387389,44.448058],[-112.358917,44.528847],[-112.286187,44.568472],[-112.221698,44.543519],[-112.125101,44.528527],[-112.034133,44.537716],[-111.870504,44.564033],[-111.807914,44.511716],[-111.704218,44.560205],[-111.61710703430498,44.55712724841859],[-111.562814,44.555209],[-111.519126,44.582916],[-111.468833,44.679335],[-111.45694723249397,44.69564073783949],[-111.438793,44.720546],[-111.385005,44.755128],[-111.37713823673496,44.75119641396359],[-111.323669,44.724474],[-111.26875,44.668279],[-111.224161,44.623402],[-111.201459,44.575696],[-111.143557,44.535732],[-111.122654,44.493659],[-111.048974,44.474072],[-111.049148,44.374925],[-111.048452,44.114831],[-111.04721938441998,43.983452760701795],[-111.046515,43.908376],[-111.04611,43.687848],[-111.04536056096998,43.50105145111219],[-111.044617,43.31572],[-111.044143,43.072364],[-111.04405270511799,43.019407032899],[-111.043959,42.96445],[-111.043564,42.722624],[-111.04553029271298,42.513912877775084],[-111.04708,42.34942],[-111.046689,42.001567],[-111.374129,42.000893],[-111.471381,41.999739],[-111.50780619568698,41.999685678364294],[-111.50781303517599,41.99968566835219],[-111.750778,41.99933],[-112.10951205421198,41.99759809629469],[-112.109532,41.997598],[-112.15917745150998,41.99868192973779],[-112.264936,42.000991],[-112.648019,42.000307],[-113.00004013962398,41.99822761253908],[-113.000821,41.998223],[-113.249159,41.996203],[-113.496548,41.993305],[-113.817964,41.98858],[-114.041723,41.99372],[-114.28179946721997,41.99421388575789],[-114.281855,41.994214],[-114.598267,41.994511],[-114.89921,41.999909],[-115.03810975243397,41.99863411567649],[-115.313877,41.996103],[-115.625914,41.997415],[-115.870181,41.996766],[-116.332763,41.997283],[-116.625947,41.997379],[-117.018203216741,41.99983985036909],[-117.026197,41.99989],[-117.026551,42.378557],[-117.026253,42.807447],[-117.026652,43.025128],[-117.026889,43.596033],[-117.02566381044599,43.68029363595399],[-117.023577,43.823811],[-116.98554503848997,43.88118485281379],[-116.976024,43.895548],[-116.959871,43.982925],[-116.937342,44.029376],[-116.977351,44.085364],[-116.89785467711496,44.15266639539139],[-116.895931,44.154295],[-116.902752,44.179467],[-116.965498,44.194126],[-116.971958,44.235677],[-117.059352,44.237244],[-117.121037,44.277585],[-117.170342,44.25889],[-117.216974,44.288357],[-117.21199550695297,44.29645109593828],[-117.192203,44.32863],[-117.216911,44.360163],[-117.243027,44.390974]]]}},
+{"type":"Feature","properties":{"name":"Illinois","income":{"1995":38078,"1996":39490,"1997":41179,"1998":43141,"1999":45214,"2000":46327,"2001":46991,"2002":44946,"2003":47367,"2004":47711,"2005":50270,"2006":52012,"2007":54141,"2008":56230,"2009":53974,"2010":52967,"2011":53271,"2012":55126,"2013":56212,"2014":57458,"2015":59590}},"geometry":{"type":"Polygon","coordinates":[[[-91.50616790862227,40.20064351279509],[-91.49695749033947,40.24870387637279],[-91.492891,40.269923],[-91.469656,40.322409],[-91.419422,40.378264],[-91.372921,40.399108],[-91.379907,40.45211],[-91.367876,40.510479],[-91.394475,40.534543],[-91.374252,40.58259],[-91.339719,40.613488],[-91.247851,40.63839],[-91.18698,40.637297],[-91.18546060870426,40.638111812623485],[-91.12082,40.672777],[-91.11822293839748,40.69953465081909],[-91.115735,40.725168],[-91.091703,40.779708],[-91.092993,40.821079],[-91.044653,40.868356],[-90.985462,40.912141],[-90.952233,40.954047],[-90.945324,41.019279],[-90.95189414268127,41.06987273586639],[-90.95226541648216,41.07273174967],[-90.957246,41.111085],[-90.997906,41.162564],[-91.041536,41.166138],[-91.081445,41.214429],[-91.114186,41.250029],[-91.07441549801959,41.33363156904068],[-91.07408762367406,41.33432080192049],[-91.071552,41.339651],[-91.065058,41.369101],[-91.027787,41.423603],[-90.966662,41.430051],[-90.924343,41.42286],[-90.867282,41.448215],[-90.786282,41.452888],[-90.701159,41.454743],[-90.618537,41.485032],[-90.571136,41.516332],[-90.513134,41.519533],[-90.461432,41.523533],[-90.41583,41.562933],[-90.364128,41.579633],[-90.339528,41.598633],[-90.336729,41.664532],[-90.314687,41.69483],[-90.31185685041618,41.72853289215359],[-90.310708,41.742214],[-90.248631,41.779805],[-90.24236824739717,41.78276872598458],[-90.180643,41.811979],[-90.181401,41.844647],[-90.165065,41.883777],[-90.15815303370947,41.92984322737608],[-90.156902,41.938181],[-90.140613,41.995999],[-90.15968245112268,42.03308725758588],[-90.163446,42.040407],[-90.161159,42.106372],[-90.207421,42.149109],[-90.26908,42.1745],[-90.31569651427148,42.19394643225139],[-90.338169,42.203321],[-90.400653,42.239293],[-90.430884,42.27823],[-90.417125,42.319943],[-90.44632,42.357041],[-90.48434567271626,42.38159777819188],[-90.517516,42.403019],[-90.565248,42.438742],[-90.590416,42.447493],[-90.646727,42.471904],[-90.642843,42.508481],[-90.437011,42.507147],[-90.42637696073606,42.50717773522369],[-90.22319,42.507765],[-89.927006876764,42.50579048577459],[-89.926484,42.505787],[-89.83759488632558,42.50491035279149],[-89.493216,42.501514],[-89.40141681104056,42.50044193107369],[-89.36579860766348,42.50002596695148],[-89.042898,42.496255],[-88.99256022681729,42.495854719899185],[-88.94038486037799,42.49543982747118],[-88.77649576073519,42.494136600467385],[-88.70738,42.493587],[-88.70737771540178,42.49358701476958],[-88.506912,42.494883],[-88.304692,42.49560817275149],[-88.2169,42.495923],[-88.19952900144847,42.49575601569028],[-87.89770179730027,42.49285460462939],[-87.800477,42.49192],[-87.80337,42.420621],[-87.820858,42.361584],[-87.834769,42.301522],[-87.833377771567,42.29777370515449],[-87.800066,42.208024],[-87.79858945123848,42.20600660116559],[-87.75932656523857,42.15236197897989],[-87.74168992918976,42.12826515946779],[-87.741662,42.128227],[-87.74135523340428,42.12795543477159],[-87.68927562032826,42.08185194039079],[-87.682359,42.075729],[-87.668982,42.029142],[-87.63436753388699,41.932910240325484],[-87.62498211348098,41.906817810703586],[-87.624052,41.904232],[-87.612291,41.893335],[-87.613556,41.88448],[-87.616293,41.870929],[-87.60945,41.845233],[-87.58837594251469,41.81103407616639],[-87.58707716617299,41.80892642541059],[-87.58160266073317,41.80004241269999],[-87.560646,41.766034],[-87.530745,41.748235],[-87.524141,41.72399],[-87.524044,41.708335],[-87.52494,41.529735],[-87.52540935334748,41.47028066606168],[-87.526768,41.298177],[-87.52676788622747,41.29805160247919],[-87.52664815808238,41.16608994451159],[-87.52652,41.024837],[-87.52646330599117,41.01035481796449],[-87.526014,40.895582],[-87.52613649042368,40.736885081422884],[-87.526292,40.535409],[-87.52687577325378,40.49122440969039],[-87.52706526339918,40.47688229246149],[-87.530054,40.250671],[-87.53102161242799,40.14803539674569],[-87.532308,40.011587],[-87.53245449388427,39.88299911878229],[-87.532703,39.664868],[-87.53238528279098,39.60730494422149],[-87.53166668197439,39.47711099274289],[-87.531624,39.469378],[-87.531646,39.347888],[-87.578331,39.340343],[-87.600397,39.312904],[-87.59474584540598,39.25938361648299],[-87.593486,39.247452],[-87.577029,39.211123],[-87.640435,39.166727],[-87.63829341374408,39.15749254720249],[-87.625379,39.101806],[-87.572588,39.057286],[-87.579117,39.001607],[-87.529496,38.971925],[-87.527645,38.907688],[-87.52871766369788,38.90594378628919],[-87.54737,38.875614],[-87.53525705080847,38.85249146496739],[-87.521681,38.826576],[-87.498948,38.757774],[-87.545538,38.677613],[-87.62012,38.639489],[-87.637752,38.588512],[-87.64835676307446,38.56662871605759],[-87.660732,38.541092],[-87.654166,38.511911],[-87.714047,38.47988],[-87.74104,38.435576],[-87.75110594512049,38.41884920845479],[-87.779996,38.370842],[-87.831972,38.307241],[-87.908542,38.268581],[-87.968968,38.237389],[-87.97020084080388,38.23027105838579],[-87.975819,38.197834],[-87.927468,38.151946],[-87.96221,38.100054],[-87.98877,38.055591],[-88.030884,38.030713],[-88.016311,37.961574],[-88.040861,37.891767],[-88.05946949270077,37.8666898040108],[-88.067364,37.856051],[-88.02803,37.799224],[-88.059588,37.742608],[-88.132341,37.697142],[-88.160062,37.654332],[-88.13216343827247,37.57451700082999],[-88.131622,37.572968],[-88.072242,37.528826],[-88.06625032009708,37.50413832734819],[-88.062294,37.487837],[-88.157061,37.466937],[-88.281667,37.452596],[-88.358436,37.40486],[-88.41590217877568,37.42122063771888],[-88.418594,37.421987],[-88.465861,37.400547],[-88.486947,37.339596],[-88.514661,37.290948],[-88.471753,37.220155],[-88.424776,37.149901],[-88.444605,37.098601],[-88.476127,37.068223],[-88.48380327697997,37.06808026989549],[-88.49039944632467,37.067957622947894],[-88.531576,37.067192],[-88.56104392947259,37.08399998095839],[-88.61144,37.112745],[-88.693983,37.141155],[-88.753068,37.154701],[-88.835051,37.196486],[-88.92800482949427,37.226389766253085],[-88.931745,37.227593],[-88.93351721474778,37.227511279914594],[-89.000968,37.224401],[-89.058036,37.188767],[-89.099047,37.140967],[-89.168087,37.074218],[-89.16662021201968,37.07211034379988],[-89.128899,37.017908],[-89.132915,36.982057],[-89.195039,36.989768],[-89.257608,37.015496],[-89.30743669117298,37.02875944962789],[-89.359456,37.042606],[-89.384175,37.103267],[-89.456105,37.18812],[-89.470525,37.253357],[-89.48288928464397,37.260950718414094],[-89.517032,37.28192],[-89.49516,37.324795],[-89.47367943454117,37.33485390219459],[-89.428185,37.356158],[-89.42594,37.407471],[-89.471201,37.466473],[-89.5124,37.52981],[-89.50179104949977,37.55889571932319],[-89.49774592603917,37.56998591392818],[-89.494051,37.580116],[-89.506563,37.62505],[-89.521948,37.696475],[-89.591289,37.723599],[-89.667993,37.759484],[-89.68722138085306,37.79640671843929],[-89.696559,37.814337],[-89.782035,37.855092],[-89.851048,37.90398],[-89.923185,37.870672],[-89.93309579091499,37.88009905825239],[-89.974221,37.919217],[-89.95491,37.966647],[-90.008353,37.970179],[-90.080959,38.015428],[-90.126006,38.05057],[-90.20572862588267,38.088233183108585],[-90.218708,38.094365],[-90.252484,38.127571],[-90.25274632397579,38.12777382622939],[-90.322353,38.181593],[-90.35116414506028,38.21954445709449],[-90.363926,38.236355],[-90.372519,38.323354],[-90.349743,38.377609],[-90.34291526673718,38.38442732002759],[-90.34024428170427,38.38709462263628],[-90.288815,38.438453],[-90.271314,38.496052],[-90.26097605928697,38.51852678740779],[-90.25529488766936,38.53087771182099],[-90.248913,38.544752],[-90.18451,38.611551],[-90.18111,38.65955],[-90.18152438153136,38.66037288531049],[-90.19521,38.68755],[-90.20991,38.72605],[-90.16659464001557,38.77245013930509],[-90.166409,38.772649],[-90.117707,38.805748],[-90.113327,38.849306],[-90.20728230118557,38.898732322839884],[-90.230336,38.91086],[-90.27658372202559,38.91933846721158],[-90.298711,38.923395],[-90.395816,38.960037],[-90.45096994089188,38.96139500332449],[-90.467784,38.961809],[-90.500117,38.910408],[-90.555693,38.870785],[-90.595354,38.87505],[-90.657254,38.92027],[-90.66158290687677,38.93470330775319],[-90.676397,38.984096],[-90.713629,39.053977],[-90.681086,39.10059],[-90.707902,39.15086],[-90.72328362341267,39.22410297005759],[-90.72996,39.255894],[-90.840106,39.340438],[-90.93534994636859,39.39951952890709],[-90.937419,39.400803],[-91.03827,39.448436],[-91.064305,39.494643],[-91.100307,39.538695],[-91.148275,39.545798],[-91.174232,39.591975],[-91.18287550081966,39.598233115795395],[-91.27614,39.665759],[-91.30576033496517,39.68621547007789],[-91.367753,39.729029],[-91.36461660332327,39.75871822632229],[-91.361571,39.787548],[-91.397853,39.821122],[-91.436051,39.84551],[-91.428956,39.907729],[-91.43684326859906,39.94524346367849],[-91.43709,39.946417],[-91.484064,40.019332],[-91.497663,40.078257],[-91.511956,40.170441],[-91.50616790862227,40.20064351279509]]]}},
+{"type":"Feature","properties":{"name":"Iowa","income":{"1995":33436,"1996":33721,"1997":35427,"1998":38159,"1999":39537,"2000":40443,"2001":41216,"2002":41052,"2003":42278,"2004":42865,"2005":43610,"2006":44560,"2007":47324,"2008":49007,"2009":48065,"2010":48031,"2011":49545,"2012":50997,"2013":52286,"2014":53816,"2015":54843}},"geometry":{"type":"Polygon","coordinates":[[[-96.621875,42.779255],[-96.577937,42.827645],[-96.537851,42.878475],[-96.54047232919328,42.90859569795599],[-96.541689,42.922576],[-96.500308,42.959391],[-96.520246,42.977643],[-96.492693,43.005089],[-96.511605,43.039927],[-96.458201,43.067554],[-96.45209751605368,43.082552925194484],[-96.439335,43.113916],[-96.458854,43.143356],[-96.475571,43.221054],[-96.522084,43.22096],[-96.552963,43.247281],[-96.55902734270967,43.257555675617986],[-96.578823,43.291095],[-96.530392,43.300034],[-96.524289,43.347214],[-96.521572,43.38564],[-96.594254,43.434153],[-96.584603,43.46961],[-96.598928,43.500457],[-96.45326,43.50039],[-96.198484,43.500335],[-96.05316283450999,43.50018770815748],[-95.86094620157228,43.49999288490559],[-95.834421,43.499966],[-95.486803,43.500246],[-95.45443223866057,43.50032208525],[-95.38778759402187,43.50047872890739],[-95.214938,43.500885],[-94.91461348471358,43.50059587298608],[-94.874235,43.500557],[-94.85455506761066,43.50055341915219],[-94.44284998971817,43.50047850765469],[-94.390597,43.500469],[-94.24796744155518,43.50017547670759],[-93.97076155852818,43.499605003207385],[-93.97076,43.499605],[-93.64853303117357,43.49953548967509],[-93.576728,43.49952],[-93.49735132522038,43.49953072451169],[-93.228861,43.499567],[-93.04919200781647,43.49955748002459],[-93.02434790054187,43.49955616363],[-92.870277,43.499548],[-92.553161,43.5003],[-92.55312809051877,43.50030003631229],[-92.44894795143777,43.50041498856269],[-92.178863,43.500713],[-92.07980199312827,43.50070488517658],[-91.824848,43.500684],[-91.73021699783769,43.50068570094609],[-91.61083500055437,43.500687846779286],[-91.491042,43.50069],[-91.217706,43.50055],[-91.232276,43.450952],[-91.21066335777269,43.41944178290329],[-91.199408,43.403032],[-91.207367,43.373659],[-91.154806,43.334826],[-91.107237,43.313645],[-91.05791,43.253968],[-91.087456,43.221891],[-91.134173,43.174405],[-91.175253,43.134665],[-91.17493491391117,43.08026037184519],[-91.174692,43.038713],[-91.15908430594746,42.98747779132278],[-91.155519,42.975774],[-91.138,42.903772],[-91.09882,42.864421],[-91.070716,42.775502],[-91.017239,42.719566],[-90.941567,42.683844],[-90.89696202715838,42.674318056434295],[-90.852497,42.664822],[-90.743677,42.64556],[-90.700856,42.626445],[-90.672727,42.576599],[-90.642843,42.508481],[-90.646727,42.471904],[-90.590416,42.447493],[-90.565248,42.438742],[-90.517516,42.403019],[-90.48434567271626,42.38159777819188],[-90.44632,42.357041],[-90.417125,42.319943],[-90.430884,42.27823],[-90.400653,42.239293],[-90.338169,42.203321],[-90.31569651427148,42.19394643225139],[-90.26908,42.1745],[-90.207421,42.149109],[-90.161159,42.106372],[-90.163446,42.040407],[-90.15968245112268,42.03308725758588],[-90.140613,41.995999],[-90.156902,41.938181],[-90.15815303370947,41.92984322737608],[-90.165065,41.883777],[-90.181401,41.844647],[-90.180643,41.811979],[-90.24236824739717,41.78276872598458],[-90.248631,41.779805],[-90.310708,41.742214],[-90.31185685041618,41.72853289215359],[-90.314687,41.69483],[-90.336729,41.664532],[-90.339528,41.598633],[-90.364128,41.579633],[-90.41583,41.562933],[-90.461432,41.523533],[-90.513134,41.519533],[-90.571136,41.516332],[-90.618537,41.485032],[-90.701159,41.454743],[-90.786282,41.452888],[-90.867282,41.448215],[-90.924343,41.42286],[-90.966662,41.430051],[-91.027787,41.423603],[-91.065058,41.369101],[-91.071552,41.339651],[-91.07408762367406,41.33432080192049],[-91.07441549801959,41.33363156904068],[-91.114186,41.250029],[-91.081445,41.214429],[-91.041536,41.166138],[-90.997906,41.162564],[-90.957246,41.111085],[-90.95226541648216,41.07273174967],[-90.95189414268127,41.06987273586639],[-90.945324,41.019279],[-90.952233,40.954047],[-90.985462,40.912141],[-91.044653,40.868356],[-91.092993,40.821079],[-91.091703,40.779708],[-91.115735,40.725168],[-91.11822293839748,40.69953465081909],[-91.12082,40.672777],[-91.18546060870426,40.638111812623485],[-91.18698,40.637297],[-91.247851,40.63839],[-91.339719,40.613488],[-91.374252,40.58259],[-91.394475,40.534543],[-91.367876,40.510479],[-91.379907,40.45211],[-91.372921,40.399108],[-91.419422,40.378264],[-91.498093,40.401926],[-91.519134,40.432822],[-91.563844,40.460988],[-91.608347,40.50004],[-91.618999,40.539084],[-91.670993,40.550937],[-91.685381,40.578892],[-91.71665498768186,40.603740139295994],[-91.729115,40.61364],[-91.939292,40.60615],[-91.94311745968568,40.606060586354],[-92.17978,40.600529],[-92.35080418672638,40.59725727637609],[-92.453745,40.595288],[-92.63790329359948,40.59095654709789],[-92.686693,40.589809],[-92.71459726304498,40.589582833836296],[-92.941595,40.587743],[-93.09729120374978,40.58382347732509],[-93.135802,40.582854],[-93.345442,40.580514],[-93.37438625876378,40.580397032609184],[-93.55689667427168,40.57965948506049],[-93.597352,40.579496],[-93.77434420403027,40.577530453391084],[-93.84093,40.576791],[-94.015492,40.57407370700959],[-94.091085,40.572897],[-94.23224071020826,40.57201461212659],[-94.310724,40.571524],[-94.47120772712316,40.570959458356995],[-94.533878,40.570739],[-94.63202591769478,40.57175958739999],[-94.819978,40.573714],[-94.91489786736157,40.57492116911129],[-95.068921,40.57688],[-95.20226600083026,40.578375628995985],[-95.335588,40.579871],[-95.37392505339868,40.58033237794148],[-95.533182,40.582249],[-95.765645,40.585208],[-95.748626,40.603355],[-95.781909,40.653272],[-95.846034,40.682605],[-95.888697,40.736292],[-95.834156,40.783016],[-95.83424381671439,40.78378438704309],[-95.841309,40.845604],[-95.810709,40.886681],[-95.81872727856988,40.89794806640649],[-95.837774,40.924712],[-95.828329,40.972378],[-95.865878,41.017403],[-95.86478476408527,41.05284550461349],[-95.863839,41.083507],[-95.868688,41.124698],[-95.86189806820938,41.160302348212696],[-95.856788,41.187098],[-95.90969,41.184398],[-95.90990849125477,41.191282850827896],[-95.911391,41.237998],[-95.890152,41.278308],[-95.92569,41.322197],[-95.92879,41.370096],[-95.92733624232008,41.38998793745959],[-95.922529,41.455766],[-95.982962,41.469778],[-95.99402039301187,41.506890640941485],[-96.005079,41.544004],[-96.080493,41.528199],[-96.09182,41.561086],[-96.118105,41.613495],[-96.111483,41.668548],[-96.10793787174647,41.676508989762084],[-96.0876,41.72218],[-96.064537,41.793002],[-96.107911,41.840339],[-96.12682125346538,41.86609524770159],[-96.159098,41.910057],[-96.132537,41.974625],[-96.223611,42.022652],[-96.272877,42.047238],[-96.2689,42.11359],[-96.347752,42.166806],[-96.33721609470588,42.2148495068956],[-96.336323,42.218922],[-96.336003,42.264806],[-96.35195719249597,42.280894704543286],[-96.407998,42.337408],[-96.411808,42.410894],[-96.381307,42.461694],[-96.445508,42.49063],[-96.477454,42.509589],[-96.49297,42.517282],[-96.476952,42.556079],[-96.48002247897999,42.56132477656069],[-96.526766,42.641184],[-96.591602,42.688081],[-96.624704,42.725497],[-96.621875,42.779255]]]}},
+{"type":"Feature","properties":{"name":"Kentucky","income":{"1995":28929,"1996":30630,"1997":31730,"1998":33955,"1999":33732,"2000":35150,"2001":35977,"2002":35875,"2003":36663,"2004":37046,"2005":37377,"2006":39318,"2007":40299,"2008":41489,"2009":40061,"2010":40089,"2011":41141,"2012":41717,"2013":43307,"2014":42914,"2015":45178}},"geometry":{"type":"Polygon","coordinates":[[[-89.544434,36.57451],[-89.479346,36.566253],[-89.407906,36.562345],[-89.378694,36.622292],[-89.327319777009,36.62394628877049],[-89.324658,36.624032],[-89.278935,36.577699],[-89.227319,36.569375],[-89.199136,36.625649],[-89.17564977234687,36.65131926255349],[-89.165488,36.662426],[-89.202511,36.716618],[-89.15699,36.755968],[-89.15598490907037,36.786292663371384],[-89.155891,36.789126],[-89.147674,36.847148],[-89.120472,36.891896],[-89.10313544832657,36.94476090032229],[-89.098843,36.95785],[-89.132915,36.982057],[-89.128899,37.017908],[-89.16662021201968,37.07211034379988],[-89.168087,37.074218],[-89.099047,37.140967],[-89.058036,37.188767],[-89.000968,37.224401],[-88.93351721474778,37.227511279914594],[-88.931745,37.227593],[-88.92800482949427,37.226389766253085],[-88.835051,37.196486],[-88.753068,37.154701],[-88.693983,37.141155],[-88.61144,37.112745],[-88.56104392947259,37.08399998095839],[-88.531576,37.067192],[-88.49039944632467,37.067957622947894],[-88.48380327697997,37.06808026989549],[-88.476127,37.068223],[-88.444605,37.098601],[-88.424776,37.149901],[-88.471753,37.220155],[-88.514661,37.290948],[-88.486947,37.339596],[-88.465861,37.400547],[-88.418594,37.421987],[-88.41590217877568,37.42122063771888],[-88.358436,37.40486],[-88.281667,37.452596],[-88.157061,37.466937],[-88.062294,37.487837],[-88.06625032009708,37.50413832734819],[-88.072242,37.528826],[-88.131622,37.572968],[-88.13216343827247,37.57451700082999],[-88.160062,37.654332],[-88.132341,37.697142],[-88.059588,37.742608],[-88.02803,37.799224],[-87.970262,37.781856],[-87.935861,37.789703],[-87.903804,37.817762],[-87.938128,37.870651],[-87.92539337830539,37.89959148487409],[-87.921744,37.907885],[-87.87254,37.920999],[-87.808013,37.875191],[-87.723635,37.892058],[-87.71321078529026,37.883088390366495],[-87.681633,37.855917],[-87.625851,37.851919],[-87.608479,37.898794],[-87.551277,37.925418],[-87.486347,37.920218],[-87.44863585760947,37.93387786821488],[-87.418585,37.944763],[-87.331765,37.908253],[-87.30405745244198,37.89343254912228],[-87.270387407739,37.87542282658999],[-87.25525,37.867326],[-87.180063,37.841375],[-87.137502,37.807264],[-87.105614,37.767631],[-87.057836,37.827457],[-87.043049,37.875049],[-87.010315,37.919668],[-86.97774142511018,37.92569920837269],[-86.927747,37.934956],[-86.875874,37.97077],[-86.81365994128528,37.99603449514159],[-86.810913,37.99715],[-86.779993,37.956522],[-86.722247,37.892648],[-86.658374,37.869376],[-86.64670305785909,37.864908975897784],[-86.615215,37.852857],[-86.599848,37.906754],[-86.509368,37.902887],[-86.525174,37.968228],[-86.521825,38.038327],[-86.48805246712828,38.04366530889968],[-86.471903,38.046218],[-86.434046,38.086763],[-86.43357436408806,38.087144387579485],[-86.387216,38.124632],[-86.35640726797098,38.13527783676579],[-86.321274,38.147418],[-86.278656,38.098509],[-86.206439,38.021876],[-86.095766,38.00893],[-86.033386,37.970382],[-85.99735165975429,37.99122560229909],[-85.976028,38.00356],[-85.95172964591549,38.01494012709058],[-85.922395,38.028679],[-85.905164,38.11107],[-85.89591178773559,38.17992692087039],[-85.894764,38.188469],[-85.839664,38.23977],[-85.816164,38.282969],[-85.79451090677007,38.27795473579529],[-85.750962,38.26787],[-85.683561,38.295469],[-85.646201,38.342916],[-85.6344441449773,38.37839944757479],[-85.621625,38.417089],[-85.587758,38.450495],[-85.498866,38.468242],[-85.474354,38.504074],[-85.433136,38.523914],[-85.43297226942606,38.52412339698789],[-85.4156,38.546341],[-85.43141607075218,38.58628561310889],[-85.43617,38.598292],[-85.438742,38.659319],[-85.448862,38.713368],[-85.400481,38.73598],[-85.340953,38.733893],[-85.33264073375139,38.73481675434769],[-85.275454,38.741172],[-85.238665,38.722494],[-85.20176062254856,38.69744079184628],[-85.187278,38.687609],[-85.146861,38.695427],[-85.071928,38.741567],[-85.02105214167419,38.758527324713896],[-84.962535,38.778035],[-84.856904,38.790224],[-84.812877,38.786087],[-84.803247,38.850723],[-84.79869982295229,38.85922739020669],[-84.786406,38.88222],[-84.830472,38.897256],[-84.86442851899166,38.91384364104939],[-84.877762,38.920357],[-84.832617,38.96146],[-84.849445,39.000923],[-84.87757023112478,39.031262844093995],[-84.897171,39.052407],[-84.860689,39.07814],[-84.820157,39.10548],[-84.750749,39.147358],[-84.714048,39.132659],[-84.677247,39.09826],[-84.62228392463076,39.07842004166409],[-84.607928,39.073238],[-84.550844,39.09936],[-84.50651873743688,39.10176640818799],[-84.49918784070238,39.10216440086548],[-84.493743,39.10246],[-84.480943,39.11676],[-84.462042,39.12176],[-84.445242,39.114461],[-84.432941,39.083961],[-84.40094,39.046362],[-84.326539,39.027463],[-84.32120722685679,39.020586352689385],[-84.297255,38.989694],[-84.288164,38.955789],[-84.232132,38.880483],[-84.23230504540348,38.874707896031694],[-84.233265,38.842671],[-84.22616263396347,38.829777141242],[-84.212904,38.805707],[-84.135088,38.789485],[-84.05264617321959,38.77161466753579],[-84.051642,38.771397],[-83.978814,38.787104],[-83.928454,38.774583],[-83.90437508610479,38.76728387526779],[-83.852085,38.751433],[-83.834015,38.716008],[-83.78362,38.695641],[-83.77216,38.65815],[-83.70586163558556,38.63803786506599],[-83.679484,38.630036],[-83.64691140412668,38.641851934545784],[-83.642994,38.643273],[-83.626922,38.679387],[-83.533339,38.702105],[-83.440404,38.669361],[-83.376302,38.661473],[-83.320531,38.622713],[-83.286514,38.599241],[-83.26429890195868,38.613112496887496],[-83.239515,38.628588],[-83.172647,38.620252],[-83.128973,38.640231],[-83.112372,38.671685],[-83.042338,38.708319],[-83.03033493123107,38.71686767665609],[-83.011816,38.730057],[-82.943147,38.74328],[-82.889193,38.756076],[-82.88228999360929,38.741619223269595],[-82.871192,38.718377],[-82.869592,38.678177],[-82.851314,38.604334],[-82.8115423846504,38.57236958956188],[-82.800112,38.563183],[-82.724846,38.5576],[-82.675724,38.515504],[-82.66411690751568,38.50771559025699],[-82.618474,38.477089],[-82.593673,38.421809],[-82.59596426449998,38.38088976171549],[-82.597979,38.344909],[-82.571877,38.315781],[-82.581796,38.248592],[-82.58469381412559,38.24051299336969],[-82.598864,38.201007],[-82.626182,38.134835],[-82.549407,38.063063],[-82.464987,37.976859],[-82.47942012322297,37.938562524698085],[-82.487556,37.916975],[-82.41869,37.872375],[-82.39846481625888,37.84305415046289],[-82.369973,37.801749],[-82.327356,37.762233],[-82.32067495717779,37.74596584345939],[-82.296118,37.686174],[-82.226111,37.653092],[-82.141555,37.595166],[-82.064418,37.544516],[-81.968297,37.537798],[-82.201745,37.375108],[-82.309415,37.300066],[-82.31478127133458,37.29599456011749],[-82.355343,37.26522],[-82.449164,37.243908],[-82.55363382627456,37.20145269844589],[-82.558178,37.199606],[-82.565275702797,37.19590110688309],[-82.726294,37.111852],[-82.722254,37.057948],[-82.750715,37.024107],[-82.815748,37.007196],[-82.869183,36.974182],[-82.865192,36.920923],[-82.88361015487978,36.897314788915786],[-82.895445,36.882145],[-83.012587,36.847289],[-83.07559,36.850589],[-83.114693,36.796088],[-83.136395,36.743088],[-83.236399,36.726887],[-83.386099,36.686589],[-83.436508,36.666185],[-83.46095464746378,36.66613103627329],[-83.527112,36.665985],[-83.614513,36.633983],[-83.675413,36.600814],[-83.690714,36.582581],[-83.894421,36.586481],[-83.93076078394387,36.58769425811239],[-83.98761095068278,36.58959228607249],[-83.987842,36.5896],[-84.22719396199828,36.59217951235509],[-84.227332,36.592181],[-84.26132120150467,36.592741697266995],[-84.499938,36.596678],[-84.77845586435048,36.60321051221589],[-84.785341,36.603372],[-84.78539997855027,36.603375419935595],[-84.943948,36.612569],[-84.97486843583738,36.61458335931719],[-85.096128,36.622483],[-85.27628794749938,36.62615754080338],[-85.290627,36.62645],[-85.29581248572748,36.62614955936749],[-85.43640427288588,36.618003845027],[-85.488353,36.614994],[-85.731862,36.620429],[-85.78855654361386,36.62171185903469],[-85.873857,36.623642],[-85.97571317414399,36.62863771868169],[-86.081944,36.633848],[-86.20556526985598,36.63924687032879],[-86.41149619896639,36.6482404228482],[-86.507771,36.652445],[-86.551292,36.637985],[-86.56206765186529,36.640746673907294],[-86.606394,36.652107],[-86.76329096410846,36.64872067450179],[-86.813037,36.647647],[-87.06082634439286,36.64477088485159],[-87.1150035566884,36.64414204465119],[-87.33597905008078,36.64157716049309],[-87.347796,36.64144],[-87.64114589700208,36.63803604761009],[-87.64115,36.638036],[-87.69418590786428,36.63683824394369],[-87.853204,36.633247],[-87.849567,36.663701],[-88.011792,36.677025],[-88.070532,36.678118],[-88.055738,36.630475],[-88.033802,36.551733],[-88.050466,36.500053],[-88.05335080077587,36.49999625068159],[-88.127378,36.49854],[-88.48907673871317,36.501283719075694],[-88.51192,36.501457],[-88.51635805997938,36.50146419816328],[-88.81676415734808,36.50195143181319],[-88.82717803634047,36.50196832225689],[-88.83458902287427,36.50198034225929],[-88.964471,36.502191],[-89.211409,36.50563],[-89.34519431953878,36.50134320863689],[-89.417293,36.499033],[-89.539232,36.497934],[-89.571481,36.538087],[-89.544434,36.57451]]]}},
+{"type":"Feature","properties":{"name":"Louisiana","income":{"1995":27265,"1996":28921,"1997":30466,"1998":30894,"1999":31904,"2000":32124,"2001":32959,"2002":33536,"2003":33792,"2004":35216,"2005":36547,"2006":39122,"2007":40866,"2008":43635,"2009":42460,"2010":42510,"2011":41804,"2012":42998,"2013":44234,"2014":44680,"2015":45829}},"geometry":{"type":"Polygon","coordinates":[[[-94.04305152761756,32.69302997666559],[-94.043026,32.797476],[-94.04300262156329,32.88108897892399],[-94.042964,33.019219],[-93.81455301343377,33.01938904487079],[-93.80490777463038,33.01939622545089],[-93.723273,33.019457],[-93.52099355377158,33.018742293588],[-93.49051240012037,33.01863459566629],[-93.377134,33.018234],[-93.23860696239936,33.01801587995659],[-93.197402,33.017951],[-92.988707610715,33.01725094015219],[-92.971137,33.017192],[-92.72474317317926,33.01434176767479],[-92.723553,33.014328],[-92.501383,33.01216],[-92.222825,33.00908],[-92.06914659248126,33.00848243025689],[-92.06910375856128,33.008482263699584],[-91.875128,33.007728],[-91.489176,33.006182],[-91.4603917718319,33.00599705570149],[-91.43593108033177,33.0058398909721],[-91.26456405022049,33.00473882427039],[-91.166073,33.004106],[-91.134414,32.980533],[-91.072075,32.937832],[-91.070602,32.888659],[-91.13789,32.848975],[-91.161669,32.812465],[-91.157614,32.776033],[-91.113652,32.73997],[-91.056999,32.72558],[-91.098762,32.685291],[-91.079506,32.60068],[-91.05529310494987,32.5789835010771],[-91.049312,32.573624],[-91.04876042776367,32.57279704042139],[-91.011275,32.516596],[-91.060516,32.512361],[-91.052907,32.438442],[-90.965986,32.424806],[-90.986672,32.35176],[-90.92117,32.342073],[-90.947834,32.283486],[-90.991227,32.214662],[-91.108509,32.20815],[-91.03947231890697,32.10796814266529],[-91.034707,32.101053],[-91.079108,32.050255],[-91.080808,32.023456],[-91.117409,31.987057],[-91.17741,31.973257],[-91.18111,31.920059],[-91.234899,31.876863],[-91.24401516132468,31.86973243750389],[-91.290135,31.833658],[-91.345714,31.842861],[-91.359514,31.799362],[-91.32045873328158,31.74780061448219],[-91.318576,31.745315],[-91.38012452998348,31.732626953049998],[-91.380915,31.732464],[-91.395715,31.644165],[-91.463817,31.620365],[-91.457517,31.587566],[-91.437616,31.546166],[-91.489618,31.534266],[-91.51714,31.498394],[-91.510356,31.438928],[-91.532336,31.390275],[-91.536061,31.338355],[-91.508858,31.291644],[-91.564192,31.261633],[-91.621358,31.267811],[-91.644356,31.234414],[-91.590051,31.193693],[-91.59099389306448,31.191998565698793],[-91.621671,31.13687],[-91.594693,31.091444],[-91.560365,31.049508],[-91.62825729820878,31.00509700189519],[-91.636942,30.999416],[-91.224068,30.999183],[-91.17614012396687,30.99922420231859],[-91.06012746799657,30.99932393530919],[-90.82582914129189,30.99952535534059],[-90.758775,30.999583],[-90.56719540065848,30.99994502439989],[-90.54757442523307,30.999982101791588],[-90.34724108066209,31.00036066798079],[-90.346007,31.000363],[-90.25955494049128,31.00066178122909],[-89.897516,31.001913],[-89.83590782432817,31.002101423117598],[-89.728147,31.002431],[-89.72817569016057,31.00231388798409],[-89.750073,30.91293],[-89.791745,30.820387],[-89.836331,30.727197],[-89.82618035911518,30.668823270185197],[-89.821868,30.644024],[-89.791664,30.551524],[-89.712493,30.47751],[-89.69993208284077,30.454036880785996],[-89.678514,30.414012],[-89.634208,30.308256],[-89.607655,30.217096],[-89.524504,30.180753],[-89.60508845655457,30.142814157559293],[-89.656986,30.118381],[-89.683712,30.076018],[-89.782534,30.045372],[-89.845065,30.01841],[-89.84529711957238,30.016381840570094],[-89.852583,29.952721],[-89.795969,29.934003],[-89.744272,29.917647],[-89.701725,29.874085],[-89.647064,29.863602],[-89.598129,29.881409],[-89.574425,29.983738],[-89.494064,30.040972],[-89.444618,30.060959],[-89.342163,30.059172],[-89.303026,30.09157],[-89.233168,30.134957],[-89.183256,30.149344],[-89.185799,30.063934],[-89.215675,29.993523],[-89.231178,29.925484],[-89.236298,29.877081],[-89.293251,29.803053],[-89.271034,29.756355],[-89.399162,29.770592],[-89.403956,29.681808],[-89.465562,29.651738],[-89.50096675313368,29.63345542505879],[-89.504738,29.631508],[-89.535202,29.648567],[-89.602109,29.610295],[-89.564615,29.543786],[-89.569607,29.494044],[-89.53215,29.434567],[-89.482318,29.406222],[-89.380001,29.391785],[-89.312085,29.388038],[-89.257852,29.336872],[-89.200389,29.344418],[-89.134337,29.27934],[-89.116653,29.219532],[-89.025974,29.215153],[-89.01428,29.166913],[-89.066617,29.090714],[-89.11653,29.074097],[-89.148792,29.02967],[-89.142866,28.991623],[-89.218673,29.022515],[-89.259354,29.058358],[-89.322011,29.010251],[-89.400966,28.933812],[-89.40353,29.016964],[-89.361098,29.071848],[-89.390515,29.123576],[-89.432932,29.149023],[-89.482844,29.215053],[-89.564551,29.242527],[-89.606651,29.252023],[-89.639663,29.290531],[-89.726162,29.304026],[-89.842641,29.318823],[-89.883463,29.307103],[-89.90270632402427,29.293036606495995],[-89.95646,29.253744],[-90.058512,29.183687],[-90.08983544819417,29.164475356621097],[-90.122753,29.144286],[-90.223587,29.085075],[-90.334935,29.063803],[-90.40947090171977,29.05844438592819],[-90.442734,29.056053],[-90.488117,29.05876],[-90.652116,29.057721],[-90.748377,29.04006],[-90.81255,29.042138],[-90.867853,29.056064],[-90.877583,29.104891],[-90.941877,29.162373],[-91.000096,29.169481],[-91.094015,29.187711],[-91.158148,29.2181],[-91.278792,29.247776],[-91.334885,29.298775],[-91.276647,29.329825],[-91.265452,29.360976],[-91.26632267071919,29.361363733345996],[-91.334051,29.391525],[-91.363967,29.420664],[-91.347514,29.444438],[-91.394307,29.497115],[-91.460963,29.469961],[-91.48559,29.499116],[-91.531021,29.531543],[-91.537445,29.565888],[-91.541974,29.594353],[-91.600179,29.631156],[-91.643832,29.630625],[-91.623829,29.69924],[-91.667128,29.745822],[-91.737253,29.74937],[-91.808142,29.725097],[-91.85307,29.702936],[-91.86255699652258,29.667395463759892],[-91.873266,29.627277],[-91.80373,29.595952],[-91.711081,29.569328],[-91.768263,29.490362],[-91.821579,29.473925],[-91.915321,29.518513],[-92.030186,29.572669],[-92.04289430382738,29.577480288971994],[-92.064513,29.585665],[-92.158624,29.581616],[-92.25186,29.539354],[-92.323465,29.531497],[-92.40986,29.547477],[-92.473585,29.561081],[-92.568038,29.577397],[-92.61723443744988,29.589059016173493],[-92.684486,29.605001],[-92.879992,29.680285],[-92.993128,29.723846],[-93.088182,29.749125],[-93.17693,29.770487],[-93.295573,29.775071],[-93.411087,29.767357],[-93.538462,29.763299],[-93.741948,29.736343],[-93.79925,29.71526],[-93.837971,29.690619],[-93.863204,29.724059],[-93.890821,29.761673],[-93.929208,29.802952],[-93.872446,29.85165],[-93.85230987092228,29.87209100439189],[-93.830374,29.894359],[-93.807815,29.954549],[-93.741078,30.021571],[-93.70633576247016,30.05218024153089],[-93.70394,30.054291],[-93.702436,30.112721],[-93.703764,30.173936],[-93.713359,30.225261],[-93.71106217130087,30.24397071564029],[-93.70719,30.275513],[-93.760328,30.329924],[-93.745333,30.397022],[-93.738540238226,30.40226367248079],[-93.702665,30.429947],[-93.710117,30.5064],[-93.729195,30.544842],[-93.684329,30.592586],[-93.685121,30.625201],[-93.629904,30.67994],[-93.617688,30.738479],[-93.569303,30.802969],[-93.558617,30.869424],[-93.55457585434549,30.87746950186109],[-93.530936,30.924534],[-93.549841,30.967118],[-93.539526,31.008498],[-93.531219,31.051678],[-93.540278,31.128868],[-93.535097,31.185614],[-93.55249730750228,31.18482002344679],[-93.60060308736288,31.18262495526879],[-93.602443,31.182541],[-93.613942,31.259375],[-93.67544,31.30104],[-93.668146,31.375103],[-93.697603,31.428409],[-93.749476,31.46869],[-93.725925,31.504092],[-93.787687,31.527344],[-93.83492321447775,31.586210021077996],[-93.834924,31.586211],[-93.816838,31.622509],[-93.803419,31.700686],[-93.85339,31.805467],[-93.87825189538658,31.844276557245585],[-93.909557,31.893144],[-93.977461,31.926419],[-94.02942840659598,31.979686964167996],[-94.041833,31.992402],[-94.042681,32.137956],[-94.04269592374007,32.196004974824895],[-94.042739,32.363559],[-94.0427882328053,32.392283193281195],[-94.043083,32.564261],[-94.04305152761756,32.69302997666559]]]}},
+{"type":"Feature","properties":{"name":"Maryland","income":{"1995":42132,"1996":44196,"1997":45289,"1998":47492,"1999":49781,"2000":52740,"2001":53090,"2002":53866,"2003":54302,"2004":57019,"2005":61546,"2006":65041,"2007":67989,"2008":70482,"2009":69193,"2010":68933,"2011":70075,"2012":71169,"2013":72482,"2014":73851,"2015":75784}},"geometry":{"type":"MultiPolygon","coordinates":[[[[-76.046213,38.025533],[-76.007337,38.036706],[-75.980089,38.004891],[-75.984648,37.938121],[-76.04653,37.953586],[-76.046213,38.025533]]],[[[-79.484372,39.3443],[-79.482366,39.531689],[-79.476662,39.721078],[-79.39245840502238,39.72143935864009],[-79.045576,39.722928],[-78.93117513430978,39.72299692517329],[-78.80829952962156,39.72307095627689],[-78.723578,39.723122],[-78.38047706456398,39.72270413883999],[-78.34283351857438,39.72265829292649],[-78.342593,39.722658],[-78.09897069616667,39.72246619442808],[-78.075861,39.722448],[-77.768644,39.721538],[-77.469274,39.720229],[-77.46914500368037,39.720229002249994],[-77.45943341952388,39.72022917164499],[-77.23995,39.720233],[-77.21702375523738,39.72021724838539],[-76.99931802633319,39.72006767235259],[-76.991062,39.720062],[-76.78709719975758,39.72104814611128],[-76.715771,39.721393],[-76.56947511721158,39.72145855910529],[-76.41898,39.721526],[-76.23968374111459,39.72164198992459],[-76.233485,39.721646],[-76.23327934711658,39.72164625562789],[-76.13569742699018,39.721767550606685],[-75.81207998484679,39.72216980924989],[-75.788596,39.722199],[-75.76690460670918,39.37765159355119],[-75.766895,39.377499],[-75.76044141645049,39.29678962110009],[-75.75643521556849,39.2466875371253],[-75.74815481425408,39.14313173095969],[-75.72310269333266,38.82982655652769],[-75.70755502642899,38.635385355059896],[-75.707551,38.635335],[-75.70177751524498,38.560766929078596],[-75.700382,38.542743],[-75.693721,38.460128],[-75.479283,38.453698],[-75.34128732034819,38.45243652595549],[-75.185455,38.451012],[-75.048939,38.451263],[-75.085518,38.32427],[-75.102947,38.311525],[-75.143229,38.220475],[-75.177394,38.130014],[-75.193796,38.096013],[-75.242266,38.027209],[-75.624341,37.994211],[-75.669711,37.950796],[-75.722662,37.97131],[-75.783815,37.972594],[-75.860727,37.91831],[-75.892686,37.916848],[-75.898956,37.974514],[-75.857507,38.038778],[-75.858881,38.060135],[-75.86381,38.100968],[-75.937089,38.124209],[-75.942375,38.187066],[-75.864104,38.200858],[-75.87544731146468,38.219709301961],[-75.888513,38.241423],[-75.92376608242829,38.246285277001995],[-75.9445,38.249145],[-76.038935,38.254932],[-76.031988,38.18742],[-76.011916,38.122214],[-76.005904,38.07717],[-76.048692,38.086728],[-76.095548,38.125123],[-76.088639,38.192649],[-76.135513,38.232185],[-76.217613,38.305683],[-76.257667,38.324855],[-76.25,38.362304],[-76.280551,38.403143],[-76.33636,38.492235],[-76.277461,38.541851],[-76.290043,38.569158],[-76.279589,38.60952],[-76.231187,38.61401],[-76.203065,38.610741],[-76.165435,38.6102],[-76.17016187458728,38.640842047150095],[-76.175159,38.673236],[-76.200334,38.670774],[-76.238725,38.712845],[-76.275015,38.712714],[-76.322418,38.679304],[-76.347998,38.686234],[-76.340543,38.730338],[-76.39035,38.757004],[-76.379739,38.788314],[-76.310081,38.796846],[-76.271575,38.851771],[-76.219328,38.812371],[-76.19109,38.82966],[-76.19686875994799,38.855741963420684],[-76.205063,38.892726],[-76.203638,38.928382],[-76.250868,38.92825],[-76.317947,38.911312],[-76.334019,38.860238],[-76.376202,38.850461],[-76.361727,38.939175],[-76.322296,39.006375],[-76.301847,39.039651],[-76.26503664040868,39.02855095534879],[-76.231765,39.018518],[-76.233457,39.091385],[-76.246481,39.119588],[-76.278527,39.145764],[-76.243166,39.213362],[-76.211253,39.269812],[-76.177704,39.298701],[-76.159673,39.335909],[-76.110527,39.372257],[-76.06149882195567,39.387748114115084],[-76.040962,39.394237],[-76.00688,39.414527],[-76.012312,39.453115],[-76.03764628831578,39.452642382309286],[-76.060931,39.452208],[-76.146373,39.40531],[-76.224161,39.35278],[-76.296609,39.301137],[-76.32541834195688,39.272905086082694],[-76.349994,39.248822],[-76.395509,39.231702],[-76.425281,39.205708],[-76.463483,39.205908],[-76.498384,39.204808],[-76.50400859091808,39.19928624912599],[-76.525785,39.177908],[-76.428681,39.131709],[-76.42186,39.081442],[-76.420394,39.04207],[-76.39408,39.011311],[-76.448981,38.982811],[-76.471281,38.956512],[-76.45028,38.941113],[-76.46938,38.907613],[-76.47397616365546,38.90269337862989],[-76.49068,38.884814],[-76.516944,38.851157],[-76.489878,38.838715],[-76.526979,38.787016],[-76.558743,38.756352],[-76.526655,38.72443],[-76.52709254739416,38.712750301238295],[-76.528923,38.663889],[-76.511278,38.615745],[-76.517506,38.539149],[-76.492699,38.482849],[-76.450937,38.442422],[-76.393378,38.389477],[-76.387002,38.361267],[-76.40019462469799,38.319871943961395],[-76.402894,38.311402],[-76.374481,38.296348],[-76.392668,38.239663],[-76.353516,38.178135],[-76.320136,38.138339],[-76.330794,38.099331],[-76.322093,38.036503],[-76.37179,38.079565],[-76.430425,38.119383],[-76.481036,38.115873],[-76.54038,38.152991],[-76.590637,38.214212],[-76.673462,38.234401],[-76.740055,38.235227],[-76.805949,38.252275],[-76.82703612928188,38.25830010061409],[-76.864292,38.268945],[-76.922177,38.311339],[-76.975492,38.347327],[-77.001638,38.421952],[-77.016371,38.445572],[-77.075489,38.42471],[-77.123325,38.410646],[-77.211188,38.380662],[-77.259962,38.435821],[-77.246584,38.538341],[-77.183767,38.600699],[-77.129084,38.614364],[-77.1302,38.635017],[-77.132501,38.673816],[-77.08578476515638,38.70528128183239],[-77.079499,38.709515],[-77.053199,38.709915],[-77.040998,38.737914],[-77.04067257077807,38.74669193048289],[-77.03923988508228,38.78533632562359],[-77.039006,38.791645],[-76.979497,38.837812],[-76.909393,38.892852],[-77.00254624424699,38.96553170044589],[-77.041018,38.995548],[-77.119759,38.934343],[-77.146601,38.96421],[-77.202502,38.96791],[-77.249803,38.985909],[-77.24840370497539,39.02688835429229],[-77.248403,39.026909],[-77.310705,39.052008],[-77.33003770595407,39.055952113490996],[-77.359702,39.062004],[-77.462617,39.076248],[-77.481279,39.105658],[-77.519929,39.120925],[-77.521222,39.161057],[-77.485971,39.185665],[-77.459883,39.218682],[-77.46006562649778,39.218842943859386],[-77.496606,39.251045],[-77.553114,39.279268],[-77.588235,39.301955],[-77.66613,39.317008],[-77.67769576207868,39.317940817087994],[-77.719519,39.321314],[-77.74593,39.353221],[-77.740012,39.401694],[-77.798201,39.475719],[-77.81094389626217,39.50073916656648],[-77.823762,39.525907],[-77.829814,39.587288],[-77.925988,39.607642],[-78.006734,39.601337],[-78.02762910017326,39.620655962344095],[-78.08226,39.671166],[-78.225075,39.658878],[-78.313033,39.631001],[-78.33278802149908,39.62852759649879],[-78.382959,39.622246],[-78.438179,39.563524],[-78.460951,39.525987],[-78.46826959500288,39.526224270471694],[-78.590654,39.530192],[-78.65503617154668,39.54438224108369],[-78.707098,39.555857],[-78.73905,39.609697],[-78.77114,39.638387],[-78.851016,39.554044],[-78.942618,39.479614],[-78.956751,39.440264],[-79.035623,39.473344],[-79.06782557347339,39.47280233821589],[-79.091329,39.472407],[-79.166497,39.400888],[-79.26239211717608,39.32624382846739],[-79.283723,39.30964],[-79.35375,39.278039],[-79.424413,39.228171],[-79.486873,39.205961],[-79.484372,39.3443]]]]}},
+{"type":"Feature","properties":{"name":"Michigan","income":{"1995":35940,"1996":38266,"1997":38883,"1998":41963,"1999":44221,"2000":45202,"2001":45688,"2002":44315,"2003":46291,"2004":44409,"2005":46072,"2006":47187,"2007":47931,"2008":48606,"2009":45254,"2010":45354,"2011":45931,"2012":46793,"2013":48200,"2014":49755,"2015":51063}},"geometry":{"type":"MultiPolygon","coordinates":[[[[-84.61622,45.89447],[-84.517895,45.828543],[-84.419696,45.799823],[-84.35602,45.771895],[-84.394038,45.727623],[-84.484128,45.73071],[-84.587572,45.8067],[-84.650783,45.85921],[-84.61622,45.89447]]],[[[-85.701809,45.736129],[-85.651866,45.743139],[-85.524448,45.829794],[-85.360952,45.817554],[-85.377132,45.769013],[-85.509276,45.596475],[-85.561634,45.572213],[-85.622741,45.586028],[-85.696872,45.69725],[-85.701809,45.736129]]],[[[-86.138095,45.043038],[-86.04443,45.159582],[-85.989412,45.151069],[-85.954021,45.119281],[-85.976883,45.06266],[-86.081487,44.990096],[-86.154824,45.002394],[-86.138095,45.043038]]],[[[-86.693267,41.835403],[-86.597899,41.918291],[-86.501322,42.08454],[-86.466262,42.134406],[-86.36637912703829,42.243107727180885],[-86.356218,42.254166],[-86.284448,42.394563],[-86.27699404453148,42.41931031592629],[-86.240642,42.54],[-86.22869480100228,42.629511854701185],[-86.226638,42.644922],[-86.208309,42.762789],[-86.20853850290966,42.76754387191569],[-86.214138,42.883555],[-86.226305,42.988284],[-86.254646,43.083409],[-86.27392827867138,43.11836796870779],[-86.316259,43.195114],[-86.407832,43.338436],[-86.448743,43.432013],[-86.46351688668106,43.47232969950669],[-86.479276,43.515335],[-86.529507,43.593462],[-86.540787,43.644593],[-86.510319,43.698625],[-86.445123,43.771564],[-86.43548503825829,43.819429198004194],[-86.431198,43.84072],[-86.447915,43.918089],[-86.463136,43.970976],[-86.46320311524846,43.97106455971969],[-86.501738,44.021912],[-86.514702,44.058119],[-86.45806527573767,44.09928779829528],[-86.429871,44.119782],[-86.39139914690867,44.173701998925],[-86.38784339752875,44.178685538508894],[-86.351638,44.229429],[-86.26871,44.345324],[-86.251926,44.400984],[-86.248914,44.483004],[-86.23702086501648,44.51829858614469],[-86.220697,44.566742],[-86.25395,44.64808],[-86.248474,44.699046],[-86.160268,44.728189],[-86.089186,44.741496],[-86.07847345281048,44.77841599575308],[-86.065966,44.821522],[-86.058862,44.911012],[-85.980219,44.906136],[-85.9316,44.968788],[-85.854304,44.938147],[-85.780439,44.977932],[-85.746444,45.051229],[-85.681096,45.092693],[-85.633124,45.170899],[-85.551072,45.210742],[-85.531461,45.177247],[-85.56613,45.043633],[-85.55514270270878,45.02703454413689],[-85.520034,44.973996],[-85.475204,44.991053],[-85.4314154750083,45.016649452717694],[-85.380659,45.046319],[-85.366749,45.101591],[-85.380464,45.180876],[-85.37782997459678,45.207586816956386],[-85.371593,45.270834],[-85.294848,45.316408],[-85.196704,45.360641],[-85.09605687227098,45.36308804043479],[-85.054805,45.364091],[-84.959119,45.375973],[-84.912956,45.409776],[-84.980953,45.429382],[-85.040936,45.436701],[-85.109252,45.521626],[-85.119737,45.569026],[-85.061488,45.639505],[-84.97095,45.686334],[-85.014509,45.760329],[-84.866976,45.752066],[-84.772765,45.789301],[-84.732242,45.780496853288994],[-84.718904,45.777599],[-84.553311,45.698566],[-84.46168,45.652404],[-84.413642,45.669427],[-84.329537,45.66438],[-84.21089334555627,45.62623101784838],[-84.196043,45.621456],[-84.126532,45.556616],[-84.095905,45.497298],[-83.99835,45.491158],[-83.909472,45.485784],[-83.841543,45.435287],[-83.697316,45.396239],[-83.599273,45.352561],[-83.488826,45.355872],[-83.385104,45.274195],[-83.405914,45.227157],[-83.38521107925648,45.20710399314799],[-83.315924,45.139992],[-83.265896,45.026844],[-83.340257,45.041545],[-83.399255,45.070364],[-83.442052,45.051056],[-83.435822,45.000012],[-83.438856,44.940843],[-83.352815,44.886164],[-83.320503,44.880571],[-83.31626610857658,44.85859145056089],[-83.296971,44.758495],[-83.276836,44.689354],[-83.314517,44.608725],[-83.31696256841268,44.51173484788758],[-83.31761,44.486058],[-83.336988,44.332919],[-83.401822,44.301831],[-83.442731,44.265361],[-83.524817,44.261558],[-83.56464579249669,44.16352481840299],[-83.567744,44.155899],[-83.58409,44.056748],[-83.679654,44.036365],[-83.693214,43.98877],[-83.787863,43.985279],[-83.869406,43.960719],[-83.901329352181,43.90842705084419],[-83.910613,43.89322],[-83.929375,43.777091],[-83.94774,43.735165],[-83.909479,43.672622],[-83.817894,43.673789],[-83.731005,43.623369],[-83.69941709188109,43.60163715025649],[-83.683351,43.590584],[-83.52964047173398,43.71924491910489],[-83.51234,43.733726],[-83.50608555254279,43.74515721313988],[-83.479567,43.793625],[-83.43261,43.885273],[-83.407146,43.919807],[-83.28231,43.938031],[-83.26153,43.973525],[-83.134881,43.993147],[-83.046577,44.01571],[-83.024604,44.045174],[-82.928884,44.069389],[-82.793205,44.023247],[-82.709839,43.948226],[-82.633641,43.831224],[-82.612224,43.739771],[-82.60647742060837,43.690435],[-82.593785,43.581467],[-82.53993,43.422378],[-82.523086,43.225361],[-82.50604240495508,43.168827371311494],[-82.486042,43.102486],[-82.415937,43.005555],[-82.428603,42.952001],[-82.469912,42.887459],[-82.467483,42.76191],[-82.509935,42.637294],[-82.583996,42.554041],[-82.679059,42.52221],[-82.706371,42.621107],[-82.639701,42.661233],[-82.707885,42.675497],[-82.801022,42.629545],[-82.766004,42.600051],[-82.755927,42.564415],[-82.859316,42.541935],[-82.85944706548808,42.54085321960889],[-82.860210200131,42.534554505092494],[-82.86753194498138,42.4741227306931],[-82.87030495844998,42.451235],[-82.870347,42.450888],[-82.92397,42.352068],[-82.94967209864558,42.34426422122049],[-82.988619,42.332439],[-83.096521,42.290138],[-83.09785849625608,42.28601136524869],[-83.11568284140247,42.231017146190894],[-83.133923,42.17474],[-83.133511,42.088143],[-83.185526,42.052243],[-83.19490571413668,42.033202518164686],[-83.216897,41.988561],[-83.269521,41.939042],[-83.326024,41.924961],[-83.341557,41.879956],[-83.39622,41.852965],[-83.441668,41.808646],[-83.424076,41.740738],[-83.453832,41.732647],[-83.58554184210878,41.728772028512786],[-83.763038,41.72355],[-83.76314999206207,41.723546797762594],[-83.88039024525756,41.72019449661289],[-84.134417,41.712931],[-84.36041904139728,41.70695588263349],[-84.39954878547418,41.705921357405586],[-84.438067,41.704903],[-84.806082,41.696089],[-84.805883,41.760216],[-84.82512828387678,41.76019900635189],[-85.19677420030199,41.759870841802986],[-85.232835,41.759839],[-85.29217881133349,41.75975527470178],[-85.65975023799089,41.75923668604699],[-85.79133496196276,41.75905103955749],[-85.791363,41.759051],[-86.06256302901056,41.75965303315798],[-86.22607,41.760016],[-86.22609434498737,41.76001595911639],[-86.501773,41.759553],[-86.52421974244288,41.759572155973494],[-86.640044,41.759671],[-86.64132292052079,41.75967493814279],[-86.824828,41.76024],[-86.693267,41.835403]]],[[[-89.221332,47.908069],[-89.179154,47.93503],[-89.018303,47.992525],[-88.940886,48.01959],[-88.893701,48.03477],[-88.816084,48.057006],[-88.728198,48.101914],[-88.631908,48.148307],[-88.547033,48.174891],[-88.425162,48.21065],[-88.427373,48.166764],[-88.55044,48.102111],[-88.579172,48.040758],[-88.718555,47.995134],[-88.852923,47.965322],[-88.898986,47.900685],[-89.044463,47.85575],[-89.157738,47.824015],[-89.201812,47.850243],[-89.255202,47.876102],[-89.221332,47.908069]]],[[[-90.418136,46.566094],[-90.327626,46.607744],[-90.237609,46.624485],[-90.04542,46.668272],[-89.918466,46.740324],[-89.88386763801047,46.76581144666779],[-89.831956,46.804053],[-89.720277,46.830413],[-89.642255,46.82534],[-89.569808,46.831859],[-89.49908,46.841621],[-89.415154,46.843983],[-89.227914,46.912954],[-89.142595,46.984859],[-89.02893,47.00114],[-88.959409,47.008496],[-88.93336845134169,47.033599097856],[-88.924492,47.042156],[-88.88914,47.100575],[-88.814834,47.141399],[-88.69966,47.204831],[-88.584912,47.242361],[-88.51294650563608,47.28610724771499],[-88.50078,47.293503],[-88.418673,47.371188],[-88.285195,47.422392],[-88.217822,47.448738],[-88.085252,47.468961],[-87.929269,47.478737],[-87.801184,47.473301],[-87.680067,47.455685],[-87.591498,47.424113],[-87.604704,47.388625],[-87.800294,47.392148],[-87.941613,47.390073],[-87.94336,47.335899],[-88.016478,47.306275],[-88.096851,47.261351],[-88.194218,47.209242],[-88.20045067593368,47.199716895981986],[-88.239895,47.139436],[-88.340052,47.080494],[-88.385606,47.004522],[-88.43936318594379,46.94198242500038],[-88.455404,46.923321],[-88.477935,46.85056],[-88.372681,46.872277],[-88.244437,46.929612],[-88.143688,46.966665],[-88.065192,46.918563],[-88.04452168228147,46.91744994527619],[-87.900339,46.909686],[-87.77693,46.876726],[-87.687164,46.841742],[-87.595307,46.78295],[-87.573203,46.720471],[-87.503025,46.647497],[-87.381649,46.580059],[-87.366767,46.507303],[-87.175065,46.497548],[-87.11635958947068,46.50615140212049],[-86.976958,46.526581],[-86.903742,46.466138],[-86.810967,46.449663],[-86.750157,46.479109],[-86.695645,46.555026],[-86.62738,46.53371],[-86.557731,46.487434],[-86.45993,46.551928],[-86.188024,46.654008],[-86.138295,46.672935],[-85.995044,46.673676],[-85.86460714132917,46.686568315513384],[-85.841057,46.688896],[-85.482096,46.680432],[-85.25686,46.75338],[-85.23787317735956,46.755702781256495],[-85.173042,46.763634],[-84.964652,46.772845],[-85.028291,46.675125],[-85.027374,46.553756],[-84.969464,46.47629],[-84.849767,46.460245],[-84.678423,46.487694],[-84.607945,46.456747],[-84.493401,46.440313],[-84.461827,46.466566],[-84.420274,46.501077],[-84.293016,46.492803],[-84.193729,46.53992],[-84.117925,46.517619],[-84.125026,46.470143],[-84.138906,46.372221],[-84.097766,46.256512],[-84.108089,46.241238],[-84.114941,46.174114],[-84.026536,46.131648],[-83.974012,46.081552],[-83.882303,46.042065],[-83.815826,46.108529],[-83.719791,46.101031],[-83.598612,46.090085],[-83.480639,45.996164],[-83.526347,45.918636],[-83.583052,45.915919],[-83.65766,45.945463],[-83.80104,45.937582],[-83.910838,45.965613],[-84.080071,45.970822],[-84.11460656251879,45.967908374795385],[-84.254952,45.956068],[-84.376429,45.931962],[-84.480436,45.977764],[-84.567493,45.947702],[-84.632855,45.951007],[-84.734002,45.907026],[-84.706383,45.848658],[-84.792763,45.858691],[-84.917484,45.93067],[-85.003597,46.00613],[-85.152027,46.050725],[-85.266385,46.065779],[-85.381394,46.082044],[-85.540858,46.079581],[-85.648581,45.983695],[-85.697203,45.960158],[-85.810442,45.980087],[-85.86583992194267,45.94757107318528],[-85.913769,45.919439],[-86.072067,45.965313],[-86.278007,45.942057],[-86.349134,45.83416],[-86.439661,45.760669],[-86.45988051774937,45.75022655059599],[-86.54143,45.70811],[-86.616972,45.620581],[-86.636895,45.542053],[-86.712328,45.610939],[-86.705184,45.690901],[-86.647319,45.732618],[-86.773279,45.811385],[-86.838746,45.722307],[-86.964275,45.672761],[-87.070442,45.718779],[-87.172241,45.661788],[-87.25344962878017,45.550115590889085],[-87.288726,45.501606],[-87.350852,45.407743],[-87.465201,45.273351],[-87.548964,45.191591],[-87.590208,45.095264],[-87.648191,45.106368],[-87.695055,45.150522],[-87.741805,45.197051],[-87.71148,45.245224],[-87.667423,45.31636],[-87.657349,45.368752],[-87.706767,45.383827],[-87.750928,45.355037],[-87.800464,45.353608],[-87.863489,45.35302],[-87.85683,45.393106],[-87.847429,45.444177],[-87.805773,45.473139],[-87.804203,45.524676],[-87.787292,45.574906],[-87.777671,45.609204],[-87.824676,45.653211],[-87.781007,45.673934],[-87.805076,45.703556],[-87.83304946803528,45.72275257534689],[-87.879812,45.754843],[-87.96697,45.764021],[-87.995876,45.795435],[-88.048514,45.782549],[-88.05701046594899,45.784977030143686],[-88.105518,45.798839],[-88.135067,45.821694],[-88.073944,45.875593],[-88.115346,45.922211],[-88.11685653737608,45.92281124226269],[-88.178008,45.947111],[-88.246307,45.962983],[-88.30952,45.959369],[-88.380183,45.991654],[-88.409864,45.979688],[-88.526673,46.020822],[-88.59386,46.015132],[-88.613063,45.990627],[-88.65776,45.989287],[-88.679132,46.013538],[-88.68323220849936,46.014465670320284],[-88.739994,46.027308],[-88.811948,46.021609],[-88.93276845100957,46.07210716377599],[-88.99121702839598,46.09653635443599],[-89.09163,46.138505],[-89.638416,46.243804],[-89.92912562566477,46.29991572840809],[-90.120489,46.336852],[-90.158241,46.420485],[-90.214866,46.499947],[-90.285707,46.518846],[-90.331887,46.553278],[-90.387228,46.533663],[-90.418136,46.566094]]]]}},
+{"type":"Feature","properties":{"name":"Missouri","income":{"1995":31701,"1996":32947,"1997":34502,"1998":37186,"1999":37885,"2000":40411,"2001":39652,"2002":40309,"2003":40870,"2004":40885,"2005":41946,"2006":42838,"2007":45012,"2008":46847,"2009":45149,"2010":44306,"2011":45231,"2012":45320,"2013":46905,"2014":48288,"2015":50200}},"geometry":{"type":"Polygon","coordinates":[[[-95.765645,40.585208],[-95.533182,40.582249],[-95.37392505339868,40.58033237794148],[-95.335588,40.579871],[-95.20226600083026,40.578375628995985],[-95.068921,40.57688],[-94.91489786736157,40.57492116911129],[-94.819978,40.573714],[-94.63202591769478,40.57175958739999],[-94.533878,40.570739],[-94.47120772712316,40.570959458356995],[-94.310724,40.571524],[-94.23224071020826,40.57201461212659],[-94.091085,40.572897],[-94.015492,40.57407370700959],[-93.84093,40.576791],[-93.77434420403027,40.577530453391084],[-93.597352,40.579496],[-93.55689667427168,40.57965948506049],[-93.37438625876378,40.580397032609184],[-93.345442,40.580514],[-93.135802,40.582854],[-93.09729120374978,40.58382347732509],[-92.941595,40.587743],[-92.71459726304498,40.589582833836296],[-92.686693,40.589809],[-92.63790329359948,40.59095654709789],[-92.453745,40.595288],[-92.35080418672638,40.59725727637609],[-92.17978,40.600529],[-91.94311745968568,40.606060586354],[-91.939292,40.60615],[-91.729115,40.61364],[-91.71665498768186,40.603740139295994],[-91.685381,40.578892],[-91.670993,40.550937],[-91.618999,40.539084],[-91.608347,40.50004],[-91.563844,40.460988],[-91.519134,40.432822],[-91.498093,40.401926],[-91.419422,40.378264],[-91.469656,40.322409],[-91.492891,40.269923],[-91.49695749033947,40.24870387637279],[-91.50616790862227,40.20064351279509],[-91.511956,40.170441],[-91.497663,40.078257],[-91.484064,40.019332],[-91.43709,39.946417],[-91.43684326859906,39.94524346367849],[-91.428956,39.907729],[-91.436051,39.84551],[-91.397853,39.821122],[-91.361571,39.787548],[-91.36461660332327,39.75871822632229],[-91.367753,39.729029],[-91.30576033496517,39.68621547007789],[-91.27614,39.665759],[-91.18287550081966,39.598233115795395],[-91.174232,39.591975],[-91.148275,39.545798],[-91.100307,39.538695],[-91.064305,39.494643],[-91.03827,39.448436],[-90.937419,39.400803],[-90.93534994636859,39.39951952890709],[-90.840106,39.340438],[-90.72996,39.255894],[-90.72328362341267,39.22410297005759],[-90.707902,39.15086],[-90.681086,39.10059],[-90.713629,39.053977],[-90.676397,38.984096],[-90.66158290687677,38.93470330775319],[-90.657254,38.92027],[-90.595354,38.87505],[-90.555693,38.870785],[-90.500117,38.910408],[-90.467784,38.961809],[-90.45096994089188,38.96139500332449],[-90.395816,38.960037],[-90.298711,38.923395],[-90.27658372202559,38.91933846721158],[-90.230336,38.91086],[-90.20728230118557,38.898732322839884],[-90.113327,38.849306],[-90.117707,38.805748],[-90.166409,38.772649],[-90.16659464001557,38.77245013930509],[-90.20991,38.72605],[-90.19521,38.68755],[-90.18152438153136,38.66037288531049],[-90.18111,38.65955],[-90.18451,38.611551],[-90.248913,38.544752],[-90.25529488766936,38.53087771182099],[-90.26097605928697,38.51852678740779],[-90.271314,38.496052],[-90.288815,38.438453],[-90.34024428170427,38.38709462263628],[-90.34291526673718,38.38442732002759],[-90.349743,38.377609],[-90.372519,38.323354],[-90.363926,38.236355],[-90.35116414506028,38.21954445709449],[-90.322353,38.181593],[-90.25274632397579,38.12777382622939],[-90.252484,38.127571],[-90.218708,38.094365],[-90.20572862588267,38.088233183108585],[-90.126006,38.05057],[-90.080959,38.015428],[-90.008353,37.970179],[-89.95491,37.966647],[-89.974221,37.919217],[-89.93309579091499,37.88009905825239],[-89.923185,37.870672],[-89.851048,37.90398],[-89.782035,37.855092],[-89.696559,37.814337],[-89.68722138085306,37.79640671843929],[-89.667993,37.759484],[-89.591289,37.723599],[-89.521948,37.696475],[-89.506563,37.62505],[-89.494051,37.580116],[-89.49774592603917,37.56998591392818],[-89.50179104949977,37.55889571932319],[-89.5124,37.52981],[-89.471201,37.466473],[-89.42594,37.407471],[-89.428185,37.356158],[-89.47367943454117,37.33485390219459],[-89.49516,37.324795],[-89.517032,37.28192],[-89.48288928464397,37.260950718414094],[-89.470525,37.253357],[-89.456105,37.18812],[-89.384175,37.103267],[-89.359456,37.042606],[-89.30743669117298,37.02875944962789],[-89.257608,37.015496],[-89.195039,36.989768],[-89.132915,36.982057],[-89.098843,36.95785],[-89.10313544832657,36.94476090032229],[-89.120472,36.891896],[-89.147674,36.847148],[-89.155891,36.789126],[-89.15598490907037,36.786292663371384],[-89.15699,36.755968],[-89.202511,36.716618],[-89.165488,36.662426],[-89.17564977234687,36.65131926255349],[-89.199136,36.625649],[-89.227319,36.569375],[-89.278935,36.577699],[-89.324658,36.624032],[-89.327319777009,36.62394628877049],[-89.378694,36.622292],[-89.407906,36.562345],[-89.479346,36.566253],[-89.544434,36.57451],[-89.571481,36.538087],[-89.539232,36.497934],[-89.521021,36.461934],[-89.542337,36.420103],[-89.51038,36.378356],[-89.522695,36.344789],[-89.54503133396906,36.344271398663],[-89.600544,36.342985],[-89.611819,36.309088],[-89.554289,36.277751],[-89.602374,36.238106],[-89.678046,36.248284],[-89.69263,36.224959],[-89.62764144167537,36.185460316606],[-89.623804,36.183128],[-89.592102,36.135637],[-89.64302,36.10362],[-89.680029,36.082494],[-89.692437,36.020507],[-89.733095,36.000608],[-89.901183,35.999365],[-89.95937529517369,35.99901411015688],[-90.103842,35.998143],[-90.28894791527279,35.99651400421139],[-90.368718,35.995812],[-90.339343,36.047112],[-90.294492,36.112949],[-90.235585,36.139474],[-90.220425,36.184764],[-90.18912798221689,36.19898660866739],[-90.155928,36.214074],[-90.114922,36.265595],[-90.06398,36.303038],[-90.063526,36.356911],[-90.066136,36.386272],[-90.131038,36.415069],[-90.141399,36.459874],[-90.153871,36.495344],[-90.22074905391537,36.495937592194494],[-90.494575,36.498368],[-90.57617906556729,36.498405927798],[-90.765672,36.498494],[-90.78424415513118,36.49846220012908],[-91.017974,36.498062],[-91.12653887456469,36.497797701019394],[-91.404915,36.49712],[-91.40713744351747,36.497140711948596],[-91.45000491813738,36.49754021318469],[-91.64259,36.499335],[-91.67234245644367,36.499256633798886],[-91.985802,36.498431],[-92.12042910438808,36.49819312399969],[-92.15030624950118,36.498140333324194],[-92.350277,36.497787],[-92.52913658104367,36.498165682985295],[-92.564238,36.49824],[-92.77233389337206,36.498083154079396],[-92.838876,36.498033],[-92.85404911498487,36.498023381141586],[-93.125969,36.497851],[-93.29344735563399,36.49825937523429],[-93.31532710652907,36.49831272629789],[-93.426989,36.498585],[-93.58428154735566,36.498901678628286],[-93.700171,36.499135],[-93.86675821167105,36.49886616468489],[-93.95919,36.498717],[-94.07708826689347,36.49897595722189],[-94.361203,36.4996],[-94.617919,36.499414],[-94.617815,36.612604],[-94.61799177841718,36.66792127234419],[-94.618307,36.76656],[-94.617964,36.998905],[-94.61810289110298,37.05679639087289],[-94.618351,37.160211],[-94.61775389160657,37.338418],[-94.61766760470077,37.36417032703869],[-94.617511,37.410909],[-94.6178455243542,37.653577796634394],[-94.61787245089806,37.673110700332096],[-94.617885,37.682214],[-94.614465,37.987799],[-94.61410024870548,38.03705658338129],[-94.61392996105577,38.06005295989649],[-94.612614,38.237766],[-94.61277262899287,38.38871848273179],[-94.612866,38.477571],[-94.61286559592209,38.47760218023509],[-94.61195801832227,38.547634434271686],[-94.60948967234579,38.73810170947319],[-94.609456,38.7407],[-94.60896034374949,38.84721131544499],[-94.608334,38.981806],[-94.60787035337397,39.04408509647849],[-94.607354,39.113444],[-94.591933,39.155003],[-94.60193798192108,39.15550323346379],[-94.623934,39.156603],[-94.680336,39.184303],[-94.741938,39.170203],[-94.79199467374328,39.20126025024019],[-94.799663,39.206018],[-94.825663,39.241729],[-94.857072,39.273825],[-94.908065,39.323663],[-94.888972,39.392432],[-94.946662,39.399717],[-94.96574741863347,39.42168174465639],[-94.982144,39.440552],[-95.049845,39.494415],[-95.09141940282399,39.53325788520999],[-95.113557,39.553941],[-95.076688,39.576764],[-95.047165,39.595117],[-95.04405075257039,39.61366829682089],[-95.037464,39.652905],[-94.971317,39.68641],[-94.971078,39.723146],[-94.899316,39.724042],[-94.860371,39.74953],[-94.871144,39.772994],[-94.87781752985117,39.82041477603549],[-94.878677,39.826522],[-94.928466,39.876344],[-94.95154,39.900533],[-94.99337423971437,39.89856525999229],[-95.018743,39.897372],[-95.081534,39.861718],[-95.142445,39.89542],[-95.231114,39.943784],[-95.30829,39.999998],[-95.348777,40.029297],[-95.382957,40.027112],[-95.414734,40.06982],[-95.394216,40.108263],[-95.432165,40.141025],[-95.48102,40.188524],[-95.472548,40.236078],[-95.54716,40.259066],[-95.54787031627028,40.26278346081979],[-95.54818200118008,40.26441467284269],[-95.553292,40.291158],[-95.598657,40.309809],[-95.653729,40.322582],[-95.641027,40.366399],[-95.649418,40.396149],[-95.684363,40.463366],[-95.694726,40.493602],[-95.71228037180106,40.52375442620738],[-95.714291,40.527208],[-95.75711,40.52599],[-95.765645,40.585208]]]}},
+{"type":"Feature","properties":{"name":"Montana","income":{"1995":27889,"1996":28714,"1997":29672,"1998":31271,"1999":32098,"2000":33281,"2001":33151,"2002":34105,"2003":34449,"2004":35574,"2005":38503,"2006":40299,"2007":43000,"2008":43948,"2009":42222,"2010":42303,"2011":44011,"2012":45030,"2013":46893,"2014":46608,"2015":49650}},"geometry":{"type":"Polygon","coordinates":[[[-116.049193,49.000912],[-115.501016,49.000694],[-115.207912,48.999228],[-114.72704522327697,49.00058700388858],[-114.678217,49.000725],[-114.375977,49.00139],[-114.180211,48.999703],[-114.06817845427997,48.99935588166379],[-113.907487,48.998858],[-113.692982,48.997632],[-113.375925,48.998562],[-113.116356,48.998462],[-112.19341019591398,48.99889377663368],[-112.143769,48.998917],[-111.854088,48.998067],[-111.500812,48.996963],[-111.26986200082898,48.99722978681158],[-111.003916,48.997537],[-110.743064,48.99800811218479],[-110.531615,48.99839],[-110.438151,48.999188],[-110.171595,48.999262],[-109.500737,49.00044],[-109.48954977898597,49.00042080388049],[-109.250722,49.000011],[-109.000708,48.999234],[-108.543194,48.999377],[-108.236393,48.99955811730138],[-107.704696,48.999872],[-107.441017,48.999363],[-107.363582,49.000019],[-107.17981201253797,48.999911601747385],[-106.617539,48.999583],[-106.233987,48.999423],[-106.11206332368398,48.999279438400286],[-106.050543,48.999207],[-105.775808,48.999637],[-105.355888,48.999357],[-105.265192,48.9995],[-105.057641716691,48.99922888739248],[-104.875527,48.998991],[-104.543636,48.999541],[-104.048736,48.999877],[-104.0489,48.847387],[-104.04808756883199,48.63401237339858],[-104.047555,48.49414],[-104.04678216170598,48.38930073114548],[-104.045692,48.241415],[-104.04409327282099,47.99610717418708],[-104.04409321534798,47.99609835556468],[-104.043933,47.971515],[-104.042384,47.803256],[-104.043912,47.603229],[-104.04497671640497,47.397069201282385],[-104.045313,47.331955],[-104.04530830986899,47.330127858805994],[-104.044788,47.12743],[-104.045542,46.933887],[-104.045572,46.713881],[-104.045385103689,46.641501059121794],[-104.04512541332298,46.540929928548984],[-104.045045,46.509788],[-104.045469,46.324545],[-104.04546595892799,46.28018804821068],[-104.045443,45.94531],[-104.04413315610697,45.88197625834978],[-104.043776,45.864707],[-104.042597,45.749998],[-104.041937,45.557915],[-104.041764,45.490789],[-104.040358,45.335946],[-104.04013575649299,45.21289076204159],[-104.039977,45.124988],[-104.039138,44.99852],[-104.057698,44.997431],[-105.025266,45.00029],[-105.03825218827397,45.00029167299179],[-105.07660095225397,45.000296613407386],[-105.848065,45.000396],[-106.02488002903198,44.99758412355609],[-106.263586,44.993788],[-106.26371509246498,44.99378843300149],[-106.888773,44.995885],[-107.351441,45.001407],[-107.91152278816197,45.00154400461138],[-107.997353,45.001565],[-108.24852773809597,45.00062981791279],[-108.500679,44.999691],[-108.62149349472998,44.99967637102149],[-109.062262,44.999623],[-109.103445,45.005904],[-109.574321,45.002631],[-109.79848377243498,45.002920308285],[-109.99505,45.003174],[-110.324441,44.999156],[-110.705272,44.992324],[-110.785008,45.002952],[-111.044275,45.001345],[-111.04431854542997,45.000880003307685],[-111.056888,44.866658],[-111.055511,44.725343],[-111.05533272712397,44.66626230991749],[-111.055208,44.624927],[-111.048974,44.474072],[-111.122654,44.493659],[-111.143557,44.535732],[-111.201459,44.575696],[-111.224161,44.623402],[-111.26875,44.668279],[-111.323669,44.724474],[-111.37713823673496,44.75119641396359],[-111.385005,44.755128],[-111.438793,44.720546],[-111.45694723249397,44.69564073783949],[-111.468833,44.679335],[-111.519126,44.582916],[-111.562814,44.555209],[-111.61710703430498,44.55712724841859],[-111.704218,44.560205],[-111.807914,44.511716],[-111.870504,44.564033],[-112.034133,44.537716],[-112.125101,44.528527],[-112.221698,44.543519],[-112.286187,44.568472],[-112.358917,44.528847],[-112.387389,44.448058],[-112.473207,44.480027],[-112.601863,44.491015],[-112.707815,44.503023],[-112.735084,44.499159],[-112.828191,44.442472],[-112.821896,44.407436],[-112.82682688126498,44.40520243176749],[-112.881769,44.380315],[-112.951146,44.416699],[-113.006846,44.471715],[-113.006828,44.518439],[-113.061071,44.577329],[-113.049349,44.62938],[-113.101154,44.708578],[-113.131387,44.764738],[-113.247166,44.82295],[-113.301508,44.798985],[-113.377153,44.834858],[-113.422376,44.842595],[-113.474573,44.910846],[-113.448958,44.953544],[-113.437726,45.006967],[-113.45197,45.059247],[-113.510819,45.099902],[-113.57467,45.128411],[-113.650064,45.23471],[-113.735601,45.325265],[-113.73239,45.385058],[-113.763368,45.427732],[-113.759986,45.480735],[-113.802849,45.523159],[-113.806729,45.602146],[-113.861404,45.62366],[-113.898883,45.644167],[-113.94832148257,45.68257735844148],[-113.971565,45.700636],[-114.015633,45.696127],[-114.014973,45.654008],[-114.083149,45.603996],[-114.18647,45.545539],[-114.251836,45.537812],[-114.279217,45.480616],[-114.36852,45.492716],[-114.456764,45.543983],[-114.506341,45.559216],[-114.52371067493497,45.58523308600019],[-114.538132,45.606834],[-114.53577,45.650613],[-114.499637,45.669035],[-114.504869,45.722176],[-114.562509,45.779927],[-114.517143,45.835993],[-114.422963,45.855381],[-114.388243,45.88234],[-114.413168,45.911479],[-114.402261,45.961489],[-114.441185,45.988453],[-114.480241,46.030325],[-114.460049,46.097104],[-114.5213,46.125287],[-114.514706,46.167726],[-114.445928,46.173933],[-114.449819,46.237119],[-114.441326,46.2738],[-114.431708,46.310744],[-114.422458,46.387097],[-114.384756,46.411784],[-114.403019,46.498675],[-114.351655,46.508119],[-114.331338,46.577781],[-114.320665,46.646963],[-114.33572493540497,46.65527296735359],[-114.360709,46.669059],[-114.453239,46.649266],[-114.547321,46.644485],[-114.59124789474797,46.65257477007719],[-114.621483,46.658143],[-114.626695,46.712889],[-114.67682716269498,46.73183873981309],[-114.699008,46.740223],[-114.76718,46.738828],[-114.79004,46.778729],[-114.880588,46.811791],[-114.943281,46.867971],[-114.927432,46.914185],[-114.961422906068,46.932893875970784],[-115.031651,46.971548],[-115.071254,47.022083],[-115.120917,47.061237],[-115.189451,47.131032],[-115.255786,47.174725],[-115.29211,47.209861],[-115.326903,47.255912],[-115.371825,47.265213],[-115.470959,47.284873],[-115.531971,47.314121],[-115.578619,47.367007],[-115.71034,47.417784],[-115.69293,47.457237],[-115.634684,47.48176],[-115.717024,47.532693],[-115.721207,47.576323],[-115.694284,47.62346],[-115.73627,47.654762],[-115.72377,47.696671],[-115.835365,47.760957],[-115.845474,47.814967],[-115.900934,47.843064],[-115.959946,47.898142],[-116.030751,47.973349],[-116.03856582987298,47.98463425644169],[-116.049153,47.999923],[-116.048911,48.12493],[-116.04892924777596,48.216127947927085],[-116.048948,48.309847],[-116.049155,48.481247],[-116.04915652064899,48.50204248175808],[-116.049193,49.000912]]]}},
+{"type":"Feature","properties":{"name":"New York","income":{"1995":33805,"1996":35696,"1997":36369,"1998":38290,"1999":41047,"2000":41763,"2001":43149,"2002":42765,"2003":44139,"2004":45343,"2005":49365,"2006":51340,"2007":53448,"2008":55980,"2009":54554,"2010":54047,"2011":55147,"2012":56357,"2013":57255,"2014":58771,"2015":60805}},"geometry":{"type":"MultiPolygon","coordinates":[[[[-72.018926,41.274114],[-71.926802,41.290122],[-71.917281,41.251333],[-72.034754,41.234818],[-72.018926,41.274114]]],[[[-79.761951,42.26986],[-79.627484,42.324686],[-79.453533,42.411157],[-79.381943,42.466491],[-79.283364,42.511228],[-79.193232,42.545881],[-79.138569,42.564462],[-79.13594440402159,42.569178709973585],[-79.111361,42.613358],[-79.06376,42.644758],[-79.04886,42.689158],[-78.972378,42.715991],[-78.904843,42.746121],[-78.851355,42.791758],[-78.85688499234988,42.80529199987729],[-78.865656,42.826758],[-78.882557,42.867258],[-78.912458,42.886557],[-78.909159,42.933257],[-78.927957,42.952922],[-78.961761,42.957756],[-79.019964,42.994756],[-79.00545,43.057231],[-79.018246,43.066016],[-79.01957788489429,43.066296467890396],[-79.074467,43.077855],[-79.060206,43.124799],[-79.05525244093957,43.133812266616985],[-79.044567,43.153255],[-79.052868,43.222054],[-79.070469,43.262454],[-78.834061,43.317555],[-78.547395,43.369541],[-78.46555118759608,43.370895422166384],[-78.329374,43.373149],[-78.145195,43.37551],[-77.99558979493837,43.36531025567759],[-77.994838,43.365259],[-77.816533,43.34356],[-77.80826340960718,43.34320763689829],[-77.760231,43.341161],[-77.660359,43.282998],[-77.551022,43.235763],[-77.50092,43.250363],[-77.37605199595338,43.27403376348698],[-77.341092,43.280661],[-77.264177,43.277363],[-77.130429,43.285635],[-76.999691,43.271456],[-76.952174,43.270692],[-76.841675,43.305399],[-76.769025,43.318452],[-76.72200256571277,43.33758019598139],[-76.684856,43.352691],[-76.630774,43.413356],[-76.61721373257758,43.420175554465594],[-76.515882,43.471136],[-76.417581,43.521285],[-76.37094283766898,43.52562706153029],[-76.368849,43.525822],[-76.319701,43.512275],[-76.235834,43.529256],[-76.203473,43.574978],[-76.196596,43.649761],[-76.20148254738568,43.68028596022369],[-76.213205,43.753513],[-76.229268,43.804135],[-76.296758,43.857079],[-76.361037,43.872585],[-76.441848,43.882864],[-76.412138,43.925676],[-76.279314,43.972462],[-76.307674,44.025277],[-76.37556,44.031536],[-76.361836,44.072721],[-76.370706,44.100499],[-76.355679,44.133258],[-76.334584,44.164945],[-76.286547,44.203773],[-76.206777,44.214543],[-76.164265,44.239603],[-76.161833,44.280777],[-76.097351,44.299547],[-76.000998,44.347534],[-75.94954,44.349129],[-75.86127119283468,44.40519201350308],[-75.834126,44.422433],[-75.807778,44.471644],[-75.76623,44.515851],[-75.567413,44.658709],[-75.423943,44.756329],[-75.333744,44.806378],[-75.255517,44.857651],[-75.142958,44.900237],[-75.066245,44.930174],[-75.005155,44.958402],[-74.992756,44.977449],[-74.907956,44.983359],[-74.834669,45.014683],[-74.74464,44.990577],[-74.72581343161899,44.99179262652589],[-74.64473931982567,44.99702756041669],[-74.611048,44.999203],[-74.436934,44.996177],[-74.234136,44.992148],[-74.02743141336848,44.99736535923969],[-73.874597,45.001223],[-73.639718,45.003464],[-73.343124,45.01084],[-73.34474,44.970468],[-73.338979,44.917681],[-73.379822,44.857037],[-73.365678,44.826451],[-73.34201248394999,44.80807553866099],[-73.33443,44.802188],[-73.357671,44.751018],[-73.36556,44.700297],[-73.389966,44.61962],[-73.367275,44.567545],[-73.36268281274378,44.56245522168669],[-73.34798323242649,44.54616285359699],[-73.312871,44.507246],[-73.293613,44.440559],[-73.320954,44.382669],[-73.334637,44.356877],[-73.324229,44.310023],[-73.31745597466508,44.26352218987678],[-73.316618,44.257769],[-73.349889,44.230356],[-73.395399,44.166903],[-73.39986856936459,44.152485647691684],[-73.416319,44.099422],[-73.43688,44.042578],[-73.405977,44.011485],[-73.411248,43.975596],[-73.407742,43.929887],[-73.374051,43.875563],[-73.390302,43.817371],[-73.38252614953988,43.80815898854949],[-73.350707,43.770463],[-73.36110715168428,43.75323345728389],[-73.393723,43.6992],[-73.414546,43.658209],[-73.424977,43.598775],[-73.395767,43.568087],[-73.327702,43.625913],[-73.292113,43.584509],[-73.242042,43.534925],[-73.252832,43.363493],[-73.25535583805758,43.314712398599994],[-73.26978,43.035923],[-73.27000873116357,43.030714292687485],[-73.273832807021,42.94363174752649],[-73.278673,42.83341],[-73.290944,42.80192],[-73.264957,42.74594],[-73.30700407618058,42.63265345141149],[-73.35252495494419,42.51000750995059],[-73.352527,42.510002],[-73.38350565728358,42.42564605018379],[-73.41064440742727,42.35174629964789],[-73.508142,42.086257],[-73.48967994203208,42.05379770958669],[-73.487314,42.049638],[-73.505008,41.823773],[-73.51791879063818,41.666720530709995],[-73.520017,41.641197],[-73.52967771430127,41.527161021128286],[-73.536969,41.441094],[-73.54314734626546,41.37677066829739],[-73.54318320799626,41.376397308516786],[-73.54330658069169,41.375112864027685],[-73.54415118640058,41.36631959624439],[-73.550961,41.295422],[-73.482709,41.21276],[-73.69593580216956,41.11525545690408],[-73.727775,41.100696],[-73.659533,41.017857],[-73.659362,41.004034],[-73.65737400926137,40.98552488385919],[-73.657336,40.985171],[-73.697974,40.939598],[-73.756776,40.912599],[-73.766276,40.881099],[-73.74119724494858,40.875854592837385],[-73.713674,40.870099],[-73.654372,40.878199],[-73.617571,40.897898],[-73.499941,40.918166],[-73.49735103862628,40.92318227329439],[-73.485365,40.946397],[-73.436664,40.934897],[-73.392862,40.955297],[-73.33136,40.929597],[-73.2358261228726,40.90668945969559],[-73.229285,40.905121],[-73.148994,40.928898],[-73.144673,40.955842],[-73.110368,40.971938],[-73.040445,40.964498],[-72.859831,40.966088],[-72.708069,40.977851],[-72.585327,40.997587],[-72.504305,41.043329],[-72.445242,41.086116],[-72.389809,41.108304],[-72.354123,41.139952],[-72.291109,41.155874],[-72.189163,41.193549],[-72.182033,41.178345],[-72.254704,41.110852],[-72.283093,41.067874],[-72.217476,41.040611],[-72.162898,41.053187],[-72.126704,41.115139],[-72.084207,41.101524],[-72.095711,41.05402],[-72.051928,41.020506],[-71.959595,41.071237],[-71.919385,41.080517],[-71.856214,41.070598],[-71.936977,41.006137],[-72.097369,40.95888],[-72.298727,40.903151],[-72.39585,40.86666],[-72.757176,40.764371],[-72.923214,40.713282],[-73.012545,40.679651],[-73.14608086921076,40.646407968101286],[-73.20844,40.630884],[-73.306396,40.620756],[-73.351465,40.6305],[-73.42397661755719,40.613244877559495],[-73.48486839434707,40.59875485376009],[-73.507325,40.593411],[-73.640902,40.582823],[-73.75062172165627,40.589319767127684],[-73.774928,40.590759],[-73.82549400113108,40.57614957899389],[-73.940591,40.542896],[-73.97379177024457,40.560854702517894],[-73.991346,40.57035],[-74.03655765445397,40.588988413741596],[-74.03797052391579,40.589570866339486],[-74.057316,40.597546],[-74.112585,40.547603],[-74.199923,40.511729],[-74.260611,40.502436],[-74.249211,40.545064],[-74.216839,40.558618],[-74.203688,40.592691],[-74.202247,40.630903],[-74.20012290199108,40.63186890194569],[-74.170611,40.645289],[-74.16014678315318,40.64607651644479],[-74.086806,40.651596],[-74.07094353771528,40.66720823277558],[-74.06772033031899,40.67038059424459],[-74.047313,40.690466],[-74.046966591833,40.69114928026859],[-74.04115624430348,40.70261002570879],[-74.03092708568377,40.72278675049359],[-74.02947453619967,40.72565186308668],[-74.02349153373218,40.73745316548729],[-74.013784,40.756601],[-73.98459249468017,40.79754332855229],[-73.97120801828238,40.81631562632088],[-73.968082,40.8207],[-73.96583451704629,40.82474525955859],[-73.94748456908319,40.85777345328739],[-73.938081,40.874699],[-73.93489258096068,40.88264898194209],[-73.92203089786648,40.914718213458784],[-73.92047152937927,40.918606332041],[-73.90728,40.951498],[-73.893979,40.997197],[-73.89398186003588,40.997198203538886],[-74.041054,41.059088],[-74.21161764319858,41.132981363536295],[-74.23436283123036,41.142835271534594],[-74.234473,41.142883],[-74.301994,41.172594],[-74.36703826144738,41.20421147244379],[-74.457584,41.248225],[-74.694914,41.357423],[-74.734893,41.425818],[-74.75627183472518,41.42762742854339],[-74.799546,41.43129],[-74.890358,41.455324],[-74.982463,41.496467],[-75.043879,41.575094],[-75.04619860591167,41.60376401990269],[-75.049281,41.641862],[-75.053431,41.752538],[-75.074412,41.802191],[-75.113369,41.840698],[-75.14666489928587,41.85012593014629],[-75.190203,41.862454],[-75.263005,41.885109],[-75.291762,41.947092],[-75.341125,41.992772],[-75.35985992915047,41.993685888904594],[-75.477144,41.999407],[-75.48314927095889,41.999398164522695],[-75.55311253909508,41.999295228473486],[-75.870677,41.998828],[-76.10584,41.998858],[-76.14551899478208,41.998866463308],[-76.462155,41.998934],[-76.47303088580799,41.999072381007],[-76.55762414356937,42.000148716341684],[-76.558118,42.000155],[-76.92684636295428,42.00072345181729],[-76.96572875942668,42.00078339504688],[-77.007635,42.000848],[-77.61002011447597,41.99914985407959],[-77.74993092512727,41.99875544032899],[-77.83203,41.998524],[-78.031177,41.999415],[-78.20660303785819,41.99908830575759],[-78.271204,41.998968],[-78.30812896044657,41.99907113474139],[-78.59665,41.999877],[-78.91885736361519,41.99910319868938],[-78.983065,41.998949],[-79.06126440315988,41.998838109911],[-79.472472,41.998255],[-79.61083577498667,41.99851990410838],[-79.761313,41.998808],[-79.762122,42.131246],[-79.761951,42.26986]]]]}},
+{"type":"Feature","properties":{"name":"Oregon","income":{"1995":34533,"1996":35144,"1997":37284,"1998":38773,"1999":40033,"2000":41662,"2001":41752,"2002":41796,"2003":42593,"2004":42568,"2005":43065,"2006":46228,"2007":48735,"2008":50165,"2009":48325,"2010":46536,"2011":46876,"2012":49090,"2013":50228,"2014":51088,"2015":54074}},"geometry":{"type":"Polygon","coordinates":[[[-124.552441,42.840568],[-124.480938,42.951495],[-124.47988222693196,42.95432243767739],[-124.436198,43.071312],[-124.41139,43.159853],[-124.395607,43.223908],[-124.38246,43.270167],[-124.400404,43.302121],[-124.353332,43.342667],[-124.286896,43.436296],[-124.233534,43.55713],[-124.21905767690596,43.61093175918899],[-124.193455,43.706085],[-124.16020731587598,43.86372050152159],[-124.150267,43.91085],[-124.122406,44.104442],[-124.111054,44.235071],[-124.11437007425798,44.276194],[-124.1152,44.286486],[-124.084401,44.415611],[-124.083601,44.501123],[-124.065008,44.632504],[-124.063406,44.703177],[-124.074066,44.798107],[-124.063155,44.835333],[-124.023834,44.949825],[-124.01009720988498,45.044998959441195],[-124.00977,45.047266],[-123.975425,45.145476],[-123.972919,45.216784],[-123.962887,45.280218],[-123.979715,45.347724],[-123.960557,45.430778],[-123.976544,45.489733],[-123.947556,45.564878],[-123.939005,45.661923],[-123.939448,45.708795],[-123.968563,45.757019],[-123.96627838451897,45.78308490354529],[-123.961544,45.837101],[-123.96763,45.907807],[-123.993703,45.946431],[-123.937471,45.977306],[-123.92933,46.041978],[-123.95919,46.141675],[-124.041128,46.197672],[-123.998052,46.235327],[-123.912405,46.17945],[-123.838801,46.192211],[-123.757589,46.213001],[-123.718149,46.188989],[-123.660868,46.216296],[-123.586205,46.228654],[-123.547659,46.259109],[-123.479644,46.269131],[-123.427629,46.229348],[-123.430847,46.181827],[-123.371433,46.146372],[-123.36374450726598,46.14624319434849],[-123.280166,46.144843],[-123.21249359120895,46.171096458400285],[-123.166414,46.188973],[-123.115904,46.185268],[-123.004233,46.133823],[-122.962681,46.104817],[-122.904119,46.083734],[-122.856158,46.014469],[-122.813998,45.960984],[-122.81151,45.912725],[-122.785026,45.867699],[-122.788086362595,45.851007454356086],[-122.795605,45.81],[-122.761451,45.759163],[-122.76651077132999,45.728662574445195],[-122.774511,45.680437],[-122.75644390397096,45.66242102508758],[-122.738109,45.644138],[-122.643907,45.609739],[-122.492259,45.583281],[-122.438674,45.563585],[-122.380302,45.575941],[-122.331502,45.548241],[-122.262625,45.544321],[-122.24919700805198,45.54999893274119],[-122.183695,45.577696],[-122.101675,45.583516],[-122.00369,45.61593],[-121.951838,45.644951],[-121.92374936198499,45.65434950896938],[-121.900858,45.662009],[-121.867167,45.693277],[-121.811304,45.706761],[-121.735104,45.694039],[-121.668362,45.705082],[-121.533106,45.726541],[-121.52400610421999,45.72383622519919],[-121.44069582786098,45.69907379477239],[-121.423592,45.69399],[-121.33777,45.704949],[-121.215779,45.671238],[-121.183841,45.606441],[-121.1222,45.616067],[-121.084933,45.647893],[-120.943977,45.656445],[-120.91393501308399,45.64806586642348],[-120.895575,45.642945],[-120.855674,45.671545],[-120.68937,45.715847],[-120.65251676019399,45.73616973067489],[-120.634968,45.745847],[-120.591166,45.746547],[-120.505863,45.700048],[-120.48854682070397,45.69991222747849],[-120.40396,45.699249],[-120.282156,45.72125],[-120.210754,45.725951],[-120.141352,45.773152],[-120.07015,45.785152],[-119.99950515346198,45.81168492308189],[-119.965744,45.824365],[-119.868153889391,45.838226602635686],[-119.802655,45.84753],[-119.669877,45.856867],[-119.600549,45.919581],[-119.571584,45.925456],[-119.487829,45.906307],[-119.43213855881598,45.91320914423389],[-119.364396,45.921605],[-119.25715,45.939926],[-119.12612,45.932859],[-119.061462,45.958527],[-118.98722753956497,45.99980021352369],[-118.987129,45.999855],[-118.67787,46.000935],[-118.60678915418896,46.00086324979118],[-118.36779,46.000622],[-117.99697042960298,46.00019066717259],[-117.97765730653197,46.00016820238199],[-117.717852,45.999866],[-117.60342583450398,45.99876017344268],[-117.47993726365397,45.99756676684219],[-117.353928,45.996349],[-116.915989,45.995413],[-116.886843,45.958617],[-116.859795,45.907264],[-116.79920453250098,45.851045435482895],[-116.78752,45.840204],[-116.736268,45.826179],[-116.665344,45.781998],[-116.593004,45.778541],[-116.535698,45.734231],[-116.528272,45.681473],[-116.463504,45.615785],[-116.502756,45.566608],[-116.588195,45.44292],[-116.674648,45.314342],[-116.69092662009098,45.26895523844489],[-116.696047,45.254679],[-116.754643,45.113972],[-116.78312826326696,45.07771250500999],[-116.78371,45.076972],[-116.841314,45.030907],[-116.858313,44.978761],[-116.833632,44.928976],[-116.865338,44.870599],[-116.88929518696699,44.84052977815328],[-116.9318,44.787181],[-117.013802,44.756841],[-117.062273,44.727143],[-117.094968,44.652011],[-117.14293,44.557236],[-117.167187,44.523431],[-117.225932,44.479389],[-117.215072,44.427162],[-117.243027,44.390974],[-117.216911,44.360163],[-117.192203,44.32863],[-117.21199550695297,44.29645109593828],[-117.216974,44.288357],[-117.170342,44.25889],[-117.121037,44.277585],[-117.059352,44.237244],[-116.971958,44.235677],[-116.965498,44.194126],[-116.902752,44.179467],[-116.895931,44.154295],[-116.89785467711496,44.15266639539139],[-116.977351,44.085364],[-116.937342,44.029376],[-116.959871,43.982925],[-116.976024,43.895548],[-116.98554503848997,43.88118485281379],[-117.023577,43.823811],[-117.02566381044599,43.68029363595399],[-117.026889,43.596033],[-117.026652,43.025128],[-117.026253,42.807447],[-117.026551,42.378557],[-117.026197,41.99989],[-117.197798,42.00038],[-117.403613,41.99929],[-117.623731,41.998467],[-117.873467,41.998335],[-118.197189,41.996995],[-118.19736921592799,41.996994081163486],[-118.501002,41.995446],[-118.775869,41.992692],[-119.001022,41.993793],[-119.20828,41.993177],[-119.32418412043896,41.99387562779329],[-119.36012311960299,41.99409225498119],[-119.72573,41.996296],[-119.999168,41.99454],[-120.181563,41.994588],[-120.501069,41.993785],[-120.692219,41.993677],[-120.87992571023597,41.993483259984885],[-121.035195,41.993323],[-121.251099,41.99757],[-121.43961,41.99708],[-121.44753999804797,41.99719003327258],[-121.675348,42.000351],[-121.846712,42.00307],[-122.101922,42.005766],[-122.289527,42.007764],[-122.289749096157,42.00776473049658],[-122.501135,42.00846],[-122.80008,42.004071],[-123.045254,42.003049],[-123.145959,42.009247],[-123.23100126057798,42.00497006225599],[-123.347562,41.999108],[-123.43477,42.001641],[-123.51911283680398,41.999172518032886],[-123.656998,41.995137],[-123.82203759858797,41.995620816946996],[-124.001188,41.996146],[-124.211605,41.99846],[-124.270464,42.045553],[-124.314289,42.067864],[-124.351535,42.129796],[-124.361009,42.180752],[-124.383633,42.22716],[-124.410982,42.250547],[-124.410556,42.307431],[-124.425554,42.351874],[-124.435105,42.440163],[-124.399065,42.539928],[-124.400918,42.597518],[-124.413119,42.657934],[-124.45074,42.675798],[-124.448418,42.689909],[-124.510017,42.734746],[-124.552441,42.840568]]]}},
+{"type":"Feature","properties":{"name":"Tennessee","income":{"1995":30016,"1996":31097,"1997":32047,"1998":34188,"1999":35624,"2000":35760,"2001":36629,"2002":37129,"2003":37925,"2004":38945,"2005":38947,"2006":40368,"2007":42389,"2008":43610,"2009":41715,"2010":41461,"2011":41691,"2012":42743,"2013":44268,"2014":44357,"2015":47243}},"geometry":{"type":"Polygon","coordinates":[[[-90.300697,35.028793],[-90.265296,35.040293],[-90.197146,35.050731],[-90.181387,35.091401],[-90.160058,35.12883],[-90.09061,35.118287],[-90.099777,35.164474],[-90.093285,35.203282],[-90.097947,35.249983],[-90.166594,35.274588],[-90.121864,35.304535],[-90.087903,35.36327],[-90.112504,35.410153],[-90.070549,35.423291],[-90.045306,35.415435],[-90.022064,35.457375],[-90.045805,35.496533],[-90.037615,35.550329],[-89.958498,35.541703],[-89.944754,35.560308],[-89.9325,35.607865],[-89.876548,35.626653],[-89.898916,35.650904],[-89.956589,35.695486],[-89.915491,35.754917],[-89.863874,35.747592],[-89.797053,35.782648],[-89.723426,35.809382],[-89.729517,35.847632],[-89.722634,35.873718],[-89.64727,35.89492],[-89.64890497034517,35.90358348231259],[-89.652279,35.921462],[-89.686924,35.947716],[-89.733095,36.000608],[-89.692437,36.020507],[-89.680029,36.082494],[-89.64302,36.10362],[-89.592102,36.135637],[-89.623804,36.183128],[-89.62764144167537,36.185460316606],[-89.69263,36.224959],[-89.678046,36.248284],[-89.602374,36.238106],[-89.554289,36.277751],[-89.611819,36.309088],[-89.600544,36.342985],[-89.54503133396906,36.344271398663],[-89.522695,36.344789],[-89.51038,36.378356],[-89.542337,36.420103],[-89.521021,36.461934],[-89.539232,36.497934],[-89.417293,36.499033],[-89.34519431953878,36.50134320863689],[-89.211409,36.50563],[-88.964471,36.502191],[-88.83458902287427,36.50198034225929],[-88.82717803634047,36.50196832225689],[-88.81676415734808,36.50195143181319],[-88.51635805997938,36.50146419816328],[-88.51192,36.501457],[-88.48907673871317,36.501283719075694],[-88.127378,36.49854],[-88.05335080077587,36.49999625068159],[-88.050466,36.500053],[-88.033802,36.551733],[-88.055738,36.630475],[-88.070532,36.678118],[-88.011792,36.677025],[-87.849567,36.663701],[-87.853204,36.633247],[-87.69418590786428,36.63683824394369],[-87.64115,36.638036],[-87.64114589700208,36.63803604761009],[-87.347796,36.64144],[-87.33597905008078,36.64157716049309],[-87.1150035566884,36.64414204465119],[-87.06082634439286,36.64477088485159],[-86.813037,36.647647],[-86.76329096410846,36.64872067450179],[-86.606394,36.652107],[-86.56206765186529,36.640746673907294],[-86.551292,36.637985],[-86.507771,36.652445],[-86.41149619896639,36.6482404228482],[-86.20556526985598,36.63924687032879],[-86.081944,36.633848],[-85.97571317414399,36.62863771868169],[-85.873857,36.623642],[-85.78855654361386,36.62171185903469],[-85.731862,36.620429],[-85.488353,36.614994],[-85.43640427288588,36.618003845027],[-85.29581248572748,36.62614955936749],[-85.290627,36.62645],[-85.27628794749938,36.62615754080338],[-85.096128,36.622483],[-84.97486843583738,36.61458335931719],[-84.943948,36.612569],[-84.78539997855027,36.603375419935595],[-84.785341,36.603372],[-84.77845586435048,36.60321051221589],[-84.499938,36.596678],[-84.26132120150467,36.592741697266995],[-84.227332,36.592181],[-84.22719396199828,36.59217951235509],[-83.987842,36.5896],[-83.98761095068278,36.58959228607249],[-83.93076078394387,36.58769425811239],[-83.894421,36.586481],[-83.690714,36.582581],[-83.675413,36.600814],[-83.47209357380957,36.59947573205929],[-83.2763,36.598187],[-82.98444890418119,36.59528987383889],[-82.830433,36.593761],[-82.60918194939899,36.5950896860685],[-82.487238,36.595822],[-82.29413642012908,36.595073032958496],[-82.24338500520017,36.59487618766539],[-82.173982,36.594607],[-82.14607026753038,36.594561147288594],[-81.934144,36.594213],[-81.922644,36.616213],[-81.82673414805258,36.614719104161395],[-81.6469,36.611918],[-81.677535,36.588117],[-81.699962,36.536829],[-81.695311,36.467912],[-81.734312,36.413342],[-81.72537277968526,36.38973849743609],[-81.705966,36.338496],[-81.768977,36.341042],[-81.833202,36.347339],[-81.908137,36.302013],[-81.91844447290477,36.287357917382096],[-81.93436924449257,36.264716204379795],[-81.960101,36.228131],[-82.02874,36.124322],[-82.080143,36.10572],[-82.08114891713238,36.105692114332584],[-82.127146,36.104417],[-82.140847,36.136216],[-82.211251,36.159012],[-82.22025301028657,36.15382003984309],[-82.26569,36.127614],[-82.297655,36.13351],[-82.346857,36.115209],[-82.409458,36.083409],[-82.41693759467316,36.07297001070849],[-82.464558,36.006508],[-82.50800765972248,35.98201320544148],[-82.557874,35.953901],[-82.610885,35.974442],[-82.595525,36.026012],[-82.60570361079358,36.03719886356189],[-82.628365,36.062105],[-82.725065,36.018204],[-82.779397,35.992511],[-82.787465,35.952163],[-82.81613,35.923986],[-82.860724,35.94743],[-82.89375141843136,35.93385726970889],[-82.910608,35.92693],[-82.899718,35.874602],[-82.937437,35.82732],[-82.96664974289857,35.795445979573984],[-82.978414,35.78261],[-83.04853,35.787706],[-83.097193,35.776067],[-83.161537,35.763363],[-83.198267,35.725494],[-83.255351,35.71623],[-83.25614155230359,35.715124062657786],[-83.26474416829,35.70308949617009],[-83.297154,35.65775],[-83.347262,35.660474],[-83.421576,35.611186],[-83.452431,35.602918],[-83.498335,35.562981],[-83.587827,35.566963],[-83.653159,35.568309],[-83.66291190158928,35.567799793208295],[-83.771736,35.562118],[-83.848502,35.519259],[-83.916801,35.473612],[-83.95323138015038,35.46002088957669],[-83.95891783456389,35.45789943957989],[-83.973171,35.452582],[-84.021782,35.407418],[-84.007586,35.371661],[-84.038081,35.348363],[-84.02351,35.295783],[-84.02910441377247,35.29212377649389],[-84.097508,35.247382],[-84.178516,35.240679],[-84.223718,35.269078],[-84.28322,35.226577],[-84.28659837874088,35.20575821849589],[-84.321869,34.988408],[-84.509052,34.988033],[-84.621483,34.988329],[-84.727434,34.98802],[-84.77583767129727,34.98793720614929],[-84.81047746688638,34.98787795522919],[-84.861314,34.987791],[-84.97697380659228,34.987219837354885],[-84.97985402523149,34.98720561397559],[-85.045183,34.986883],[-85.26505502171578,34.985077644741686],[-85.277556,34.984975],[-85.36391902893108,34.983376563140496],[-85.384967,34.982987],[-85.47433884313428,34.98367332679109],[-85.605165,34.984678],[-85.86394611180688,34.98703085874809],[-86.311274,34.991098],[-86.31876076546509,34.991078580442796],[-86.467798,34.990692],[-86.78362801716898,34.991924921991995],[-86.783648,34.991925],[-86.8362863159495,34.992803004216995],[-87.21075857998228,34.99904918099969],[-87.216683,34.999148],[-87.22405364187567,34.99923074197209],[-87.60609786765326,35.00351952620429],[-87.625025,35.003732],[-87.851886,35.005656],[-87.98491604369889,35.005910124325794],[-88.000032,35.005939],[-88.202959,35.008028],[-88.200064,34.995634],[-88.258111,34.995463],[-88.36353026853918,34.99574675179709],[-88.38049251152206,34.995792408222094],[-88.469877,34.996033],[-88.786612,34.995252],[-88.823050501632,34.995207045695],[-89.01712701155239,34.99496761283629],[-89.02654,34.994956],[-89.19828790149498,34.994450530115095],[-89.35267939184838,34.99399614174589],[-89.434954,34.993754],[-89.64428383409208,34.994067210562484],[-89.72431583796856,34.994186958753495],[-89.75961264223437,34.99423977173149],[-89.795187,34.994293],[-90.309297,34.995694],[-90.300697,35.028793]]]}},
+{"type":"Feature","properties":{"name":"Texas","income":{"1995":31488,"1996":32773,"1997":34478,"1998":35449,"1999":38092,"2000":39090,"2001":40152,"2002":40063,"2003":39967,"2004":41645,"2005":42165,"2006":44943,"2007":47563,"2008":50049,"2009":48286,"2010":48622,"2011":49390,"2012":50747,"2013":51714,"2014":53067,"2015":55668}},"geometry":{"type":"Polygon","coordinates":[[[-106.623445,31.914034],[-106.630114,31.971258],[-106.618486,32.000495],[-106.37717318824697,32.00124010103749],[-106.200699,32.001785],[-105.99797115166398,32.00197459069899],[-105.750527,32.002206],[-105.153994,32.000497],[-104.91835699427997,32.000472073073496],[-104.84774,32.000464602834995],[-104.643526,32.000443],[-104.024521,32.00001],[-103.98021347738099,32.00003285136259],[-103.72288197914799,32.00016556867639],[-103.326501,32.00037],[-103.064423,32.000518],[-103.06442240110597,32.087051],[-103.064422,32.145006],[-103.064696,32.522193],[-103.064761,32.587983],[-103.064889,32.849359],[-103.06346888847497,32.959106381830495],[-103.060103,33.219225],[-103.056495064338,33.38841421462059],[-103.05261051656397,33.57057477644219],[-103.05261,33.570599],[-103.04734601816698,33.824674123151695],[-103.047346,33.824675],[-103.043516,34.079382],[-103.04356392079099,34.11283438975539],[-103.043835830165,34.302648],[-103.04385030117197,34.31274987350789],[-103.043946,34.379555],[-103.043072,34.619782],[-103.042769,34.747361],[-103.04273881860799,34.95414204036139],[-103.042711,35.144735],[-103.04261795056497,35.1831572590084],[-103.041554,35.622487],[-103.04155399893398,35.62248763195869],[-103.04135672181798,35.73943350634869],[-103.040824,36.055231],[-103.041924,36.500439],[-103.002434,36.500397],[-102.162463,36.500326],[-102.03233901896297,36.50006567301009],[-101.826565,36.499654],[-101.623915,36.499528],[-101.085156,36.499244],[-100.95415215769299,36.49952949662619],[-100.884174,36.499682],[-100.592614,36.499469],[-100.54614512609699,36.49950513930379],[-100.311018,36.499688],[-100.00376199336799,36.499701848737594],[-100.000406,36.499702],[-100.000399,36.055677],[-100.00039619832899,35.880947999996785],[-100.000392,35.619115],[-100.00038884414299,35.42236398830939],[-100.000385,35.182702],[-100.00038402077298,35.03038499999989],[-100.000382194816,34.74636055256159],[-100.000381,34.560509],[-99.99762932816299,34.56113662456009],[-99.929334,34.576714],[-99.84206388414638,34.50693276888139],[-99.818186,34.48784],[-99.764882,34.435266],[-99.696462,34.381036],[-99.600026,34.374688],[-99.58448,34.407673],[-99.47502213703837,34.39687098979049],[-99.470969,34.396471],[-99.420432,34.380464],[-99.394956,34.442099],[-99.350407,34.437083],[-99.27534,34.386599],[-99.22160790084548,34.32537357437259],[-99.2116,34.31397],[-99.189511,34.214312],[-99.131553,34.209352],[-99.0588,34.201256],[-99.002916,34.208782],[-98.95232488752816,34.20466989860349],[-98.94022,34.203686],[-98.872229,34.160446],[-98.80681,34.155901],[-98.737232,34.130992],[-98.690072,34.133155],[-98.648073,34.164441],[-98.61035178164467,34.15620993949669],[-98.577136,34.148962],[-98.5282,34.094961],[-98.475066,34.064269],[-98.423533,34.081949476005896],[-98.414426,34.085074],[-98.398441,34.128456],[-98.364023,34.157109],[-98.31875,34.146421],[-98.225282,34.127245],[-98.16912,34.114171],[-98.13848602574639,34.14120601971109],[-98.123377,34.15454],[-98.099328,34.104295],[-98.099096,34.048639],[-98.082839,34.002412],[-98.005667,33.995964],[-97.947572,33.991053],[-97.953695,33.924373],[-97.95190595085516,33.89122581485729],[-97.951215,33.878424],[-97.865765,33.849393],[-97.803473,33.88019],[-97.759834,33.92521],[-97.671772,33.99137],[-97.609091,33.968093],[-97.596155,33.922106],[-97.56124315022106,33.89906150673299],[-97.55827,33.897099],[-97.486505,33.916994],[-97.48414343858758,33.91388910889089],[-97.451469,33.87093],[-97.444193,33.823773],[-97.372941,33.819454],[-97.318243,33.865121],[-97.24618,33.900344],[-97.206141,33.91428],[-97.166629,33.847311],[-97.205652,33.809824],[-97.149394,33.721967],[-97.091072,33.735115],[-97.087852,33.774099],[-97.07859,33.812756],[-97.055838,33.855741],[-96.985567,33.886522],[-96.988745,33.918468],[-96.952313,33.944582],[-96.94461688837048,33.945013250454],[-96.93434330313298,33.94558892925279],[-96.905253,33.947219],[-96.897194,33.902954],[-96.850593,33.847211],[-96.794276,33.868886],[-96.776766,33.841976],[-96.712422,33.831633],[-96.682103,33.876645],[-96.659896,33.916666],[-96.59467430737708,33.883018657398296],[-96.590112,33.880665],[-96.592926,33.830916],[-96.572937,33.819098],[-96.523863,33.818114],[-96.502286,33.77346],[-96.436455,33.78005],[-96.403507,33.746289],[-96.37966082595207,33.715530908565995],[-96.363135,33.694215],[-96.307389,33.735005],[-96.277269,33.769735],[-96.229023,33.748021],[-96.173025,33.80056],[-96.15163,33.831946],[-96.063924,33.841523],[-95.935325,33.875099],[-95.887491,33.863856],[-95.84487853407067,33.86042190471899],[-95.820596,33.858465],[-95.78963931775226,33.87243738467229],[-95.737508,33.895967],[-95.669978,33.905844],[-95.603657,33.927195],[-95.556915,33.92702],[-95.525322,33.885487],[-95.44737,33.86885],[-95.352338,33.867789],[-95.31044979544906,33.87384303818549],[-95.283445,33.877746],[-95.253623,33.92971],[-95.226393,33.961954],[-95.15590761710747,33.93848238856979],[-95.149462,33.936336],[-95.095002,33.904816],[-95.046568,33.862565],[-94.98165,33.852284],[-94.93956,33.810503],[-94.902276,33.776289],[-94.841634,33.739431],[-94.766146,33.748031],[-94.73193290199589,33.720830516280294],[-94.714865,33.707261],[-94.630586,33.673401],[-94.572872,33.669886],[-94.528928,33.62184],[-94.485875,33.637867],[-94.419057,33.577217],[-94.388052,33.565511],[-94.354165,33.556452],[-94.338422,33.567082],[-94.303742,33.564486],[-94.238868,33.576722],[-94.213605,33.570622],[-94.183395,33.592212],[-94.143024,33.577725],[-94.07267,33.572234],[-94.04383374780107,33.551713735585594],[-94.043428,33.551425],[-94.042988,33.435824],[-94.043067,33.330498],[-94.04294584717597,33.27124208413979],[-94.042719,33.160291],[-94.042964,33.019219],[-94.04300262156329,32.88108897892399],[-94.043026,32.797476],[-94.04305152761756,32.69302997666559],[-94.043083,32.564261],[-94.0427882328053,32.392283193281195],[-94.042739,32.363559],[-94.04269592374007,32.196004974824895],[-94.042681,32.137956],[-94.041833,31.992402],[-94.02942840659598,31.979686964167996],[-93.977461,31.926419],[-93.909557,31.893144],[-93.87825189538658,31.844276557245585],[-93.85339,31.805467],[-93.803419,31.700686],[-93.816838,31.622509],[-93.834924,31.586211],[-93.83492321447775,31.586210021077996],[-93.787687,31.527344],[-93.725925,31.504092],[-93.749476,31.46869],[-93.697603,31.428409],[-93.668146,31.375103],[-93.67544,31.30104],[-93.613942,31.259375],[-93.602443,31.182541],[-93.60060308736288,31.18262495526879],[-93.55249730750228,31.18482002344679],[-93.535097,31.185614],[-93.540278,31.128868],[-93.531219,31.051678],[-93.539526,31.008498],[-93.549841,30.967118],[-93.530936,30.924534],[-93.55457585434549,30.87746950186109],[-93.558617,30.869424],[-93.569303,30.802969],[-93.617688,30.738479],[-93.629904,30.67994],[-93.685121,30.625201],[-93.684329,30.592586],[-93.729195,30.544842],[-93.710117,30.5064],[-93.702665,30.429947],[-93.738540238226,30.40226367248079],[-93.745333,30.397022],[-93.760328,30.329924],[-93.70719,30.275513],[-93.71106217130087,30.24397071564029],[-93.713359,30.225261],[-93.703764,30.173936],[-93.702436,30.112721],[-93.70394,30.054291],[-93.70633576247016,30.05218024153089],[-93.741078,30.021571],[-93.807815,29.954549],[-93.830374,29.894359],[-93.85230987092228,29.87209100439189],[-93.872446,29.85165],[-93.929208,29.802952],[-93.890821,29.761673],[-93.863204,29.724059],[-93.837971,29.690619],[-93.861291,29.679007],[-93.961867,29.682213],[-94.056506,29.671163],[-94.161549,29.636588],[-94.35412254491366,29.56210282017479],[-94.370816,29.555645988294994],[-94.48567951355406,29.51121813364729],[-94.500807,29.505367],[-94.594853,29.467903],[-94.670389,29.43078],[-94.731047,29.369141],[-94.72253,29.331446],[-94.803695,29.279237],[-95.026219,29.148064],[-95.11505050559828,29.075552022478696],[-95.125134,29.067321],[-95.191391,29.02309],[-95.297147,28.934073],[-95.38239,28.866348],[-95.439594,28.859022],[-95.50703739691699,28.824735512192095],[-95.588801,28.783169],[-95.684089,28.734041],[-95.812504,28.664942],[-96.000682,28.588238],[-96.194412,28.502224],[-96.328817,28.423659],[-96.37853315928677,28.389865030487893],[-96.390376,28.381815],[-96.442849,28.317666],[-96.63201,28.222821],[-96.719627,28.164594],[-96.792158,28.110497],[-96.85207062273007,28.059820861604592],[-96.886459,28.030734],[-97.003325,27.908307],[-97.04368408368649,27.836532353471792],[-97.044846,27.834466],[-97.090735,27.785888],[-97.140854,27.716688],[-97.212679,27.59642],[-97.22299140753177,27.576607316479592],[-97.257325,27.510644],[-97.296057,27.427175],[-97.336122,27.317818],[-97.34685087695567,27.277958832209496],[-97.358469,27.234796],[-97.378697,27.060044],[-97.366872,26.885581],[-97.32275,26.701746],[-97.28754111668576,26.600339881473296],[-97.253801,26.503164],[-97.22738022652179,26.411496005302496],[-97.196935,26.305865],[-97.158798,26.08266],[-97.151922,26.017653],[-97.145567,25.971132],[-97.156608,25.949022],[-97.206945,25.960899],[-97.277163,25.935438],[-97.338346,25.923125],[-97.365976,25.902447],[-97.360082,25.868874],[-97.372864,25.840117],[-97.422636,25.840378],[-97.454727,25.879337],[-97.496861,25.880058],[-97.542957,25.920035],[-97.582565,25.937857],[-97.644011,26.006614],[-97.697069,26.023455],[-97.758838,26.032131],[-97.795291,26.055218],[-97.86228156310628,26.05774682844019],[-97.871187,26.058083],[-97.944345,26.059621],[-98.010971,26.063863],[-98.039239,26.041275],[-98.091038,26.059169],[-98.149463,26.055813],[-98.197046,26.056153],[-98.20495395559236,26.058742336000396],[-98.248806,26.073101],[-98.302979,26.11005],[-98.30820011704587,26.11303255102869],[-98.386694,26.157872],[-98.442536,26.199151],[-98.503492,26.214798],[-98.576188,26.235221],[-98.59330021827917,26.242936348676594],[-98.613465,26.252028],[-98.654221,26.23596],[-98.698856,26.265619],[-98.779912,26.326542],[-98.807348,26.369421],[-98.890965,26.357569],[-98.958325,26.394056],[-99.032316,26.412082],[-99.082002,26.39651],[-99.110855,26.426278],[-99.091635,26.476977],[-99.105031,26.500335],[-99.171404,26.549848],[-99.17681609238107,26.56966055537359],[-99.200522,26.656443],[-99.208907,26.724761],[-99.242444,26.788262],[-99.268613,26.843213],[-99.3289,26.879761],[-99.361144,26.928921],[-99.387367,26.982399],[-99.44697,27.026026],[-99.442123,27.106839],[-99.429984,27.159149],[-99.445238,27.223341],[-99.46082579913427,27.262240197042793],[-99.463309,27.268437],[-99.487937,27.294941],[-99.529654,27.306051],[-99.487521,27.412396],[-99.495104,27.451518],[-99.497519,27.500496],[-99.52832,27.498896],[-99.530138,27.580207],[-99.556812,27.614336],[-99.624515,27.634515],[-99.704601,27.654954],[-99.758534,27.717071],[-99.801651,27.741771],[-99.844737,27.778809],[-99.87784,27.824376],[-99.904385,27.875284],[-99.917461,27.917973],[-99.932161,27.96771],[-99.984923,27.990729],[-100.028725,28.073118],[-100.075474,28.124882],[-100.174413,28.179448],[-100.19751005550097,28.19700073113989],[-100.267604,28.250269],[-100.287554,28.301093],[-100.320393,28.362117],[-100.337059,28.427151],[-100.368288,28.477196],[-100.38886,28.515748],[-100.39727,28.575637],[-100.448648,28.616774],[-100.500354,28.66196],[-100.506701,28.716745],[-100.533017,28.76328],[-100.53583,28.805888],[-100.576846,28.836168],[-100.627206,28.903734],[-100.646993,28.957079],[-100.660208,29.031497],[-100.67121518919397,29.08351602534449],[-100.674656,29.099777],[-100.727462,29.129123],[-100.772649,29.168492],[-100.795681,29.22773],[-100.80186754602899,29.232831568097993],[-100.848664,29.271421],[-100.886842,29.307848],[-100.995607,29.363403],[-101.060151,29.458661],[-101.137503,29.473542],[-101.19272,29.520285],[-101.254895,29.520342],[-101.305533,29.577925],[-101.307332,29.640716],[-101.367198,29.664041],[-101.400636,29.738079],[-101.453499,29.759671],[-101.503223,29.764582],[-101.561569,29.794658],[-101.654578,29.765163],[-101.714224,29.76766],[-101.76161920952798,29.778860096722187],[-101.809441,29.790161],[-101.8754,29.794023],[-101.966167,29.807343],[-102.021919,29.802491],[-102.073646,29.786926],[-102.115682,29.79239],[-102.161674,29.819487],[-102.227553,29.843534],[-102.301381,29.877674],[-102.31868395458798,29.872192946501492],[-102.349861,29.862317],[-102.369522,29.820395],[-102.392906,29.765569],[-102.468946,29.779817],[-102.512687,29.780303],[-102.551081,29.752358],[-102.612879,29.748182],[-102.677192,29.738261],[-102.693466,29.676507],[-102.738428,29.621929],[-102.777531,29.556497],[-102.808692,29.522319],[-102.83097,29.444267],[-102.824564,29.399558],[-102.871857,29.352093],[-102.891022,29.287113],[-102.871347,29.241625],[-102.917805,29.190697],[-102.995688,29.161219],[-103.035683,29.103029],[-103.076355,29.085722],[-103.100368,29.026877],[-103.126748,28.982124],[-103.227801,28.991532],[-103.28119,28.982138],[-103.361998,29.018914],[-103.463196,29.066822],[-103.524613,29.120998],[-103.59236,29.15026],[-103.660203,29.170934],[-103.724743,29.19147],[-103.789034,29.257502],[-103.79387301093399,29.259238393348593],[-103.856893,29.281852],[-103.975235,29.296017],[-104.055596,29.33091],[-104.143692,29.383278],[-104.181273,29.426265],[-104.229081,29.48105],[-104.308813,29.524337],[-104.371175,29.543063],[-104.452301,29.60366],[-104.539761,29.676074],[-104.565688,29.770462],[-104.619039,29.844445],[-104.672327,29.911112],[-104.685479,29.989943],[-104.703998,30.02421],[-104.692094,30.107304],[-104.702788,30.211736],[-104.740448,30.259454],[-104.761634,30.301148],[-104.824314,30.370466],[-104.859521,30.390413],[-104.869872,30.458645],[-104.889376,30.535144],[-104.924796,30.604832],[-104.972071,30.61026],[-104.98075389132498,30.62881201878829],[-105.00124,30.672583],[-105.062334,30.686303],[-105.098282,30.718914],[-105.160153,30.757059],[-105.21866,30.801567],[-105.314863,30.816961],[-105.394242,30.852979],[-105.399609,30.888941],[-105.488027,30.943278],[-105.55743,30.990229],[-105.579542,31.035396],[-105.627349,31.098545],[-105.709491,31.136375],[-105.773257,31.166897],[-105.794386,31.20224],[-105.869353,31.288634],[-105.938452,31.318735],[-105.953943,31.364749],[-105.99642937828698,31.38784012951259],[-106.004926,31.392458],[-106.080258,31.398702],[-106.175675,31.456279],[-106.236804,31.513376],[-106.280811,31.562062],[-106.303536,31.620413],[-106.35261099849798,31.686946416503595],[-106.370139,31.71071],[-106.41794,31.752009],[-106.467642,31.759608],[-106.484642,31.747809],[-106.528242,31.783148],[-106.581344,31.813906],[-106.63588,31.871514],[-106.623445,31.914034]]]}},
+{"type":"Feature","properties":{"name":"Virginia","income":{"1995":36367,"1996":38510,"1997":40209,"1998":42622,"1999":44848,"2000":46789,"2001":48130,"2002":48224,"2003":50028,"2004":51103,"2005":54207,"2006":56297,"2007":59575,"2008":61210,"2009":59372,"2010":60665,"2011":61877,"2012":61782,"2013":62745,"2014":64923,"2015":66263}},"geometry":{"type":"MultiPolygon","coordinates":[[[[-76.023475,37.289067],[-75.987122,37.368548],[-75.976491,37.444878],[-75.94557431893068,37.54904065815169],[-75.941182,37.563839],[-75.898665,37.635425],[-75.859262,37.703111],[-75.812155,37.749502],[-75.818125,37.791698],[-75.73588,37.816561],[-75.702914,37.849659],[-75.757694,37.903912],[-75.669711,37.950796],[-75.624341,37.994211],[-75.242266,38.027209],[-75.338623,37.894986],[-75.380638,37.851702],[-75.439001,37.869335],[-75.48927,37.832457],[-75.551898,37.748122],[-75.591953,37.663178],[-75.614527,37.609296],[-75.607824,37.560706],[-75.672877,37.483696],[-75.66541791087508,37.46729351549249],[-75.658379,37.451815],[-75.720739,37.373129],[-75.735829,37.335426],[-75.778817,37.297176],[-75.795164,37.247095],[-75.817387,37.193437],[-75.897298,37.118037],[-75.942399,37.089607],[-75.979608,37.100448],[-75.998647,37.188739],[-76.023475,37.289067]]],[[[-83.614513,36.633983],[-83.527112,36.665985],[-83.46095464746378,36.66613103627329],[-83.436508,36.666185],[-83.386099,36.686589],[-83.236399,36.726887],[-83.136395,36.743088],[-83.114693,36.796088],[-83.07559,36.850589],[-83.012587,36.847289],[-82.895445,36.882145],[-82.88361015487978,36.897314788915786],[-82.865192,36.920923],[-82.869183,36.974182],[-82.815748,37.007196],[-82.750715,37.024107],[-82.722254,37.057948],[-82.726294,37.111852],[-82.565275702797,37.19590110688309],[-82.558178,37.199606],[-82.55363382627456,37.20145269844589],[-82.449164,37.243908],[-82.355343,37.26522],[-82.31478127133458,37.29599456011749],[-82.309415,37.300066],[-82.201745,37.375108],[-81.968297,37.537798],[-81.932279,37.511961],[-81.984891,37.454315],[-81.93695,37.41992],[-81.933601,37.389217],[-81.896001,37.331967],[-81.849949,37.285227],[-81.774747,37.274847],[-81.744003,37.242528],[-81.73905503048546,37.23949710387279],[-81.678603,37.202467],[-81.560625,37.206663],[-81.53307,37.223414],[-81.483559,37.250604],[-81.427946,37.271015],[-81.362156,37.337687],[-81.225104,37.234874],[-81.112596,37.278497],[-80.996013,37.299545],[-80.98084525689279,37.30085281619049],[-80.919259,37.306163],[-80.835479,37.334824],[-80.883248,37.383933],[-80.865148,37.419927],[-80.85814811681978,37.421006906721495],[-80.85735857018977,37.421128713998996],[-80.836446,37.424355],[-80.770082,37.372363],[-80.664971,37.414215],[-80.544836,37.474695],[-80.47128294938639,37.43006549889589],[-80.46482,37.426144],[-80.39988,37.462314],[-80.291644,37.536505],[-80.28244,37.585481],[-80.223386,37.623185],[-80.22430324437678,37.62399137117089],[-80.292258,37.683732],[-80.290033810255,37.686136458971],[-80.258143,37.720612],[-80.218616,37.783291],[-80.199633,37.827507],[-80.131931,37.8895],[-80.05581159458966,37.951878220097896],[-80.036236,37.96792],[-79.971231,38.044326],[-79.96198227263537,38.06360709949329],[-79.938952,38.111619],[-79.916174,38.184386],[-79.850324,38.233329],[-79.79701353680687,38.267268121139196],[-79.787542,38.273298],[-79.804093,38.313922],[-79.7346,38.356728],[-79.689675,38.431439],[-79.691088,38.463744],[-79.669128,38.510883],[-79.649075,38.591515],[-79.54257,38.553217],[-79.476638,38.457228],[-79.370302,38.427244],[-79.31129606551438,38.41845460145499],[-79.297758,38.416438],[-79.23162,38.474041],[-79.22825588138187,38.48003955108519],[-79.201459,38.527821],[-79.154357,38.606518],[-79.092955,38.659517],[-79.088055,38.690115],[-79.057253,38.761413],[-79.023053,38.798613],[-78.999014,38.840074],[-78.869276,38.762991],[-78.821167,38.830982],[-78.772793,38.893742],[-78.681617,38.92584],[-78.620453,38.982601],[-78.561711,39.009007],[-78.53214700369618,39.05294164002129],[-78.508132,39.08863],[-78.413943,39.158415],[-78.428697,39.187217],[-78.40498,39.238006],[-78.401813,39.276754],[-78.34048,39.353492],[-78.337133,39.409169],[-78.347087,39.466012],[-78.22912953421849,39.39066388720409],[-78.18737,39.363989],[-78.03318523536657,39.26462484200518],[-78.03318346093418,39.26462369847469],[-78.032841,39.264403],[-77.82830183326728,39.132422454832486],[-77.828157,39.132329],[-77.809125,39.168567],[-77.778068,39.229305],[-77.719519,39.321314],[-77.67769576207868,39.317940817087994],[-77.66613,39.317008],[-77.588235,39.301955],[-77.553114,39.279268],[-77.496606,39.251045],[-77.46006562649778,39.218842943859386],[-77.459883,39.218682],[-77.485971,39.185665],[-77.521222,39.161057],[-77.519929,39.120925],[-77.481279,39.105658],[-77.462617,39.076248],[-77.359702,39.062004],[-77.33003770595407,39.055952113490996],[-77.310705,39.052008],[-77.248403,39.026909],[-77.24840370497539,39.02688835429229],[-77.249803,38.985909],[-77.202502,38.96791],[-77.146601,38.96421],[-77.119759,38.934343],[-77.0902,38.904211],[-77.039099,38.868112],[-77.03906635676466,38.841271889518595],[-77.039006,38.791645],[-77.03923988508228,38.78533632562359],[-77.04067257077807,38.74669193048289],[-77.040998,38.737914],[-77.053199,38.709915],[-77.079499,38.709515],[-77.08578476515638,38.70528128183239],[-77.132501,38.673816],[-77.1302,38.635017],[-77.22414585530147,38.63517827490088],[-77.246704,38.635217],[-77.295274,38.562125],[-77.29923201266608,38.54837673851089],[-77.31290355402578,38.50088827866289],[-77.322622,38.467131],[-77.317288,38.383576],[-77.28299760033909,38.350328960258],[-77.265295,38.333165],[-77.162692,38.345994],[-77.093713,38.352801],[-77.048137,38.360145],[-77.020947,38.329273],[-77.026304,38.302685],[-76.99679125920488,38.27914783397989],[-76.990255,38.273935],[-76.957796,38.243183],[-76.962311,38.214075],[-76.910832,38.197073],[-76.838795,38.163476],[-76.749685,38.162114],[-76.684892,38.156497],[-76.613939,38.148587],[-76.600937,38.110084],[-76.535919,38.069532],[-76.51069396131767,38.03948892781419],[-76.491998,38.017222],[-76.427487,37.977038],[-76.316952,37.934929],[-76.236725,37.889174],[-76.251358,37.833072],[-76.310307,37.794849],[-76.312858,37.720338],[-76.3252991496906,37.68257388543669],[-76.32912,37.670976],[-76.279447,37.618225],[-76.28887783670189,37.587359934103986],[-76.29796,37.557636],[-76.28949279717807,37.53607528800879],[-76.273488,37.495321],[-76.250454,37.421886],[-76.24846,37.375135],[-76.275552,37.309964],[-76.366751,37.374495],[-76.393958,37.39594],[-76.40294587535288,37.392600001791195],[-76.437525,37.37975],[-76.38777,37.30767],[-76.36229,37.270226],[-76.37693680971749,37.24949176236329],[-76.394132,37.22515],[-76.34718992896758,37.189644493655294],[-76.3431,37.186551],[-76.311088,37.138495],[-76.293126918301,37.11416370088029],[-76.271262,37.084544],[-76.28388890538098,37.052731542777394],[-76.304272,37.001378],[-76.29679229029519,36.99379096645169],[-76.28097205081657,36.97774372766799],[-76.267962,36.964547],[-76.189959,36.931447],[-76.17694758519868,36.92853868015499],[-76.087955,36.908647],[-76.043054,36.927547],[-75.996252,36.922047],[-75.961589,36.799995],[-75.921748,36.692051],[-75.890946,36.630753],[-75.867044,36.550754],[-76.02675,36.550553],[-76.12234994701008,36.55055233255409],[-76.313215,36.550551],[-76.31330296826026,36.550551089806994],[-76.49148257547228,36.55073299383639],[-76.54196586571828,36.55078453236009],[-76.738329,36.550985],[-76.91573180234968,36.546089769338884],[-76.91603763285619,36.54608133029029],[-76.917318,36.546046],[-77.16432273355687,36.546152819904094],[-77.190175,36.546164],[-77.29877018881177,36.546039010854486],[-77.749706,36.54552],[-77.76710333422477,36.545442412170495],[-77.89977414050628,36.54485073302249],[-78.04620830436028,36.54419767268659],[-78.132911,36.543811],[-78.32371850955899,36.54242139155859],[-78.45727789625586,36.541448708399486],[-78.509965,36.541065],[-78.73412280111718,36.54160873484079],[-78.79627395514048,36.541759493581594],[-78.942009,36.542113],[-79.13833589887138,36.54163827005589],[-79.21845549592226,36.541444536176094],[-79.3428439209599,36.54114375767659],[-79.47005667392429,36.54083614978659],[-79.510647,36.540738],[-79.51364766250857,36.54074820507069],[-79.71485081105197,36.54143248474129],[-79.89167016695387,36.54203383661619],[-80.027269,36.542495],[-80.02733891514119,36.54249538561418],[-80.05345504335008,36.542639428086595],[-80.295243,36.543973],[-80.431605,36.550219],[-80.44006854346448,36.550593813802195],[-80.61218878812458,36.55821627638039],[-80.704831,36.562319],[-80.84021307724598,36.56192845163729],[-80.90166111892098,36.56175118716799],[-80.901726,36.561751],[-81.061866,36.56702],[-81.176712,36.571926],[-81.35322122460218,36.57623823115639],[-81.499831,36.57982],[-81.677535,36.588117],[-81.6469,36.611918],[-81.82673414805258,36.614719104161395],[-81.922644,36.616213],[-81.934144,36.594213],[-82.14607026753038,36.594561147288594],[-82.173982,36.594607],[-82.24338500520017,36.59487618766539],[-82.29413642012908,36.595073032958496],[-82.487238,36.595822],[-82.60918194939899,36.5950896860685],[-82.830433,36.593761],[-82.98444890418119,36.59528987383889],[-83.2763,36.598187],[-83.47209357380957,36.59947573205929],[-83.675413,36.600814],[-83.614513,36.633983]]]]}},
+{"type":"Feature","properties":{"name":"Wisconsin","income":{"1995":37572,"1996":38598,"1997":39800,"1998":42169,"1999":43301,"2000":44503,"2001":45435,"2002":45377,"2003":46538,"2004":46142,"2005":47141,"2006":48784,"2007":50567,"2008":52103,"2009":49994,"2010":48974,"2011":50401,"2012":51063,"2013":51474,"2014":52632,"2015":55623}},"geometry":{"type":"MultiPolygon","coordinates":[[[[-86.934276,45.421149],[-86.835749,45.450188],[-86.805868,45.412903],[-86.867743,45.353065],[-86.899891,45.295185],[-86.956198,45.352006],[-86.934276,45.421149]]],[[[-90.776921,47.024324],[-90.74018,47.036105],[-90.650422,47.054678],[-90.560936,47.037013],[-90.544875,47.017383],[-90.511623,46.961407],[-90.524056,46.935664],[-90.549104,46.915461],[-90.637124,46.906724],[-90.679446,46.956032],[-90.712032,46.98526],[-90.767985,47.002327],[-90.776921,47.024324]]],[[[-92.88669712440898,45.644148],[-92.869689,45.715142],[-92.84074210662547,45.72939673446969],[-92.826013,45.73665],[-92.776496,45.790014],[-92.759458,45.835341],[-92.721128,45.883805],[-92.656125,45.924442],[-92.580565,45.94625],[-92.545682,45.970118],[-92.472761,45.972952],[-92.44963,46.002252],[-92.392681,46.01954],[-92.35176,46.015685],[-92.338239,46.052149],[-92.294033,46.074377],[-92.29383060857869,46.157321306495994],[-92.293619,46.244043],[-92.29275980242826,46.417219502879995],[-92.292371,46.495585],[-92.292192,46.663242],[-92.205492,46.664741],[-92.183091,46.695241],[-92.143338,46.731596],[-92.100255,46.734446],[-92.050819,46.710517],[-92.01529,46.706469],[-91.961889,46.682539],[-91.886963,46.690211],[-91.820027,46.690176],[-91.645502,46.734733],[-91.574291,46.757488],[-91.55134153565636,46.75747529345949],[-91.511077,46.757453],[-91.411799,46.78964],[-91.360804,46.798136],[-91.314815,46.826825],[-91.256705,46.836887],[-91.211647,46.866824],[-91.167601,46.84476],[-91.130475,46.870008],[-91.087357,46.879471],[-91.034518,46.903053],[-90.984617,46.925602],[-90.989375,46.982274],[-90.924128,47.001888],[-90.85284,46.962558],[-90.80628,46.938738],[-90.745305,46.894254],[-90.798936,46.823143],[-90.861046,46.765631],[-90.880841,46.739957],[-90.852704,46.699582],[-90.915152,46.65841],[-90.932626,46.617296],[-90.95565,46.592503],[-90.92522939534257,46.587488072445595],[-90.898308,46.58305],[-90.829031,46.616066],[-90.794775,46.624941],[-90.755287,46.646289],[-90.73726,46.692267],[-90.663273,46.645326],[-90.56556,46.584892],[-90.54857855596607,46.58623625875048],[-90.505909,46.589614],[-90.437596,46.561492],[-90.418136,46.566094],[-90.387228,46.533663],[-90.331887,46.553278],[-90.285707,46.518846],[-90.214866,46.499947],[-90.158241,46.420485],[-90.120489,46.336852],[-89.92912562566477,46.29991572840809],[-89.638416,46.243804],[-89.09163,46.138505],[-88.99121702839598,46.09653635443599],[-88.93276845100957,46.07210716377599],[-88.811948,46.021609],[-88.739994,46.027308],[-88.68323220849936,46.014465670320284],[-88.679132,46.013538],[-88.65776,45.989287],[-88.613063,45.990627],[-88.59386,46.015132],[-88.526673,46.020822],[-88.409864,45.979688],[-88.380183,45.991654],[-88.30952,45.959369],[-88.246307,45.962983],[-88.178008,45.947111],[-88.11685653737608,45.92281124226269],[-88.115346,45.922211],[-88.073944,45.875593],[-88.135067,45.821694],[-88.105518,45.798839],[-88.05701046594899,45.784977030143686],[-88.048514,45.782549],[-87.995876,45.795435],[-87.96697,45.764021],[-87.879812,45.754843],[-87.83304946803528,45.72275257534689],[-87.805076,45.703556],[-87.781007,45.673934],[-87.824676,45.653211],[-87.777671,45.609204],[-87.787292,45.574906],[-87.804203,45.524676],[-87.805773,45.473139],[-87.847429,45.444177],[-87.85683,45.393106],[-87.863489,45.35302],[-87.800464,45.353608],[-87.750928,45.355037],[-87.706767,45.383827],[-87.657349,45.368752],[-87.667423,45.31636],[-87.71148,45.245224],[-87.741805,45.197051],[-87.695055,45.150522],[-87.648191,45.106368],[-87.590208,45.095264],[-87.625748,45.045157],[-87.630298,44.976865],[-87.696492,44.974233],[-87.76263849097109,44.962752171760286],[-87.812989,44.954013],[-87.843433,44.924355],[-87.838359,44.873987],[-87.854681,44.857771],[-87.904484,44.818723],[-87.941453,44.75608],[-87.983494,44.720196],[-87.99757340644248,44.677663939044784],[-88.002085,44.664035],[-87.998716,44.609288],[-88.041202,44.572581],[-88.005518,44.539216],[-87.943801,44.529693],[-87.898888,44.574135],[-87.866884,44.608434],[-87.77516,44.639281],[-87.76130767888509,44.653697749734896],[-87.748409,44.667122],[-87.73757086086626,44.67701181615589],[-87.71978,44.693246],[-87.720889,44.724548],[-87.6463,44.798739],[-87.581306,44.851791],[-87.530999,44.857437],[-87.515142,44.869596],[-87.446477,44.886109],[-87.393405,44.934393],[-87.336457,45.01353],[-87.264877,45.081361],[-87.238224,45.167259],[-87.175068,45.17305],[-87.121609,45.209783],[-87.108743,45.257003],[-87.057627,45.292838],[-87.017036,45.299254],[-86.97778,45.290684],[-86.978759,45.227333],[-87.04417,45.186946],[-87.045748,45.134987],[-87.063157,45.079316],[-87.139384,45.012565],[-87.188375,44.948077],[-87.206285,44.885928],[-87.27603,44.83318],[-87.318982,44.771335],[-87.37549155021938,44.67551210980499],[-87.401629,44.631191],[-87.446963,44.586274],[-87.498662,44.460686],[-87.54332678547608,44.32751285612989],[-87.545382,44.321385],[-87.521755,44.259957],[-87.507419,44.210803],[-87.53994,44.15969],[-87.600882,44.131695],[-87.655183,44.081894],[-87.69892,43.965936],[-87.72857954230886,43.89220888745679],[-87.736017,43.873721],[-87.726407,43.810445],[-87.700251,43.76735],[-87.708185,43.722895],[-87.706204,43.679542],[-87.790135,43.563054],[-87.79102015567156,43.54301509078658],[-87.793239,43.492783],[-87.840955,43.420677],[-87.889207,43.307652],[-87.896286,43.197108],[-87.89657933386819,43.19213424797579],[-87.900485,43.12591],[-87.870184,43.064412],[-87.895784,43.015814],[-87.842681,42.944116],[-87.834879,42.856717],[-87.83136496100246,42.853016604204385],[-87.82116293803398,42.842273546735385],[-87.766675,42.784896],[-87.785074,42.700819],[-87.80201505510958,42.66831106117669],[-87.814674,42.64402],[-87.813273,42.57922],[-87.800477,42.49192],[-87.89770179730027,42.49285460462939],[-88.19952900144847,42.49575601569028],[-88.2169,42.495923],[-88.304692,42.49560817275149],[-88.506912,42.494883],[-88.70737771540178,42.49358701476958],[-88.70738,42.493587],[-88.77649576073519,42.494136600467385],[-88.94038486037799,42.49543982747118],[-88.99256022681729,42.495854719899185],[-89.042898,42.496255],[-89.36579860766348,42.50002596695148],[-89.40141681104056,42.50044193107369],[-89.493216,42.501514],[-89.83759488632558,42.50491035279149],[-89.926484,42.505787],[-89.927006876764,42.50579048577459],[-90.22319,42.507765],[-90.42637696073606,42.50717773522369],[-90.437011,42.507147],[-90.642843,42.508481],[-90.672727,42.576599],[-90.700856,42.626445],[-90.743677,42.64556],[-90.852497,42.664822],[-90.89696202715838,42.674318056434295],[-90.941567,42.683844],[-91.017239,42.719566],[-91.070716,42.775502],[-91.09882,42.864421],[-91.138,42.903772],[-91.155519,42.975774],[-91.15908430594746,42.98747779132278],[-91.174692,43.038713],[-91.17493491391117,43.08026037184519],[-91.175253,43.134665],[-91.134173,43.174405],[-91.087456,43.221891],[-91.05791,43.253968],[-91.107237,43.313645],[-91.154806,43.334826],[-91.207367,43.373659],[-91.199408,43.403032],[-91.21066335777269,43.41944178290329],[-91.232276,43.450952],[-91.217706,43.50055],[-91.232812,43.564842],[-91.252926,43.600363],[-91.273252,43.666623],[-91.25700015600567,43.72565873722238],[-91.243955,43.773046],[-91.28765562736709,43.847065],[-91.291002,43.852733],[-91.357426,43.917231],[-91.42356869981727,43.984296880322596],[-91.440536,44.001501],[-91.55921556303969,44.024209316581185],[-91.573283,44.026901],[-91.647873,44.064109],[-91.719097,44.128853],[-91.817302,44.164235],[-91.85449997529766,44.197226519552196],[-91.892698,44.231105],[-91.916191,44.318094],[-91.9636,44.362112],[-92.08452858049277,44.404614314800995],[-92.111085,44.413948],[-92.232472,44.445434],[-92.24536464900538,44.454251124351785],[-92.291005,44.485464],[-92.314071,44.538014],[-92.31693313340578,44.539276012202684],[-92.361518,44.558935],[-92.399281,44.558292],[-92.54928,44.577704],[-92.618025,44.61287],[-92.696491,44.689436],[-92.73162385130317,44.71492278525959],[-92.79236079967048,44.758983813697085],[-92.805287,44.768361],[-92.768574,44.854368],[-92.76711733435718,44.86151518587589],[-92.76702326575186,44.861976737097685],[-92.750802,44.941567],[-92.761904,45.022467],[-92.802911,45.065403],[-92.740509,45.113396],[-92.74382347936557,45.123646262323],[-92.766932,45.195111],[-92.76609140867366,45.210021702422694],[-92.761868,45.284938],[-92.74826767468588,45.29605938650979],[-92.698967,45.336374],[-92.658486,45.396058],[-92.646768,45.437929],[-92.686793,45.472271],[-92.728023,45.525652],[-92.756906,45.557499],[-92.801503,45.562854],[-92.881136,45.573409],[-92.887929,45.639006],[-92.88669712440898,45.644148]]]]}},
+{"type":"Feature","properties":{"name":"South Dakota","income":{"1995":29426,"1996":29810,"1997":31354,"1998":33267,"1999":35007,"2000":36146,"2001":37096,"2002":36966,"2003":38008,"2004":39265,"2005":40096,"2006":42432,"2007":43507,"2008":46244,"2009":45048,"2010":45861,"2011":48188,"2012":48439,"2013":49200,"2014":51059,"2015":53263}},"geometry":{"type":"Polygon","coordinates":[[[-104.057698,44.997431],[-104.039138,44.99852],[-104.039977,45.124988],[-104.04013575649299,45.21289076204159],[-104.040358,45.335946],[-104.041764,45.490789],[-104.041937,45.557915],[-104.042597,45.749998],[-104.043776,45.864707],[-104.04413315610697,45.88197625834978],[-104.045443,45.94531],[-103.660779,45.945241],[-103.434851,45.945291],[-103.218396,45.945208],[-102.99566801913798,45.94511644377148],[-102.94206996119098,45.94509441135319],[-102.880252,45.945069],[-102.704871,45.945072],[-102.550947,45.945015],[-102.32823,45.944806],[-102.087555,45.944598],[-102.00067992101798,45.944538392727495],[-101.99861707823398,45.94453697735689],[-101.794606,45.944397],[-101.557276,45.9441],[-101.365283,45.944092],[-101.106826,45.943984],[-100.76211,45.943767],[-100.511949026151,45.943654070434484],[-100.511793,45.943654],[-100.49935421538399,45.94363199881429],[-100.294126,45.943269],[-100.152084,45.942486],[-99.880292,45.941672],[-99.88006209480658,45.94167091580218],[-99.718073,45.940907],[-99.71807104288217,45.94090700349639],[-99.61116,45.941098],[-99.490254,45.940362],[-99.34496,45.940299],[-99.092868,45.940184],[-99.00575435015247,45.93994430912839],[-99.005642,45.939944],[-98.72437441388807,45.93867473326149],[-98.625379,45.938228],[-98.414518,45.936504],[-98.070515,45.93618],[-98.00810179827778,45.936012629049294],[-97.97877780962337,45.93593399209868],[-97.77704,45.935393],[-97.542598,45.935258],[-97.228291,45.93565659564609],[-97.082093,45.935842],[-96.563672,45.935245],[-96.571871,45.871846],[-96.587093,45.816445],[-96.630512,45.781157],[-96.672665,45.732336],[-96.745086,45.701576],[-96.82616,45.654164],[-96.851621,45.619412],[-96.843957,45.594003],[-96.83541916197808,45.58612869288079],[-96.781036,45.535972],[-96.742509,45.478723],[-96.710786,45.43693],[-96.675447,45.410216],[-96.617726,45.408092],[-96.562142,45.38609],[-96.521787,45.375645],[-96.482556,45.346273],[-96.47007760304926,45.32679964939229],[-96.457781,45.30761],[-96.45755349848498,45.26889792871839],[-96.45584011363358,44.97734524827999],[-96.45483051555378,44.80555020404578],[-96.45380669966707,44.63133583194799],[-96.45329131359868,44.543636801817996],[-96.452213,44.360149],[-96.45243582459547,44.196801586664996],[-96.45243585466946,44.19677954009509],[-96.45290957169317,43.849508852637186],[-96.45290957436626,43.84950689301839],[-96.453315,43.552299],[-96.45326,43.50039],[-96.598928,43.500457],[-96.584603,43.46961],[-96.594254,43.434153],[-96.521572,43.38564],[-96.524289,43.347214],[-96.530392,43.300034],[-96.578823,43.291095],[-96.55902734270967,43.257555675617986],[-96.552963,43.247281],[-96.522084,43.22096],[-96.475571,43.221054],[-96.458854,43.143356],[-96.439335,43.113916],[-96.45209751605368,43.082552925194484],[-96.458201,43.067554],[-96.511605,43.039927],[-96.492693,43.005089],[-96.520246,42.977643],[-96.500308,42.959391],[-96.541689,42.922576],[-96.54047232919328,42.90859569795599],[-96.537851,42.878475],[-96.577937,42.827645],[-96.621875,42.779255],[-96.624704,42.725497],[-96.591602,42.688081],[-96.526766,42.641184],[-96.48002247897999,42.56132477656069],[-96.476952,42.556079],[-96.49297,42.517282],[-96.477454,42.509589],[-96.445508,42.49063],[-96.501321,42.482749],[-96.525142,42.510234],[-96.611489,42.506088],[-96.62794545690168,42.52709613914179],[-96.658754,42.566426],[-96.7093,42.603753],[-96.697639,42.659143],[-96.778182,42.662993],[-96.801652,42.698774],[-96.80737060009817,42.70067898537299],[-96.906797,42.7338],[-96.965679,42.724532],[-97.01563111274717,42.75652546248819],[-97.02485,42.76243],[-97.131331,42.771929],[-97.16507039237378,42.791616641467684],[-97.213957,42.820143],[-97.237868,42.853139],[-97.302075,42.86566],[-97.341181,42.855882],[-97.417066,42.865918],[-97.452177,42.846048],[-97.48491687634198,42.8500032148679],[-97.515948,42.853752],[-97.59926,42.856229],[-97.63544209044147,42.85180907518548],[-97.70103,42.843797],[-97.801344,42.858003],[-97.857957,42.865093],[-97.876887,42.852663],[-97.905001,42.798872],[-97.950147,42.769619],[-98.035034,42.764205],[-98.1047,42.808475],[-98.14806,42.840013],[-98.15258665483817,42.84115338106369],[-98.231922,42.86114],[-98.280007,42.874996],[-98.30818681645127,42.88648920742559],[-98.386445,42.918407],[-98.434503,42.929227],[-98.478919,42.963539],[-98.49855,42.99856],[-98.847992,42.998255],[-99.25445501231657,42.998220926786686],[-99.53405501480898,42.998197488318084],[-99.850037,42.998171],[-100.198412611566,42.99797688463149],[-100.19841379977498,42.99797688396939],[-101.000429,42.99753],[-101.22810939311597,42.99786888252819],[-102.08248631919197,42.999140548519286],[-102.08254804307198,42.99914064038999],[-102.40864,42.999626],[-102.79211093983899,43.000036235770395],[-103.00089651607597,43.00025959379529],[-103.476133,43.000768],[-103.505099261632,43.00075881303118],[-104.053127,43.000585],[-104.053876,43.289801],[-104.05468456842698,43.47781554171099],[-104.05479428434798,43.503327530406],[-104.055032,43.558603],[-104.05548799845099,43.85347599845599],[-104.055488,43.853477],[-104.05541619070499,44.14108120678338],[-104.05540637782698,44.180382874095685],[-104.055389,44.249983],[-104.05569519926098,44.57099037714218],[-104.05581,44.691343],[-104.057698,44.997431]]]}},
+{"type":"Feature","properties":{"name":"Utah","income":{"1995":35160,"1996":36360,"1997":38884,"1998":41380,"1999":43778,"2000":45934,"2001":45914,"2002":46165,"2003":46709,"2004":47224,"2005":48155,"2006":51373,"2007":55220,"2008":56820,"2009":55183,"2010":54740,"2011":55802,"2012":57067,"2013":59715,"2014":60943,"2015":62961}},"geometry":{"type":"Polygon","coordinates":[[[-114.052472,37.604776],[-114.05247199661397,37.60477664271939],[-114.051728,37.745997],[-114.049658,37.881368],[-114.049903,38.148601],[-114.04990337565798,38.148763026670586],[-114.050138,38.24996],[-114.05012,38.404536],[-114.050154,38.57292],[-114.05015362080597,38.57297521300339],[-114.04943670593099,38.677362456879585],[-114.048054,38.878693],[-114.049104,39.005509],[-114.047079,39.499943],[-114.04718141292597,39.54274360222969],[-114.047783,39.79416],[-114.04726815307697,39.906098113756194],[-114.046386,40.097896],[-114.04637281737297,40.116935833012185],[-114.046178,40.398313],[-114.045577,40.495801],[-114.043505,40.726292],[-114.04214514623497,40.999896577263286],[-114.042145,40.999926],[-114.041447,41.207752],[-114.040231,41.49169],[-114.039901,41.753781],[-114.041723,41.99372],[-113.817964,41.98858],[-113.496548,41.993305],[-113.249159,41.996203],[-113.000821,41.998223],[-113.00004013962398,41.99822761253908],[-112.648019,42.000307],[-112.264936,42.000991],[-112.15917745150998,41.99868192973779],[-112.109532,41.997598],[-112.10951205421198,41.99759809629469],[-111.750778,41.99933],[-111.50781303517599,41.99968566835219],[-111.50780619568698,41.999685678364294],[-111.471381,41.999739],[-111.374129,42.000893],[-111.046689,42.001567],[-111.04581846484197,41.57984494822579],[-111.045789,41.565571],[-111.0466,41.360692],[-111.04663698312598,41.25162695625139],[-111.046723,40.997959],[-110.539819,40.996346],[-110.121639,40.997101],[-110.04848299568498,40.99729729285058],[-110.00071673644098,40.99742545970819],[-109.715409,40.998191],[-109.250735,41.001009],[-109.050076,41.000659],[-109.048455,40.826081],[-109.04825975004798,40.66260181722799],[-109.048249,40.653601],[-109.05073211207697,40.22265525825759],[-109.050973,40.180849],[-109.050615,39.87497],[-109.05087192526199,39.660471777159394],[-109.05106684627299,39.49773880936619],[-109.051223831017,39.36667754958628],[-109.051512,39.126095],[-109.05996197258898,38.49998903102078],[-109.059962,38.499987],[-109.060062,38.275489],[-109.041762,38.16469],[-109.04179661485499,38.15303230496849],[-109.04260410062098,37.881084817492585],[-109.04378072050297,37.48481923141749],[-109.045223,36.999084],[-109.495338,36.999105],[-110.000677,36.997968],[-110.00068181858897,36.99796800029759],[-110.47019,36.997997],[-110.75068647892799,37.00319693472519],[-110.75069,37.003197],[-111.066496,37.002389],[-111.278286,37.000465],[-111.405869,37.001481],[-111.41278398787297,37.001477687156],[-112.35769,37.001025],[-112.538571,37.000744128882],[-112.545094,37.000734],[-112.82950194437198,37.000386401314394],[-112.89919089761598,37.000301228628395],[-112.966471,37.000219],[-113.965907,37.000025],[-114.0506,37.000396],[-114.051749,37.088434],[-114.051974,37.284511],[-114.052701,37.492014],[-114.052472,37.604776]]]}},
+{"type":"Feature","properties":{"name":"Indiana","income":{"1995":34368,"1996":35502,"1997":37909,"1998":39719,"1999":40654,"2000":41511,"2001":42073,"2002":41973,"2003":43323,"2004":43217,"2005":44051,"2006":45414,"2007":47422,"2008":48010,"2009":45427,"2010":44616,"2011":46410,"2012":46954,"2013":47508,"2014":49384,"2015":50510}},"geometry":{"type":"Polygon","coordinates":[[[-88.05946949270077,37.8666898040108],[-88.040861,37.891767],[-88.016311,37.961574],[-88.030884,38.030713],[-87.98877,38.055591],[-87.96221,38.100054],[-87.927468,38.151946],[-87.975819,38.197834],[-87.97020084080388,38.23027105838579],[-87.968968,38.237389],[-87.908542,38.268581],[-87.831972,38.307241],[-87.779996,38.370842],[-87.75110594512049,38.41884920845479],[-87.74104,38.435576],[-87.714047,38.47988],[-87.654166,38.511911],[-87.660732,38.541092],[-87.64835676307446,38.56662871605759],[-87.637752,38.588512],[-87.62012,38.639489],[-87.545538,38.677613],[-87.498948,38.757774],[-87.521681,38.826576],[-87.53525705080847,38.85249146496739],[-87.54737,38.875614],[-87.52871766369788,38.90594378628919],[-87.527645,38.907688],[-87.529496,38.971925],[-87.579117,39.001607],[-87.572588,39.057286],[-87.625379,39.101806],[-87.63829341374408,39.15749254720249],[-87.640435,39.166727],[-87.577029,39.211123],[-87.593486,39.247452],[-87.59474584540598,39.25938361648299],[-87.600397,39.312904],[-87.578331,39.340343],[-87.531646,39.347888],[-87.531624,39.469378],[-87.53166668197439,39.47711099274289],[-87.53238528279098,39.60730494422149],[-87.532703,39.664868],[-87.53245449388427,39.88299911878229],[-87.532308,40.011587],[-87.53102161242799,40.14803539674569],[-87.530054,40.250671],[-87.52706526339918,40.47688229246149],[-87.52687577325378,40.49122440969039],[-87.526292,40.535409],[-87.52613649042368,40.736885081422884],[-87.526014,40.895582],[-87.52646330599117,41.01035481796449],[-87.52652,41.024837],[-87.52664815808238,41.16608994451159],[-87.52676788622747,41.29805160247919],[-87.526768,41.298177],[-87.52540935334748,41.47028066606168],[-87.52494,41.529735],[-87.524044,41.708335],[-87.470742,41.672835],[-87.415816,41.688183],[-87.365439,41.629536],[-87.261536,41.620336],[-87.22279994911838,41.62888983895999],[-87.125835,41.650302],[-87.027888,41.674661],[-86.93284902849437,41.716496937902185],[-86.90913,41.726938],[-86.824828,41.76024],[-86.64132292052079,41.75967493814279],[-86.640044,41.759671],[-86.52421974244288,41.759572155973494],[-86.501773,41.759553],[-86.22609434498737,41.76001595911639],[-86.22607,41.760016],[-86.06256302901056,41.75965303315798],[-85.791363,41.759051],[-85.79133496196276,41.75905103955749],[-85.65975023799089,41.75923668604699],[-85.29217881133349,41.75975527470178],[-85.232835,41.759839],[-85.19677420030199,41.759870841802986],[-84.82512828387678,41.76019900635189],[-84.805883,41.760216],[-84.806082,41.696089],[-84.80495815623958,41.53013781338819],[-84.80425325761149,41.426049711549894],[-84.804133,41.408292],[-84.80370357261688,41.27125833057059],[-84.80364498225556,41.25256168354819],[-84.803234,41.121414],[-84.80285962195138,40.98937405200859],[-84.80267020615337,40.92256871392099],[-84.802119,40.728163],[-84.80211903226376,40.72814593687259],[-84.80241387857939,40.57221288064669],[-84.802547,40.50181],[-84.80293136657127,40.46538662171978],[-84.804119,40.352844],[-84.80412052701489,40.35276223029709],[-84.80491730257837,40.31009591503409],[-84.808706,40.107216],[-84.81016123847448,40.00506754384819],[-84.81141710638047,39.916913629579795],[-84.81412813793278,39.72661651161929],[-84.814129,39.726556],[-84.81570594325547,39.56772166402739],[-84.81616019491078,39.521968108992894],[-84.817453,39.391753],[-84.81887709781039,39.30516616905229],[-84.81887746927508,39.305143583559385],[-84.820159,39.227225],[-84.820157,39.10548],[-84.860689,39.07814],[-84.897171,39.052407],[-84.87757023112478,39.031262844093995],[-84.849445,39.000923],[-84.832617,38.96146],[-84.877762,38.920357],[-84.86442851899166,38.91384364104939],[-84.830472,38.897256],[-84.786406,38.88222],[-84.79869982295229,38.85922739020669],[-84.803247,38.850723],[-84.812877,38.786087],[-84.856904,38.790224],[-84.962535,38.778035],[-85.02105214167419,38.758527324713896],[-85.071928,38.741567],[-85.146861,38.695427],[-85.187278,38.687609],[-85.20176062254856,38.69744079184628],[-85.238665,38.722494],[-85.275454,38.741172],[-85.33264073375139,38.73481675434769],[-85.340953,38.733893],[-85.400481,38.73598],[-85.448862,38.713368],[-85.438742,38.659319],[-85.43617,38.598292],[-85.43141607075218,38.58628561310889],[-85.4156,38.546341],[-85.43297226942606,38.52412339698789],[-85.433136,38.523914],[-85.474354,38.504074],[-85.498866,38.468242],[-85.587758,38.450495],[-85.621625,38.417089],[-85.6344441449773,38.37839944757479],[-85.646201,38.342916],[-85.683561,38.295469],[-85.750962,38.26787],[-85.79451090677007,38.27795473579529],[-85.816164,38.282969],[-85.839664,38.23977],[-85.894764,38.188469],[-85.89591178773559,38.17992692087039],[-85.905164,38.11107],[-85.922395,38.028679],[-85.95172964591549,38.01494012709058],[-85.976028,38.00356],[-85.99735165975429,37.99122560229909],[-86.033386,37.970382],[-86.095766,38.00893],[-86.206439,38.021876],[-86.278656,38.098509],[-86.321274,38.147418],[-86.35640726797098,38.13527783676579],[-86.387216,38.124632],[-86.43357436408806,38.087144387579485],[-86.434046,38.086763],[-86.471903,38.046218],[-86.48805246712828,38.04366530889968],[-86.521825,38.038327],[-86.525174,37.968228],[-86.509368,37.902887],[-86.599848,37.906754],[-86.615215,37.852857],[-86.64670305785909,37.864908975897784],[-86.658374,37.869376],[-86.722247,37.892648],[-86.779993,37.956522],[-86.810913,37.99715],[-86.81365994128528,37.99603449514159],[-86.875874,37.97077],[-86.927747,37.934956],[-86.97774142511018,37.92569920837269],[-87.010315,37.919668],[-87.043049,37.875049],[-87.057836,37.827457],[-87.105614,37.767631],[-87.137502,37.807264],[-87.180063,37.841375],[-87.25525,37.867326],[-87.270387407739,37.87542282658999],[-87.30405745244198,37.89343254912228],[-87.331765,37.908253],[-87.418585,37.944763],[-87.44863585760947,37.93387786821488],[-87.486347,37.920218],[-87.551277,37.925418],[-87.608479,37.898794],[-87.625851,37.851919],[-87.681633,37.855917],[-87.71321078529026,37.883088390366495],[-87.723635,37.892058],[-87.808013,37.875191],[-87.87254,37.920999],[-87.921744,37.907885],[-87.92539337830539,37.89959148487409],[-87.938128,37.870651],[-87.903804,37.817762],[-87.935861,37.789703],[-87.970262,37.781856],[-88.02803,37.799224],[-88.067364,37.856051],[-88.05946949270077,37.8666898040108]]]}},
+{"type":"Feature","properties":{"name":"Massachusetts","income":{"1995":39025,"1996":40686,"1997":43015,"1998":44934,"1999":47604,"2000":49266,"2001":52092,"2002":51085,"2003":52713,"2004":53657,"2005":57176,"2006":59930,"2007":62383,"2008":65304,"2009":64057,"2010":62133,"2011":63126,"2012":65378,"2013":66794,"2014":69200,"2015":70659}},"geometry":{"type":"MultiPolygon","coordinates":[[[[-70.275526,41.310464],[-70.193712,41.313787],[-70.079133,41.319504],[-70.049053,41.391702],[-69.984869,41.358818],[-69.960181,41.264546],[-70.015225,41.237964],[-70.096967,41.24085],[-70.211479,41.248765],[-70.275526,41.310464]]],[[[-70.833802,41.353386],[-70.757797,41.365702],[-70.686881,41.441334],[-70.603555,41.482384],[-70.553277,41.452955],[-70.496197,41.424908],[-70.463833,41.419145],[-70.448262,41.353651],[-70.577454,41.349163],[-70.693635,41.342833],[-70.768687,41.303702],[-70.821284,41.251014],[-70.833397,41.316778],[-70.833802,41.353386]]],[[[-73.508142,42.086257],[-73.41064440742727,42.35174629964789],[-73.38350565728358,42.42564605018379],[-73.352527,42.510002],[-73.35252495494419,42.51000750995059],[-73.30700407618058,42.63265345141149],[-73.264957,42.74594],[-73.14249512051438,42.743425717196885],[-73.02301789329009,42.74097271272689],[-73.01864861335038,42.740883006399784],[-72.93026261251798,42.73906834045759],[-72.86429185484538,42.737713885159195],[-72.809113,42.736581],[-72.51671118278219,42.728467669829186],[-72.458519,42.726853],[-72.45119505182268,42.726650885493584],[-72.41203006475229,42.72557007336329],[-72.28303409251089,42.722010250623995],[-72.20361347980676,42.71981852867989],[-72.124526,42.717636],[-72.08136505018797,42.716456538541195],[-71.92903005905349,42.71229367253259],[-71.89876877193657,42.71146672080879],[-71.80538960273827,42.70891494352849],[-71.745817,42.707287],[-71.636214,42.704888],[-71.351874,42.698154],[-71.294205,42.69699],[-71.255605,42.736389],[-71.25511012181057,42.73639705328719],[-71.24538403292068,42.73655532857459],[-71.181803,42.73759],[-71.186104,42.790689],[-71.149703,42.815489],[-71.11637501217747,42.81190291443509],[-71.064201,42.806289],[-71.04871641369859,42.83106433808219],[-71.031201,42.859089],[-70.9665,42.868989],[-70.930799,42.884589],[-70.86475,42.870258],[-70.817296,42.87229],[-70.80522,42.781798],[-70.772267,42.711064],[-70.72982,42.669602],[-70.681594,42.662342],[-70.645101,42.689423],[-70.602506,42.677702],[-70.594014,42.63503],[-70.654727,42.582234],[-70.698574,42.577393],[-70.804091,42.561595],[-70.848492,42.550195],[-70.835991,42.490496],[-70.886493,42.470197],[-70.89923397910178,42.44991565568648],[-70.905993,42.43915651159219],[-70.913192,42.427697],[-70.95521106146327,42.42546909039169],[-70.982994,42.423996],[-70.98254560158787,42.42022180005199],[-70.974897,42.355843],[-70.9758929421261,42.35433925372189],[-70.98309358594719,42.34346719493309],[-70.997838,42.321205],[-70.99305963994819,42.31289228041239],[-70.967351,42.268168],[-70.94849704353429,42.28235469378229],[-70.91749,42.305686],[-70.881242,42.300663],[-70.851093,42.26827],[-70.83585177539437,42.26476326471339],[-70.788724,42.25392],[-70.78157454556846,42.248636946023886],[-70.73056,42.21094],[-70.685315,42.133025],[-70.67923777450248,42.12634945942249],[-70.63848,42.081579],[-70.644337,42.045895],[-70.678798,42.00551],[-70.662476,41.960592],[-70.608166,41.940701],[-70.583572,41.950007],[-70.546386,41.916751],[-70.525567,41.85873],[-70.54103,41.815754],[-70.53640725412478,41.81163414574639],[-70.494048,41.773883],[-70.441718,41.752898],[-70.323819,41.736058],[-70.272289,41.721346],[-70.216073,41.742981],[-70.121978,41.758841],[-70.024734,41.787364],[-70.003842,41.80852],[-70.006111,41.852396],[-70.06901,41.884924],[-70.074006,41.93865],[-70.07657399913668,41.957942458249995],[-70.083775,42.012041],[-70.15076,42.026569],[-70.190834,42.020028],[-70.245385,42.063733],[-70.189305,42.082337],[-70.138942,42.092907],[-70.049382,42.064689],[-69.994136,41.999258],[-69.98023136158768,41.94598646023329],[-69.974781,41.925105],[-69.935952,41.809422],[-69.928261,41.6917],[-69.931129,41.622659],[-69.964982,41.55111],[-70.011229,41.543931],[-70.011961,41.619797],[-70.007011,41.671579],[-70.055523,41.664843],[-70.158621,41.650438],[-70.269687,41.617775],[-70.321588,41.630508],[-70.400581,41.606382],[-70.445289,41.591815],[-70.476256,41.558502],[-70.559689,41.54833],[-70.654104,41.519025],[-70.66905836660058,41.512929662674594],[-70.734306,41.486335],[-70.79027,41.446339],[-70.857528,41.425767],[-70.948431,41.409193],[-70.934986,41.454699],[-70.806861,41.497583],[-70.72608894480699,41.54323693191759],[-70.698197,41.559002],[-70.695392,41.602546],[-70.71597984466878,41.61401326876418],[-70.76177007978838,41.639518072270384],[-70.765463,41.641575],[-70.80396261320789,41.60151554100029],[-70.82191,41.582841],[-70.853121,41.587321],[-70.85762366603339,41.586512092463494],[-70.90909177644679,41.57726580546549],[-70.910165,41.577073],[-70.941785,41.540121],[-70.981708,41.51007],[-71.02032123222438,41.50215947591698],[-71.035514,41.499047],[-71.085663,41.509292],[-71.12057,41.497448],[-71.137492,41.602561],[-71.132888,41.660102],[-71.19564,41.67509],[-71.20132718752488,41.681768328202686],[-71.20860053289508,41.69030924360269],[-71.261392,41.752301],[-71.31726409756008,41.77719466337239],[-71.329396,41.7826],[-71.339597,41.832],[-71.339298,41.893399],[-71.3817,41.893199],[-71.381461,41.952141],[-71.38143134689308,41.985084119129496],[-71.381401,42.018798],[-71.45808099455608,42.01687882512869],[-71.49822401312468,42.01587411101849],[-71.559439,42.014342],[-71.591096527631,42.013513343557186],[-71.60620344113408,42.0131179102388],[-71.799242,42.008065],[-71.80065,42.023569],[-71.88467683590369,42.025059351484295],[-71.987326,42.02688],[-72.10215943452678,42.028630240054795],[-72.13573146194668,42.02914192994159],[-72.19884597813198,42.030103893281996],[-72.317148,42.031907],[-72.39747625519588,42.03281619113578],[-72.50917933629829,42.03408049659008],[-72.528131,42.034295],[-72.607933,42.030795],[-72.735496,42.036399],[-72.766739,42.002995],[-72.77475931607859,42.00212910418029],[-72.810078,41.998316],[-72.847142,42.036894],[-72.999549,42.038653],[-73.00876278163068,42.03890341624669],[-73.05336267374808,42.040115571910285],[-73.12722917087838,42.04212314835478],[-73.231056,42.044945],[-73.487314,42.049638],[-73.48967994203208,42.05379770958669],[-73.508142,42.086257]]]]}},
+{"type":"Feature","properties":{"name":"Mississippi","income":{"1995":26501,"1996":26901,"1997":28527,"1998":28925,"1999":30739,"2000":32542,"2001":30877,"2002":31434,"2003":32397,"2004":34278,"2005":33090,"2006":34615,"2007":36424,"2008":37818,"2009":36764,"2010":36992,"2011":36963,"2012":37179,"2013":38191,"2014":39738,"2015":40630}},"geometry":{"type":"Polygon","coordinates":[[[-91.621358,31.267811],[-91.564192,31.261633],[-91.508858,31.291644],[-91.536061,31.338355],[-91.532336,31.390275],[-91.510356,31.438928],[-91.51714,31.498394],[-91.489618,31.534266],[-91.437616,31.546166],[-91.457517,31.587566],[-91.463817,31.620365],[-91.395715,31.644165],[-91.380915,31.732464],[-91.38012452998348,31.732626953049998],[-91.318576,31.745315],[-91.32045873328158,31.74780061448219],[-91.359514,31.799362],[-91.345714,31.842861],[-91.290135,31.833658],[-91.24401516132468,31.86973243750389],[-91.234899,31.876863],[-91.18111,31.920059],[-91.17741,31.973257],[-91.117409,31.987057],[-91.080808,32.023456],[-91.079108,32.050255],[-91.034707,32.101053],[-91.03947231890697,32.10796814266529],[-91.108509,32.20815],[-90.991227,32.214662],[-90.947834,32.283486],[-90.92117,32.342073],[-90.986672,32.35176],[-90.965986,32.424806],[-91.052907,32.438442],[-91.060516,32.512361],[-91.011275,32.516596],[-91.04876042776367,32.57279704042139],[-91.049312,32.573624],[-91.05529310494987,32.5789835010771],[-91.079506,32.60068],[-91.098762,32.685291],[-91.056999,32.72558],[-91.113652,32.73997],[-91.157614,32.776033],[-91.161669,32.812465],[-91.13789,32.848975],[-91.070602,32.888659],[-91.072075,32.937832],[-91.134414,32.980533],[-91.166073,33.004106],[-91.15960609801297,33.01124232130679],[-91.120379,33.05453],[-91.180836,33.098364],[-91.153015,33.135093],[-91.104317,33.131598],[-91.084366,33.180856],[-91.068708,33.232936],[-91.086137,33.273652],[-91.125539,33.280255],[-91.142219,33.348989],[-91.113764,33.393124],[-91.147663,33.427172],[-91.171799,33.462342],[-91.189375,33.493005],[-91.215671,33.529423],[-91.20564498594787,33.54697837093289],[-91.188942,33.576225],[-91.130902,33.610919],[-91.178311,33.651109],[-91.10098,33.660551],[-91.075389,33.714403],[-91.143287,33.747141],[-91.111494,33.774568],[-91.08551,33.77641],[-91.026782,33.763642],[-91.025173,33.805953],[-91.052819,33.824181],[-91.061247,33.877505],[-91.026382,33.90798],[-91.035961,33.943758],[-91.088696,33.961334],[-91.048367,33.985078],[-91.004981,33.977011],[-90.979945,34.000106],[-90.942662,34.01805],[-90.89242,34.02686],[-90.874541,34.072041],[-90.90113,34.094667],[-90.946323,34.109374],[-90.94479552430947,34.11665720531419],[-90.94408076019378,34.12006529477739],[-90.938064,34.148754],[-90.894385,34.160953],[-90.882701,34.184364],[-90.89456,34.22438],[-90.839981,34.236114],[-90.812829,34.279438],[-90.752681,34.289266],[-90.765174,34.342818],[-90.729131,34.364206],[-90.660404,34.33576],[-90.641398,34.383869],[-90.575336,34.415152],[-90.583717,34.458829],[-90.569347,34.524867],[-90.549244,34.568101],[-90.587224,34.615732],[-90.57328841261827,34.63367050646799],[-90.550158,34.663445],[-90.546053,34.702076],[-90.505494,34.764568],[-90.473527,34.788835],[-90.463795,34.834923],[-90.40798275379427,34.83526597928069],[-90.401633,34.835305],[-90.313476,34.871698],[-90.31142425034518,34.87285114409999],[-90.250095,34.90732],[-90.244476,34.937596],[-90.309297,34.995694],[-89.795187,34.994293],[-89.75961264223437,34.99423977173149],[-89.72431583796856,34.994186958753495],[-89.64428383409208,34.994067210562484],[-89.434954,34.993754],[-89.35267939184838,34.99399614174589],[-89.19828790149498,34.994450530115095],[-89.02654,34.994956],[-89.01712701155239,34.99496761283629],[-88.823050501632,34.995207045695],[-88.786612,34.995252],[-88.469877,34.996033],[-88.38049251152206,34.995792408222094],[-88.36353026853918,34.99574675179709],[-88.258111,34.995463],[-88.200064,34.995634],[-88.154617,34.922392],[-88.097888,34.892202],[-88.134263,34.62266],[-88.13955944124736,34.581696745883896],[-88.15490218400868,34.46303430043999],[-88.17326173459489,34.32103953433429],[-88.20358349521936,34.08652773146809],[-88.207229,34.058333],[-88.24838747390947,33.74490759488169],[-88.254445,33.698779],[-88.27451647078367,33.53400147778519],[-88.30444281351036,33.28832],[-88.317135,33.184123],[-88.34008499213928,32.991264337874995],[-88.34749024783488,32.92903478688049],[-88.373338,32.711825],[-88.38924856412427,32.578122395958594],[-88.42131222139429,32.30867912301129],[-88.428278,32.250143],[-88.43114536346278,32.22763623468889],[-88.45338776310928,32.0530492054197],[-88.46866,31.933173],[-88.46866248405128,31.893855711615586],[-88.468669,31.790722],[-88.46362530468488,31.697942371350187],[-88.459478,31.621652],[-88.44944606901707,31.435836861277593],[-88.44866,31.421277],[-88.432007,31.114298],[-88.42602096378707,30.99828135743029],[-88.41246743135916,30.735597459215292],[-88.41227,30.731771],[-88.403931,30.543359],[-88.395023,30.369425],[-88.409927,30.342115],[-88.446495,30.347753],[-88.471875,30.32002],[-88.522494,30.340092],[-88.581929,30.331063],[-88.613006,30.353964],[-88.66382,30.362099],[-88.700587,30.343689],[-88.746945,30.347622],[-88.80034351520347,30.35726417309489],[-88.818762,30.36059],[-88.89393,30.393398],[-88.971233,30.390798],[-89.083237,30.368097],[-89.18684,30.331197],[-89.294444,30.307596],[-89.30702376084449,30.303994780244096],[-89.344746,30.293196],[-89.424624,30.245391],[-89.447465,30.205098],[-89.475824,30.191561],[-89.524504,30.180753],[-89.607655,30.217096],[-89.634208,30.308256],[-89.678514,30.414012],[-89.69993208284077,30.454036880785996],[-89.712493,30.47751],[-89.791664,30.551524],[-89.821868,30.644024],[-89.82618035911518,30.668823270185197],[-89.836331,30.727197],[-89.791745,30.820387],[-89.750073,30.91293],[-89.72817569016057,31.00231388798409],[-89.728147,31.002431],[-89.83590782432817,31.002101423117598],[-89.897516,31.001913],[-90.25955494049128,31.00066178122909],[-90.346007,31.000363],[-90.34724108066209,31.00036066798079],[-90.54757442523307,30.999982101791588],[-90.56719540065848,30.99994502439989],[-90.758775,30.999583],[-90.82582914129189,30.99952535534059],[-91.06012746799657,30.99932393530919],[-91.17614012396687,30.99922420231859],[-91.224068,30.999183],[-91.636942,30.999416],[-91.62825729820878,31.00509700189519],[-91.560365,31.049508],[-91.594693,31.091444],[-91.621671,31.13687],[-91.59099389306448,31.191998565698793],[-91.590051,31.193693],[-91.644356,31.234414],[-91.621358,31.267811]]]}},
+{"type":"Feature","properties":{"name":"Nebraska","income":{"1995":32176,"1996":33562,"1997":35337,"1998":37233,"1999":38668,"2000":40429,"2001":41091,"2002":41130,"2003":41984,"2004":42166,"2005":43675,"2006":45369,"2007":47072,"2008":49731,"2009":47470,"2010":48415,"2011":50281,"2012":50766,"2013":51502,"2014":52803,"2015":55073}},"geometry":{"type":"Polygon","coordinates":[[[-104.053142,41.114457],[-104.052453,41.278202],[-104.05228713412097,41.393214000193396],[-104.052287,41.393307],[-104.05263457163298,41.564275779573684],[-104.052735,41.613676],[-104.05282523523898,41.69795385306399],[-104.053026,41.885464],[-104.05276213709197,42.00171826586659],[-104.052729,42.016318],[-104.052793,42.249962],[-104.053107,42.499964],[-104.05266219156799,42.61176630054148],[-104.052586,42.630917],[-104.053127,43.000585],[-103.505099261632,43.00075881303118],[-103.476133,43.000768],[-103.00089651607597,43.00025959379529],[-102.79211093983899,43.000036235770395],[-102.40864,42.999626],[-102.08254804307198,42.99914064038999],[-102.08248631919197,42.999140548519286],[-101.22810939311597,42.99786888252819],[-101.000429,42.99753],[-100.19841379977498,42.99797688396939],[-100.198412611566,42.99797688463149],[-99.850037,42.998171],[-99.53405501480898,42.998197488318084],[-99.25445501231657,42.998220926786686],[-98.847992,42.998255],[-98.49855,42.99856],[-98.478919,42.963539],[-98.434503,42.929227],[-98.386445,42.918407],[-98.30818681645127,42.88648920742559],[-98.280007,42.874996],[-98.231922,42.86114],[-98.15258665483817,42.84115338106369],[-98.14806,42.840013],[-98.1047,42.808475],[-98.035034,42.764205],[-97.950147,42.769619],[-97.905001,42.798872],[-97.876887,42.852663],[-97.857957,42.865093],[-97.801344,42.858003],[-97.70103,42.843797],[-97.63544209044147,42.85180907518548],[-97.59926,42.856229],[-97.515948,42.853752],[-97.48491687634198,42.8500032148679],[-97.452177,42.846048],[-97.417066,42.865918],[-97.341181,42.855882],[-97.302075,42.86566],[-97.237868,42.853139],[-97.213957,42.820143],[-97.16507039237378,42.791616641467684],[-97.131331,42.771929],[-97.02485,42.76243],[-97.01563111274717,42.75652546248819],[-96.965679,42.724532],[-96.906797,42.7338],[-96.80737060009817,42.70067898537299],[-96.801652,42.698774],[-96.778182,42.662993],[-96.697639,42.659143],[-96.7093,42.603753],[-96.658754,42.566426],[-96.62794545690168,42.52709613914179],[-96.611489,42.506088],[-96.525142,42.510234],[-96.501321,42.482749],[-96.445508,42.49063],[-96.381307,42.461694],[-96.411808,42.410894],[-96.407998,42.337408],[-96.35195719249597,42.280894704543286],[-96.336003,42.264806],[-96.336323,42.218922],[-96.33721609470588,42.2148495068956],[-96.347752,42.166806],[-96.2689,42.11359],[-96.272877,42.047238],[-96.223611,42.022652],[-96.132537,41.974625],[-96.159098,41.910057],[-96.12682125346538,41.86609524770159],[-96.107911,41.840339],[-96.064537,41.793002],[-96.0876,41.72218],[-96.10793787174647,41.676508989762084],[-96.111483,41.668548],[-96.118105,41.613495],[-96.09182,41.561086],[-96.080493,41.528199],[-96.005079,41.544004],[-95.99402039301187,41.506890640941485],[-95.982962,41.469778],[-95.922529,41.455766],[-95.92733624232008,41.38998793745959],[-95.92879,41.370096],[-95.92569,41.322197],[-95.890152,41.278308],[-95.911391,41.237998],[-95.90990849125477,41.191282850827896],[-95.90969,41.184398],[-95.856788,41.187098],[-95.86189806820938,41.160302348212696],[-95.868688,41.124698],[-95.863839,41.083507],[-95.86478476408527,41.05284550461349],[-95.865878,41.017403],[-95.828329,40.972378],[-95.837774,40.924712],[-95.81872727856988,40.89794806640649],[-95.810709,40.886681],[-95.841309,40.845604],[-95.83424381671439,40.78378438704309],[-95.834156,40.783016],[-95.888697,40.736292],[-95.846034,40.682605],[-95.781909,40.653272],[-95.748626,40.603355],[-95.765645,40.585208],[-95.75711,40.52599],[-95.714291,40.527208],[-95.71228037180106,40.52375442620738],[-95.694726,40.493602],[-95.684363,40.463366],[-95.649418,40.396149],[-95.641027,40.366399],[-95.653729,40.322582],[-95.598657,40.309809],[-95.553292,40.291158],[-95.54818200118008,40.26441467284269],[-95.54787031627028,40.26278346081979],[-95.54716,40.259066],[-95.472548,40.236078],[-95.48102,40.188524],[-95.432165,40.141025],[-95.394216,40.108263],[-95.414734,40.06982],[-95.382957,40.027112],[-95.348777,40.029297],[-95.30829,39.999998],[-95.33989597085028,40.00002885710539],[-95.784575,40.000463],[-95.78811099489167,40.00046677936529],[-96.01067881793449,40.00070466577199],[-96.02409,40.000719],[-96.154365,40.000495],[-96.239172,40.000691],[-96.23920787841108,40.00069104275439],[-96.46371207677477,40.00095857255448],[-96.469945,40.000966],[-96.805768,40.001368455095395],[-96.873812,40.00145],[-96.91640700546577,40.00145409104389],[-97.009165,40.001463],[-97.36919903531498,40.00193930576049],[-97.415833,40.002001],[-97.777155,40.002167],[-97.82150081227518,40.002186882088886],[-97.93182492631716,40.00223634501959],[-98.076034,40.002301],[-98.27401705975288,40.00233745072989],[-98.50445498363678,40.002379876736],[-98.613755,40.0024],[-98.72637296393899,40.00233627316689],[-99.06701834989808,40.00214351305219],[-99.085597,40.002133],[-99.17913315086108,40.00210895269489],[-99.501792,40.002026],[-99.62532672639958,40.00177782764698],[-99.62825384922449,40.00177194726839],[-99.813401,40.0014],[-100.17779754587897,40.00156581385159],[-100.19359,40.001573],[-100.19359905683599,40.00157300571989],[-100.477018,40.001752],[-100.73882471319098,40.002262956567684],[-100.75883,40.002302],[-101.060317,40.002307],[-101.293991,40.002559],[-101.32551402751898,40.00256534823049],[-101.41102898780197,40.002582569567586],[-101.542273,40.002609],[-101.832161,40.002933],[-102.051744,40.003078],[-102.051309,40.338381],[-102.05130855184399,40.34922135687219],[-102.05130479859699,40.44000799337699],[-102.05129415157899,40.697546832388994],[-102.05129200020698,40.74958599487369],[-102.051292,40.749591],[-102.051614,41.002377],[-102.05171751637799,41.00237696762389],[-102.556789,41.002219],[-102.62103302445198,41.002223202615596],[-102.65346413726898,41.00222532414359],[-103.076536,41.002253],[-103.38249165188998,41.001926146620995],[-103.573774006195,41.00172179908409],[-103.574522,41.001721],[-104.053249,41.001406],[-104.053142,41.114457]]]}},
+{"type":"Feature","properties":{"name":"New Mexico","income":{"1995":27929,"1996":27014,"1997":30836,"1998":31445,"1999":32671,"2000":34487,"2001":33733,"2002":34827,"2003":35091,"2004":37838,"2005":37603,"2006":40610,"2007":41509,"2008":43719,"2009":42830,"2010":42186,"2011":42097,"2012":42828,"2013":44026,"2014":44905,"2015":45524}},"geometry":{"type":"Polygon","coordinates":[[[-109.049195,31.796551],[-109.048296,32.084093],[-109.04761200321998,32.426375388514195],[-109.047612,32.426377],[-109.047117,32.77757],[-109.04711706230997,32.777794000947694],[-109.04723698053698,33.20889503155078],[-109.047237,33.208965],[-109.047298,33.409783],[-109.04660747392198,33.77822380035048],[-109.046426,33.875052],[-109.046182,34.522393],[-109.04613893536299,34.57929101281789],[-109.045851,34.959718],[-109.04585123518297,34.959818515836695],[-109.04635589438398,35.17550718835119],[-109.046796,35.363606],[-109.046296,35.614251],[-109.046024,35.8798],[-109.04587116820498,36.002701630519],[-109.045729,36.117028],[-109.045433,36.874589],[-109.045223,36.999084],[-108.620309,36.999287],[-108.37930295009397,36.999564686311494],[-108.000623,37.000001],[-107.48173699915498,37.00000458031429],[-107.42092190574498,37.00000499993859],[-107.420913,37.000005],[-106.877292,37.000139],[-106.869796,36.992426],[-106.476233588828,36.99377410054689],[-106.343139,36.99423],[-106.00631641079798,36.995386628817286],[-105.997472,36.995417],[-105.71846968399099,36.995845927301],[-105.716471,36.995849],[-105.533922,36.995875],[-105.41931,36.995856],[-105.251296,36.995605],[-105.22050520078098,36.99556323648649],[-105.15504274804798,36.9954744456106],[-105.1208,36.995428],[-104.732031,36.993447],[-104.338833,36.993535],[-104.00784940961297,36.995984094709094],[-103.733247,36.998016],[-103.08610107563098,36.99986436110639],[-103.002199,37.000104],[-103.001964,36.909573],[-103.002518,36.675186],[-103.002188,36.602716],[-103.002434,36.500397],[-103.041924,36.500439],[-103.040824,36.055231],[-103.04135672181798,35.73943350634869],[-103.04155399893398,35.62248763195869],[-103.041554,35.622487],[-103.04261795056497,35.1831572590084],[-103.042711,35.144735],[-103.04273881860799,34.95414204036139],[-103.042769,34.747361],[-103.043072,34.619782],[-103.043946,34.379555],[-103.04385030117197,34.31274987350789],[-103.043835830165,34.302648],[-103.04356392079099,34.11283438975539],[-103.043516,34.079382],[-103.047346,33.824675],[-103.04734601816698,33.824674123151695],[-103.05261,33.570599],[-103.05261051656397,33.57057477644219],[-103.056495064338,33.38841421462059],[-103.060103,33.219225],[-103.06346888847497,32.959106381830495],[-103.064889,32.849359],[-103.064761,32.587983],[-103.064696,32.522193],[-103.064422,32.145006],[-103.06442240110597,32.087051],[-103.064423,32.000518],[-103.326501,32.00037],[-103.72288197914799,32.00016556867639],[-103.98021347738099,32.00003285136259],[-104.024521,32.00001],[-104.643526,32.000443],[-104.84774,32.000464602834995],[-104.91835699427997,32.000472073073496],[-105.153994,32.000497],[-105.750527,32.002206],[-105.99797115166398,32.00197459069899],[-106.200699,32.001785],[-106.37717318824697,32.00124010103749],[-106.618486,32.000495],[-106.630114,31.971258],[-106.623445,31.914034],[-106.63588,31.871514],[-106.581344,31.813906],[-106.528242,31.783148],[-106.531731,31.78391],[-106.993544,31.783689],[-107.29679299041398,31.783625337107992],[-107.422246,31.783599],[-108.208394,31.783599],[-108.208572,31.499742],[-108.208573,31.333395],[-108.707657,31.333191],[-108.861028,31.332315],[-109.050044,31.332502],[-109.049195,31.796551]]]}},
+{"type":"Feature","properties":{"name":"North Carolina","income":{"1995":31987,"1996":34487,"1997":35320,"1998":35982,"1999":37563,"2000":38889,"2001":39072,"2002":38194,"2003":39438,"2004":40863,"2005":40781,"2006":42721,"2007":44772,"2008":46574,"2009":43754,"2010":43417,"2011":44028,"2012":45195,"2013":45946,"2014":46596,"2015":47884}},"geometry":{"type":"Polygon","coordinates":[[[-84.28659837874088,35.20575821849589],[-84.28322,35.226577],[-84.223718,35.269078],[-84.178516,35.240679],[-84.097508,35.247382],[-84.02910441377247,35.29212377649389],[-84.02351,35.295783],[-84.038081,35.348363],[-84.007586,35.371661],[-84.021782,35.407418],[-83.973171,35.452582],[-83.95891783456389,35.45789943957989],[-83.95323138015038,35.46002088957669],[-83.916801,35.473612],[-83.848502,35.519259],[-83.771736,35.562118],[-83.66291190158928,35.567799793208295],[-83.653159,35.568309],[-83.587827,35.566963],[-83.498335,35.562981],[-83.452431,35.602918],[-83.421576,35.611186],[-83.347262,35.660474],[-83.297154,35.65775],[-83.26474416829,35.70308949617009],[-83.25614155230359,35.715124062657786],[-83.255351,35.71623],[-83.198267,35.725494],[-83.161537,35.763363],[-83.097193,35.776067],[-83.04853,35.787706],[-82.978414,35.78261],[-82.96664974289857,35.795445979573984],[-82.937437,35.82732],[-82.899718,35.874602],[-82.910608,35.92693],[-82.89375141843136,35.93385726970889],[-82.860724,35.94743],[-82.81613,35.923986],[-82.787465,35.952163],[-82.779397,35.992511],[-82.725065,36.018204],[-82.628365,36.062105],[-82.60570361079358,36.03719886356189],[-82.595525,36.026012],[-82.610885,35.974442],[-82.557874,35.953901],[-82.50800765972248,35.98201320544148],[-82.464558,36.006508],[-82.41693759467316,36.07297001070849],[-82.409458,36.083409],[-82.346857,36.115209],[-82.297655,36.13351],[-82.26569,36.127614],[-82.22025301028657,36.15382003984309],[-82.211251,36.159012],[-82.140847,36.136216],[-82.127146,36.104417],[-82.08114891713238,36.105692114332584],[-82.080143,36.10572],[-82.02874,36.124322],[-81.960101,36.228131],[-81.93436924449257,36.264716204379795],[-81.91844447290477,36.287357917382096],[-81.908137,36.302013],[-81.833202,36.347339],[-81.768977,36.341042],[-81.705966,36.338496],[-81.72537277968526,36.38973849743609],[-81.734312,36.413342],[-81.695311,36.467912],[-81.699962,36.536829],[-81.677535,36.588117],[-81.499831,36.57982],[-81.35322122460218,36.57623823115639],[-81.176712,36.571926],[-81.061866,36.56702],[-80.901726,36.561751],[-80.90166111892098,36.56175118716799],[-80.84021307724598,36.56192845163729],[-80.704831,36.562319],[-80.61218878812458,36.55821627638039],[-80.44006854346448,36.550593813802195],[-80.431605,36.550219],[-80.295243,36.543973],[-80.05345504335008,36.542639428086595],[-80.02733891514119,36.54249538561418],[-80.027269,36.542495],[-79.89167016695387,36.54203383661619],[-79.71485081105197,36.54143248474129],[-79.51364766250857,36.54074820507069],[-79.510647,36.540738],[-79.47005667392429,36.54083614978659],[-79.3428439209599,36.54114375767659],[-79.21845549592226,36.541444536176094],[-79.13833589887138,36.54163827005589],[-78.942009,36.542113],[-78.79627395514048,36.541759493581594],[-78.73412280111718,36.54160873484079],[-78.509965,36.541065],[-78.45727789625586,36.541448708399486],[-78.32371850955899,36.54242139155859],[-78.132911,36.543811],[-78.04620830436028,36.54419767268659],[-77.89977414050628,36.54485073302249],[-77.76710333422477,36.545442412170495],[-77.749706,36.54552],[-77.29877018881177,36.546039010854486],[-77.190175,36.546164],[-77.16432273355687,36.546152819904094],[-76.917318,36.546046],[-76.91603763285619,36.54608133029029],[-76.91573180234968,36.546089769338884],[-76.738329,36.550985],[-76.54196586571828,36.55078453236009],[-76.49148257547228,36.55073299383639],[-76.31330296826026,36.550551089806994],[-76.313215,36.550551],[-76.12234994701008,36.55055233255409],[-76.02675,36.550553],[-75.867044,36.550754],[-75.838437,36.434897],[-75.79641,36.290351],[-75.77065146255967,36.23208030705078],[-75.71831,36.113674],[-75.658537,36.02043],[-75.569794,35.863301],[-75.51901,35.769087],[-75.496086,35.728515],[-75.458659,35.596597],[-75.486771,35.391652],[-75.533627,35.225825],[-75.635493,35.22026],[-75.74956142396219,35.18561636219219],[-75.757916,35.183079],[-75.912985,35.1196],[-76.013145,35.061855],[-76.137269,34.987858],[-76.233088,34.905477],[-76.31021,34.852309],[-76.386804,34.784579],[-76.450454,34.71445],[-76.535946,34.588577],[-76.553806,34.628252],[-76.618719,34.67255],[-76.726969,34.69669],[-76.906257,34.68282],[-77.11296439307677,34.638092832391486],[-77.136843,34.632926],[-77.240991,34.587507],[-77.322524,34.535574],[-77.462922,34.471354],[-77.51521654458477,34.437384969426596],[-77.635034,34.359555],[-77.71351317045878,34.29024718668679],[-77.764022,34.245641],[-77.829209,34.162618],[-77.915536,33.971723],[-77.93482713508568,33.92054850579729],[-77.960172,33.853315],[-78.006765,33.858704],[-78.018689,33.888289],[-78.136952,33.912178],[-78.276147,33.912364],[-78.383964,33.901946],[-78.541087,33.851112],[-78.615932,33.915523],[-78.65088747609119,33.94506940996439],[-78.81171,34.081006],[-79.071169,34.29924],[-79.358317,34.545358],[-79.45027745772619,34.6206091350416],[-79.46196554440178,34.63017348270309],[-79.675299,34.804744],[-79.69294834227739,34.80496233115169],[-79.92468425313638,34.807829019751495],[-79.92810346909137,34.80787131715529],[-80.077223,34.809716],[-80.32083257112978,34.81362082154399],[-80.561657,34.817481],[-80.56167339135038,34.817481445270296],[-80.796997,34.823874],[-80.782042,34.935782],[-80.84056591565317,35.00147041441789],[-80.90348118671209,35.07208777404609],[-80.90623995408248,35.07518426976559],[-80.93495,35.107409],[-81.041489,35.044703],[-81.058029,35.07319],[-81.036759,35.122552],[-81.04226581176299,35.146608594145796],[-81.04287,35.149248],[-81.3280909892918,35.16228591555739],[-81.36760858859688,35.16409232932819],[-81.494265,35.169882],[-81.76806906135857,35.17970536192819],[-81.87411220431628,35.183509908026295],[-81.96935840125757,35.18692708840049],[-82.039651,35.189449],[-82.04839122964786,35.18963754337549],[-82.21624871922907,35.19325854865318],[-82.295354,35.194965],[-82.35302152309048,35.19870416046639],[-82.411301,35.202483],[-82.455609,35.177425],[-82.53256,35.155617],[-82.57771554495088,35.14647526757419],[-82.68604,35.124545],[-82.746431,35.079131],[-82.76205955211358,35.08187443600409],[-82.783283,35.0856],[-82.897499,35.056021],[-83.00843480376807,35.02692851150739],[-83.108606,35.000659],[-83.10861299650726,35.00065884367769],[-83.322768,34.995874],[-83.48287320429068,34.990873961286795],[-83.54918075350466,34.988803195913995],[-83.619985,34.986592],[-83.93642734425198,34.98748438337969],[-83.936646,34.987485],[-84.00533673343827,34.98764958401229],[-84.12944696263588,34.98794695395529],[-84.321869,34.988408],[-84.28659837874088,35.20575821849589]]]}},
+{"type":"Feature","properties":{"name":"Rhode Island","income":{"1995":34611,"1996":36402,"1997":36699,"1998":39907,"1999":40965,"2000":42305,"2001":43884,"2002":43115,"2003":45006,"2004":47037,"2005":50415,"2006":51324,"2007":52755,"2008":54562,"2009":53243,"2010":52053,"2011":53152,"2012":54002,"2013":55015,"2014":54797,"2015":57265}},"geometry":{"type":"MultiPolygon","coordinates":[[[[-71.631472,41.166678],[-71.593342,41.237428],[-71.54541,41.24273],[-71.534084,41.181862],[-71.51921,41.149624],[-71.5937,41.146339],[-71.631472,41.166678]]],[[[-71.860513,41.320248],[-71.835951,41.353935],[-71.839649,41.412119],[-71.797683,41.416709],[-71.79171906174719,41.54577200433499],[-71.78935867274228,41.59685216034269],[-71.789356,41.59691],[-71.78946459083899,41.64001719070689],[-71.78967758183198,41.724568000295285],[-71.789678,41.724734],[-71.792767,41.807001],[-71.799242,42.008065],[-71.60620344113408,42.0131179102388],[-71.591096527631,42.013513343557186],[-71.559439,42.014342],[-71.49822401312468,42.01587411101849],[-71.45808099455608,42.01687882512869],[-71.381401,42.018798],[-71.38143134689308,41.985084119129496],[-71.381461,41.952141],[-71.3817,41.893199],[-71.339298,41.893399],[-71.339597,41.832],[-71.329396,41.7826],[-71.31726409756008,41.77719466337239],[-71.261392,41.752301],[-71.20860053289508,41.69030924360269],[-71.20132718752488,41.681768328202686],[-71.19564,41.67509],[-71.132888,41.660102],[-71.137492,41.602561],[-71.12057,41.497448],[-71.140224,41.485855],[-71.19302,41.457931],[-71.21267275910738,41.46660170590308],[-71.23980442381888,41.47857207017049],[-71.245992,41.481302],[-71.285639,41.487805],[-71.312694,41.451402],[-71.351096,41.450802],[-71.389284,41.460605],[-71.41721279148368,41.456031312774385],[-71.428652,41.454158],[-71.455371,41.407962],[-71.483295,41.371722],[-71.555381,41.373316],[-71.624505,41.36087],[-71.701631,41.336968],[-71.72929657620038,41.33328400271379],[-71.785957,41.325739],[-71.862772,41.309791],[-71.860513,41.320248]]]]}},
+{"type":"Feature","properties":{"name":"Ohio","income":{"1995":33958,"1996":34198,"1997":36029,"1998":38726,"1999":39707,"2000":42054,"2001":41780,"2002":42246,"2003":43119,"2004":43371,"2005":43547,"2006":44609,"2007":46645,"2008":48011,"2009":45467,"2010":45151,"2011":45803,"2012":46873,"2013":48138,"2014":49349,"2015":51086}},"geometry":{"type":"MultiPolygon","coordinates":[[[[-82.863342,41.693693],[-82.82572,41.72281],[-82.782719,41.694003],[-82.788876,41.643047],[-82.842099,41.628323],[-82.863342,41.693693]]],[[[-84.820159,39.227225],[-84.81887746927508,39.305143583559385],[-84.81887709781039,39.30516616905229],[-84.817453,39.391753],[-84.81616019491078,39.521968108992894],[-84.81570594325547,39.56772166402739],[-84.814129,39.726556],[-84.81412813793278,39.72661651161929],[-84.81141710638047,39.916913629579795],[-84.81016123847448,40.00506754384819],[-84.808706,40.107216],[-84.80491730257837,40.31009591503409],[-84.80412052701489,40.35276223029709],[-84.804119,40.352844],[-84.80293136657127,40.46538662171978],[-84.802547,40.50181],[-84.80241387857939,40.57221288064669],[-84.80211903226376,40.72814593687259],[-84.802119,40.728163],[-84.80267020615337,40.92256871392099],[-84.80285962195138,40.98937405200859],[-84.803234,41.121414],[-84.80364498225556,41.25256168354819],[-84.80370357261688,41.27125833057059],[-84.804133,41.408292],[-84.80425325761149,41.426049711549894],[-84.80495815623958,41.53013781338819],[-84.806082,41.696089],[-84.438067,41.704903],[-84.39954878547418,41.705921357405586],[-84.36041904139728,41.70695588263349],[-84.134417,41.712931],[-83.88039024525756,41.72019449661289],[-83.76314999206207,41.723546797762594],[-83.763038,41.72355],[-83.58554184210878,41.728772028512786],[-83.453832,41.732647],[-83.409531,41.691247],[-83.326825,41.701562],[-83.23166,41.644218],[-83.16382141752278,41.62413031297399],[-83.066593,41.59534],[-83.028072,41.555656],[-82.934369,41.514353],[-82.859531,41.576371],[-82.834101,41.587587],[-82.717878,41.54193],[-82.69056716066488,41.49670579543819],[-82.687921,41.492324],[-82.616952,41.428425],[-82.533208,41.391157],[-82.460599,41.386316],[-82.361784,41.426644],[-82.34801920689118,41.42726330873448],[-82.268479,41.430842],[-82.181598,41.471634],[-82.0711504528736,41.49691198678469],[-81.994565,41.51444],[-81.96848070252899,41.50386100790178],[-81.96032497000388,41.500553292597786],[-81.937862,41.491443],[-81.82250357969939,41.49525941928938],[-81.810758,41.495648],[-81.76857514162157,41.491489646476296],[-81.738755,41.48855],[-81.633652,41.540458],[-81.488682733409,41.63446392782089],[-81.466038,41.649148],[-81.388632,41.707144],[-81.286925,41.760243],[-81.184368,41.786671],[-81.05192,41.839557],[-81.00226940651747,41.84917246643759],[-80.900342,41.868912],[-80.800794,41.909635],[-80.581882,41.95761],[-80.519425,41.977523],[-80.51939672669049,41.84956299055929],[-80.519357,41.669767],[-80.51917675035338,41.499924051205994],[-80.51916516989557,41.48901219015458],[-80.51900013136428,41.33350214419358],[-80.518893,41.232556],[-80.51919669032499,41.133386502548895],[-80.51922208608089,41.12509356679578],[-80.51964377254728,40.987392654005795],[-80.519891,40.906661],[-80.51987684674039,40.90244867541969],[-80.51986970768618,40.900323934248895],[-80.51970511259918,40.851336778685386],[-80.518991,40.638801],[-80.583633,40.61552],[-80.627171,40.619936],[-80.667957,40.582496],[-80.622195,40.520497],[-80.604895,40.446667],[-80.62736262993687,40.395170933017184],[-80.631596,40.385468],[-80.606596,40.303869],[-80.644598,40.25127],[-80.68417321070798,40.18701797335069],[-80.70257530362257,40.157141398009685],[-80.705994,40.151591],[-80.736804,40.080072],[-80.73821843998358,40.033543226078386],[-80.740126,39.970793],[-80.764479,39.95025],[-80.803394,39.918762],[-80.82343810478588,39.85003208739639],[-80.824276,39.847159],[-80.824969,39.801092],[-80.869933,39.763555],[-80.83552169300748,39.71925180220009],[-80.829764,39.711839],[-80.865575,39.662751],[-80.943782,39.606926],[-81.03736504198706,39.538055712472584],[-81.07595,39.50966],[-81.12127385610779,39.45769741388929],[-81.128533,39.449375],[-81.185946,39.430731],[-81.249088,39.389992],[-81.347567,39.34577],[-81.37038980882629,39.348700672403396],[-81.393794,39.351706],[-81.412706,39.394618],[-81.456143,39.409274],[-81.503189,39.373242],[-81.559647,39.330774],[-81.565247,39.276175],[-81.613896,39.275339],[-81.678331,39.273755],[-81.711628,39.219228],[-81.72146813917249,39.210960809203684],[-81.752754,39.184676],[-81.75229703674009,39.18103474740589],[-81.742953,39.106578],[-81.75026684342629,39.10403119309979],[-81.807855,39.083978],[-81.793304,39.040353],[-81.775734,38.980737],[-81.827354,38.945898],[-81.89847,38.929603],[-81.941829,38.993295],[-82.007062,39.029578],[-82.041563,39.017878],[-82.089065,38.975978],[-82.09886665055427,38.96087928449329],[-82.134766,38.905579],[-82.16157,38.824632],[-82.20929,38.802672],[-82.201537,38.760372],[-82.185567,38.659583],[-82.175167,38.608484],[-82.218967,38.591683],[-82.27427,38.593683],[-82.28213334402808,38.57986079640348],[-82.293271,38.560283],[-82.304223,38.496308],[-82.323999,38.449268],[-82.381773,38.434783],[-82.447076,38.426982],[-82.50896694973129,38.414643912651684],[-82.560664,38.404338],[-82.593673,38.421809],[-82.618474,38.477089],[-82.66411690751568,38.50771559025699],[-82.675724,38.515504],[-82.724846,38.5576],[-82.800112,38.563183],[-82.8115423846504,38.57236958956188],[-82.851314,38.604334],[-82.869592,38.678177],[-82.871192,38.718377],[-82.88228999360929,38.741619223269595],[-82.889193,38.756076],[-82.943147,38.74328],[-83.011816,38.730057],[-83.03033493123107,38.71686767665609],[-83.042338,38.708319],[-83.112372,38.671685],[-83.128973,38.640231],[-83.172647,38.620252],[-83.239515,38.628588],[-83.26429890195868,38.613112496887496],[-83.286514,38.599241],[-83.320531,38.622713],[-83.376302,38.661473],[-83.440404,38.669361],[-83.533339,38.702105],[-83.626922,38.679387],[-83.642994,38.643273],[-83.64691140412668,38.641851934545784],[-83.679484,38.630036],[-83.70586163558556,38.63803786506599],[-83.77216,38.65815],[-83.78362,38.695641],[-83.834015,38.716008],[-83.852085,38.751433],[-83.90437508610479,38.76728387526779],[-83.928454,38.774583],[-83.978814,38.787104],[-84.051642,38.771397],[-84.05264617321959,38.77161466753579],[-84.135088,38.789485],[-84.212904,38.805707],[-84.22616263396347,38.829777141242],[-84.233265,38.842671],[-84.23230504540348,38.874707896031694],[-84.232132,38.880483],[-84.288164,38.955789],[-84.297255,38.989694],[-84.32120722685679,39.020586352689385],[-84.326539,39.027463],[-84.40094,39.046362],[-84.432941,39.083961],[-84.445242,39.114461],[-84.462042,39.12176],[-84.480943,39.11676],[-84.493743,39.10246],[-84.49918784070238,39.10216440086548],[-84.50651873743688,39.10176640818799],[-84.550844,39.09936],[-84.607928,39.073238],[-84.62228392463076,39.07842004166409],[-84.677247,39.09826],[-84.714048,39.132659],[-84.750749,39.147358],[-84.820157,39.10548],[-84.820159,39.227225]]]]}},
+{"type":"Feature","properties":{"name":"Oklahoma","income":{"1995":26495,"1996":27648,"1997":30002,"1998":32373,"1999":33005,"2000":33417,"2001":34912,"2002":35313,"2003":35634,"2004":37109,"2005":37020,"2006":38753,"2007":41551,"2008":42836,"2009":41716,"2010":42076,"2011":43232,"2012":44336,"2013":45724,"2014":47524,"2015":48595}},"geometry":{"type":"Polygon","coordinates":[[[-103.002518,36.675186],[-103.001964,36.909573],[-103.002199,37.000104],[-102.841989,36.999598],[-102.698142,36.995149],[-102.355288,36.994506],[-102.04224,36.993083],[-102.02820419104496,36.993145147108294],[-101.90244,36.993702],[-101.55525884869098,36.99529093927759],[-101.485326,36.995611],[-101.211486,36.997124],[-101.06645021565997,36.99773617514039],[-100.945466793078,36.99824682872879],[-100.855634,36.998626],[-100.63332498615797,37.00017360905289],[-100.552683,37.000735],[-100.08948174390297,37.00147946946349],[-100.00257151432197,37.001619153911996],[-99.995201,37.001631],[-99.657658,37.000197],[-99.54111491236087,36.99990964456549],[-99.45620243467526,36.99970027940789],[-99.407015,36.999579],[-99.129449,36.999422],[-99.00030105388416,36.99935809814439],[-98.791936,36.999255],[-98.54466197334888,36.99852424040059],[-98.354073,36.997961],[-98.34714877974467,36.99796920864959],[-98.11198518374576,36.99824799463529],[-98.045342,36.998327],[-97.80231297035029,36.99869860939399],[-97.768704,36.99875],[-97.46234602986407,36.99882423879689],[-97.384925,36.998843],[-97.14772096692268,36.99897233562149],[-97.100652,36.998998],[-96.749838,36.998988],[-96.52558204428287,36.99867796872479],[-96.500288,36.998643],[-96.217571,36.99907],[-96.00081020619957,36.999201052927894],[-95.96427123210216,36.999223144282396],[-95.928122,36.999245],[-95.78676187077816,36.99927091759199],[-95.573598,36.99931],[-95.52241455239867,36.99931978678289],[-95.40762000587706,36.99934173663909],[-95.322565,36.999358],[-95.07350396663027,36.99948813467909],[-95.00762000447206,36.99952255912579],[-94.995293,36.999529],[-94.71277,36.998794],[-94.617964,36.998905],[-94.618307,36.76656],[-94.61799177841718,36.66792127234419],[-94.617815,36.612604],[-94.617919,36.499414],[-94.5862,36.299969],[-94.56226800249247,36.16197304097529],[-94.55190628260627,36.10222560566859],[-94.532071,35.987852],[-94.494549,35.768303],[-94.49304007242698,35.759166474327294],[-94.47311939064667,35.63854715252939],[-94.449696,35.496719],[-94.43488928759668,35.39318521558748],[-94.43391344383237,35.38636176989869],[-94.431515,35.369591],[-94.435316,35.275893],[-94.44292586168999,35.06250620957269],[-94.44750953578428,34.93397621215719],[-94.449058,34.890556],[-94.45439503413786,34.72895867317939],[-94.4575,34.634945],[-94.46116868615587,34.50745665157249],[-94.465425,34.359548],[-94.47015267816208,34.189864292126096],[-94.474895,34.019655],[-94.47726674152977,33.94091092793479],[-94.481842,33.789008],[-94.485875,33.637867],[-94.528928,33.62184],[-94.572872,33.669886],[-94.630586,33.673401],[-94.714865,33.707261],[-94.73193290199589,33.720830516280294],[-94.766146,33.748031],[-94.841634,33.739431],[-94.902276,33.776289],[-94.93956,33.810503],[-94.98165,33.852284],[-95.046568,33.862565],[-95.095002,33.904816],[-95.149462,33.936336],[-95.15590761710747,33.93848238856979],[-95.226393,33.961954],[-95.253623,33.92971],[-95.283445,33.877746],[-95.31044979544906,33.87384303818549],[-95.352338,33.867789],[-95.44737,33.86885],[-95.525322,33.885487],[-95.556915,33.92702],[-95.603657,33.927195],[-95.669978,33.905844],[-95.737508,33.895967],[-95.78963931775226,33.87243738467229],[-95.820596,33.858465],[-95.84487853407067,33.86042190471899],[-95.887491,33.863856],[-95.935325,33.875099],[-96.063924,33.841523],[-96.15163,33.831946],[-96.173025,33.80056],[-96.229023,33.748021],[-96.277269,33.769735],[-96.307389,33.735005],[-96.363135,33.694215],[-96.37966082595207,33.715530908565995],[-96.403507,33.746289],[-96.436455,33.78005],[-96.502286,33.77346],[-96.523863,33.818114],[-96.572937,33.819098],[-96.592926,33.830916],[-96.590112,33.880665],[-96.59467430737708,33.883018657398296],[-96.659896,33.916666],[-96.682103,33.876645],[-96.712422,33.831633],[-96.776766,33.841976],[-96.794276,33.868886],[-96.850593,33.847211],[-96.897194,33.902954],[-96.905253,33.947219],[-96.93434330313298,33.94558892925279],[-96.94461688837048,33.945013250454],[-96.952313,33.944582],[-96.988745,33.918468],[-96.985567,33.886522],[-97.055838,33.855741],[-97.07859,33.812756],[-97.087852,33.774099],[-97.091072,33.735115],[-97.149394,33.721967],[-97.205652,33.809824],[-97.166629,33.847311],[-97.206141,33.91428],[-97.24618,33.900344],[-97.318243,33.865121],[-97.372941,33.819454],[-97.444193,33.823773],[-97.451469,33.87093],[-97.48414343858758,33.91388910889089],[-97.486505,33.916994],[-97.55827,33.897099],[-97.56124315022106,33.89906150673299],[-97.596155,33.922106],[-97.609091,33.968093],[-97.671772,33.99137],[-97.759834,33.92521],[-97.803473,33.88019],[-97.865765,33.849393],[-97.951215,33.878424],[-97.95190595085516,33.89122581485729],[-97.953695,33.924373],[-97.947572,33.991053],[-98.005667,33.995964],[-98.082839,34.002412],[-98.099096,34.048639],[-98.099328,34.104295],[-98.123377,34.15454],[-98.13848602574639,34.14120601971109],[-98.16912,34.114171],[-98.225282,34.127245],[-98.31875,34.146421],[-98.364023,34.157109],[-98.398441,34.128456],[-98.414426,34.085074],[-98.423533,34.081949476005896],[-98.475066,34.064269],[-98.5282,34.094961],[-98.577136,34.148962],[-98.61035178164467,34.15620993949669],[-98.648073,34.164441],[-98.690072,34.133155],[-98.737232,34.130992],[-98.80681,34.155901],[-98.872229,34.160446],[-98.94022,34.203686],[-98.95232488752816,34.20466989860349],[-99.002916,34.208782],[-99.0588,34.201256],[-99.131553,34.209352],[-99.189511,34.214312],[-99.2116,34.31397],[-99.22160790084548,34.32537357437259],[-99.27534,34.386599],[-99.350407,34.437083],[-99.394956,34.442099],[-99.420432,34.380464],[-99.470969,34.396471],[-99.47502213703837,34.39687098979049],[-99.58448,34.407673],[-99.600026,34.374688],[-99.696462,34.381036],[-99.764882,34.435266],[-99.818186,34.48784],[-99.84206388414638,34.50693276888139],[-99.929334,34.576714],[-99.99762932816299,34.56113662456009],[-100.000381,34.560509],[-100.000382194816,34.74636055256159],[-100.00038402077298,35.03038499999989],[-100.000385,35.182702],[-100.00038884414299,35.42236398830939],[-100.000392,35.619115],[-100.00039619832899,35.880947999996785],[-100.000399,36.055677],[-100.000406,36.499702],[-100.00376199336799,36.499701848737594],[-100.311018,36.499688],[-100.54614512609699,36.49950513930379],[-100.592614,36.499469],[-100.884174,36.499682],[-100.95415215769299,36.49952949662619],[-101.085156,36.499244],[-101.623915,36.499528],[-101.826565,36.499654],[-102.03233901896297,36.50006567301009],[-102.162463,36.500326],[-103.002434,36.500397],[-103.002188,36.602716],[-103.002518,36.675186]]]}},
+{"type":"Feature","properties":{"name":"South Carolina","income":{"1995":30060,"1996":32728,"1997":33325,"1998":33465,"1999":35515,"2000":37283,"2001":36953,"2002":37442,"2003":38003,"2004":39454,"2005":39477,"2006":41204,"2007":43508,"2008":44695,"2009":42580,"2010":42117,"2011":42477,"2012":43290,"2013":44310,"2014":45337,"2015":47308}},"geometry":{"type":"Polygon","coordinates":[[[-83.353238,34.728648],[-83.320062,34.759616],[-83.323866,34.789712],[-83.284812,34.823043],[-83.252582,34.853483],[-83.201183,34.884653],[-83.140621,34.924915],[-83.124378,34.95524],[-83.108606,35.000659],[-83.00843480376807,35.02692851150739],[-82.897499,35.056021],[-82.783283,35.0856],[-82.76205955211358,35.08187443600409],[-82.746431,35.079131],[-82.68604,35.124545],[-82.57771554495088,35.14647526757419],[-82.53256,35.155617],[-82.455609,35.177425],[-82.411301,35.202483],[-82.35302152309048,35.19870416046639],[-82.295354,35.194965],[-82.21624871922907,35.19325854865318],[-82.04839122964786,35.18963754337549],[-82.039651,35.189449],[-81.96935840125757,35.18692708840049],[-81.87411220431628,35.183509908026295],[-81.76806906135857,35.17970536192819],[-81.494265,35.169882],[-81.36760858859688,35.16409232932819],[-81.3280909892918,35.16228591555739],[-81.04287,35.149248],[-81.04226581176299,35.146608594145796],[-81.036759,35.122552],[-81.058029,35.07319],[-81.041489,35.044703],[-80.93495,35.107409],[-80.90623995408248,35.07518426976559],[-80.90348118671209,35.07208777404609],[-80.84056591565317,35.00147041441789],[-80.782042,34.935782],[-80.796997,34.823874],[-80.56167339135038,34.817481445270296],[-80.561657,34.817481],[-80.32083257112978,34.81362082154399],[-80.077223,34.809716],[-79.92810346909137,34.80787131715529],[-79.92468425313638,34.807829019751495],[-79.69294834227739,34.80496233115169],[-79.675299,34.804744],[-79.46196554440178,34.63017348270309],[-79.45027745772619,34.6206091350416],[-79.358317,34.545358],[-79.071169,34.29924],[-78.81171,34.081006],[-78.65088747609119,33.94506940996439],[-78.615932,33.915523],[-78.541087,33.851112],[-78.67226,33.817587],[-78.772737,33.768511],[-78.862931,33.705654],[-78.938076,33.639826],[-78.99563169438349,33.572074598189296],[-79.028516,33.533365],[-79.084588,33.483669],[-79.135441,33.403867],[-79.162332,33.327246],[-79.180563,33.237955],[-79.172394,33.206577],[-79.215453,33.155569],[-79.27449458464278,33.12005626772039],[-79.291591,33.109773],[-79.329909,33.089986],[-79.339313,33.050336],[-79.359961,33.006672],[-79.423447,33.015085],[-79.483499,33.001265],[-79.522449,33.03535],[-79.580725,33.006447],[-79.606615,32.972248],[-79.569762,32.926692],[-79.601309,32.89815],[-79.695141,32.850398],[-79.726389,32.805996],[-79.818237,32.766352],[-79.868352,32.734849],[-79.884961,32.684402],[-79.968468,32.639732],[-80.000801,32.605892],[-80.077039,32.603319],[-80.148406,32.578479],[-80.190108,32.546841],[-80.246361,32.531114],[-80.24944242622779,32.52935932919329],[-80.338354,32.47873],[-80.40327659277136,32.47220240740669],[-80.413505,32.471174],[-80.46571,32.4953],[-80.46911077375938,32.48912619355169],[-80.47136206778757,32.48503916672449],[-80.47229312469508,32.48334891458009],[-80.484617,32.460976],[-80.457502,32.410264],[-80.434303,32.375193],[-80.455192,32.326458],[-80.539429,32.287024],[-80.596394,32.273549],[-80.644794,32.291497],[-80.714601,32.325656],[-80.766038,32.292608],[-80.726967,32.265706],[-80.669166,32.216783],[-80.721463,32.160427],[-80.812503,32.109746],[-80.858735,32.099581],[-80.86742768189158,32.07849],[-80.885517,32.0346],[-80.943226,32.057824],[-81.006745,32.101152],[-81.038265,32.084469],[-81.113334,32.113205],[-81.119361,32.177142],[-81.14759517045536,32.22716944659709],[-81.153531,32.237687],[-81.128034,32.276297],[-81.133032,32.334794],[-81.17347379448609,32.38490278088669],[-81.194931,32.411489],[-81.194829,32.465086],[-81.274927,32.544158],[-81.28423838176558,32.547110946284995],[-81.328753,32.561228],[-81.38690190269416,32.59896485389979],[-81.397106,32.605587],[-81.393818,32.653491],[-81.41267,32.739083],[-81.4131167951736,32.744261327961496],[-81.42062,32.831223],[-81.464069,32.897814],[-81.499566,32.943722],[-81.50203,33.015113],[-81.54396622431388,33.04439995414439],[-81.601655,33.084688],[-81.61595571078908,33.08933853936399],[-81.658433,33.103152],[-81.755135,33.15155],[-81.76250598279576,33.197265888297295],[-81.763535,33.203648],[-81.846536,33.241746],[-81.84650053235788,33.24725208542989],[-81.846136,33.303843],[-81.932737,33.343541],[-81.920121,33.410753],[-81.926336,33.462937],[-81.990938,33.494235],[-82.01655587044488,33.529055386425895],[-82.028238,33.544934],[-82.10624,33.595637],[-82.11465383858477,33.59790505457],[-82.14245647450088,33.60539959999209],[-82.161908,33.610643],[-82.199747,33.657611],[-82.21593836474749,33.68775497531869],[-82.239098,33.730872],[-82.32448,33.820033],[-82.43115,33.867051],[-82.51295,33.936969],[-82.556835,33.945353],[-82.56299679858088,33.95655491052689],[-82.591855,34.009018],[-82.59502579260727,34.013517809209596],[-82.642797,34.081312],[-82.715373,34.148165],[-82.73510798894158,34.21261481224289],[-82.744982,34.244861],[-82.77462873101207,34.28836681825469],[-82.780308,34.296701],[-82.82342,34.358872],[-82.841997,34.399766],[-82.873831,34.471508],[-82.925766,34.481802],[-82.99138815318229,34.47298062723579],[-82.99509,34.472483],[-83.048289,34.493254],[-83.05057296410239,34.49505365216909],[-83.096858,34.531524],[-83.10287382603569,34.53743090976538],[-83.154577,34.588198],[-83.221402,34.609947],[-83.27796,34.644853],[-83.33869,34.682002],[-83.34003910678457,34.686327710412094],[-83.34960851091326,34.71701058262729],[-83.353238,34.728648]]]}},
+{"type":"Feature","properties":{"name":"Colorado","income":{"1995":37235,"1996":38923,"1997":40853,"1998":43402,"1999":45557,"2000":47505,"2001":48483,"2002":48060,"2003":49248,"2004":50105,"2005":50841,"2006":52265,"2007":55517,"2008":57184,"2009":55735,"2010":54411,"2011":55530,"2012":56880,"2013":58942,"2014":61324,"2015":63945}},"geometry":{"type":"Polygon","coordinates":[[[-109.059962,38.499987],[-109.05996197258898,38.49998903102078],[-109.051512,39.126095],[-109.051223831017,39.36667754958628],[-109.05106684627299,39.49773880936619],[-109.05087192526199,39.660471777159394],[-109.050615,39.87497],[-109.050973,40.180849],[-109.05073211207697,40.22265525825759],[-109.048249,40.653601],[-109.04825975004798,40.66260181722799],[-109.048455,40.826081],[-109.050076,41.000659],[-108.250649,41.000114],[-107.91841828984899,41.00122707064409],[-107.367443,41.003073],[-107.31779575978997,41.00284248123219],[-106.86037794866498,41.00071862923709],[-106.32116921591397,40.99821501106799],[-106.217573,40.997734],[-106.19055407870897,40.99774661257439],[-105.277138,40.998173],[-105.276859994035,40.99817291762589],[-104.943371,40.99807410372979],[-104.855273,40.998048],[-104.497058,41.001805],[-104.053249,41.001406],[-103.574522,41.001721],[-103.573774006195,41.00172179908409],[-103.38249165188998,41.001926146620995],[-103.076536,41.002253],[-102.65346413726898,41.00222532414359],[-102.62103302445198,41.002223202615596],[-102.556789,41.002219],[-102.05171751637799,41.00237696762389],[-102.051614,41.002377],[-102.051292,40.749591],[-102.05129200020698,40.74958599487369],[-102.05129415157899,40.697546832388994],[-102.05130479859699,40.44000799337699],[-102.05130855184399,40.34922135687219],[-102.051309,40.338381],[-102.051744,40.003078],[-102.051254,39.818992],[-102.04999213564399,39.574056097421],[-102.04996185782798,39.56817898067309],[-102.04896,39.373712],[-102.04720072170099,39.13314670951119],[-102.046571,39.047038],[-102.04571290308698,38.69756577007849],[-102.04551057456999,38.61516459017749],[-102.044944,38.384419],[-102.04465035914698,38.26874922250309],[-102.04463427029097,38.262411567749496],[-102.044255,38.113011],[-102.04196565862797,37.73854057363819],[-102.041876,37.723875],[-102.04189086966498,37.64427768529179],[-102.04193852287398,37.38919005539379],[-102.041963,37.258164],[-102.041983,37.106551],[-102.04192,37.035083],[-102.04224,36.993083],[-102.355288,36.994506],[-102.698142,36.995149],[-102.841989,36.999598],[-103.002199,37.000104],[-103.08610107563098,36.99986436110639],[-103.733247,36.998016],[-104.00784940961297,36.995984094709094],[-104.338833,36.993535],[-104.732031,36.993447],[-105.1208,36.995428],[-105.15504274804798,36.9954744456106],[-105.22050520078098,36.99556323648649],[-105.251296,36.995605],[-105.41931,36.995856],[-105.533922,36.995875],[-105.716471,36.995849],[-105.71846968399099,36.995845927301],[-105.997472,36.995417],[-106.00631641079798,36.995386628817286],[-106.343139,36.99423],[-106.476233588828,36.99377410054689],[-106.869796,36.992426],[-106.877292,37.000139],[-107.420913,37.000005],[-107.42092190574498,37.00000499993859],[-107.48173699915498,37.00000458031429],[-108.000623,37.000001],[-108.37930295009397,36.999564686311494],[-108.620309,36.999287],[-109.045223,36.999084],[-109.04378072050297,37.48481923141749],[-109.04260410062098,37.881084817492585],[-109.04179661485499,38.15303230496849],[-109.041762,38.16469],[-109.060062,38.275489],[-109.059962,38.499987]]]}},
+{"type":"Feature","properties":{"name":"Kansas","income":{"1995":32114,"1996":33610,"1997":36488,"1998":38553,"1999":39726,"2000":41150,"2001":42081,"2002":42104,"2003":43113,"2004":41664,"2005":42861,"2006":45369,"2007":47341,"2008":50174,"2009":47709,"2010":47888,"2011":48844,"2012":50140,"2013":50892,"2014":52392,"2015":53802}},"geometry":{"type":"Polygon","coordinates":[[[-102.051744,40.003078],[-101.832161,40.002933],[-101.542273,40.002609],[-101.41102898780197,40.002582569567586],[-101.32551402751898,40.00256534823049],[-101.293991,40.002559],[-101.060317,40.002307],[-100.75883,40.002302],[-100.73882471319098,40.002262956567684],[-100.477018,40.001752],[-100.19359905683599,40.00157300571989],[-100.19359,40.001573],[-100.17779754587897,40.00156581385159],[-99.813401,40.0014],[-99.62825384922449,40.00177194726839],[-99.62532672639958,40.00177782764698],[-99.501792,40.002026],[-99.17913315086108,40.00210895269489],[-99.085597,40.002133],[-99.06701834989808,40.00214351305219],[-98.72637296393899,40.00233627316689],[-98.613755,40.0024],[-98.50445498363678,40.002379876736],[-98.27401705975288,40.00233745072989],[-98.076034,40.002301],[-97.93182492631716,40.00223634501959],[-97.82150081227518,40.002186882088886],[-97.777155,40.002167],[-97.415833,40.002001],[-97.36919903531498,40.00193930576049],[-97.009165,40.001463],[-96.91640700546577,40.00145409104389],[-96.873812,40.00145],[-96.805768,40.001368455095395],[-96.469945,40.000966],[-96.46371207677477,40.00095857255448],[-96.23920787841108,40.00069104275439],[-96.239172,40.000691],[-96.154365,40.000495],[-96.02409,40.000719],[-96.01067881793449,40.00070466577199],[-95.78811099489167,40.00046677936529],[-95.784575,40.000463],[-95.33989597085028,40.00002885710539],[-95.30829,39.999998],[-95.231114,39.943784],[-95.142445,39.89542],[-95.081534,39.861718],[-95.018743,39.897372],[-94.99337423971437,39.89856525999229],[-94.95154,39.900533],[-94.928466,39.876344],[-94.878677,39.826522],[-94.87781752985117,39.82041477603549],[-94.871144,39.772994],[-94.860371,39.74953],[-94.899316,39.724042],[-94.971078,39.723146],[-94.971317,39.68641],[-95.037464,39.652905],[-95.04405075257039,39.61366829682089],[-95.047165,39.595117],[-95.076688,39.576764],[-95.113557,39.553941],[-95.09141940282399,39.53325788520999],[-95.049845,39.494415],[-94.982144,39.440552],[-94.96574741863347,39.42168174465639],[-94.946662,39.399717],[-94.888972,39.392432],[-94.908065,39.323663],[-94.857072,39.273825],[-94.825663,39.241729],[-94.799663,39.206018],[-94.79199467374328,39.20126025024019],[-94.741938,39.170203],[-94.680336,39.184303],[-94.623934,39.156603],[-94.60193798192108,39.15550323346379],[-94.591933,39.155003],[-94.607354,39.113444],[-94.60787035337397,39.04408509647849],[-94.608334,38.981806],[-94.60896034374949,38.84721131544499],[-94.609456,38.7407],[-94.60948967234579,38.73810170947319],[-94.61195801832227,38.547634434271686],[-94.61286559592209,38.47760218023509],[-94.612866,38.477571],[-94.61277262899287,38.38871848273179],[-94.612614,38.237766],[-94.61392996105577,38.06005295989649],[-94.61410024870548,38.03705658338129],[-94.614465,37.987799],[-94.617885,37.682214],[-94.61787245089806,37.673110700332096],[-94.6178455243542,37.653577796634394],[-94.617511,37.410909],[-94.61766760470077,37.36417032703869],[-94.61775389160657,37.338418],[-94.618351,37.160211],[-94.61810289110298,37.05679639087289],[-94.617964,36.998905],[-94.71277,36.998794],[-94.995293,36.999529],[-95.00762000447206,36.99952255912579],[-95.07350396663027,36.99948813467909],[-95.322565,36.999358],[-95.40762000587706,36.99934173663909],[-95.52241455239867,36.99931978678289],[-95.573598,36.99931],[-95.78676187077816,36.99927091759199],[-95.928122,36.999245],[-95.96427123210216,36.999223144282396],[-96.00081020619957,36.999201052927894],[-96.217571,36.99907],[-96.500288,36.998643],[-96.52558204428287,36.99867796872479],[-96.749838,36.998988],[-97.100652,36.998998],[-97.14772096692268,36.99897233562149],[-97.384925,36.998843],[-97.46234602986407,36.99882423879689],[-97.768704,36.99875],[-97.80231297035029,36.99869860939399],[-98.045342,36.998327],[-98.11198518374576,36.99824799463529],[-98.34714877974467,36.99796920864959],[-98.354073,36.997961],[-98.54466197334888,36.99852424040059],[-98.791936,36.999255],[-99.00030105388416,36.99935809814439],[-99.129449,36.999422],[-99.407015,36.999579],[-99.45620243467526,36.99970027940789],[-99.54111491236087,36.99990964456549],[-99.657658,37.000197],[-99.995201,37.001631],[-100.00257151432197,37.001619153911996],[-100.08948174390297,37.00147946946349],[-100.552683,37.000735],[-100.63332498615797,37.00017360905289],[-100.855634,36.998626],[-100.945466793078,36.99824682872879],[-101.06645021565997,36.99773617514039],[-101.211486,36.997124],[-101.485326,36.995611],[-101.55525884869098,36.99529093927759],[-101.90244,36.993702],[-102.02820419104496,36.993145147108294],[-102.04224,36.993083],[-102.04192,37.035083],[-102.041983,37.106551],[-102.041963,37.258164],[-102.04193852287398,37.38919005539379],[-102.04189086966498,37.64427768529179],[-102.041876,37.723875],[-102.04196565862797,37.73854057363819],[-102.044255,38.113011],[-102.04463427029097,38.262411567749496],[-102.04465035914698,38.26874922250309],[-102.044944,38.384419],[-102.04551057456999,38.61516459017749],[-102.04571290308698,38.69756577007849],[-102.046571,39.047038],[-102.04720072170099,39.13314670951119],[-102.04896,39.373712],[-102.04996185782798,39.56817898067309],[-102.04999213564399,39.574056097421],[-102.051254,39.818992],[-102.051744,40.003078]]]}},
+{"type":"Feature","properties":{"name":"Connecticut","income":{"1995":43274,"1996":44981,"1997":46648,"1998":49846,"1999":51706,"2000":52758,"2001":55060,"2002":54543,"2003":56409,"2004":56617,"2005":60840,"2006":63352,"2007":65969,"2008":68294,"2009":66906,"2010":64321,"2011":65822,"2012":67275,"2013":67262,"2014":70007,"2015":71333}},"geometry":{"type":"Polygon","coordinates":[[[-73.69593580216956,41.11525545690408],[-73.482709,41.21276],[-73.550961,41.295422],[-73.54415118640058,41.36631959624439],[-73.54330658069169,41.375112864027685],[-73.54318320799626,41.376397308516786],[-73.54314734626546,41.37677066829739],[-73.536969,41.441094],[-73.52967771430127,41.527161021128286],[-73.520017,41.641197],[-73.51791879063818,41.666720530709995],[-73.505008,41.823773],[-73.487314,42.049638],[-73.231056,42.044945],[-73.12722917087838,42.04212314835478],[-73.05336267374808,42.040115571910285],[-73.00876278163068,42.03890341624669],[-72.999549,42.038653],[-72.847142,42.036894],[-72.810078,41.998316],[-72.77475931607859,42.00212910418029],[-72.766739,42.002995],[-72.735496,42.036399],[-72.607933,42.030795],[-72.528131,42.034295],[-72.50917933629829,42.03408049659008],[-72.39747625519588,42.03281619113578],[-72.317148,42.031907],[-72.19884597813198,42.030103893281996],[-72.13573146194668,42.02914192994159],[-72.10215943452678,42.028630240054795],[-71.987326,42.02688],[-71.88467683590369,42.025059351484295],[-71.80065,42.023569],[-71.799242,42.008065],[-71.792767,41.807001],[-71.789678,41.724734],[-71.78967758183198,41.724568000295285],[-71.78946459083899,41.64001719070689],[-71.789356,41.59691],[-71.78935867274228,41.59685216034269],[-71.79171906174719,41.54577200433499],[-71.797683,41.416709],[-71.839649,41.412119],[-71.835951,41.353935],[-71.860513,41.320248],[-71.886302,41.33641],[-71.956747,41.329871],[-72.021898,41.316838],[-72.094443,41.314164],[-72.134221,41.299398],[-72.201422,41.315697],[-72.235531,41.300413],[-72.293044,41.280044],[-72.3400129087019,41.277849262238384],[-72.348643,41.277446],[-72.386629,41.261798],[-72.40593,41.278398],[-72.472539,41.270103],[-72.5345648971681,41.25382427439109],[-72.547235,41.250499],[-72.598036,41.268698],[-72.653838,41.265897],[-72.65435402015119,41.26562630830019],[-72.690439,41.246697],[-72.760341,41.241235],[-72.786142,41.264796],[-72.881445,41.242597],[-72.90393376006288,41.24919413446249],[-72.935646,41.258497],[-72.97050541549919,41.24127430899629],[-72.98484081275468,41.23419174281399],[-72.986247,41.233497],[-73.020449,41.206397],[-73.07945,41.194015],[-73.1011738216445,41.163726271164286],[-73.108352,41.153718],[-73.130253,41.146797],[-73.17283536512738,41.15344227911238],[-73.202656,41.158096],[-73.262358,41.117496],[-73.26981757976849,41.116676890043294],[-73.297214389349,41.11366854370119],[-73.33066,41.109996],[-73.372296,41.10402],[-73.354231,41.085639],[-73.387227,41.058247],[-73.422165,41.047562],[-73.468239,41.051347],[-73.516903,41.038738],[-73.561968,41.016797],[-73.595699,41.015995],[-73.657336,40.985171],[-73.65737400926137,40.98552488385919],[-73.659362,41.004034],[-73.659533,41.017857],[-73.727775,41.100696],[-73.69593580216956,41.11525545690408]]]}},
+{"type":"Feature","properties":{"name":"Nevada","income":{"1995":36300,"1996":38213,"1997":39280,"1998":39867,"1999":41939,"2000":44698,"2001":44325,"2002":44560,"2003":45249,"2004":47231,"2005":49288,"2006":52800,"2007":54996,"2008":56432,"2009":53310,"2010":50987,"2011":49099,"2012":49909,"2013":51250,"2014":51487,"2015":52544}},"geometry":{"type":"Polygon","coordinates":[[[-120.00479551230397,39.31647501195848],[-120.00302891965698,39.44504577616049],[-120.00174,39.538852],[-119.99993544808497,39.72240692472418],[-119.997634,39.956505],[-119.997124,40.126363],[-119.996155,40.32125],[-119.997533,40.720992],[-119.999231,40.865899],[-119.999866,41.183974],[-119.99828,41.618765],[-119.999276,41.874891],[-119.999168,41.99454],[-119.72573,41.996296],[-119.36012311960299,41.99409225498119],[-119.32418412043896,41.99387562779329],[-119.20828,41.993177],[-119.001022,41.993793],[-118.775869,41.992692],[-118.501002,41.995446],[-118.19736921592799,41.996994081163486],[-118.197189,41.996995],[-117.873467,41.998335],[-117.623731,41.998467],[-117.403613,41.99929],[-117.197798,42.00038],[-117.026197,41.99989],[-117.018203216741,41.99983985036909],[-116.625947,41.997379],[-116.332763,41.997283],[-115.870181,41.996766],[-115.625914,41.997415],[-115.313877,41.996103],[-115.03810975243397,41.99863411567649],[-114.89921,41.999909],[-114.598267,41.994511],[-114.281855,41.994214],[-114.28179946721997,41.99421388575789],[-114.041723,41.99372],[-114.039901,41.753781],[-114.040231,41.49169],[-114.041447,41.207752],[-114.042145,40.999926],[-114.04214514623497,40.999896577263286],[-114.043505,40.726292],[-114.045577,40.495801],[-114.046178,40.398313],[-114.04637281737297,40.116935833012185],[-114.046386,40.097896],[-114.04726815307697,39.906098113756194],[-114.047783,39.79416],[-114.04718141292597,39.54274360222969],[-114.047079,39.499943],[-114.049104,39.005509],[-114.048054,38.878693],[-114.04943670593099,38.677362456879585],[-114.05015362080597,38.57297521300339],[-114.050154,38.57292],[-114.05012,38.404536],[-114.050138,38.24996],[-114.04990337565798,38.148763026670586],[-114.049903,38.148601],[-114.049658,37.881368],[-114.051728,37.745997],[-114.05247199661397,37.60477664271939],[-114.052472,37.604776],[-114.052701,37.492014],[-114.051974,37.284511],[-114.051749,37.088434],[-114.0506,37.000396],[-114.05016077608799,36.84314153968939],[-114.049493,36.604059],[-114.047584,36.325573],[-114.048226,36.268874],[-114.046838,36.194069],[-114.09987,36.121654],[-114.138203,36.053161],[-114.151725,36.024563],[-114.21369,36.015613],[-114.270645,36.03572],[-114.316109,36.063109],[-114.337273,36.10802],[-114.372106,36.143114],[-114.41695,36.145761],[-114.448654,36.12641],[-114.487034,36.129396],[-114.511721,36.150956],[-114.572031,36.15161],[-114.627855,36.141012],[-114.666538,36.117343],[-114.736165,36.104367],[-114.743342,36.070535],[-114.74329924588599,36.06593517376009],[-114.742779,36.009963],[-114.731159,35.943916],[-114.700271,35.901772],[-114.669687,35.865084],[-114.70371,35.814585],[-114.697309,35.733686],[-114.689407,35.651412],[-114.653406,35.610789],[-114.663105,35.524491],[-114.6645,35.449497],[-114.627137,35.409504],[-114.587129,35.262376],[-114.572747,35.138725],[-114.59912,35.12105],[-114.619905,35.121632],[-114.625069,35.068478],[-114.633487,35.001857],[-114.804249,35.139689],[-115.043812,35.332012],[-115.160068,35.424129],[-115.303743,35.538207],[-115.404537,35.617605],[-115.647683,35.809358],[-115.64803201962498,35.80962921260289],[-115.84611392276199,35.96355267311089],[-115.892975,35.999967],[-116.093601,36.155805],[-116.375875,36.372562],[-116.488233,36.459097],[-117.000895,36.847694],[-117.166000564031,36.97120753859029],[-117.244917,37.030244],[-117.68061,37.353399],[-117.83350404414396,37.46493876624449],[-118.022181,37.602583],[-118.42799532515699,37.896224280909784],[-118.500958,37.949019],[-118.949673,38.26894],[-119.157226100872,38.41439197176128],[-119.279262,38.499914],[-119.32870452107596,38.534351927797495],[-119.58540614483898,38.713150900671195],[-119.587679,38.714734],[-119.904315,38.933324],[-120.001014,38.999574],[-120.00197525086698,39.06749587446829],[-120.00261484291299,39.11268937409578],[-120.00336402883298,39.16562676406879],[-120.005142,39.291258],[-120.00479551230397,39.31647501195848]]]}},
+{"type":"Feature","properties":{"name":"Washington","income":{"1995":37015,"1996":37847,"1997":41715,"1998":44307,"1999":44742,"2000":44846,"2001":46284,"2002":46399,"2003":48185,"2004":48438,"2005":49372,"2006":52571,"2007":55628,"2008":58081,"2009":56479,"2010":55584,"2011":56811,"2012":57574,"2013":58431,"2014":61358,"2015":64080}},"geometry":{"type":"MultiPolygon","coordinates":[[[[-123.237148,48.683466],[-123.070427,48.699971],[-123.019699,48.721312],[-122.979519,48.781702],[-122.937925,48.790315],[-122.818436,48.744629],[-122.743049,48.661991],[-122.79901,48.604683],[-122.771206,48.562426],[-122.779124,48.508911],[-122.817912,48.483888],[-122.803521,48.428748],[-122.874135,48.418196],[-122.928004,48.439966],[-123.039156,48.460003],[-123.141478,48.505291],[-123.20268,48.590214],[-123.237148,48.683466]]],[[[-124.725839,48.386012],[-124.653243,48.390691],[-124.546259,48.353594],[-124.380874,48.284699],[-124.250882,48.264773],[-124.101773,48.216883],[-124.050734,48.177747],[-123.880068,48.160621],[-123.728736,48.1628],[-123.672445,48.162715],[-123.551131,48.151382],[-123.441972,48.124259],[-123.314578,48.113725],[-123.239129,48.118217],[-123.144783,48.175943],[-123.06621,48.120469],[-123.004128,48.090516],[-122.946119,48.098552],[-122.91068675572495,48.10979974393279],[-122.833173,48.134406],[-122.760448,48.14324],[-122.698465,48.103102],[-122.70184,48.016106],[-122.701294,47.972979],[-122.651063,47.920985],[-122.63410286527996,47.923035299738785],[-122.616701,47.925139],[-122.57374586431497,47.95100416720909],[-122.546824,47.967215],[-122.542924,47.996404],[-122.607342,48.030992],[-122.598301,48.110616],[-122.633167,48.163281],[-122.711508,48.193573],[-122.752563,48.260061],[-122.707077,48.315286],[-122.66698252821598,48.41246699204428],[-122.665338,48.416453],[-122.689121,48.476849],[-122.650307,48.530156],[-122.642597,48.588339],[-122.67134542566697,48.64529899852018],[-122.710177,48.722237],[-122.720045,48.789195],[-122.732506,48.838097],[-122.794018,48.88313],[-122.821631,48.941369],[-122.75802,49.002357],[-122.251063,49.002494],[-122.098357,49.002146],[-121.751252,48.997399],[-121.395543,48.999851],[-121.12624,49.001412],[-120.85152713301797,49.00059115283519],[-120.716604,49.000188],[-120.376216,49.000705],[-120.001199,48.999418],[-119.4577,49.000261],[-119.132102,49.000262],[-118.83661303557997,49.00030775929759],[-118.19737505245898,49.000406751424585],[-118.002046,49.000437],[-117.607323,49.000843],[-117.429968,49.00030686982558],[-117.268247,48.999818],[-117.032351,48.999188],[-117.03293918211699,48.84666792120148],[-117.033671,48.656902],[-117.035289,48.422732],[-117.041107,48.124904],[-117.04121445346098,48.04546510380278],[-117.04130644645898,47.97745592002679],[-117.041634,47.7353],[-117.04049037556798,47.36602888669798],[-117.04015975186299,47.259272],[-117.039836,47.154734],[-117.03983338602796,47.12726899225409],[-117.03977765556199,46.541708992038096],[-117.039771,46.471779],[-117.036645748421,46.426100482655386],[-117.035545,46.410012],[-117.062748,46.353624],[-116.99726,46.303151],[-116.964379,46.253282],[-116.962966,46.19968],[-116.923958,46.17092],[-116.935473,46.142448],[-116.981962,46.084915],[-116.942656,46.061],[-116.915989,45.995413],[-117.353928,45.996349],[-117.47993726365397,45.99756676684219],[-117.60342583450398,45.99876017344268],[-117.717852,45.999866],[-117.97765730653197,46.00016820238199],[-117.99697042960298,46.00019066717259],[-118.36779,46.000622],[-118.60678915418896,46.00086324979118],[-118.67787,46.000935],[-118.987129,45.999855],[-118.98722753956497,45.99980021352369],[-119.061462,45.958527],[-119.12612,45.932859],[-119.25715,45.939926],[-119.364396,45.921605],[-119.43213855881598,45.91320914423389],[-119.487829,45.906307],[-119.571584,45.925456],[-119.600549,45.919581],[-119.669877,45.856867],[-119.802655,45.84753],[-119.868153889391,45.838226602635686],[-119.965744,45.824365],[-119.99950515346198,45.81168492308189],[-120.07015,45.785152],[-120.141352,45.773152],[-120.210754,45.725951],[-120.282156,45.72125],[-120.40396,45.699249],[-120.48854682070397,45.69991222747849],[-120.505863,45.700048],[-120.591166,45.746547],[-120.634968,45.745847],[-120.65251676019399,45.73616973067489],[-120.68937,45.715847],[-120.855674,45.671545],[-120.895575,45.642945],[-120.91393501308399,45.64806586642348],[-120.943977,45.656445],[-121.084933,45.647893],[-121.1222,45.616067],[-121.183841,45.606441],[-121.215779,45.671238],[-121.33777,45.704949],[-121.423592,45.69399],[-121.44069582786098,45.69907379477239],[-121.52400610421999,45.72383622519919],[-121.533106,45.726541],[-121.668362,45.705082],[-121.735104,45.694039],[-121.811304,45.706761],[-121.867167,45.693277],[-121.900858,45.662009],[-121.92374936198499,45.65434950896938],[-121.951838,45.644951],[-122.00369,45.61593],[-122.101675,45.583516],[-122.183695,45.577696],[-122.24919700805198,45.54999893274119],[-122.262625,45.544321],[-122.331502,45.548241],[-122.380302,45.575941],[-122.438674,45.563585],[-122.492259,45.583281],[-122.643907,45.609739],[-122.738109,45.644138],[-122.75644390397096,45.66242102508758],[-122.774511,45.680437],[-122.76651077132999,45.728662574445195],[-122.761451,45.759163],[-122.795605,45.81],[-122.788086362595,45.851007454356086],[-122.785026,45.867699],[-122.81151,45.912725],[-122.813998,45.960984],[-122.856158,46.014469],[-122.904119,46.083734],[-122.962681,46.104817],[-123.004233,46.133823],[-123.115904,46.185268],[-123.166414,46.188973],[-123.21249359120895,46.171096458400285],[-123.280166,46.144843],[-123.36374450726598,46.14624319434849],[-123.371433,46.146372],[-123.430847,46.181827],[-123.427629,46.229348],[-123.479644,46.269131],[-123.547659,46.259109],[-123.669501,46.266832],[-123.700764,46.305278],[-123.72790381759698,46.29133558571118],[-123.75956,46.275073],[-123.806139,46.283588],[-123.875525,46.239787],[-123.909306,46.245491],[-123.954353,46.277001],[-123.969427,46.291398],[-124.080671,46.267239],[-124.064624,46.326899],[-124.057024,46.493338],[-124.069583,46.630651],[-123.960642,46.636364],[-123.923269,46.672708],[-123.975157,46.713971],[-124.080983,46.735003],[-124.09679666790497,46.794085],[-124.101232,46.810656],[-124.138225,46.905534],[-124.180111,46.926357],[-124.169113,46.994508],[-124.188544,47.157859],[-124.195893,47.174],[-124.236349,47.287287],[-124.319379,47.355559],[-124.35361567088695,47.53353708305209],[-124.355955,47.545698],[-124.412106,47.691199],[-124.471687,47.766907],[-124.539927,47.836967],[-124.61310865605198,47.88057244174858],[-124.625512,47.887963],[-124.672427,47.964414],[-124.685393,48.049238],[-124.687101,48.098657],[-124.721725,48.153185],[-124.690389,48.219745],[-124.669265,48.296353],[-124.725839,48.386012]]]]}},
+{"type":"Feature","properties":{"name":"West Virginia","income":{"1995":25354,"1996":25760,"1997":27432,"1998":28460,"1999":30108,"2000":30187,"2001":31156,"2002":30695,"2003":32967,"2004":33993,"2005":33466,"2006":35028,"2007":37057,"2008":37528,"2009":37423,"2010":38241,"2011":38587,"2012":40188,"2013":41195,"2014":41030,"2015":41969}},"geometry":{"type":"Polygon","coordinates":[[[-82.598864,38.201007],[-82.58469381412559,38.24051299336969],[-82.581796,38.248592],[-82.571877,38.315781],[-82.597979,38.344909],[-82.59596426449998,38.38088976171549],[-82.593673,38.421809],[-82.560664,38.404338],[-82.50896694973129,38.414643912651684],[-82.447076,38.426982],[-82.381773,38.434783],[-82.323999,38.449268],[-82.304223,38.496308],[-82.293271,38.560283],[-82.28213334402808,38.57986079640348],[-82.27427,38.593683],[-82.218967,38.591683],[-82.175167,38.608484],[-82.185567,38.659583],[-82.201537,38.760372],[-82.20929,38.802672],[-82.16157,38.824632],[-82.134766,38.905579],[-82.09886665055427,38.96087928449329],[-82.089065,38.975978],[-82.041563,39.017878],[-82.007062,39.029578],[-81.941829,38.993295],[-81.89847,38.929603],[-81.827354,38.945898],[-81.775734,38.980737],[-81.793304,39.040353],[-81.807855,39.083978],[-81.75026684342629,39.10403119309979],[-81.742953,39.106578],[-81.75229703674009,39.18103474740589],[-81.752754,39.184676],[-81.72146813917249,39.210960809203684],[-81.711628,39.219228],[-81.678331,39.273755],[-81.613896,39.275339],[-81.565247,39.276175],[-81.559647,39.330774],[-81.503189,39.373242],[-81.456143,39.409274],[-81.412706,39.394618],[-81.393794,39.351706],[-81.37038980882629,39.348700672403396],[-81.347567,39.34577],[-81.249088,39.389992],[-81.185946,39.430731],[-81.128533,39.449375],[-81.12127385610779,39.45769741388929],[-81.07595,39.50966],[-81.03736504198706,39.538055712472584],[-80.943782,39.606926],[-80.865575,39.662751],[-80.829764,39.711839],[-80.83552169300748,39.71925180220009],[-80.869933,39.763555],[-80.824969,39.801092],[-80.824276,39.847159],[-80.82343810478588,39.85003208739639],[-80.803394,39.918762],[-80.764479,39.95025],[-80.740126,39.970793],[-80.73821843998358,40.033543226078386],[-80.736804,40.080072],[-80.705994,40.151591],[-80.70257530362257,40.157141398009685],[-80.68417321070798,40.18701797335069],[-80.644598,40.25127],[-80.606596,40.303869],[-80.631596,40.385468],[-80.62736262993687,40.395170933017184],[-80.604895,40.446667],[-80.622195,40.520497],[-80.667957,40.582496],[-80.627171,40.619936],[-80.583633,40.61552],[-80.518991,40.638801],[-80.51901711734737,40.47736314623709],[-80.51902969119408,40.39964105634069],[-80.519039,40.342101],[-80.51908437045658,40.15967199511809],[-80.51912,40.01641],[-80.51916079431449,39.96220005252189],[-80.519342,39.721403],[-80.421388,39.721189],[-80.075947,39.72135],[-80.04170201281049,39.72128703291879],[-79.91601735603777,39.72105593351879],[-79.763774,39.720776],[-79.476662,39.721078],[-79.482366,39.531689],[-79.484372,39.3443],[-79.486873,39.205961],[-79.424413,39.228171],[-79.35375,39.278039],[-79.283723,39.30964],[-79.26239211717608,39.32624382846739],[-79.166497,39.400888],[-79.091329,39.472407],[-79.06782557347339,39.47280233821589],[-79.035623,39.473344],[-78.956751,39.440264],[-78.942618,39.479614],[-78.851016,39.554044],[-78.77114,39.638387],[-78.73905,39.609697],[-78.707098,39.555857],[-78.65503617154668,39.54438224108369],[-78.590654,39.530192],[-78.46826959500288,39.526224270471694],[-78.460951,39.525987],[-78.438179,39.563524],[-78.382959,39.622246],[-78.33278802149908,39.62852759649879],[-78.313033,39.631001],[-78.225075,39.658878],[-78.08226,39.671166],[-78.02762910017326,39.620655962344095],[-78.006734,39.601337],[-77.925988,39.607642],[-77.829814,39.587288],[-77.823762,39.525907],[-77.81094389626217,39.50073916656648],[-77.798201,39.475719],[-77.740012,39.401694],[-77.74593,39.353221],[-77.719519,39.321314],[-77.778068,39.229305],[-77.809125,39.168567],[-77.828157,39.132329],[-77.82830183326728,39.132422454832486],[-78.032841,39.264403],[-78.03318346093418,39.26462369847469],[-78.03318523536657,39.26462484200518],[-78.18737,39.363989],[-78.22912953421849,39.39066388720409],[-78.347087,39.466012],[-78.337133,39.409169],[-78.34048,39.353492],[-78.401813,39.276754],[-78.40498,39.238006],[-78.428697,39.187217],[-78.413943,39.158415],[-78.508132,39.08863],[-78.53214700369618,39.05294164002129],[-78.561711,39.009007],[-78.620453,38.982601],[-78.681617,38.92584],[-78.772793,38.893742],[-78.821167,38.830982],[-78.869276,38.762991],[-78.999014,38.840074],[-79.023053,38.798613],[-79.057253,38.761413],[-79.088055,38.690115],[-79.092955,38.659517],[-79.154357,38.606518],[-79.201459,38.527821],[-79.22825588138187,38.48003955108519],[-79.23162,38.474041],[-79.297758,38.416438],[-79.31129606551438,38.41845460145499],[-79.370302,38.427244],[-79.476638,38.457228],[-79.54257,38.553217],[-79.649075,38.591515],[-79.669128,38.510883],[-79.691088,38.463744],[-79.689675,38.431439],[-79.7346,38.356728],[-79.804093,38.313922],[-79.787542,38.273298],[-79.79701353680687,38.267268121139196],[-79.850324,38.233329],[-79.916174,38.184386],[-79.938952,38.111619],[-79.96198227263537,38.06360709949329],[-79.971231,38.044326],[-80.036236,37.96792],[-80.05581159458966,37.951878220097896],[-80.131931,37.8895],[-80.199633,37.827507],[-80.218616,37.783291],[-80.258143,37.720612],[-80.290033810255,37.686136458971],[-80.292258,37.683732],[-80.22430324437678,37.62399137117089],[-80.223386,37.623185],[-80.28244,37.585481],[-80.291644,37.536505],[-80.39988,37.462314],[-80.46482,37.426144],[-80.47128294938639,37.43006549889589],[-80.544836,37.474695],[-80.664971,37.414215],[-80.770082,37.372363],[-80.836446,37.424355],[-80.85735857018977,37.421128713998996],[-80.85814811681978,37.421006906721495],[-80.865148,37.419927],[-80.883248,37.383933],[-80.835479,37.334824],[-80.919259,37.306163],[-80.98084525689279,37.30085281619049],[-80.996013,37.299545],[-81.112596,37.278497],[-81.225104,37.234874],[-81.362156,37.337687],[-81.427946,37.271015],[-81.483559,37.250604],[-81.53307,37.223414],[-81.560625,37.206663],[-81.678603,37.202467],[-81.73905503048546,37.23949710387279],[-81.744003,37.242528],[-81.774747,37.274847],[-81.849949,37.285227],[-81.896001,37.331967],[-81.933601,37.389217],[-81.93695,37.41992],[-81.984891,37.454315],[-81.932279,37.511961],[-81.968297,37.537798],[-82.064418,37.544516],[-82.141555,37.595166],[-82.226111,37.653092],[-82.296118,37.686174],[-82.32067495717779,37.74596584345939],[-82.327356,37.762233],[-82.369973,37.801749],[-82.39846481625888,37.84305415046289],[-82.41869,37.872375],[-82.487556,37.916975],[-82.47942012322297,37.938562524698085],[-82.464987,37.976859],[-82.549407,38.063063],[-82.626182,38.134835],[-82.598864,38.201007]]]}},
+{"type":"Feature","properties":{"name":"Wyoming","income":{"1995":30673,"1996":31173,"1997":33197,"1998":35868,"1999":37480,"2000":38934,"2001":39988,"2002":39772,"2003":41554,"2004":43785,"2005":45501,"2006":47819,"2007":52433,"2008":54735,"2009":54400,"2010":53757,"2011":56044,"2012":55104,"2013":58424,"2014":58291,"2015":61213}},"geometry":{"type":"Polygon","coordinates":[[[-111.056888,44.866658],[-111.04431854542997,45.000880003307685],[-111.044275,45.001345],[-110.785008,45.002952],[-110.705272,44.992324],[-110.324441,44.999156],[-109.99505,45.003174],[-109.79848377243498,45.002920308285],[-109.574321,45.002631],[-109.103445,45.005904],[-109.062262,44.999623],[-108.62149349472998,44.99967637102149],[-108.500679,44.999691],[-108.24852773809597,45.00062981791279],[-107.997353,45.001565],[-107.91152278816197,45.00154400461138],[-107.351441,45.001407],[-106.888773,44.995885],[-106.26371509246498,44.99378843300149],[-106.263586,44.993788],[-106.02488002903198,44.99758412355609],[-105.848065,45.000396],[-105.07660095225397,45.000296613407386],[-105.03825218827397,45.00029167299179],[-105.025266,45.00029],[-104.057698,44.997431],[-104.05581,44.691343],[-104.05569519926098,44.57099037714218],[-104.055389,44.249983],[-104.05540637782698,44.180382874095685],[-104.05541619070499,44.14108120678338],[-104.055488,43.853477],[-104.05548799845099,43.85347599845599],[-104.055032,43.558603],[-104.05479428434798,43.503327530406],[-104.05468456842698,43.47781554171099],[-104.053876,43.289801],[-104.053127,43.000585],[-104.052586,42.630917],[-104.05266219156799,42.61176630054148],[-104.053107,42.499964],[-104.052793,42.249962],[-104.052729,42.016318],[-104.05276213709197,42.00171826586659],[-104.053026,41.885464],[-104.05282523523898,41.69795385306399],[-104.052735,41.613676],[-104.05263457163298,41.564275779573684],[-104.052287,41.393307],[-104.05228713412097,41.393214000193396],[-104.052453,41.278202],[-104.053142,41.114457],[-104.053249,41.001406],[-104.497058,41.001805],[-104.855273,40.998048],[-104.943371,40.99807410372979],[-105.276859994035,40.99817291762589],[-105.277138,40.998173],[-106.19055407870897,40.99774661257439],[-106.217573,40.997734],[-106.32116921591397,40.99821501106799],[-106.86037794866498,41.00071862923709],[-107.31779575978997,41.00284248123219],[-107.367443,41.003073],[-107.91841828984899,41.00122707064409],[-108.250649,41.000114],[-109.050076,41.000659],[-109.250735,41.001009],[-109.715409,40.998191],[-110.00071673644098,40.99742545970819],[-110.04848299568498,40.99729729285058],[-110.121639,40.997101],[-110.539819,40.996346],[-111.046723,40.997959],[-111.04663698312598,41.25162695625139],[-111.0466,41.360692],[-111.045789,41.565571],[-111.04581846484197,41.57984494822579],[-111.046689,42.001567],[-111.04708,42.34942],[-111.04553029271298,42.513912877775084],[-111.043564,42.722624],[-111.043959,42.96445],[-111.04405270511799,43.019407032899],[-111.044143,43.072364],[-111.044617,43.31572],[-111.04536056096998,43.50105145111219],[-111.04611,43.687848],[-111.046515,43.908376],[-111.04721938441998,43.983452760701795],[-111.048452,44.114831],[-111.049148,44.374925],[-111.048974,44.474072],[-111.055208,44.624927],[-111.05533272712397,44.66626230991749],[-111.055511,44.725343],[-111.056888,44.866658]]]}},
+{"type":"Feature","properties":{"name":"Alabama","income":{"1995":27357,"1996":29618,"1997":30790,"1998":33204,"1999":33840,"2000":34923,"2001":34761,"2002":35943,"2003":36131,"2004":37062,"2005":36936,"2006":38811,"2007":40596,"2008":42586,"2009":40547,"2010":40538,"2011":41427,"2012":41610,"2013":42882,"2014":42917,"2015":44833}},"geometry":{"type":"Polygon","coordinates":[[[-88.46866248405128,31.893855711615586],[-88.46866,31.933173],[-88.45338776310928,32.0530492054197],[-88.43114536346278,32.22763623468889],[-88.428278,32.250143],[-88.42131222139429,32.30867912301129],[-88.38924856412427,32.578122395958594],[-88.373338,32.711825],[-88.34749024783488,32.92903478688049],[-88.34008499213928,32.991264337874995],[-88.317135,33.184123],[-88.30444281351036,33.28832],[-88.27451647078367,33.53400147778519],[-88.254445,33.698779],[-88.24838747390947,33.74490759488169],[-88.207229,34.058333],[-88.20358349521936,34.08652773146809],[-88.17326173459489,34.32103953433429],[-88.15490218400868,34.46303430043999],[-88.13955944124736,34.581696745883896],[-88.134263,34.62266],[-88.097888,34.892202],[-88.154617,34.922392],[-88.200064,34.995634],[-88.202959,35.008028],[-88.000032,35.005939],[-87.98491604369889,35.005910124325794],[-87.851886,35.005656],[-87.625025,35.003732],[-87.60609786765326,35.00351952620429],[-87.22405364187567,34.99923074197209],[-87.216683,34.999148],[-87.21075857998228,34.99904918099969],[-86.8362863159495,34.992803004216995],[-86.783648,34.991925],[-86.78362801716898,34.991924921991995],[-86.467798,34.990692],[-86.31876076546509,34.991078580442796],[-86.311274,34.991098],[-85.86394611180688,34.98703085874809],[-85.605165,34.984678],[-85.595165,34.924171],[-85.58281233378527,34.86043547447759],[-85.561424,34.750079],[-85.53440525781537,34.62379033843579],[-85.52689481816098,34.58868569273349],[-85.51304422927326,34.52394647132369],[-85.502471,34.474526],[-85.47514728110428,34.34368465787619],[-85.46314082477578,34.28619098850549],[-85.429499,34.125095],[-85.42107317522878,34.080812652607186],[-85.398871244842,33.964129286779496],[-85.398871,33.964128],[-85.38667057377278,33.90170149400329],[-85.360532,33.767957],[-85.33811629990588,33.653114391601385],[-85.314048,33.529805],[-85.30494383322488,33.4827563368455],[-85.29434686434526,33.42799314636459],[-85.23659537125276,33.12954402825069],[-85.23244140518726,33.108077093933595],[-85.232441,33.108075],[-85.18611740178916,32.87013826997159],[-85.1844,32.861317],[-85.160963,32.826672],[-85.12453322275059,32.75162960675139],[-85.11425,32.730447],[-85.088533,32.657958],[-85.07607237260477,32.60806747515709],[-85.069848,32.583146],[-85.0071,32.523868],[-85.00113083912366,32.51015478839779],[-84.99978675631009,32.5070669687837],[-84.971831,32.442843],[-84.98115029413368,32.37904007668179],[-84.983466,32.363186],[-85.008096,32.336677],[-84.955704,32.30591],[-84.891841,32.263398],[-84.91994214792587,32.230848200933295],[-84.930127,32.219051],[-84.997765,32.185445],[-85.058749,32.136018],[-85.047063,32.087389],[-85.05141112791277,32.062256083621996],[-85.06359054298467,31.991857],[-85.067829,31.967358],[-85.114031,31.89336],[-85.141831,31.839261],[-85.12915931558317,31.780278268076593],[-85.12544057734247,31.76296870341829],[-85.11893,31.732664],[-85.12553,31.694965],[-85.058169,31.620227],[-85.05796,31.57084],[-85.041881,31.544684],[-85.05168142950619,31.51954032914169],[-85.071621,31.468384],[-85.066005,31.431363],[-85.092487,31.362881],[-85.087929,31.321648],[-85.08882996353047,31.30864775549659],[-85.089774,31.295026],[-85.108192,31.258591],[-85.107516,31.186451],[-85.035615,31.108192],[-85.02110756236277,31.075463872306393],[-85.011392,31.053546],[-85.002499,31.000682],[-85.031285,31.000647],[-85.145959,31.000693],[-85.333319,30.999555],[-85.48829828893909,30.99796462328729],[-85.49800158508948,30.99786504936139],[-85.57949757633826,30.99702874841089],[-85.749715,30.995282],[-85.893632,30.993455],[-86.03503810495057,30.993749607302295],[-86.18724804898129,30.994066723462193],[-86.364974,30.994437],[-86.38864466200037,30.994528215275192],[-86.563494,30.995202],[-86.68824096424608,30.99620189000149],[-86.78569197600586,30.99698299351679],[-86.831979,30.997354],[-86.927851,30.997678],[-87.162644,30.999026],[-87.16308069276556,30.99902418387759],[-87.312206,30.998404],[-87.425791,30.998058],[-87.519533,30.997552],[-87.59882894626209,30.99742217690529],[-87.598937,30.997422],[-87.592064,30.95146],[-87.634943,30.865857],[-87.542268,30.767481],[-87.523621,30.738285],[-87.442291,30.692661],[-87.400189,30.657201],[-87.401189,30.604383],[-87.43145,30.550252],[-87.444722,30.507484],[-87.414685,30.457289],[-87.366601,30.436643],[-87.431784,30.403193],[-87.452282,30.344097],[-87.518324,30.280435],[-87.656888,30.249709],[-87.818867,30.228314],[-87.893201,30.239237],[-87.806466,30.279798],[-87.796717,30.324198],[-87.865017,30.38345],[-87.914136,30.446144],[-87.933355,30.487357],[-87.901711,30.550879],[-87.914956,30.585893],[-87.93107,30.652694],[-88.008396,30.684956],[-88.061998,30.644891],[-88.064898,30.588292],[-88.081617,30.546317],[-88.103768,30.500903],[-88.105699,30.401865],[-88.136173,30.320729],[-88.195664,30.321242],[-88.257764,30.318933],[-88.311608,30.368908],[-88.364022,30.388006],[-88.395023,30.369425],[-88.403931,30.543359],[-88.41227,30.731771],[-88.41246743135916,30.735597459215292],[-88.42602096378707,30.99828135743029],[-88.432007,31.114298],[-88.44866,31.421277],[-88.44944606901707,31.435836861277593],[-88.459478,31.621652],[-88.46362530468488,31.697942371350187],[-88.468669,31.790722],[-88.46866248405128,31.893855711615586]]]}},
+{"type":"Feature","properties":{"name":"New Hampshire","income":{"1995":38017,"1996":40153,"1997":42023,"1998":45401,"1999":47284,"2000":49830,"2001":50898,"2002":51550,"2003":52409,"2004":53377,"2005":56557,"2006":59265,"2007":62048,"2008":63235,"2009":60734,"2010":60917,"2011":62436,"2012":63157,"2013":64064,"2014":66469,"2015":70003}},"geometry":{"type":"Polygon","coordinates":[[[-72.556112,42.866252],[-72.531469,42.89795],[-72.532186,42.954945],[-72.492597,42.967648],[-72.444977,43.004416],[-72.45195470906819,43.02049491063029],[-72.462248,43.044214],[-72.435191,43.086622],[-72.451802,43.153486],[-72.45039593921588,43.16121351690638],[-72.440563,43.215254],[-72.43361119795948,43.23290381226179],[-72.421583,43.263442],[-72.402532,43.32038],[-72.40690185803167,43.33744883873478],[-72.413377,43.362741],[-72.39692302503589,43.428922115998596],[-72.39689079629089,43.429051746335084],[-72.380894,43.493394],[-72.37944,43.574069],[-72.33359650135627,43.60559134158909],[-72.329522,43.608393],[-72.284805,43.72036],[-72.222069,43.759831],[-72.21150212234988,43.77301941044169],[-72.183333,43.808177],[-72.16978,43.873425],[-72.105875,43.94937],[-72.116706,43.991954],[-72.07994422400259,44.03000003018069],[-72.07969627284778,44.0302566433846],[-72.075486,44.034614],[-72.036883,44.103119],[-72.05382688361469,44.15981709380338],[-72.061338,44.184951],[-72.05399,44.246926],[-72.046302,44.291983],[-72.002314,44.324871],[-71.945163,44.337744],[-71.875863,44.33737],[-71.83779062638878,44.34776454247699],[-71.818838,44.352939],[-71.778613,44.399799],[-71.76319252131339,44.40356826277639],[-71.69092,44.421234],[-71.646551,44.468869],[-71.579974,44.501778],[-71.588076,44.54785],[-71.544922,44.579278],[-71.551722,44.627598],[-71.584574,44.665351],[-71.626909,44.747224],[-71.570402,44.805276],[-71.522393,44.880811],[-71.494403,44.911837],[-71.531605,44.976023],[-71.501088,45.013377],[-71.498399,45.069629],[-71.448678,45.109001],[-71.419058,45.170488],[-71.405636,45.198139],[-71.438546,45.239004],[-71.360664,45.269835],[-71.283684,45.301977],[-71.244499,45.268139],[-71.182587,45.241069],[-71.13943,45.242958],[-71.109349,45.282222],[-71.083924,45.305451],[-71.057861,45.000049],[-71.036705,44.736498],[-71.022992,44.500058],[-71.01946172948549,44.44036323978749],[-71.01357590381458,44.34083745255949],[-71.01127,44.301846],[-71.01027116786828,44.284888321572],[-71.008736,44.258825],[-71.001367,44.092931],[-70.989929,43.839239],[-70.98725804674599,43.79297359288418],[-70.981946,43.70096],[-70.972716,43.570255],[-70.96379267980639,43.54022095536649],[-70.954755,43.509802],[-70.96078889604699,43.47408873362158],[-70.968359,43.429283],[-70.984335,43.376128],[-70.923949,43.324768],[-70.872585,43.270152],[-70.813119,43.217252],[-70.82477671206809,43.1797631051822],[-70.824801,43.179685],[-70.8281,43.129086],[-70.819549285713,43.123230973431184],[-70.756397,43.079988],[-70.703818,43.059825],[-70.735477,43.012201],[-70.765222,42.975349],[-70.798636,42.924288],[-70.81143765483408,42.88861487845308],[-70.817296,42.87229],[-70.86475,42.870258],[-70.930799,42.884589],[-70.9665,42.868989],[-71.031201,42.859089],[-71.04871641369859,42.83106433808219],[-71.064201,42.806289],[-71.11637501217747,42.81190291443509],[-71.149703,42.815489],[-71.186104,42.790689],[-71.181803,42.73759],[-71.24538403292068,42.73655532857459],[-71.25511012181057,42.73639705328719],[-71.255605,42.736389],[-71.294205,42.69699],[-71.351874,42.698154],[-71.636214,42.704888],[-71.745817,42.707287],[-71.80538960273827,42.70891494352849],[-71.89876877193657,42.71146672080879],[-71.92903005905349,42.71229367253259],[-72.08136505018797,42.716456538541195],[-72.124526,42.717636],[-72.20361347980676,42.71981852867989],[-72.28303409251089,42.722010250623995],[-72.41203006475229,42.72557007336329],[-72.45119505182268,42.726650885493584],[-72.458519,42.726853],[-72.477615,42.761245],[-72.5396,42.804832],[-72.55390205084858,42.85803161016968],[-72.556112,42.866252]]]}},
+{"type":"Feature","properties":{"name":"New Jersey","income":{"1995":44345,"1996":46872,"1997":47903,"1998":49615,"1999":51426,"2000":52990,"2001":54506,"2002":54932,"2003":56356,"2004":57338,"2005":61694,"2006":64549,"2007":67142,"2008":70347,"2009":68444,"2010":67719,"2011":67574,"2012":69705,"2013":70224,"2014":71968,"2015":72337}},"geometry":{"type":"Polygon","coordinates":[[[-75.559446,39.629812],[-75.535144,39.647212],[-75.509742,39.686113],[-75.47764,39.715013],[-75.459439,39.765813],[-75.415062,39.801919],[-75.41049247763708,39.80467223432209],[-75.3903156232519,39.81682921783048],[-75.35164821406889,39.840127153513386],[-75.341765,39.846082],[-75.293376,39.848782],[-75.25880581804768,39.85467390078439],[-75.221025,39.861113],[-75.21119606147448,39.86651863168209],[-75.183023,39.882013],[-75.14143552174727,39.89391837248129],[-75.13342,39.896213],[-75.13572,39.947112],[-75.11922,39.965412],[-75.06012997072258,39.99201100326259],[-75.059017,39.992512],[-74.989914,40.037311],[-74.97285475644559,40.046505365536284],[-74.932211,40.068411],[-74.863809,40.08221],[-74.825907,40.12391],[-74.769488,40.129145],[-74.72337929715148,40.1528955462317],[-74.721604,40.15381],[-74.74849765725779,40.18490861410399],[-74.760605,40.198909],[-74.823907,40.241508],[-74.856508,40.277407],[-74.90331,40.315607],[-74.92811056909137,40.33982844768929],[-74.946006,40.357306],[-74.969597,40.39977],[-75.024775,40.403455],[-75.056102,40.416066],[-75.070568,40.455165],[-75.062227,40.481391],[-75.078503,40.548296],[-75.136748,40.575731],[-75.186737,40.569406],[-75.18819987812519,40.59261336664859],[-75.18923640135588,40.609056961122086],[-75.191059,40.637971],[-75.19184187174827,40.677242125441396],[-75.192612,40.715874],[-75.177477,40.764225],[-75.11135873167228,40.789982289214386],[-75.108505,40.791094],[-75.090962,40.849187],[-75.065438,40.885682],[-75.09772,40.926679],[-75.12325394420847,40.96530553438769],[-75.133086,40.980179],[-75.070532,41.01862],[-75.015271,41.061215],[-74.99238599518219,41.09302824699339],[-74.98304207424778,41.106017558856784],[-74.979873,41.110423],[-74.905256,41.155668],[-74.867405,41.22777],[-74.815703,41.296151],[-74.760325,41.340325],[-74.694914,41.357423],[-74.457584,41.248225],[-74.36703826144738,41.20421147244379],[-74.301994,41.172594],[-74.234473,41.142883],[-74.23436283123036,41.142835271534594],[-74.21161764319858,41.132981363536295],[-74.041054,41.059088],[-73.89398186003588,40.997198203538886],[-73.893979,40.997197],[-73.90728,40.951498],[-73.92047152937927,40.918606332041],[-73.92203089786648,40.914718213458784],[-73.93489258096068,40.88264898194209],[-73.938081,40.874699],[-73.94748456908319,40.85777345328739],[-73.96583451704629,40.82474525955859],[-73.968082,40.8207],[-73.97120801828238,40.81631562632088],[-73.98459249468017,40.79754332855229],[-74.013784,40.756601],[-74.02349153373218,40.73745316548729],[-74.02947453619967,40.72565186308668],[-74.03092708568377,40.72278675049359],[-74.04115624430348,40.70261002570879],[-74.046966591833,40.69114928026859],[-74.047313,40.690466],[-74.06772033031899,40.67038059424459],[-74.07094353771528,40.66720823277558],[-74.086806,40.651596],[-74.16014678315318,40.64607651644479],[-74.170611,40.645289],[-74.20012290199108,40.63186890194569],[-74.202247,40.630903],[-74.203688,40.592691],[-74.216839,40.558618],[-74.249211,40.545064],[-74.260611,40.502436],[-74.261889,40.464706],[-74.22465246601467,40.448662489486495],[-74.206188,40.440707],[-74.157094,40.447571],[-74.108295,40.443788],[-74.047884,40.418908],[-74.019334,40.471244],[-73.997943,40.476668],[-73.976982,40.408508],[-73.971381,40.34801],[-73.981681,40.279411],[-74.00102079443458,40.216966591977894],[-74.030181,40.122814],[-74.03496238226347,40.102584305948184],[-74.064135,39.979157],[-74.077247,39.910991],[-74.090945,39.799978],[-74.09961891432518,39.763784361495794],[-74.101443,39.756173],[-74.190974,39.625118],[-74.29101533615479,39.508369797497785],[-74.291585,39.507705],[-74.304343,39.471445],[-74.36699,39.402017],[-74.412692,39.360816],[-74.521797,39.313816],[-74.54078785558248,39.30002549118439],[-74.581008,39.270819],[-74.646595,39.212002],[-74.67143,39.179802],[-74.714341,39.119804],[-74.705876,39.102937],[-74.778777,39.023073],[-74.807917,38.985948],[-74.864458,38.94041],[-74.933571,38.928519],[-74.967274,38.933413],[-74.955363,39.001262],[-74.903664,39.087437],[-74.885914,39.143627],[-74.905181,39.174945],[-74.91515580556269,39.17669750351878],[-74.998002,39.191253],[-75.048487,39.215222],[-75.090794,39.210802],[-75.136667,39.181883],[-75.166667,39.222577],[-75.21251,39.262755],[-75.244357,39.2857],[-75.285333,39.292212],[-75.326754,39.332473],[-75.355558,39.347823],[-75.399304,39.37949],[-75.41710707748808,39.388910686713686],[-75.442393,39.402291],[-75.465212,39.43893],[-75.536431,39.460559],[-75.528088,39.498114],[-75.527676,39.535278],[-75.512732,39.578],[-75.543965,39.596],[-75.559446,39.629812]]]}},
+{"type":"Feature","properties":{"name":"North Dakota","income":{"1995":29321,"1996":30798,"1997":31764,"1998":32430,"1999":34206,"2000":35636,"2001":36177,"2002":36223,"2003":38223,"2004":39233,"2005":40818,"2006":41852,"2007":43936,"2008":45996,"2009":47898,"2010":48878,"2011":52135,"2012":54579,"2013":56800,"2014":60227,"2015":61674}},"geometry":{"type":"Polygon","coordinates":[[[-104.048736,48.999877],[-103.375467,48.998951],[-102.93877701942799,48.99935025028508],[-102.850455,48.999431],[-102.216993,48.998553],[-102.02114942465897,48.99875660541088],[-101.625438,48.999168],[-101.496737,48.99914483400529],[-101.125434,48.999078],[-100.431676,48.999398],[-100.182706982328,48.99923022464128],[-99.91378,48.999049],[-99.52570005907168,48.999271291155495],[-99.376068,48.999357],[-98.999803372711,48.999986295652384],[-98.869037,49.000205],[-97.95020501151556,49.00051511893839],[-97.77575,49.000574],[-97.229039,49.000687],[-97.227854,48.945864],[-97.187362,48.867598],[-97.152588,48.772602],[-97.121253,48.713593],[-97.100009,48.667926],[-97.142915,48.583733],[-97.14772356830088,48.54389168365058],[-97.14810346613356,48.54074404618669],[-97.149122,48.532305],[-97.139173,48.430528],[-97.137904,48.344585],[-97.129533,48.257815],[-97.14191038719827,48.19362761887449],[-97.14584495947489,48.17322348299049],[-97.146745,48.168556],[-97.105616,48.091362],[-97.068987,48.026267],[-97.037354,47.933279],[-96.996364,47.844398],[-96.928506,47.744884],[-96.89349330133977,47.672126959443695],[-96.882376,47.649025],[-96.854073,47.57201],[-96.85595934905318,47.49917322952899],[-96.85748,47.440457],[-96.84022,47.276981],[-96.83600959454186,47.237981875487094],[-96.82656912722827,47.150539],[-96.819078,47.081152],[-96.833504,47.01011],[-96.763973,46.912507],[-96.788803,46.777575],[-96.786845,46.692805],[-96.790523,46.63688],[-96.78978651304978,46.63574667271669],[-96.78578618259849,46.629590849260886],[-96.744436,46.56596],[-96.709095,46.435294],[-96.647296,46.358499],[-96.60104,46.319554],[-96.59567,46.21985],[-96.554507,46.083978],[-96.57269749419397,46.02189167135768],[-96.574264,46.016545],[-96.563672,45.935245],[-97.082093,45.935842],[-97.228291,45.93565659564609],[-97.542598,45.935258],[-97.77704,45.935393],[-97.97877780962337,45.93593399209868],[-98.00810179827778,45.936012629049294],[-98.070515,45.93618],[-98.414518,45.936504],[-98.625379,45.938228],[-98.72437441388807,45.93867473326149],[-99.005642,45.939944],[-99.00575435015247,45.93994430912839],[-99.092868,45.940184],[-99.34496,45.940299],[-99.490254,45.940362],[-99.61116,45.941098],[-99.71807104288217,45.94090700349639],[-99.718073,45.940907],[-99.88006209480658,45.94167091580218],[-99.880292,45.941672],[-100.152084,45.942486],[-100.294126,45.943269],[-100.49935421538399,45.94363199881429],[-100.511793,45.943654],[-100.511949026151,45.943654070434484],[-100.76211,45.943767],[-101.106826,45.943984],[-101.365283,45.944092],[-101.557276,45.9441],[-101.794606,45.944397],[-101.99861707823398,45.94453697735689],[-102.00067992101798,45.944538392727495],[-102.087555,45.944598],[-102.32823,45.944806],[-102.550947,45.945015],[-102.704871,45.945072],[-102.880252,45.945069],[-102.94206996119098,45.94509441135319],[-102.99566801913798,45.94511644377148],[-103.218396,45.945208],[-103.434851,45.945291],[-103.660779,45.945241],[-104.045443,45.94531],[-104.04546595892799,46.28018804821068],[-104.045469,46.324545],[-104.045045,46.509788],[-104.04512541332298,46.540929928548984],[-104.045385103689,46.641501059121794],[-104.045572,46.713881],[-104.045542,46.933887],[-104.044788,47.12743],[-104.04530830986899,47.330127858805994],[-104.045313,47.331955],[-104.04497671640497,47.397069201282385],[-104.043912,47.603229],[-104.042384,47.803256],[-104.043933,47.971515],[-104.04409321534798,47.99609835556468],[-104.04409327282099,47.99610717418708],[-104.045692,48.241415],[-104.04678216170598,48.38930073114548],[-104.047555,48.49414],[-104.04808756883199,48.63401237339858],[-104.0489,48.847387],[-104.048736,48.999877]]]}},
+{"type":"Feature","properties":{"name":"Pennsylvania","income":{"1995":34437,"1996":35109,"1997":37267,"1998":39116,"1999":38918,"2000":41419,"2001":42288,"2002":42043,"2003":42952,"2004":43714,"2005":44545,"2006":46256,"2007":48562,"2008":50702,"2009":49501,"2010":49245,"2011":50221,"2012":51225,"2013":52005,"2014":53224,"2015":55683}},"geometry":{"type":"Polygon","coordinates":[[[-80.519891,40.906661],[-80.51964377254728,40.987392654005795],[-80.51922208608089,41.12509356679578],[-80.51919669032499,41.133386502548895],[-80.518893,41.232556],[-80.51900013136428,41.33350214419358],[-80.51916516989557,41.48901219015458],[-80.51917675035338,41.499924051205994],[-80.519357,41.669767],[-80.51939672669049,41.84956299055929],[-80.519425,41.977523],[-80.329976,42.036168],[-80.154084,42.114757],[-80.136213,42.149937],[-80.088512,42.173184],[-80.02116492565449,42.163240309016],[-80.020323,42.163116],[-79.923924,42.207546],[-79.844661,42.235486],[-79.761951,42.26986],[-79.762122,42.131246],[-79.761313,41.998808],[-79.61083577498667,41.99851990410838],[-79.472472,41.998255],[-79.06126440315988,41.998838109911],[-78.983065,41.998949],[-78.91885736361519,41.99910319868938],[-78.59665,41.999877],[-78.30812896044657,41.99907113474139],[-78.271204,41.998968],[-78.20660303785819,41.99908830575759],[-78.031177,41.999415],[-77.83203,41.998524],[-77.74993092512727,41.99875544032899],[-77.61002011447597,41.99914985407959],[-77.007635,42.000848],[-76.96572875942668,42.00078339504688],[-76.92684636295428,42.00072345181729],[-76.558118,42.000155],[-76.55762414356937,42.000148716341684],[-76.47303088580799,41.999072381007],[-76.462155,41.998934],[-76.14551899478208,41.998866463308],[-76.10584,41.998858],[-75.870677,41.998828],[-75.55311253909508,41.999295228473486],[-75.48314927095889,41.999398164522695],[-75.477144,41.999407],[-75.35985992915047,41.993685888904594],[-75.341125,41.992772],[-75.291762,41.947092],[-75.263005,41.885109],[-75.190203,41.862454],[-75.14666489928587,41.85012593014629],[-75.113369,41.840698],[-75.074412,41.802191],[-75.053431,41.752538],[-75.049281,41.641862],[-75.04619860591167,41.60376401990269],[-75.043879,41.575094],[-74.982463,41.496467],[-74.890358,41.455324],[-74.799546,41.43129],[-74.75627183472518,41.42762742854339],[-74.734893,41.425818],[-74.694914,41.357423],[-74.760325,41.340325],[-74.815703,41.296151],[-74.867405,41.22777],[-74.905256,41.155668],[-74.979873,41.110423],[-74.98304207424778,41.106017558856784],[-74.99238599518219,41.09302824699339],[-75.015271,41.061215],[-75.070532,41.01862],[-75.133086,40.980179],[-75.12325394420847,40.96530553438769],[-75.09772,40.926679],[-75.065438,40.885682],[-75.090962,40.849187],[-75.108505,40.791094],[-75.11135873167228,40.789982289214386],[-75.177477,40.764225],[-75.192612,40.715874],[-75.19184187174827,40.677242125441396],[-75.191059,40.637971],[-75.18923640135588,40.609056961122086],[-75.18819987812519,40.59261336664859],[-75.186737,40.569406],[-75.136748,40.575731],[-75.078503,40.548296],[-75.062227,40.481391],[-75.070568,40.455165],[-75.056102,40.416066],[-75.024775,40.403455],[-74.969597,40.39977],[-74.946006,40.357306],[-74.92811056909137,40.33982844768929],[-74.90331,40.315607],[-74.856508,40.277407],[-74.823907,40.241508],[-74.760605,40.198909],[-74.74849765725779,40.18490861410399],[-74.721604,40.15381],[-74.72337929715148,40.1528955462317],[-74.769488,40.129145],[-74.825907,40.12391],[-74.863809,40.08221],[-74.932211,40.068411],[-74.97285475644559,40.046505365536284],[-74.989914,40.037311],[-75.059017,39.992512],[-75.06012997072258,39.99201100326259],[-75.11922,39.965412],[-75.13572,39.947112],[-75.13342,39.896213],[-75.14143552174727,39.89391837248129],[-75.183023,39.882013],[-75.21119606147448,39.86651863168209],[-75.221025,39.861113],[-75.25880581804768,39.85467390078439],[-75.293376,39.848782],[-75.341765,39.846082],[-75.35164821406889,39.840127153513386],[-75.3903156232519,39.81682921783048],[-75.41049247763708,39.80467223432209],[-75.415062,39.801919],[-75.481207,39.829191],[-75.570433,39.839185],[-75.59431690522008,39.834594973091285],[-75.662846,39.821425],[-75.717059,39.792325],[-75.753228,39.757989],[-75.773786,39.7222],[-75.788596,39.722199],[-75.81207998484679,39.72216980924989],[-76.13569742699018,39.721767550606685],[-76.23327934711658,39.72164625562789],[-76.233485,39.721646],[-76.23968374111459,39.72164198992459],[-76.41898,39.721526],[-76.56947511721158,39.72145855910529],[-76.715771,39.721393],[-76.78709719975758,39.72104814611128],[-76.991062,39.720062],[-76.99931802633319,39.72006767235259],[-77.21702375523738,39.72021724838539],[-77.23995,39.720233],[-77.45943341952388,39.72022917164499],[-77.46914500368037,39.720229002249994],[-77.469274,39.720229],[-77.768644,39.721538],[-78.075861,39.722448],[-78.09897069616667,39.72246619442808],[-78.342593,39.722658],[-78.34283351857438,39.72265829292649],[-78.38047706456398,39.72270413883999],[-78.723578,39.723122],[-78.80829952962156,39.72307095627689],[-78.93117513430978,39.72299692517329],[-79.045576,39.722928],[-79.39245840502238,39.72143935864009],[-79.476662,39.721078],[-79.763774,39.720776],[-79.91601735603777,39.72105593351879],[-80.04170201281049,39.72128703291879],[-80.075947,39.72135],[-80.421388,39.721189],[-80.519342,39.721403],[-80.51916079431449,39.96220005252189],[-80.51912,40.01641],[-80.51908437045658,40.15967199511809],[-80.519039,40.342101],[-80.51902969119408,40.39964105634069],[-80.51901711734737,40.47736314623709],[-80.518991,40.638801],[-80.51970511259918,40.851336778685386],[-80.51986970768618,40.900323934248895],[-80.51987684674039,40.90244867541969],[-80.519891,40.906661]]]}},
+{"type":"Feature","properties":{"name":"Vermont","income":{"1995":32350,"1996":33352,"1997":35210,"1998":37947,"1999":39571,"2000":40537,"2001":41342,"2002":41962,"2003":42649,"2004":44548,"2005":45695,"2006":47778,"2007":49698,"2008":52111,"2009":51219,"2010":49393,"2011":52033,"2012":52700,"2013":52511,"2014":54153,"2015":56883}},"geometry":{"type":"Polygon","coordinates":[[[-73.416319,44.099422],[-73.39986856936459,44.152485647691684],[-73.395399,44.166903],[-73.349889,44.230356],[-73.316618,44.257769],[-73.31745597466508,44.26352218987678],[-73.324229,44.310023],[-73.334637,44.356877],[-73.320954,44.382669],[-73.293613,44.440559],[-73.312871,44.507246],[-73.34798323242649,44.54616285359699],[-73.36268281274378,44.56245522168669],[-73.367275,44.567545],[-73.389966,44.61962],[-73.36556,44.700297],[-73.357671,44.751018],[-73.33443,44.802188],[-73.34201248394999,44.80807553866099],[-73.365678,44.826451],[-73.379822,44.857037],[-73.338979,44.917681],[-73.34474,44.970468],[-73.343124,45.01084],[-73.19231044906688,45.01286116295209],[-73.16992381668568,45.013161182623485],[-73.048386,45.01479],[-72.93644,45.014267],[-72.582371,45.011543],[-72.55427161622349,45.0094677206535],[-72.532503,45.00786],[-72.348583,45.005625],[-72.023292,45.006792],[-71.915009,45.007791],[-71.89771151185879,45.00807227383668],[-71.691898,45.011419],[-71.60984,45.012709],[-71.501088,45.013377],[-71.531605,44.976023],[-71.494403,44.911837],[-71.522393,44.880811],[-71.570402,44.805276],[-71.626909,44.747224],[-71.584574,44.665351],[-71.551722,44.627598],[-71.544922,44.579278],[-71.588076,44.54785],[-71.579974,44.501778],[-71.646551,44.468869],[-71.69092,44.421234],[-71.76319252131339,44.40356826277639],[-71.778613,44.399799],[-71.818838,44.352939],[-71.83779062638878,44.34776454247699],[-71.875863,44.33737],[-71.945163,44.337744],[-72.002314,44.324871],[-72.046302,44.291983],[-72.05399,44.246926],[-72.061338,44.184951],[-72.05382688361469,44.15981709380338],[-72.036883,44.103119],[-72.075486,44.034614],[-72.07969627284778,44.0302566433846],[-72.07994422400259,44.03000003018069],[-72.116706,43.991954],[-72.105875,43.94937],[-72.16978,43.873425],[-72.183333,43.808177],[-72.21150212234988,43.77301941044169],[-72.222069,43.759831],[-72.284805,43.72036],[-72.329522,43.608393],[-72.33359650135627,43.60559134158909],[-72.37944,43.574069],[-72.380894,43.493394],[-72.39689079629089,43.429051746335084],[-72.39692302503589,43.428922115998596],[-72.413377,43.362741],[-72.40690185803167,43.33744883873478],[-72.402532,43.32038],[-72.421583,43.263442],[-72.43361119795948,43.23290381226179],[-72.440563,43.215254],[-72.45039593921588,43.16121351690638],[-72.451802,43.153486],[-72.435191,43.086622],[-72.462248,43.044214],[-72.45195470906819,43.02049491063029],[-72.444977,43.004416],[-72.492597,42.967648],[-72.532186,42.954945],[-72.531469,42.89795],[-72.556112,42.866252],[-72.55390205084858,42.85803161016968],[-72.5396,42.804832],[-72.477615,42.761245],[-72.458519,42.726853],[-72.51671118278219,42.728467669829186],[-72.809113,42.736581],[-72.86429185484538,42.737713885159195],[-72.93026261251798,42.73906834045759],[-73.01864861335038,42.740883006399784],[-73.02301789329009,42.74097271272689],[-73.14249512051438,42.743425717196885],[-73.264957,42.74594],[-73.290944,42.80192],[-73.278673,42.83341],[-73.273832807021,42.94363174752649],[-73.27000873116357,43.030714292687485],[-73.26978,43.035923],[-73.25535583805758,43.314712398599994],[-73.252832,43.363493],[-73.242042,43.534925],[-73.292113,43.584509],[-73.327702,43.625913],[-73.395767,43.568087],[-73.424977,43.598775],[-73.414546,43.658209],[-73.393723,43.6992],[-73.36110715168428,43.75323345728389],[-73.350707,43.770463],[-73.38252614953988,43.80815898854949],[-73.390302,43.817371],[-73.374051,43.875563],[-73.407742,43.929887],[-73.411248,43.975596],[-73.405977,44.011485],[-73.43688,44.042578],[-73.416319,44.099422]]]}}
+ ]
+}
\ No newline at end of file
diff --git a/packages/map/src/demo/basic.tsx b/packages/map/src/demo/basic.tsx
index 0f6c999..5667d42 100644
--- a/packages/map/src/demo/basic.tsx
+++ b/packages/map/src/demo/basic.tsx
@@ -1,24 +1,191 @@
-import React, { useRef } from 'react';
-import { MapBox } from '@zhst/map';
+import React, { useRef, useEffect, useState } from 'react';
+import { MapBox, Marker } from '@zhst/map';
+import axios from 'axios';
+import { FloatButton, Switch } from '@zhst/meta';
+import { MarkerProps } from '../components/marker';
+import { getDistancesByStringLine, lineToPoly } from '../utils';
+// import { sluterData } from './.data/mock.ts'
const demo = () => {
+ const [markerData, setMarkerData] = useState([])
+ const [showMarker, setShowMarker] = useState(true)
+ const [showCluster, setShowCluster] = useState(true)
+ const [canDraw, setCanDraw] = useState(false)
+ const [toolsBarOpen, setToolsBarOpen] = useState(false)
+ const [popupInfo, setPopupInfo] = useState()
+ const [sluterData, setSluterData] = useState({})
+ const [showMouseTag, setShowMouseTag] = useState(false)
+ const [mousePosition, setMousePosition] = useState({ x: 0, y: 0 })
+ const [rangingList, setRangingList] = useState([])
const mapRef = useRef(null);
+
+ // 初始化
const handleMapLoad = (e: mapboxgl.MapboxEvent) => {
const map = e.target;
- if (!map) {
- return;
- }
+
+ if (!map) return
+
map.flyTo({
- center: [120,30],
- zoom: map?.getMaxZoom(),
+ // center: [120,30],
+ // zoom: map?.getMaxZoom(),
});
};
+
+ const getData = async () => {
+ let res = await axios({
+ method: 'post',
+ url: 'http://10.0.0.120:30003/singer.DeviceService/ListCamera',
+ headers: {
+ Authorization: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MTcwNDAzNzEsImp0aSI6IjExMjgiLCJpYXQiOjE3MTY3ODExNzEsInVzZXJJZCI6MSwidXNlcm5hbWUiOiJhZG1pbiIsImRhdGFSaWdodCI6MiwiY2FtZXJhUmlnaHQiOjEsImdwdVJpZ2h0IjoxLCJ1c2VybGVhZGVySWQiOjAsIm9yZ2FuaXphdGlvbklkIjoxLCJyb2xlSWQiOjF9.XHbXIkXkfUuvqV6_qSV4d20xj-s7I0qOQZgL-zspMDc'
+ },
+ data: {"labelData":[],"filter":{"realtimeProcessingFilter":0,"cameraFilter":[{"opt":"ORNOT","cameraOpt":"CAMERAOPT_TYPE","value":"100"}]},"maxResults":50}
+ });
+ if (res.status === 200) {
+ let markers = []
+ let sluters = {
+ features: []
+ }
+ res.data.cameras?.forEach(camera => {
+ markers.push({
+ key: camera.id,
+ id: camera.id,
+ title: camera.name,
+ population: camera.id,
+ checked: false,
+ disabled: false,
+ showCheckBox: true,
+ status: ['blue', 'yellow', 'red'][Math.floor(Math.random() * 3)],
+ latitude: camera.latitude,
+ longitude: camera.longitude
+ })
+ sluters.features.push({
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ camera.longitude,
+ camera.latitude,
+ 50
+ ]
+ }
+ })
+ })
+ setMarkerData(markers)
+ setSluterData(sluters)
+ }
+ }
+
+ useEffect(() => {
+ getData()
+ }, [])
+
return (
-
-
-
+
+
+
+
+
{
+ setCanDraw(pre => !pre)
+ setToolsBarOpen(pre => !pre)
+ }}
+ onDrawCreate={e => {
+ const geojson = e.features[0]
+ const polygonJson = getDistancesByStringLine(geojson) || []
+ setRangingList(polygonJson.distanceArr)
+ }}
+ onDrawDelete={e => console.log('Delete', e)}
+ onDrawUpdate={e => {
+ const geojson = e.features[0]
+ const polygonJson = getDistancesByStringLine(geojson) || []
+ setRangingList(polygonJson.distanceArr)
+ }}
+ width='100%'
+ height='100vh'
+ mapStyle={{
+ sources: {
+ 'osm-tiles': {
+ 'type': 'raster',
+ tiles: [`http://10.0.0.120:30003/map/api/tilesets/mapfile/{z}/{x}/{y}.png`], //在线地址,先写死120
+ }
+ },
+ }}
+ markerData={markerData || []}
+ showMarker={showMarker}
+ showPopUp
+ sluterData={sluterData}
+ showCluster={showCluster}
+ // popUpInfo={popupInfo}
+ onPopUpClose={e => setPopupInfo(null)}
+ onMarkerClick={(e, status, data) => {
+ setMarkerData(pre => pre.map(item => {
+ if (item.id === data.id) {
+ item.checked = !data?.checked
+ }
+ return item
+ }))
+ // setPopupInfo({
+ // longitude: data?.longitude,
+ // latitude: data?.latitude,
+ // content: '测试'
+ // })
+ }}
+ onZoomEnd={map => {
+ let zoom = map.target.getZoom() // 画面层级,用来判断标签是否显示隐藏
+ // 摄像头显示/隐藏
+ setShowMarker(zoom > 5)
+ // 范围统计显示/隐藏
+ setShowCluster(zoom < 5)
+ }}
+ onClick={e => setShowMouseTag(true)}
+ onDblClick={e => {
+ setShowMouseTag(false)
+ // setCanDraw(false)
+ }}
+ onMouseMove={e => {
+ setMousePosition({ x: e.point.x, y: e.point.y })
+ }}
+ // customMarkerRender={(_data) => 自定义标记
}
+ >
+ {canDraw && (
+ {showMouseTag ? '双击完成绘制' : '单击以确定起点'}
+ )}
+ {rangingList?.map((item, index) => {
+ return (
+ e.originalEvent.stopPropagation()}
+ >
+ {(item.totalLength)}km
+
+ )
+ })}
+ {
+ e.originalEvent.stopPropagation();
+ }}
+ >
+ 我是自定义的DOM!
+
+
+
);
};
diff --git a/packages/map/src/hooks/useDraw.ts b/packages/map/src/hooks/useDraw.ts
new file mode 100644
index 0000000..e69de29
diff --git a/packages/map/src/index.less b/packages/map/src/index.less
index ac327e9..3369b02 100644
--- a/packages/map/src/index.less
+++ b/packages/map/src/index.less
@@ -1,3 +1,9 @@
-.mapboxgl-ctrl-attrib-button {
- display: none;
+.zhst-map {
+ position: relative;
+ width: auto;
+ height: auto;
+
+ .mapboxgl-ctrl-logo {
+ display: none;
+ }
}
diff --git a/packages/map/src/index.md b/packages/map/src/index.md
index 5cd4835..5cd7e30 100644
--- a/packages/map/src/index.md
+++ b/packages/map/src/index.md
@@ -8,6 +8,7 @@ title: 快速上手
基本用法
+
## API
| 参数 | 说明 | 类型 | 默认值 | 版本 |
@@ -18,3 +19,13 @@ title: 快速上手
| children | 内部元素 | JSX.Element或JSX.Element[]或Array | {} | - |
| mapConfig | 地图配置 | MapConfigProps | defaultMapConfig | - |
| onLoad | 地图加载事件 | function | ()=>{} | - |
+
+## 参考文档
+
+[官方文档](https://docs.mapbox.com/mapbox-gl-js/example)
+[react-map-gl](https://visgl.github.io/react-map-gl/examples)
+[mapbox-gl-draw](https://github.com/mapbox/mapbox-gl-draw)
+[draw 绘制模式插件](https://github.com/mapbox/mapbox-gl-draw/blob/main/docs/MODES.md#available-custom-modes)
+[mapboxJS](https://www.naivemap.com/mapbox-gl-js-cookbook/starter/handlers/control.html)
+[mapboxAPI详解](https://juejin.cn/post/6907068992607928328)
+[mapbox Expressions语法学习](https://docs.mapbox.com/help/tutorials/mapbox-gl-js-expressions/)
diff --git a/packages/map/src/index.ts b/packages/map/src/index.ts
index 6581359..8b8ec4d 100644
--- a/packages/map/src/index.ts
+++ b/packages/map/src/index.ts
@@ -1 +1,2 @@
export { default as MapBox } from './MapBox';
+export * from 'react-map-gl'
diff --git a/packages/map/src/interface.ts b/packages/map/src/interface.ts
index 4001f43..e69de29 100644
--- a/packages/map/src/interface.ts
+++ b/packages/map/src/interface.ts
@@ -1,19 +0,0 @@
-import { CSSProperties } from "react";
-import { MapRef, MapStyle } from "react-map-gl";
-
-export interface MapProps {
- onLoad?: (e: mapboxgl.MapboxEvent) => void;
- mapRef?: React.MutableRefObject;
- style?: CSSProperties;
- children?: JSX.Element | JSX.Element[] | Array;
- mapConfig?: MapConfigProps
- mapCenter: {longitude: number, latitude: number}
-}
-
-export interface MapConfigProps {
- mapboxAccessToken?: string; //token
- minZoom?: number; //最小层级
- maxZoom?: number; //最大层级
- dragRotate?: boolean; //是否支持拖拽旋转
- mapStyle?: MapStyle; //地图样式
-}
\ No newline at end of file
diff --git a/packages/map/src/utils.ts b/packages/map/src/utils.ts
deleted file mode 100644
index f095cdc..0000000
--- a/packages/map/src/utils.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-const getRawType = (val: any) => {
- return Object.prototype.toString.call(val).slice(8, -1)
-}
-
-const isPlainObjectOrArray = (val: any) => {
- return isPlainObject(val) || Array.isArray(val)
-}
-
-const isPlainObject = (val: any) => {
- return getRawType(val) === 'Object'
-}
-
-export const merge = (object: any, ...sources: any) => {
- for(const source of sources) {
- for(const key in source) {
- if(source[key] === undefined && key in object) {
- continue
- }
- if(isPlainObjectOrArray(source[key])) {
- if(getRawType(object[key] === getRawType(source[key]))) {
- if(isPlainObject(object[key])) {
- merge(object[key], source[key])
- } else {
- object[key] = object[key].concat(source[key])
- }
- } else {
- object[key] = source[key]
- }
- } else {
- object[key] = source[key]
- }
- }
- }
- return object;
-}
\ No newline at end of file
diff --git a/packages/map/src/constants.ts b/packages/map/src/utils/constants.ts
similarity index 72%
rename from packages/map/src/constants.ts
rename to packages/map/src/utils/constants.ts
index e06b0dc..58dbfe5 100644
--- a/packages/map/src/constants.ts
+++ b/packages/map/src/utils/constants.ts
@@ -1,18 +1,22 @@
+import { MapProps } from 'react-map-gl'
+
export const mapboxAccessToken =
'pk.eyJ1IjoiZGluZ2xpMTIzIiwiYSI6ImNra204ODhjczBobTgyeHJ6MmJpZHMxNWgifQ.NbKrXh_hb2gvjr5CEMDnyQ';
-export const MAP_CENTER = {
- longitude: 120.2667694313269,
- latitude: 30.180942826533766,
-}; //地图中心
-const MapUrl = 'http://10.0.0.120:30003/map';
-export const defaultMapConfig = {
+
+const mapSourceUrl = 'http://10.0.0.120:30003/map';
+
+export const defaultMapConfig: MapProps = {
mapboxAccessToken,
maxZoom: 18,
minZoom: 4,
+ initialViewState: {
+ longitude: 120.2667694313269,
+ latitude: 30.180942826533766,
+ },
dragRotate: false,
mapStyle: {
version: 8,
- name: 'Mapbox Streets',
+ name: 'zhst mapbox',
// sprite: `${location.origin}/mapbox/sprite`, // 地图图标
glyphs: 'mapbox://fonts/mapbox/{fontstack}/{range}.pbf', // 字体
sources: {
@@ -22,7 +26,7 @@ export const defaultMapConfig = {
// Z-瓦片层级,一般支持0-18级,越大代表越清晰;
// X-瓦片列号,从西向东(0->360),依次0,1,2,……;
// Y-瓦片行号,从北向南(有些也可能是从南向北),依次0,1,2,……;
- tiles: [`${MapUrl}/api/tilesets/mapfile/{z}/{x}/{y}.png`], //在线地址,先写死120
+ tiles: [`${mapSourceUrl}/api/tilesets/mapfile/{z}/{x}/{y}.png`], //在线地址,先写死120
tileSize: 256, //切片的最小展示尺寸(可选,单位:像素,默认值为 512,即 1024/2
},
},
@@ -33,10 +37,11 @@ export const defaultMapConfig = {
type: 'raster', //类型 栅格。circle,symbol,line...
source: 'osm-tiles',
// 'source-layer': 'osmtiles',//数据源必须是type:vector
- minZoom: 4, //最小层级
- maxZoom: 17, //最大层级
+ minzoom: 4, //最小层级
+ maxzoom: 17, //最大层级
+ // @ts-ignore
renderingMode: '2d',
},
],
},
-};
\ No newline at end of file
+};
diff --git a/packages/map/src/utils/drawStyle.ts b/packages/map/src/utils/drawStyle.ts
new file mode 100644
index 0000000..41544ff
--- /dev/null
+++ b/packages/map/src/utils/drawStyle.ts
@@ -0,0 +1,144 @@
+//自定义画框样式
+const mapboxDrawStyle = [
+ // ACTIVE (being drawn)
+ // line stroke
+
+ {
+ id: 'gl-draw-line',
+ type: 'line',
+ filter: [
+ 'all',
+ ['==', '$type', 'LineString'],
+ ['!=', 'mode', 'static'],
+ ['==', 'active', 'true'],
+ ],
+ layout: {
+ 'line-cap': 'round',
+ 'line-join': 'round',
+ },
+ paint: {
+ 'line-color': 'rgba(246,67,72,1)',
+ 'line-dasharray': [0.2, 2],
+ 'line-width': 2,
+ },
+ },
+ {
+ id: 'gl-draw-line-not-active',
+ type: 'line',
+ filter: ['all', ['==', '$type', 'LineString'], ['!=', 'active', 'true']],
+ layout: {
+ 'line-cap': 'round',
+ 'line-join': 'round',
+ },
+ paint: {
+ 'line-color': 'rgba(246,67,72,1)',
+ 'line-width': 2,
+ },
+ },
+
+ // polygon fill
+ {
+ id: 'gl-draw-polygon-fill',
+ type: 'fill',
+ filter: ['all', ['==', '$type', 'Polygon'], ['!=', 'mode', 'static']],
+ paint: {
+ 'fill-color': 'rgba(246,67,72,0.2)',
+ 'fill-outline-color': 'rgba(246,67,72,0.2)',
+ },
+ },
+ // polygon outline stroke
+ // This doesn't style the first edge of the polygon, which uses the line stroke styling instead
+ {
+ id: 'gl-draw-polygon-stroke-active',
+ type: 'line',
+ filter: [
+ 'all',
+ ['==', '$type', 'Polygon'],
+ ['!=', 'mode', 'static'],
+ ['==', 'active', 'false'],
+ ],
+ layout: {
+ 'line-cap': 'round',
+ 'line-join': 'round',
+ },
+ paint: {
+ 'line-color': 'rgba(246,67,72,1)',
+ 'line-width': 2,
+ },
+ },
+ {
+ id: 'gl-draw-polygon-stroke-active-select',
+ type: 'line',
+ filter: ['all', ['==', '$type', 'Polygon'], ['!=', 'mode', 'static'], ['==', 'active', 'true']],
+ layout: {
+ 'line-cap': 'round',
+ 'line-join': 'round',
+ },
+ paint: {
+ 'line-color': 'rgba(246,67,72,1)',
+ 'line-dasharray': [0.2, 2],
+ 'line-width': 2,
+ },
+ },
+ // vertex point halos
+ {
+ id: 'gl-draw-polygon-and-line-vertex-halo-active',
+ type: 'circle',
+ filter: ['all', ['==', 'meta', 'vertex'], ['==', '$type', 'Point'], ['!=', 'mode', 'static']],
+ paint: {
+ 'circle-radius': 5,
+ 'circle-color': '#FFF',
+ },
+ },
+ // vertex points
+ {
+ id: 'gl-draw-polygon-and-line-vertex-active',
+ type: 'circle',
+ filter: ['all', ['==', 'meta', 'vertex'], ['==', '$type', 'Point'], ['!=', 'mode', 'static']],
+ paint: {
+ 'circle-radius': 3,
+ 'circle-color': 'rgba(246,67,72,1)',
+ },
+ },
+
+ // INACTIVE (static, already drawn)
+ // line stroke
+ {
+ id: 'gl-draw-line-static',
+ type: 'line',
+ filter: ['all', ['==', '$type', 'LineString'], ['==', 'mode', 'static']],
+ layout: {
+ 'line-cap': 'round',
+ 'line-join': 'round',
+ },
+ paint: {
+ 'line-color': '#E13F3F',
+ 'line-width': 3,
+ },
+ },
+ // polygon fill
+ {
+ id: 'gl-draw-polygon-fill-static',
+ type: 'fill',
+ filter: ['all', ['==', '$type', 'Polygon'], ['==', 'mode', 'static']],
+ paint: {
+ 'fill-color': 'rgba(225, 63, 63, 0.2)',
+ 'fill-outline-color': 'rgba(225, 63, 63, 0.2)',
+ },
+ },
+ // polygon outline
+ {
+ id: 'gl-draw-polygon-stroke-static',
+ type: 'line',
+ filter: ['all', ['==', '$type', 'Polygon'], ['==', 'mode', 'static']],
+ layout: {
+ 'line-cap': 'round',
+ 'line-join': 'round',
+ },
+ paint: {
+ 'line-color': '#E13F3F',
+ 'line-width': 3,
+ },
+ },
+];
+export default mapboxDrawStyle;
diff --git a/packages/map/src/utils/formater.ts b/packages/map/src/utils/formater.ts
new file mode 100644
index 0000000..e69de29
diff --git a/packages/map/src/utils/index.ts b/packages/map/src/utils/index.ts
new file mode 100644
index 0000000..f7222c7
--- /dev/null
+++ b/packages/map/src/utils/index.ts
@@ -0,0 +1,286 @@
+// @ts-ignore
+import * as turf from '@turf/turf';
+
+// 判断参数类型
+const getRawType = (val: any) => {
+ return Object.prototype.toString.call(val).slice(8, -1)
+}
+
+/**
+ * 判断是否为对象或者数组
+ * @param val
+ * @returns
+ */
+const isPlainObjectOrArray = (val: any) => {
+ return isPlainObject(val) || Array.isArray(val)
+}
+
+// 判断参数是否为对象
+const isPlainObject = (val: any) => {
+ return getRawType(val) === 'Object'
+}
+
+export const merge = (object: any, ...sources: any) => {
+ for(const source of sources) {
+ for(const key in source) {
+ if(source[key] === undefined && key in object) {
+ continue
+ }
+ if(isPlainObjectOrArray(source[key])) {
+ if(getRawType(object[key] === getRawType(source[key]))) {
+ if(isPlainObject(object[key])) {
+ merge(object[key], source[key])
+ } else {
+ object[key] = object[key].concat(source[key])
+ }
+ } else {
+ object[key] = source[key]
+ }
+ } else {
+ object[key] = source[key]
+ }
+ }
+ }
+ return object;
+}
+
+// 获取 2 个点的距离
+export const getDistance = (point1: { x: any; y: any }, point2: { x: any; y: any }) => {
+ const { x: x1, y: y1 } = point1;
+ const { x: x2, y: y2 } = point2;
+ return Math.abs(Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2)));
+};
+
+//获取两点(格式例如:[120,30])间物理像素距离
+export function getPixelDistance(map: { transform: { locationPoint: (arg0: any) => any } }, pointA: any, pointB: any) {
+ const pointAPixel = map.transform.locationPoint(pointA); // A点的像素坐标位置
+ const pointBPixel = map.transform.locationPoint(pointB); // B点的像素坐标位置
+ // A、B两点的像素坐标距离
+ return getDistance(pointAPixel, pointBPixel);
+}
+
+//判断是否是0值 给一个偏移量
+export const isZero = (floatValue: number) => {
+ return floatValue > -0.00001 && floatValue < 0.00001;
+};
+
+//判断2个向量是否平行
+export const isParallel = (vectorA: { x: any; y: any }, vectorB: { x: any; y: any }) => {
+ const { x: x1, y: y1 } = vectorA;
+ const { x: x2, y: y2 } = vectorB;
+ return isZero(x1 * y2 - y1 * x2);
+};
+
+//判断一个点是否在线段上 判断向量叉乘是否为0 且x坐标在线段2端点间
+export const isPointOnLine = (vectorA: { x: number; y: number }, path: any[]) => {
+ const [vectorB, vectorC] = path;
+
+ //与端点重合
+ if (
+ (vectorA.x === vectorB.x && vectorA.y === vectorB.y) ||
+ (vectorA.x === vectorC.x && vectorA.y === vectorC.y)
+ ) {
+ return true;
+ }
+
+ //在同一竖直方向,线段竖直,点在该线段所在的直线上
+ if (isZero(vectorB.x - vectorC.x) && isZero(vectorB.x - vectorA.x)) {
+ //已判定点在直线上,若点在两端点中间,即点在线段上
+ if (
+ (vectorA.y < vectorC.y && vectorA.y > vectorB.y) ||
+ (vectorA.y < vectorB.y && vectorA.y > vectorC.y)
+ ) {
+ return true;
+ }
+ return false;
+ }
+
+ //在同一水平方向
+ if (isZero(vectorB.y - vectorC.y) && isZero(vectorB.y - vectorA.y)) {
+ if (
+ (vectorA.x < vectorC.x && vectorA.x > vectorB.x) ||
+ (vectorA.x < vectorB.x && vectorA.x > vectorC.x)
+ ) {
+ return true;
+ }
+ return false;
+ }
+
+ // 线段倾斜,此时线段所在直线存在斜率
+ // 点在直线上,AB与AC斜率相等,且有共同点A,此时AC与AB重合,即点A在直线BC上
+ if (
+ isZero(
+ (vectorB.y - vectorA.y) / (vectorB.x - vectorA.x) -
+ (vectorA.y - vectorC.y) / (vectorA.x - vectorC.x)
+ )
+ ) {
+ if (
+ (vectorB.y - vectorA.y) * (vectorA.y - vectorC.y) > 0 &&
+ (vectorB.x - vectorA.x) * (vectorA.x - vectorC.x) > 0
+ ) {
+ return true;
+ }
+ return false;
+ }
+};
+
+//获取线段重合部分,如果重合返回合并后的线段 如果不重合 返回传入的线段
+//see https://blog.csdn.net/qq_39108767/article/details/81673921
+//see https://www.cnblogs.com/tuyang1129/p/9390376.html
+export const getLineCoincide = (path1: [any, any], path2: [any, any]) => {
+ let paths: string | any[] = [];
+ const [vectorA, vectorB] = path1;
+ const [vectorC, vectorD] = path2;
+
+ const isOnLineA = isPointOnLine(vectorA, [vectorC, vectorD]);
+ const isOnLineB = isPointOnLine(vectorB, [vectorC, vectorD]);
+ const isOnLineC = isPointOnLine(vectorC, [vectorA, vectorB]);
+ const isOnLineD = isPointOnLine(vectorD, [vectorA, vectorB]);
+
+ const isCollinear = isParallel(
+ { x: vectorA.x - vectorB.x, y: vectorA.y - vectorB.y },
+ { x: vectorC.x - vectorD.x, y: vectorC.y - vectorD.y }
+ );
+ //下面6中情况代表合并
+ if (isOnLineA && isOnLineC && isCollinear) {
+ paths = [[vectorB, vectorD]];
+ }
+ if (isOnLineA && isOnLineD && isCollinear) {
+ paths = [[vectorB, vectorC]];
+ }
+ if (isOnLineB && isOnLineC && isCollinear) {
+ paths = [[vectorA, vectorD]];
+ }
+ if (isOnLineB && isOnLineD && isCollinear) {
+ paths = [[vectorA, vectorC]];
+ }
+ if (isOnLineA && isOnLineB && isCollinear) {
+ paths = [[vectorC, vectorD]];
+ }
+ if (isOnLineC && isOnLineD && isCollinear) {
+ paths = [[vectorA, vectorB]];
+ }
+ //未匹配到上述情况,则没有重合 原样返回
+ if (paths.length === 0) {
+ paths = [path1, path2];
+ }
+ return paths;
+};
+
+// 计算与纬线的角度,正方向向上
+const calcAng = (point: number[], p: number[]) => (Math.atan2(point[1] - p[1], point[0] - p[0]) * 180) / Math.PI + 180;
+
+// 多段折线转polygon,直线左右默认范围50米
+export const lineToPoly = (geojson: { geometry: { coordinates: string | any[] } }, r = 50) => {
+ const linesPolygon = [];
+ const circlePolygon = [];
+ for (let i = 0; i < geojson.geometry.coordinates.length - 1; i++) {
+ const [pointA, pointB] = [geojson.geometry.coordinates[i], geojson.geometry.coordinates[i + 1]];
+ const line = turf.lineString([pointA, pointB]);
+ const ang = calcAng(pointA, pointB);
+ // 与经线的夹角为偏移方向,右正左负, 右偏移-左偏移 = 180
+ const translatedPolyA = turf.transformTranslate(line, r / 1000, -ang);
+ const translatedPolyB = turf.transformTranslate(line, r / 1000, -ang + 180);
+ const _line = turf.lineString([
+ // 逆时针闭合
+ ...translatedPolyA.geometry.coordinates.reverse(),
+ ...translatedPolyB.geometry.coordinates,
+ ]);
+ const linePolygon = turf.lineToPolygon(_line);
+ linesPolygon.push(linePolygon);
+ circlePolygon.push(turf.circle(pointA, r / 1000));
+ if (i == geojson.geometry.coordinates.length - 2) {
+ circlePolygon.push(turf.circle(pointB, r / 1000));
+ }
+ }
+ let _union;
+ try {
+ //todo: 新版本union和老版本行为不一致 先用老版本 后续观察原因
+ _union = turf.union(...circlePolygon, ...linesPolygon);
+ // _union = union(...circlePolygon, ...linesPolygon);
+ } catch (e) {
+ console.error(e);
+ }
+ return _union;
+};
+
+/**
+ * 获取在图形中的点
+ * @param _points 点坐标集
+ * @param polygon 图形
+ * @returns 在图形中的坐标集
+ */
+export const getPointByShape = (_points: [number, number][], polygon: [number, number][]) => {
+ let points = turf.points(_points);
+ // TODO:首未坐标要一致
+ let searchWithin = turf.polygon([polygon]);
+
+ return turf.pointsWithinPolygon(points, searchWithin);
+}
+
+/**
+ * 通过绘制的线段获取距离
+ * @param geojson 点坐标集
+ * @param config 额外的 turf.distance 配置(可选)
+ * @returns distanceArr,totalLength
+ */
+export const getDistancesByStringLine = (
+ geojson: { geometry: { coordinates: [number, number][], [key: string]: any }, type: 'line' },
+ config?: any
+) => {
+ let distanceArr: {
+ distance: number,
+ from: [number, number],
+ to: [number, number],
+ totalLength: number | string
+ }[] = []
+ let totalLength = 0
+ for (let i = 0; i < geojson.geometry.coordinates.length - 1; i++) {
+ const [pointA, pointB] = [geojson.geometry.coordinates[i], geojson.geometry.coordinates[i + 1]];
+
+ const tempDistance = turf.distance(pointA, pointB, config);
+ totalLength += tempDistance
+ distanceArr.push({
+ distance: tempDistance.toFixed(2),
+ totalLength: totalLength.toFixed(2),
+ from: pointA,
+ to: pointB
+ })
+ }
+ return {
+ distanceArr,
+ totalLength: totalLength.toFixed(2)
+ }
+}
+
+/**
+ * @description 创建 node,绑定 node 到对应父级,
+ * @param {string} className 类名
+ * @param {node} container 父级 node
+ * @param {string} code data-code 属性值
+ * @param {func} fn click 事件
+ * @returns {node}
+ */
+export function createNode(
+ node: keyof HTMLElementTagNameMap,
+ className: string,
+ textContent: string,
+ container: HTMLElement,
+ code?: string,
+ fn?: EventListener
+): HTMLElement {
+ let a = document.createElement(node)
+ a.className = className
+ a.textContent = textContent
+
+ if (code) a.setAttribute('data-code', code)
+
+ if (fn) a.addEventListener('click', fn)
+ container.appendChild(a)
+ return a
+}
+
+export function removeNode(node: { remove: () => void; removeEventListener: (arg0: string, arg1: any) => void; }, fn: any) {
+ node.remove()
+ if (fn) node.removeEventListener('click', fn)
+}
diff --git a/packages/meta/CHANGELOG.md b/packages/meta/CHANGELOG.md
index c0e8a4e..bc5ae6a 100644
--- a/packages/meta/CHANGELOG.md
+++ b/packages/meta/CHANGELOG.md
@@ -1,5 +1,16 @@
# @zhst/utils
+## 0.22.0
+
+### Minor Changes
+
+- zhst/map:拓展地图 api,加入 tools 组件、cluster 组价、marker 组件、draw 组件、popup 组件;zhst/mata:添加 floatButton 组件
+
+### Patch Changes
+
+- Updated dependencies
+ - @zhst/meta@0.22.0
+
## 0.21.2
### Patch Changes
diff --git a/packages/meta/package.json b/packages/meta/package.json
index 4c0959e..08c95c0 100644
--- a/packages/meta/package.json
+++ b/packages/meta/package.json
@@ -1,6 +1,6 @@
{
"name": "@zhst/meta",
- "version": "0.21.2",
+ "version": "0.22.0",
"description": "原子组件",
"keywords": [
"meta",
diff --git a/packages/meta/src/float-button/BackTop.tsx b/packages/meta/src/float-button/BackTop.tsx
new file mode 100644
index 0000000..14cdba4
--- /dev/null
+++ b/packages/meta/src/float-button/BackTop.tsx
@@ -0,0 +1,107 @@
+import React, { useContext, useEffect, useState } from 'react';
+import VerticalAlignTopOutlined from '@ant-design/icons/VerticalAlignTopOutlined';
+import classNames from 'classnames';
+import CSSMotion from 'rc-motion';
+import { composeRef } from 'rc-util/lib/ref';
+
+import getScroll from '../_util/getScroll';
+import scrollTo from '../_util/scrollTo';
+import throttleByAnimationFrame from '../_util/throttleByAnimationFrame';
+import type { ConfigConsumerProps } from '../config-provider';
+import { ConfigContext } from '../config-provider';
+import FloatButtonGroupContext from './context';
+import FloatButton, { floatButtonPrefixCls } from './FloatButton';
+import type {
+ BackTopProps,
+ FloatButtonElement,
+ FloatButtonProps,
+ FloatButtonRef,
+ FloatButtonShape,
+} from './interface';
+
+const BackTop = React.forwardRef((props, ref) => {
+ const {
+ prefixCls: customizePrefixCls,
+ className,
+ type = 'default',
+ shape = 'circle',
+ visibilityHeight = 400,
+ icon = ,
+ target,
+ onClick,
+ duration = 450,
+ ...restProps
+ } = props;
+
+ const [visible, setVisible] = useState(visibilityHeight === 0);
+
+ const internalRef = React.useRef(null);
+
+ React.useImperativeHandle(ref, () => ({
+ nativeElement: internalRef.current,
+ }));
+
+ const getDefaultTarget = (): HTMLElement | Document | Window =>
+ internalRef.current && internalRef.current.ownerDocument
+ ? internalRef.current.ownerDocument
+ : window;
+
+ const handleScroll = throttleByAnimationFrame(
+ (e: React.UIEvent | { target: any }) => {
+ const scrollTop = getScroll(e.target, true);
+ setVisible(scrollTop >= visibilityHeight);
+ },
+ );
+
+ useEffect(() => {
+ const getTarget = target || getDefaultTarget;
+ const container = getTarget();
+ handleScroll({ target: container });
+ container?.addEventListener('scroll', handleScroll);
+ return () => {
+ handleScroll.cancel();
+ container?.removeEventListener('scroll', handleScroll);
+ };
+ }, [target]);
+
+ const scrollToTop: React.MouseEventHandler = (e) => {
+ scrollTo(0, { getContainer: target || getDefaultTarget, duration });
+ onClick?.(e);
+ };
+
+ const { getPrefixCls } = useContext(ConfigContext);
+
+ const prefixCls = getPrefixCls(floatButtonPrefixCls, customizePrefixCls);
+ const rootPrefixCls = getPrefixCls();
+
+ const groupShape = useContext(FloatButtonGroupContext);
+
+ const mergedShape = groupShape || shape;
+
+ const contentProps: FloatButtonProps = {
+ prefixCls,
+ icon,
+ type,
+ shape: mergedShape,
+ ...restProps,
+ };
+
+ return (
+
+ {({ className: motionClassName }, setRef) => (
+
+ )}
+
+ );
+});
+
+if (process.env.NODE_ENV !== 'production') {
+ BackTop.displayName = 'BackTop';
+}
+
+export default BackTop;
diff --git a/packages/meta/src/float-button/FloatButton.tsx b/packages/meta/src/float-button/FloatButton.tsx
new file mode 100644
index 0000000..d7fd3a7
--- /dev/null
+++ b/packages/meta/src/float-button/FloatButton.tsx
@@ -0,0 +1,126 @@
+import React, { useContext, useMemo } from 'react';
+import classNames from 'classnames';
+import omit from 'rc-util/lib/omit';
+
+import { devUseWarning } from '../_util/warning';
+import Badge from '../badge';
+import type { ConfigConsumerProps } from '../config-provider';
+import { ConfigContext } from '../config-provider';
+import useCSSVarCls from '../config-provider/hooks/useCSSVarCls';
+import Tooltip from '../tooltip';
+import type BackTop from './BackTop';
+import FloatButtonGroupContext from './context';
+import Content from './FloatButtonContent';
+import type FloatButtonGroup from './FloatButtonGroup';
+import type {
+ FloatButtonBadgeProps,
+ FloatButtonContentProps,
+ FloatButtonElement,
+ FloatButtonProps,
+ FloatButtonShape,
+} from './interface';
+import type PurePanel from './PurePanel';
+import useStyle from './style';
+
+export const floatButtonPrefixCls = 'float-btn';
+
+const InternalFloatButton = React.forwardRef((props, ref) => {
+ const {
+ prefixCls: customizePrefixCls,
+ className,
+ rootClassName,
+ type = 'default',
+ shape = 'circle',
+ icon,
+ description,
+ tooltip,
+ badge = {},
+ ...restProps
+ } = props;
+ const { getPrefixCls, direction } = useContext(ConfigContext);
+ const groupShape = useContext(FloatButtonGroupContext);
+ const prefixCls = getPrefixCls(floatButtonPrefixCls, customizePrefixCls);
+ const rootCls = useCSSVarCls(prefixCls);
+ const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls, rootCls);
+
+ const mergedShape = groupShape || shape;
+
+ const classString = classNames(
+ hashId,
+ cssVarCls,
+ rootCls,
+ prefixCls,
+ className,
+ rootClassName,
+ `${prefixCls}-${type}`,
+ `${prefixCls}-${mergedShape}`,
+ {
+ [`${prefixCls}-rtl`]: direction === 'rtl',
+ },
+ );
+
+ // 虽然在 ts 中已经 omit 过了,但是为了防止多余的属性被透传进来,这里再 omit 一遍,以防万一
+ const badgeProps = useMemo(
+ () => omit(badge, ['title', 'children', 'status', 'text'] as any[]),
+ [badge],
+ );
+
+ const contentProps = useMemo(
+ () => ({ prefixCls, description, icon, type }),
+ [prefixCls, description, icon, type],
+ );
+
+ let buttonNode = (
+
+
+
+ );
+
+ if ('badge' in props) {
+ buttonNode = {buttonNode};
+ }
+
+ if ('tooltip' in props) {
+ buttonNode = (
+
+ {buttonNode}
+
+ );
+ }
+
+ if (process.env.NODE_ENV !== 'production') {
+ const warning = devUseWarning('FloatButton');
+
+ warning(
+ !(shape === 'circle' && description),
+ 'usage',
+ 'supported only when `shape` is `square`. Due to narrow space for text, short sentence is recommended.',
+ );
+ }
+
+ return wrapCSSVar(
+ props.href ? (
+
+ {buttonNode}
+
+ ) : (
+
+ ),
+ );
+});
+
+type CompoundedComponent = typeof InternalFloatButton & {
+ Group: typeof FloatButtonGroup;
+ BackTop: typeof BackTop;
+ _InternalPanelDoNotUseOrYouWillBeFired: typeof PurePanel;
+};
+
+const FloatButton = InternalFloatButton as CompoundedComponent;
+
+if (process.env.NODE_ENV !== 'production') {
+ FloatButton.displayName = 'FloatButton';
+}
+
+export default FloatButton;
diff --git a/packages/meta/src/float-button/FloatButtonContent.tsx b/packages/meta/src/float-button/FloatButtonContent.tsx
new file mode 100644
index 0000000..3e388c8
--- /dev/null
+++ b/packages/meta/src/float-button/FloatButtonContent.tsx
@@ -0,0 +1,34 @@
+import React, { memo } from 'react';
+import FileTextOutlined from '@ant-design/icons/FileTextOutlined';
+import classNames from 'classnames';
+
+import type { FloatButtonContentProps } from './interface';
+
+const FloatButtonContent: React.FC = (props) => {
+ const { icon, description, prefixCls, className } = props;
+ const defaultElement = (
+
+
+
+ );
+ return (
+
+ {icon || description ? (
+ <>
+ {icon &&
{icon}
}
+ {description &&
{description}
}
+ >
+ ) : (
+ defaultElement
+ )}
+
+ );
+};
+
+export default memo(FloatButtonContent);
diff --git a/packages/meta/src/float-button/FloatButtonGroup.tsx b/packages/meta/src/float-button/FloatButtonGroup.tsx
new file mode 100644
index 0000000..6abfe4d
--- /dev/null
+++ b/packages/meta/src/float-button/FloatButtonGroup.tsx
@@ -0,0 +1,141 @@
+import React, { memo, useCallback, useContext, useEffect } from 'react';
+import CloseOutlined from '@ant-design/icons/CloseOutlined';
+import FileTextOutlined from '@ant-design/icons/FileTextOutlined';
+import classNames from 'classnames';
+import CSSMotion from 'rc-motion';
+import useMergedState from 'rc-util/lib/hooks/useMergedState';
+
+import { devUseWarning } from '../_util/warning';
+import type { ConfigConsumerProps } from '../config-provider';
+import { ConfigContext } from '../config-provider';
+import useCSSVarCls from '../config-provider/hooks/useCSSVarCls';
+import { FloatButtonGroupProvider } from './context';
+import FloatButton, { floatButtonPrefixCls } from './FloatButton';
+import type { FloatButtonGroupProps, FloatButtonRef } from './interface';
+import useStyle from './style';
+
+const FloatButtonGroup: React.FC = (props) => {
+ const {
+ prefixCls: customizePrefixCls,
+ className,
+ style,
+ shape = 'circle',
+ type = 'default',
+ icon = ,
+ closeIcon,
+ description,
+ trigger,
+ children,
+ onOpenChange,
+ open: customOpen,
+ ...floatButtonProps
+ } = props;
+
+ const { direction, getPrefixCls, floatButtonGroup } =
+ useContext(ConfigContext);
+
+ const mergedCloseIcon = closeIcon ?? floatButtonGroup?.closeIcon ?? ;
+
+ const prefixCls = getPrefixCls(floatButtonPrefixCls, customizePrefixCls);
+ const rootCls = useCSSVarCls(prefixCls);
+ const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls, rootCls);
+ const groupPrefixCls = `${prefixCls}-group`;
+
+ const groupCls = classNames(groupPrefixCls, hashId, cssVarCls, rootCls, className, {
+ [`${groupPrefixCls}-rtl`]: direction === 'rtl',
+ [`${groupPrefixCls}-${shape}`]: shape,
+ [`${groupPrefixCls}-${shape}-shadow`]: !trigger,
+ });
+
+ const wrapperCls = classNames(hashId, `${groupPrefixCls}-wrap`);
+
+ const [open, setOpen] = useMergedState(false, { value: customOpen });
+
+ const floatButtonGroupRef = React.useRef(null);
+
+ const floatButtonRef = React.useRef(null);
+
+ const hoverAction = React.useMemo>(() => {
+ const hoverTypeAction = {
+ onMouseEnter() {
+ setOpen(true);
+ onOpenChange?.(true);
+ },
+ onMouseLeave() {
+ setOpen(false);
+ onOpenChange?.(false);
+ },
+ };
+ return trigger === 'hover' ? hoverTypeAction : {};
+ }, [trigger]);
+
+ const handleOpenChange = () => {
+ setOpen((prevState) => {
+ onOpenChange?.(!prevState);
+ return !prevState;
+ });
+ };
+
+ const onClick = useCallback(
+ (e: MouseEvent) => {
+ if (floatButtonGroupRef.current?.contains(e.target as Node)) {
+ if (floatButtonRef.current?.contains(e.target as Node)) {
+ handleOpenChange();
+ }
+ return;
+ }
+ setOpen(false);
+ onOpenChange?.(false);
+ },
+ [trigger],
+ );
+
+ useEffect(() => {
+ if (trigger === 'click') {
+ document.addEventListener('click', onClick);
+ return () => {
+ document.removeEventListener('click', onClick);
+ };
+ }
+ }, [trigger]);
+
+ // =================== Warning =====================
+ if (process.env.NODE_ENV !== 'production') {
+ const warning = devUseWarning('FloatButton.Group');
+
+ warning(
+ !('open' in props) || !!trigger,
+ 'usage',
+ '`open` need to be used together with `trigger`',
+ );
+ }
+
+ return wrapCSSVar(
+
+
+ {trigger && ['click', 'hover'].includes(trigger) ? (
+ <>
+
+ {({ className: motionClassName }) => (
+ {children}
+ )}
+
+
+ >
+ ) : (
+ children
+ )}
+
+ ,
+ );
+};
+
+export default memo(FloatButtonGroup);
diff --git a/packages/meta/src/float-button/PurePanel.tsx b/packages/meta/src/float-button/PurePanel.tsx
new file mode 100644
index 0000000..f7780be
--- /dev/null
+++ b/packages/meta/src/float-button/PurePanel.tsx
@@ -0,0 +1,46 @@
+/* eslint-disable react/no-array-index-key */
+import * as React from 'react';
+import classNames from 'classnames';
+
+import { ConfigContext } from '../config-provider';
+import BackTop from './BackTop';
+import FloatButton, { floatButtonPrefixCls } from './FloatButton';
+import FloatButtonGroup from './FloatButtonGroup';
+import type { FloatButtonGroupProps, FloatButtonProps } from './interface';
+
+export interface PureFloatButtonProps extends Omit {
+ backTop?: boolean;
+}
+
+export interface PurePanelProps
+ extends PureFloatButtonProps,
+ Omit {
+ /** Convert to FloatGroup when configured */
+ items?: PureFloatButtonProps[];
+}
+
+const PureFloatButton: React.FC = ({ backTop, ...props }) =>
+ backTop ? : ;
+
+/** @private Internal Component. Do not use in your production. */
+const PurePanel: React.FC = ({ className, items, ...props }) => {
+ const { prefixCls: customizePrefixCls } = props;
+
+ const { getPrefixCls } = React.useContext(ConfigContext);
+ const prefixCls = getPrefixCls(floatButtonPrefixCls, customizePrefixCls);
+ const pureCls = `${prefixCls}-pure`;
+
+ if (items) {
+ return (
+
+ {items.map((item, index) => (
+
+ ))}
+
+ );
+ }
+
+ return ;
+};
+
+export default PurePanel;
diff --git a/packages/meta/src/float-button/context.ts b/packages/meta/src/float-button/context.ts
new file mode 100644
index 0000000..798cf9f
--- /dev/null
+++ b/packages/meta/src/float-button/context.ts
@@ -0,0 +1,9 @@
+import React from 'react';
+
+import type { FloatButtonShape } from './interface';
+
+const FloatButtonGroupContext = React.createContext(undefined);
+
+export const { Provider: FloatButtonGroupProvider } = FloatButtonGroupContext;
+
+export default FloatButtonGroupContext;
diff --git a/packages/meta/src/float-button/demo/back-top.md b/packages/meta/src/float-button/demo/back-top.md
new file mode 100644
index 0000000..15eb759
--- /dev/null
+++ b/packages/meta/src/float-button/demo/back-top.md
@@ -0,0 +1,7 @@
+## zh-CN
+
+返回页面顶部的操作按钮。
+
+## en-US
+
+`BackTop` makes it easy to go back to the top of the page.
diff --git a/packages/meta/src/float-button/demo/back-top.tsx b/packages/meta/src/float-button/demo/back-top.tsx
new file mode 100644
index 0000000..29b5958
--- /dev/null
+++ b/packages/meta/src/float-button/demo/back-top.tsx
@@ -0,0 +1,17 @@
+import React from 'react';
+import { FloatButton } from 'antd';
+
+const App: React.FC = () => (
+
+
Scroll to bottom
+
Scroll to bottom
+
Scroll to bottom
+
Scroll to bottom
+
Scroll to bottom
+
Scroll to bottom
+
Scroll to bottom
+
+
+);
+
+export default App;
diff --git a/packages/meta/src/float-button/demo/badge-debug.md b/packages/meta/src/float-button/demo/badge-debug.md
new file mode 100644
index 0000000..19b791b
--- /dev/null
+++ b/packages/meta/src/float-button/demo/badge-debug.md
@@ -0,0 +1,7 @@
+## zh-CN
+
+调试使用。
+
+## en-US
+
+debug use.
diff --git a/packages/meta/src/float-button/demo/badge-debug.tsx b/packages/meta/src/float-button/demo/badge-debug.tsx
new file mode 100644
index 0000000..81e1143
--- /dev/null
+++ b/packages/meta/src/float-button/demo/badge-debug.tsx
@@ -0,0 +1,24 @@
+import React, { useState } from 'react';
+import { ConfigProvider, FloatButton, Slider } from 'antd';
+import type { ConfigProviderProps, GetProp } from 'antd';
+
+type AliasToken = GetProp['token'];
+
+const App: React.FC = () => {
+ const [radius, setRadius] = useState(0);
+
+ const token: Partial = {
+ borderRadius: radius,
+ };
+
+ return (
+ <>
+
+
+
+
+ >
+ );
+};
+
+export default App;
diff --git a/packages/meta/src/float-button/demo/badge.md b/packages/meta/src/float-button/demo/badge.md
new file mode 100644
index 0000000..12fc6e9
--- /dev/null
+++ b/packages/meta/src/float-button/demo/badge.md
@@ -0,0 +1,7 @@
+## zh-CN
+
+右上角附带圆形徽标数字的悬浮按钮。
+
+## en-US
+
+FloatButton with Badge.
diff --git a/packages/meta/src/float-button/demo/badge.tsx b/packages/meta/src/float-button/demo/badge.tsx
new file mode 100644
index 0000000..879f95a
--- /dev/null
+++ b/packages/meta/src/float-button/demo/badge.tsx
@@ -0,0 +1,24 @@
+import React from 'react';
+import { QuestionCircleOutlined } from '@ant-design/icons';
+import { FloatButton } from 'antd';
+
+const App: React.FC = () => (
+ <>
+
+
+ custom badge color}
+ badge={{ count: 5, color: 'blue' }}
+ />
+
+
+
+ } />
+
+
+
+ >
+);
+
+export default App;
diff --git a/packages/meta/src/float-button/demo/basic.md b/packages/meta/src/float-button/demo/basic.md
new file mode 100644
index 0000000..c2120a5
--- /dev/null
+++ b/packages/meta/src/float-button/demo/basic.md
@@ -0,0 +1,7 @@
+## zh-CN
+
+最简单的用法。
+
+## en-US
+
+The most basic usage.
diff --git a/packages/meta/src/float-button/demo/basic.tsx b/packages/meta/src/float-button/demo/basic.tsx
new file mode 100644
index 0000000..0b97fd6
--- /dev/null
+++ b/packages/meta/src/float-button/demo/basic.tsx
@@ -0,0 +1,6 @@
+import React from 'react';
+import { FloatButton } from 'antd';
+
+const App: React.FC = () => console.log('onClick')} />;
+
+export default App;
diff --git a/packages/meta/src/float-button/demo/controlled.md b/packages/meta/src/float-button/demo/controlled.md
new file mode 100644
index 0000000..ac17a7d
--- /dev/null
+++ b/packages/meta/src/float-button/demo/controlled.md
@@ -0,0 +1,7 @@
+## zh-CN
+
+通过 `open` 设置组件为受控模式,需要配合 trigger 一起使用。
+
+## en-US
+
+Set the component to controlled mode through `open`, which need to be used together with trigger.
diff --git a/packages/meta/src/float-button/demo/controlled.tsx b/packages/meta/src/float-button/demo/controlled.tsx
new file mode 100644
index 0000000..95489b5
--- /dev/null
+++ b/packages/meta/src/float-button/demo/controlled.tsx
@@ -0,0 +1,28 @@
+import React, { useState } from 'react';
+import { CommentOutlined, CustomerServiceOutlined } from '@ant-design/icons';
+import { FloatButton, Switch } from 'antd';
+
+const App: React.FC = () => {
+ const [open, setOpen] = useState(true);
+
+ const onChange = (checked: boolean) => {
+ setOpen(checked);
+ };
+
+ return (
+ <>
+ }
+ >
+
+ } />
+
+
+ >
+ );
+};
+
+export default App;
diff --git a/packages/meta/src/float-button/demo/description.md b/packages/meta/src/float-button/demo/description.md
new file mode 100644
index 0000000..a20129e
--- /dev/null
+++ b/packages/meta/src/float-button/demo/description.md
@@ -0,0 +1,11 @@
+## zh-CN
+
+可以通过 `description` 设置文字内容。
+
+> 仅当 `shape` 属性为 `square` 时支持。由于空间较小,推荐使用比较精简的双数文字。
+
+## en-US
+
+Setting `description` prop to show FloatButton with description.
+
+> supported only when `shape` is `square`. Due to narrow space for text, short sentence is recommended.
diff --git a/packages/meta/src/float-button/demo/description.tsx b/packages/meta/src/float-button/demo/description.tsx
new file mode 100644
index 0000000..a0f8474
--- /dev/null
+++ b/packages/meta/src/float-button/demo/description.tsx
@@ -0,0 +1,23 @@
+import React from 'react';
+import { FileTextOutlined } from '@ant-design/icons';
+import { FloatButton } from 'antd';
+
+const App: React.FC = () => (
+ <>
+ }
+ description="HELP INFO"
+ shape="square"
+ style={{ right: 24 }}
+ />
+
+ }
+ description="HELP"
+ shape="square"
+ style={{ right: 164 }}
+ />
+ >
+);
+
+export default App;
diff --git a/packages/meta/src/float-button/demo/group-menu.md b/packages/meta/src/float-button/demo/group-menu.md
new file mode 100644
index 0000000..1f53c07
--- /dev/null
+++ b/packages/meta/src/float-button/demo/group-menu.md
@@ -0,0 +1,7 @@
+## zh-CN
+
+设置 `trigger` 属性即可开启菜单模式。提供 `hover` 和 `click` 两种触发方式。
+
+## en-US
+
+Open menu mode with `trigger`, which could be `hover` or `click`.
diff --git a/packages/meta/src/float-button/demo/group-menu.tsx b/packages/meta/src/float-button/demo/group-menu.tsx
new file mode 100644
index 0000000..302600f
--- /dev/null
+++ b/packages/meta/src/float-button/demo/group-menu.tsx
@@ -0,0 +1,28 @@
+import React from 'react';
+import { CommentOutlined, CustomerServiceOutlined } from '@ant-design/icons';
+import { FloatButton } from 'antd';
+
+const App: React.FC = () => (
+ <>
+ }
+ >
+
+ } />
+
+ }
+ >
+
+ } />
+
+ >
+);
+
+export default App;
diff --git a/packages/meta/src/float-button/demo/group.md b/packages/meta/src/float-button/demo/group.md
new file mode 100644
index 0000000..a5094ac
--- /dev/null
+++ b/packages/meta/src/float-button/demo/group.md
@@ -0,0 +1,7 @@
+## zh-CN
+
+按钮组合使用时,推荐使用 ``,并通过设置 `shape` 属性改变悬浮按钮组的形状。悬浮按钮组的 `shape` 会覆盖内部 FloatButton 的 `shape` 属性。
+
+## en-US
+
+When multiple buttons are used together, `` is recommended. By setting `shape` of FloatButton.Group, you can change the shape of group. `shape` of FloatButton.Group will override `shape` of FloatButton inside.
diff --git a/packages/meta/src/float-button/demo/group.tsx b/packages/meta/src/float-button/demo/group.tsx
new file mode 100644
index 0000000..60c8cd5
--- /dev/null
+++ b/packages/meta/src/float-button/demo/group.tsx
@@ -0,0 +1,21 @@
+import React from 'react';
+import { QuestionCircleOutlined, SyncOutlined } from '@ant-design/icons';
+import { FloatButton } from 'antd';
+
+const App: React.FC = () => (
+ <>
+
+ } />
+
+
+
+
+ } />
+
+ } />
+
+
+ >
+);
+
+export default App;
diff --git a/packages/meta/src/float-button/demo/render-panel.md b/packages/meta/src/float-button/demo/render-panel.md
new file mode 100644
index 0000000..70bcbec
--- /dev/null
+++ b/packages/meta/src/float-button/demo/render-panel.md
@@ -0,0 +1,7 @@
+## zh-CN
+
+调试用组件,请勿直接使用。
+
+## en-US
+
+Debug usage. Do not use in your production.
diff --git a/packages/meta/src/float-button/demo/render-panel.tsx b/packages/meta/src/float-button/demo/render-panel.tsx
new file mode 100644
index 0000000..9c3c35e
--- /dev/null
+++ b/packages/meta/src/float-button/demo/render-panel.tsx
@@ -0,0 +1,39 @@
+import React from 'react';
+import { CustomerServiceOutlined, QuestionCircleOutlined, SyncOutlined } from '@ant-design/icons';
+import { FloatButton } from 'antd';
+
+/** Test usage. Do not use in your production. */
+const { _InternalPanelDoNotUseOrYouWillBeFired: InternalFloatButton } = FloatButton;
+
+const App: React.FC = () => (
+
+
+ } />
+ }
+ description="HELP"
+ shape="square"
+ type="primary"
+ />
+ },
+ { icon: },
+ { icon: },
+ ]}
+ />
+ }
+ trigger="click"
+ items={[
+ { icon: },
+ { icon: },
+ { icon: },
+ ]}
+ />
+
+);
+
+export default App;
diff --git a/packages/meta/src/float-button/demo/shape.md b/packages/meta/src/float-button/demo/shape.md
new file mode 100644
index 0000000..bd624dd
--- /dev/null
+++ b/packages/meta/src/float-button/demo/shape.md
@@ -0,0 +1,7 @@
+## zh-CN
+
+通过 `shape` 设置不同的形状。
+
+## en-US
+
+Change the shape of the FloatButton with `shape`.
diff --git a/packages/meta/src/float-button/demo/shape.tsx b/packages/meta/src/float-button/demo/shape.tsx
new file mode 100644
index 0000000..6fc6f72
--- /dev/null
+++ b/packages/meta/src/float-button/demo/shape.tsx
@@ -0,0 +1,22 @@
+import React from 'react';
+import { CustomerServiceOutlined } from '@ant-design/icons';
+import { FloatButton } from 'antd';
+
+const App: React.FC = () => (
+ <>
+ }
+ />
+ }
+ />
+ >
+);
+
+export default App;
diff --git a/packages/meta/src/float-button/demo/tooltip.md b/packages/meta/src/float-button/demo/tooltip.md
new file mode 100644
index 0000000..e0f254c
--- /dev/null
+++ b/packages/meta/src/float-button/demo/tooltip.md
@@ -0,0 +1,7 @@
+## zh-CN
+
+设置 tooltip 属性,即可开启气泡卡片。
+
+## en-US
+
+Setting `tooltip` prop to show FloatButton with tooltip.
diff --git a/packages/meta/src/float-button/demo/tooltip.tsx b/packages/meta/src/float-button/demo/tooltip.tsx
new file mode 100644
index 0000000..73574da
--- /dev/null
+++ b/packages/meta/src/float-button/demo/tooltip.tsx
@@ -0,0 +1,6 @@
+import React from 'react';
+import { FloatButton } from 'antd';
+
+const App: React.FC = () => Documents} />;
+
+export default App;
diff --git a/packages/meta/src/float-button/demo/type.md b/packages/meta/src/float-button/demo/type.md
new file mode 100644
index 0000000..30c65cb
--- /dev/null
+++ b/packages/meta/src/float-button/demo/type.md
@@ -0,0 +1,7 @@
+## zh-CN
+
+通过 `type` 改变悬浮按钮的类型。
+
+## en-US
+
+Change the type of the FloatButton with `type`.
diff --git a/packages/meta/src/float-button/demo/type.tsx b/packages/meta/src/float-button/demo/type.tsx
new file mode 100644
index 0000000..58f7292
--- /dev/null
+++ b/packages/meta/src/float-button/demo/type.tsx
@@ -0,0 +1,12 @@
+import React from 'react';
+import { QuestionCircleOutlined } from '@ant-design/icons';
+import { FloatButton } from 'antd';
+
+const App: React.FC = () => (
+ <>
+ } type="primary" style={{ right: 24 }} />
+ } type="default" style={{ right: 94 }} />
+ >
+);
+
+export default App;
diff --git a/packages/meta/src/float-button/index.ts b/packages/meta/src/float-button/index.ts
new file mode 100644
index 0000000..663dda1
--- /dev/null
+++ b/packages/meta/src/float-button/index.ts
@@ -0,0 +1,10 @@
+import BackTop from './BackTop';
+import FloatButton from './FloatButton';
+import FloatButtonGroup from './FloatButtonGroup';
+import PurePanel from './PurePanel';
+
+FloatButton.BackTop = BackTop;
+FloatButton.Group = FloatButtonGroup;
+FloatButton._InternalPanelDoNotUseOrYouWillBeFired = PurePanel;
+
+export default FloatButton;
diff --git a/packages/meta/src/float-button/index.zh-CN.md b/packages/meta/src/float-button/index.zh-CN.md
new file mode 100644
index 0000000..fb4f05f
--- /dev/null
+++ b/packages/meta/src/float-button/index.zh-CN.md
@@ -0,0 +1,71 @@
+---
+category: Components
+group: 通用
+title: FloatButton
+subtitle: 悬浮按钮
+toc: content
+description: 悬浮于页面上方的按钮。
+demo:
+ cols: 2
+tag: 5.0.0
+---
+
+## 何时使用
+
+- 用于网站上的全局功能;
+- 无论浏览到何处都可以看见的按钮。
+
+## 代码演示
+
+
+基本
+类型
+形状
+描述
+含有气泡卡片的悬浮按钮
+浮动按钮组
+菜单模式
+受控模式
+回到顶部
+徽标数
+调试小圆点使用
+\_InternalPanelDoNotUseOrYouWillBeFired
+
+## API
+
+通用属性参考:[通用属性](/docs/react/common-props)
+
+> 自 `antd@5.0.0` 版本开始提供该组件。
+
+### 共同的 API
+
+| 参数 | 说明 | 类型 | 默认值 | 版本 |
+| --- | --- | --- | --- | --- |
+| icon | 自定义图标 | ReactNode | - | |
+| description | 文字及其它内容 | ReactNode | - | |
+| tooltip | 气泡卡片的内容 | ReactNode \| () => ReactNode | - | |
+| type | 设置按钮类型 | `default` \| `primary` | `default` | |
+| shape | 设置按钮形状 | `circle` \| `square` | `circle` | |
+| onClick | 点击按钮时的回调 | (event) => void | - | |
+| href | 点击跳转的地址,指定此属性 button 的行为和 a 链接一致 | string | - | |
+| target | 相当于 a 标签的 target 属性,href 存在时生效 | string | - | |
+| badge | 带徽标数字的悬浮按钮(不支持 `status` 以及相关属性) | [BadgeProps](/components/badge-cn#api) | - | 5.4.0 |
+
+### FloatButton.Group
+
+| 参数 | 说明 | 类型 | 默认值 | 版本 |
+| --- | --- | --- | --- | --- |
+| shape | 设置包含的 FloatButton 按钮形状 | `circle` \| `square` | `circle` | |
+| trigger | 触发方式(有触发方式为菜单模式) | `click` \| `hover` | - | |
+| open | 受控展开,需配合 trigger 一起使用 | boolean | - | |
+| closeIcon | 自定义关闭按钮 | React.ReactNode | `` | |
+| onOpenChange | 展开收起时的回调,需配合 trigger 一起使用 | (open: boolean) => void | - | |
+
+### FloatButton.BackTop
+
+| 参数 | 说明 | 类型 | 默认值 | 版本 |
+| ---------------- | ---------------------------------- | ----------------- | ------------ | ---- |
+| duration | 回到顶部所需时间(ms) | number | 450 | |
+| target | 设置需要监听其滚动事件的元素 | () => HTMLElement | () => window | |
+| visibilityHeight | 滚动高度达到此参数值才出现 BackTop | number | 400 | |
+| onClick | 点击按钮的回调函数 | () => void | - | |
diff --git a/packages/meta/src/float-button/interface.ts b/packages/meta/src/float-button/interface.ts
new file mode 100644
index 0000000..72f0fba
--- /dev/null
+++ b/packages/meta/src/float-button/interface.ts
@@ -0,0 +1,66 @@
+import type React from 'react';
+
+import type { BadgeProps } from '../badge';
+import type { TooltipProps } from '../tooltip';
+
+export type FloatButtonElement = HTMLAnchorElement & HTMLButtonElement;
+
+export interface FloatButtonRef {
+ nativeElement: FloatButtonElement | null;
+}
+
+export type FloatButtonType = 'default' | 'primary';
+
+export type FloatButtonShape = 'circle' | 'square';
+
+export type FloatButtonGroupTrigger = 'click' | 'hover';
+
+export type FloatButtonBadgeProps = Omit;
+
+export interface FloatButtonProps extends React.DOMAttributes {
+ prefixCls?: string;
+ className?: string;
+ rootClassName?: string;
+ style?: React.CSSProperties;
+ icon?: React.ReactNode;
+ description?: React.ReactNode;
+ type?: FloatButtonType;
+ shape?: FloatButtonShape;
+ tooltip?: TooltipProps['title'];
+ href?: string;
+ target?: React.HTMLAttributeAnchorTarget;
+ badge?: FloatButtonBadgeProps;
+ ['aria-label']?: React.HtmlHTMLAttributes['aria-label'];
+}
+
+export interface FloatButtonContentProps extends React.DOMAttributes {
+ className?: string;
+ icon?: FloatButtonProps['icon'];
+ description?: FloatButtonProps['description'];
+ prefixCls: FloatButtonProps['prefixCls'];
+}
+
+export interface FloatButtonGroupProps extends FloatButtonProps {
+ // 包含的 Float Button
+ children: React.ReactNode;
+ // 触发方式 (有触发方式为菜单模式)
+ trigger?: FloatButtonGroupTrigger;
+ // 受控展开
+ open?: boolean;
+ // 关闭按钮自定义图标
+ closeIcon?: React.ReactNode;
+ // 展开收起的回调
+ onOpenChange?: (open: boolean) => void;
+}
+
+export interface BackTopProps extends Omit {
+ visibilityHeight?: number;
+ onClick?: React.MouseEventHandler;
+ target?: () => HTMLElement | Window | Document;
+ prefixCls?: string;
+ children?: React.ReactNode;
+ className?: string;
+ rootClassName?: string;
+ style?: React.CSSProperties;
+ duration?: number;
+}
diff --git a/packages/meta/src/float-button/style/index.ts b/packages/meta/src/float-button/style/index.ts
new file mode 100644
index 0000000..79090d2
--- /dev/null
+++ b/packages/meta/src/float-button/style/index.ts
@@ -0,0 +1,413 @@
+import type { CSSObject } from '@ant-design/cssinjs';
+import { Keyframes, unit } from '@ant-design/cssinjs';
+
+import { resetComponent } from '../../style';
+import { initFadeMotion } from '../../style/motion/fade';
+import { initMotion } from '../../style/motion/motion';
+import type { FullToken, GenerateStyle, GetDefaultToken } from '../../theme/internal';
+import { genStyleHooks, mergeToken } from '../../theme/internal';
+import getOffset from '../util';
+
+/** Component only token. Which will handle additional calculation of alias token */
+export interface ComponentToken {
+ /**
+ * Offset of the badge dot in a circular button
+ * @internal
+ */
+ dotOffsetInCircle: number;
+ /**
+ * Offset of the badge dot in a square button
+ * @internal
+ */
+ dotOffsetInSquare: number;
+}
+
+type FloatButtonToken = FullToken<'FloatButton'> & {
+ floatButtonColor: string;
+ floatButtonBackgroundColor: string;
+ floatButtonHoverBackgroundColor: string;
+ floatButtonFontSize: number;
+ floatButtonSize: number;
+ floatButtonIconSize: number | string;
+ floatButtonBodySize: number | string;
+ floatButtonBodyPadding: number;
+ badgeOffset: number | string;
+
+ // Position
+ floatButtonInsetBlockEnd: number;
+ floatButtonInsetInlineEnd: number;
+};
+
+const initFloatButtonGroupMotion = (token: FloatButtonToken) => {
+ const { componentCls, floatButtonSize, motionDurationSlow, motionEaseInOutCirc } = token;
+ const groupPrefixCls = `${componentCls}-group`;
+ const moveDownIn = new Keyframes('antFloatButtonMoveDownIn', {
+ '0%': {
+ transform: `translate3d(0, ${unit(floatButtonSize)}, 0)`,
+ transformOrigin: '0 0',
+ opacity: 0,
+ },
+ '100%': {
+ transform: 'translate3d(0, 0, 0)',
+ transformOrigin: '0 0',
+ opacity: 1,
+ },
+ });
+
+ const moveDownOut = new Keyframes('antFloatButtonMoveDownOut', {
+ '0%': {
+ transform: 'translate3d(0, 0, 0)',
+ transformOrigin: '0 0',
+ opacity: 1,
+ },
+ '100%': {
+ transform: `translate3d(0, ${unit(floatButtonSize)}, 0)`,
+ transformOrigin: '0 0',
+ opacity: 0,
+ },
+ });
+
+ return [
+ {
+ [`${groupPrefixCls}-wrap`]: {
+ ...initMotion(`${groupPrefixCls}-wrap`, moveDownIn, moveDownOut, motionDurationSlow, true),
+ },
+ },
+ {
+ [`${groupPrefixCls}-wrap`]: {
+ [`
+ &${groupPrefixCls}-wrap-enter,
+ &${groupPrefixCls}-wrap-appear
+ `]: {
+ opacity: 0,
+ animationTimingFunction: motionEaseInOutCirc,
+ },
+ [`&${groupPrefixCls}-wrap-leave`]: {
+ animationTimingFunction: motionEaseInOutCirc,
+ },
+ },
+ },
+ ];
+};
+
+// ============================== Group ==============================
+const floatButtonGroupStyle: GenerateStyle = (token) => {
+ const {
+ antCls,
+ componentCls,
+ floatButtonSize,
+ margin,
+ borderRadiusLG,
+ borderRadiusSM,
+ badgeOffset,
+ floatButtonBodyPadding,
+ calc,
+ } = token;
+ const groupPrefixCls = `${componentCls}-group`;
+ return {
+ [groupPrefixCls]: {
+ ...resetComponent(token),
+ zIndex: 99,
+ display: 'block',
+ border: 'none',
+ position: 'fixed',
+ width: floatButtonSize,
+ height: 'auto',
+ boxShadow: 'none',
+ minHeight: floatButtonSize,
+ insetInlineEnd: token.floatButtonInsetInlineEnd,
+ insetBlockEnd: token.floatButtonInsetBlockEnd,
+ borderRadius: borderRadiusLG,
+
+ [`${groupPrefixCls}-wrap`]: {
+ zIndex: -1,
+ display: 'block',
+ position: 'relative',
+ marginBottom: margin,
+ },
+ [`&${groupPrefixCls}-rtl`]: {
+ direction: 'rtl',
+ },
+ [componentCls]: {
+ position: 'static',
+ },
+ },
+ [`${groupPrefixCls}-circle`]: {
+ [`${componentCls}-circle:not(:last-child)`]: {
+ marginBottom: token.margin,
+ [`${componentCls}-body`]: {
+ width: floatButtonSize,
+ height: floatButtonSize,
+ borderRadius: '50%',
+ },
+ },
+ },
+ [`${groupPrefixCls}-square`]: {
+ [`${componentCls}-square`]: {
+ borderRadius: 0,
+ padding: 0,
+ '&:first-child': {
+ borderStartStartRadius: borderRadiusLG,
+ borderStartEndRadius: borderRadiusLG,
+ },
+ '&:last-child': {
+ borderEndStartRadius: borderRadiusLG,
+ borderEndEndRadius: borderRadiusLG,
+ },
+ '&:not(:last-child)': {
+ borderBottom: `${unit(token.lineWidth)} ${token.lineType} ${token.colorSplit}`,
+ },
+ [`${antCls}-badge`]: {
+ [`${antCls}-badge-count`]: {
+ top: calc(calc(floatButtonBodyPadding).add(badgeOffset)).mul(-1).equal(),
+ insetInlineEnd: calc(calc(floatButtonBodyPadding).add(badgeOffset)).mul(-1).equal(),
+ },
+ },
+ },
+ [`${groupPrefixCls}-wrap`]: {
+ display: 'block',
+ borderRadius: borderRadiusLG,
+ boxShadow: token.boxShadowSecondary,
+ [`${componentCls}-square`]: {
+ boxShadow: 'none',
+ marginTop: 0,
+ borderRadius: 0,
+ padding: floatButtonBodyPadding,
+ '&:first-child': {
+ borderStartStartRadius: borderRadiusLG,
+ borderStartEndRadius: borderRadiusLG,
+ },
+ '&:last-child': {
+ borderEndStartRadius: borderRadiusLG,
+ borderEndEndRadius: borderRadiusLG,
+ },
+ '&:not(:last-child)': {
+ borderBottom: `${unit(token.lineWidth)} ${token.lineType} ${token.colorSplit}`,
+ },
+ [`${componentCls}-body`]: {
+ width: token.floatButtonBodySize,
+ height: token.floatButtonBodySize,
+ },
+ },
+ },
+ },
+ [`${groupPrefixCls}-circle-shadow`]: {
+ boxShadow: 'none',
+ },
+ [`${groupPrefixCls}-square-shadow`]: {
+ boxShadow: token.boxShadowSecondary,
+ [`${componentCls}-square`]: {
+ boxShadow: 'none',
+ padding: floatButtonBodyPadding,
+ [`${componentCls}-body`]: {
+ width: token.floatButtonBodySize,
+ height: token.floatButtonBodySize,
+ borderRadius: borderRadiusSM,
+ },
+ },
+ },
+ };
+};
+
+// ============================== Shared ==============================
+const sharedFloatButtonStyle: GenerateStyle = (token) => {
+ const {
+ antCls,
+ componentCls,
+ floatButtonBodyPadding,
+ floatButtonIconSize,
+ floatButtonSize,
+ borderRadiusLG,
+ badgeOffset,
+ dotOffsetInSquare,
+ dotOffsetInCircle,
+ calc,
+ } = token;
+ return {
+ [componentCls]: {
+ ...resetComponent(token),
+ border: 'none',
+ position: 'fixed',
+ cursor: 'pointer',
+ zIndex: 99,
+ // Do not remove the 'display: block' here.
+ // Deleting it will cause marginBottom to become ineffective.
+ // Ref: https://github.com/ant-design/ant-design/issues/44700
+ display: 'block',
+ width: floatButtonSize,
+ height: floatButtonSize,
+ insetInlineEnd: token.floatButtonInsetInlineEnd,
+ insetBlockEnd: token.floatButtonInsetBlockEnd,
+ boxShadow: token.boxShadowSecondary,
+ // Pure Panel
+ '&-pure': {
+ position: 'relative',
+ inset: 'auto',
+ },
+ '&:empty': {
+ display: 'none',
+ },
+ [`${antCls}-badge`]: {
+ width: '100%',
+ height: '100%',
+ [`${antCls}-badge-count`]: {
+ transform: 'translate(0, 0)',
+ transformOrigin: 'center',
+ top: calc(badgeOffset).mul(-1).equal(),
+ insetInlineEnd: calc(badgeOffset).mul(-1).equal(),
+ },
+ },
+ [`${componentCls}-body`]: {
+ width: '100%',
+ height: '100%',
+ display: 'flex',
+ justifyContent: 'center',
+ alignItems: 'center',
+ transition: `all ${token.motionDurationMid}`,
+ [`${componentCls}-content`]: {
+ overflow: 'hidden',
+ textAlign: 'center',
+ minHeight: floatButtonSize,
+ display: 'flex',
+ flexDirection: 'column',
+ justifyContent: 'center',
+ alignItems: 'center',
+ padding: `${unit(calc(floatButtonBodyPadding).div(2).equal())} ${unit(
+ floatButtonBodyPadding,
+ )}`,
+ [`${componentCls}-icon`]: {
+ textAlign: 'center',
+ margin: 'auto',
+ width: floatButtonIconSize,
+ fontSize: floatButtonIconSize,
+ lineHeight: 1,
+ },
+ },
+ },
+ },
+
+ [`${componentCls}-rtl`]: {
+ direction: 'rtl',
+ },
+ [`${componentCls}-circle`]: {
+ height: floatButtonSize,
+ borderRadius: '50%',
+ [`${antCls}-badge`]: {
+ [`${antCls}-badge-dot`]: {
+ top: dotOffsetInCircle,
+ insetInlineEnd: dotOffsetInCircle,
+ },
+ },
+ [`${componentCls}-body`]: {
+ borderRadius: '50%',
+ },
+ },
+ [`${componentCls}-square`]: {
+ height: 'auto',
+ minHeight: floatButtonSize,
+ borderRadius: borderRadiusLG,
+ [`${antCls}-badge`]: {
+ [`${antCls}-badge-dot`]: {
+ top: dotOffsetInSquare,
+ insetInlineEnd: dotOffsetInSquare,
+ },
+ },
+ [`${componentCls}-body`]: {
+ height: 'auto',
+ borderRadius: borderRadiusLG,
+ },
+ },
+ [`${componentCls}-default`]: {
+ backgroundColor: token.floatButtonBackgroundColor,
+ transition: `background-color ${token.motionDurationMid}`,
+ [`${componentCls}-body`]: {
+ backgroundColor: token.floatButtonBackgroundColor,
+ transition: `background-color ${token.motionDurationMid}`,
+ '&:hover': {
+ backgroundColor: token.colorFillContent,
+ },
+ [`${componentCls}-content`]: {
+ [`${componentCls}-icon`]: {
+ color: token.colorText,
+ },
+ [`${componentCls}-description`]: {
+ display: 'flex',
+ alignItems: 'center',
+ lineHeight: unit(token.fontSizeLG),
+ color: token.colorText,
+ fontSize: token.fontSizeSM,
+ },
+ },
+ },
+ },
+ [`${componentCls}-primary`]: {
+ backgroundColor: token.colorPrimary,
+ [`${componentCls}-body`]: {
+ backgroundColor: token.colorPrimary,
+ transition: `background-color ${token.motionDurationMid}`,
+ '&:hover': {
+ backgroundColor: token.colorPrimaryHover,
+ },
+ [`${componentCls}-content`]: {
+ [`${componentCls}-icon`]: {
+ color: token.colorTextLightSolid,
+ },
+ [`${componentCls}-description`]: {
+ display: 'flex',
+ alignItems: 'center',
+ lineHeight: unit(token.fontSizeLG),
+ color: token.colorTextLightSolid,
+ fontSize: token.fontSizeSM,
+ },
+ },
+ },
+ },
+ };
+};
+
+// ============================== Export ==============================
+export const prepareComponentToken: GetDefaultToken<'FloatButton'> = (token) => ({
+ dotOffsetInCircle: getOffset(token.controlHeightLG / 2),
+ dotOffsetInSquare: getOffset(token.borderRadiusLG),
+});
+
+export default genStyleHooks(
+ 'FloatButton',
+ (token) => {
+ const {
+ colorTextLightSolid,
+ colorBgElevated,
+ controlHeightLG,
+ marginXXL,
+ marginLG,
+ fontSize,
+ fontSizeIcon,
+ controlItemBgHover,
+ paddingXXS,
+ calc,
+ } = token;
+
+ const floatButtonToken = mergeToken(token, {
+ floatButtonBackgroundColor: colorBgElevated,
+ floatButtonColor: colorTextLightSolid,
+ floatButtonHoverBackgroundColor: controlItemBgHover,
+ floatButtonFontSize: fontSize,
+ floatButtonIconSize: calc(fontSizeIcon).mul(1.5).equal(),
+ floatButtonSize: controlHeightLG,
+ floatButtonInsetBlockEnd: marginXXL,
+ floatButtonInsetInlineEnd: marginLG,
+ floatButtonBodySize: calc(controlHeightLG).sub(calc(paddingXXS).mul(2)).equal(),
+ // 这里的 paddingXXS 是简写,完整逻辑是 (controlHeightLG - (controlHeightLG - paddingXXS * 2)) / 2,
+ floatButtonBodyPadding: paddingXXS,
+ badgeOffset: calc(paddingXXS).mul(1.5).equal(),
+ });
+
+ return [
+ floatButtonGroupStyle(floatButtonToken),
+ sharedFloatButtonStyle(floatButtonToken),
+ initFadeMotion(token),
+ initFloatButtonGroupMotion(floatButtonToken),
+ ];
+ },
+ prepareComponentToken,
+);
diff --git a/packages/meta/src/float-button/util.ts b/packages/meta/src/float-button/util.ts
new file mode 100644
index 0000000..1cee7c3
--- /dev/null
+++ b/packages/meta/src/float-button/util.ts
@@ -0,0 +1,10 @@
+const getOffset = (radius: number): number => {
+ if (radius === 0) {
+ return 0;
+ }
+ // 如果要考虑通用性,这里应该用三角函数 Math.sin(45)
+ // 但是这个场景比较特殊,始终是等腰直角三角形,所以直接用 Math.sqrt() 开方即可
+ return radius - Math.sqrt(radius ** 2 / 2);
+};
+
+export default getOffset;
diff --git a/packages/meta/src/image/PreviewGroup.tsx b/packages/meta/src/image/PreviewGroup.tsx
new file mode 100644
index 0000000..cd20bdd
--- /dev/null
+++ b/packages/meta/src/image/PreviewGroup.tsx
@@ -0,0 +1,81 @@
+import * as React from 'react';
+import CloseOutlined from '@ant-design/icons/CloseOutlined';
+import LeftOutlined from '@ant-design/icons/LeftOutlined';
+import RightOutlined from '@ant-design/icons/RightOutlined';
+import RotateLeftOutlined from '@ant-design/icons/RotateLeftOutlined';
+import RotateRightOutlined from '@ant-design/icons/RotateRightOutlined';
+import SwapOutlined from '@ant-design/icons/SwapOutlined';
+import ZoomInOutlined from '@ant-design/icons/ZoomInOutlined';
+import ZoomOutOutlined from '@ant-design/icons/ZoomOutOutlined';
+import classNames from 'classnames';
+import RcImage from 'rc-image';
+import type { GroupConsumerProps } from 'rc-image/lib/PreviewGroup';
+
+import { useZIndex } from '../_util/hooks/useZIndex';
+import { getTransitionName } from '../_util/motion';
+import { ConfigContext } from '../config-provider';
+import useCSSVarCls from '../config-provider/hooks/useCSSVarCls';
+import useStyle from './style';
+
+export const icons = {
+ rotateLeft: ,
+ rotateRight: ,
+ zoomIn: ,
+ zoomOut: ,
+ close: ,
+ left: ,
+ right: ,
+ flipX: ,
+ flipY: ,
+};
+
+const InternalPreviewGroup: React.FC = ({
+ previewPrefixCls: customizePrefixCls,
+ preview,
+ ...otherProps
+}) => {
+ const { getPrefixCls } = React.useContext(ConfigContext);
+ const prefixCls = getPrefixCls('image', customizePrefixCls);
+ const previewPrefixCls = `${prefixCls}-preview`;
+ const rootPrefixCls = getPrefixCls();
+
+ const rootCls = useCSSVarCls(prefixCls);
+ const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls, rootCls);
+
+ const [zIndex] = useZIndex(
+ 'ImagePreview',
+ typeof preview === 'object' ? preview.zIndex : undefined,
+ );
+
+ const mergedPreview = React.useMemo(() => {
+ if (preview === false) {
+ return preview;
+ }
+ const _preview = typeof preview === 'object' ? preview : {};
+ const mergedRootClassName = classNames(
+ hashId,
+ cssVarCls,
+ rootCls,
+ _preview.rootClassName ?? '',
+ );
+
+ return {
+ ..._preview,
+ transitionName: getTransitionName(rootPrefixCls, 'zoom', _preview.transitionName),
+ maskTransitionName: getTransitionName(rootPrefixCls, 'fade', _preview.maskTransitionName),
+ rootClassName: mergedRootClassName,
+ zIndex,
+ };
+ }, [preview]);
+
+ return wrapCSSVar(
+ ,
+ );
+};
+
+export default InternalPreviewGroup;
diff --git a/packages/meta/src/image/__tests__/__snapshots__/demo-extend.test.ts.snap b/packages/meta/src/image/__tests__/__snapshots__/demo-extend.test.ts.snap
new file mode 100644
index 0000000..9804e1b
--- /dev/null
+++ b/packages/meta/src/image/__tests__/__snapshots__/demo-extend.test.ts.snap
@@ -0,0 +1,826 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`renders components/image/demo/basic.tsx extend context correctly 1`] = `
+
+

+
+
+`;
+
+exports[`renders components/image/demo/basic.tsx extend context correctly 2`] = `[]`;
+
+exports[`renders components/image/demo/component-token.tsx extend context correctly 1`] = `
+Array [
+
+

+
+
,
+
+

+
+
,
+]
+`;
+
+exports[`renders components/image/demo/component-token.tsx extend context correctly 2`] = `[]`;
+
+exports[`renders components/image/demo/controlled-preview.tsx extend context correctly 1`] = `
+Array [
+ ,
+
,
+ ,
+
+

+
+
,
+]
+`;
+
+exports[`renders components/image/demo/controlled-preview.tsx extend context correctly 2`] = `[]`;
+
+exports[`renders components/image/demo/fallback.tsx extend context correctly 1`] = `
+
+

+
+
+`;
+
+exports[`renders components/image/demo/fallback.tsx extend context correctly 2`] = `[]`;
+
+exports[`renders components/image/demo/imageRender.tsx extend context correctly 1`] = `
+
+

+
+
+`;
+
+exports[`renders components/image/demo/imageRender.tsx extend context correctly 2`] = `[]`;
+
+exports[`renders components/image/demo/nested.tsx extend context correctly 1`] = `
+
+`;
+
+exports[`renders components/image/demo/nested.tsx extend context correctly 2`] = `[]`;
+
+exports[`renders components/image/demo/placeholder.tsx extend context correctly 1`] = `
+
+
+
+

+
+
+

+
+
+
+
+
+
+
+
+
+`;
+
+exports[`renders components/image/demo/placeholder.tsx extend context correctly 2`] = `[]`;
+
+exports[`renders components/image/demo/preview-group.tsx extend context correctly 1`] = `
+Array [
+
+

+
+
,
+
+

+
+
,
+]
+`;
+
+exports[`renders components/image/demo/preview-group.tsx extend context correctly 2`] = `[]`;
+
+exports[`renders components/image/demo/preview-group-top-progress.tsx extend context correctly 1`] = `
+Array [
+
+

+
+
,
+
+

+
+
,
+
+

+
+
,
+]
+`;
+
+exports[`renders components/image/demo/preview-group-top-progress.tsx extend context correctly 2`] = `[]`;
+
+exports[`renders components/image/demo/preview-group-visible.tsx extend context correctly 1`] = `
+
+

+
+
+`;
+
+exports[`renders components/image/demo/preview-group-visible.tsx extend context correctly 2`] = `[]`;
+
+exports[`renders components/image/demo/preview-mask.tsx extend context correctly 1`] = `
+
+

+
+
+`;
+
+exports[`renders components/image/demo/preview-mask.tsx extend context correctly 2`] = `[]`;
+
+exports[`renders components/image/demo/previewSrc.tsx extend context correctly 1`] = `
+
+

+
+
+`;
+
+exports[`renders components/image/demo/previewSrc.tsx extend context correctly 2`] = `[]`;
+
+exports[`renders components/image/demo/toolbarRender.tsx extend context correctly 1`] = `
+
+

+
+
+`;
+
+exports[`renders components/image/demo/toolbarRender.tsx extend context correctly 2`] = `[]`;
diff --git a/packages/meta/src/image/__tests__/__snapshots__/demo.test.ts.snap b/packages/meta/src/image/__tests__/__snapshots__/demo.test.ts.snap
new file mode 100644
index 0000000..af6eb9c
--- /dev/null
+++ b/packages/meta/src/image/__tests__/__snapshots__/demo.test.ts.snap
@@ -0,0 +1,801 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`renders components/image/demo/basic.tsx correctly 1`] = `
+
+

+
+
+`;
+
+exports[`renders components/image/demo/component-token.tsx correctly 1`] = `
+Array [
+
+

+
+
,
+
+

+
+
,
+]
+`;
+
+exports[`renders components/image/demo/controlled-preview.tsx correctly 1`] = `
+Array [
+ ,
+
,
+ ,
+
+

+
+
,
+]
+`;
+
+exports[`renders components/image/demo/fallback.tsx correctly 1`] = `
+
+

+
+
+`;
+
+exports[`renders components/image/demo/imageRender.tsx correctly 1`] = `
+
+

+
+
+`;
+
+exports[`renders components/image/demo/nested.tsx correctly 1`] = `
+
+`;
+
+exports[`renders components/image/demo/placeholder.tsx correctly 1`] = `
+
+
+
+

+
+
+

+
+
+
+
+
+
+
+
+
+`;
+
+exports[`renders components/image/demo/preview-group.tsx correctly 1`] = `
+Array [
+
+

+
+
,
+
+

+
+
,
+]
+`;
+
+exports[`renders components/image/demo/preview-group-top-progress.tsx correctly 1`] = `
+Array [
+
+

+
+
,
+
+

+
+
,
+
+

+
+
,
+]
+`;
+
+exports[`renders components/image/demo/preview-group-visible.tsx correctly 1`] = `
+
+

+
+
+`;
+
+exports[`renders components/image/demo/preview-mask.tsx correctly 1`] = `
+
+

+
+
+`;
+
+exports[`renders components/image/demo/previewSrc.tsx correctly 1`] = `
+
+

+
+
+`;
+
+exports[`renders components/image/demo/toolbarRender.tsx correctly 1`] = `
+
+

+
+
+`;
diff --git a/packages/meta/src/image/__tests__/__snapshots__/index.test.tsx.snap b/packages/meta/src/image/__tests__/__snapshots__/index.test.tsx.snap
new file mode 100644
index 0000000..186df35
--- /dev/null
+++ b/packages/meta/src/image/__tests__/__snapshots__/index.test.tsx.snap
@@ -0,0 +1,326 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Image Default Group preview props 1`] = `
+
+
+
+

+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

+
+
+
+
+
+
+
+
+
+
+`;
+
+exports[`Image rtl render component should be rendered correctly in RTL direction 1`] = `
+
+
![]()
+
+
+`;
diff --git a/packages/meta/src/image/__tests__/demo-extend.test.ts b/packages/meta/src/image/__tests__/demo-extend.test.ts
new file mode 100644
index 0000000..26e2be1
--- /dev/null
+++ b/packages/meta/src/image/__tests__/demo-extend.test.ts
@@ -0,0 +1,3 @@
+import { extendTest } from '../../../tests/shared/demoTest';
+
+extendTest('image');
diff --git a/packages/meta/src/image/__tests__/demo.test.ts b/packages/meta/src/image/__tests__/demo.test.ts
new file mode 100644
index 0000000..639111d
--- /dev/null
+++ b/packages/meta/src/image/__tests__/demo.test.ts
@@ -0,0 +1,3 @@
+import demoTest from '../../../tests/shared/demoTest';
+
+demoTest('image');
diff --git a/packages/meta/src/image/__tests__/image.test.ts b/packages/meta/src/image/__tests__/image.test.ts
new file mode 100644
index 0000000..2e0739b
--- /dev/null
+++ b/packages/meta/src/image/__tests__/image.test.ts
@@ -0,0 +1,5 @@
+import { imageDemoTest } from '../../../tests/shared/imageTest';
+
+describe('Image image', () => {
+ imageDemoTest('image');
+});
diff --git a/packages/meta/src/image/__tests__/index.test.tsx b/packages/meta/src/image/__tests__/index.test.tsx
new file mode 100644
index 0000000..e523ba2
--- /dev/null
+++ b/packages/meta/src/image/__tests__/index.test.tsx
@@ -0,0 +1,194 @@
+import React from 'react';
+import { Modal } from 'antd';
+
+import Image from '..';
+import mountTest from '../../../tests/shared/mountTest';
+import rtlTest from '../../../tests/shared/rtlTest';
+import { fireEvent, render } from '../../../tests/utils';
+import ConfigProvider from '../../config-provider';
+
+const src = 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png';
+
+describe('Image', () => {
+ mountTest(Image);
+ rtlTest(Image);
+ it('Image preview props set false', () => {
+ const { container } = render();
+
+ fireEvent.click(container.querySelector('.ant-image')!);
+ expect(container.querySelector('.ant-image-preview-root')).toBe(null);
+ });
+ it('Group preview props set false', () => {
+ const { container } = render(
+
+
+ ,
+ );
+
+ fireEvent.click(container.querySelector('.ant-image')!);
+
+ expect(container.querySelector('.ant-image-preview-root')).toBe(null);
+ });
+
+ it('Default preview props', () => {
+ const { container, baseElement } = render();
+
+ fireEvent.click(container.querySelector('.ant-image')!);
+
+ expect(baseElement.querySelector('.ant-image-preview-mask')).toHaveClass('ant-fade');
+ expect(baseElement.querySelector('.ant-image-preview')).toHaveClass('ant-zoom');
+ });
+ it('Default Group preview props', () => {
+ const { container, baseElement } = render(
+
+
+ ,
+ );
+
+ fireEvent.click(container.querySelector('.ant-image')!);
+
+ expect(baseElement.querySelector('.ant-image-preview-mask')).toHaveClass('ant-fade');
+ expect(baseElement.querySelector('.ant-image-preview')).toHaveClass('ant-zoom');
+ expect(baseElement).toMatchSnapshot();
+ });
+ it('Customize preview props', () => {
+ const { container, baseElement } = render(
+ ,
+ );
+
+ fireEvent.click(container.querySelector('.ant-image')!);
+
+ expect(container.querySelector('.ant-image-preview-root')).not.toBe(null);
+
+ expect(baseElement.querySelector('.ant-image-preview')).toHaveClass('abc');
+ expect(baseElement.querySelector('.ant-image-preview-mask')).toHaveClass('def');
+ });
+ it('Customize Group preview props', () => {
+ const { container, baseElement } = render(
+
+
+ ,
+ );
+
+ fireEvent.click(container.querySelector('.ant-image')!);
+
+ expect(baseElement.querySelector('.ant-image-preview')).toHaveClass('abc');
+ expect(baseElement.querySelector('.ant-image-preview-mask')).toHaveClass('def');
+ });
+ it('ConfigProvider getPopupContainer', () => {
+ const { container, baseElement } = render(
+ <>
+
+ document.querySelector('.container')!}>
+
+
+ >,
+ );
+ fireEvent.click(container.querySelector('.ant-image')!);
+ expect(baseElement.querySelector('.container')?.children.length).not.toBe(0);
+ });
+ it('Preview forceRender props', async () => {
+ const onLoadCb = jest.fn();
+ const PreviewImage: React.FC = () => (
+
+ );
+ const { baseElement } = render();
+ expect(baseElement.querySelector('.ant-image-preview-root')).not.toBe(null);
+ baseElement.querySelector('.ant-image-preview-img')?.addEventListener('load', onLoadCb);
+ fireEvent.load(baseElement.querySelector('.ant-image-preview-img')!);
+ expect(onLoadCb).toHaveBeenCalled();
+ });
+ it('Preview should support rootClassName', () => {
+ const { container, baseElement } = render(
+
+
+ ,
+ );
+
+ fireEvent.click(container.querySelector('.ant-image')!);
+
+ expect(baseElement.querySelector('.test-root-class')).toBeTruthy();
+ });
+ it('Image.PreviewGroup preview in a nested modal where z-index Settings should be correct', () => {
+ const App = () => (
+
+
+
+
+
+
+
+
+
+
+
+ );
+ const { baseElement } = render();
+
+ fireEvent.click(baseElement.querySelector('.ant-image')!);
+
+ expect(
+ (
+ baseElement.querySelector(
+ '.test-image-preview-class .ant-image-preview-wrap',
+ ) as HTMLElement
+ ).style.zIndex,
+ ).toBe('1301');
+ expect(
+ (
+ baseElement.querySelector(
+ '.test-image-preview-class.ant-image-preview-operations-wrapper',
+ ) as HTMLElement
+ ).style.zIndex,
+ ).toBe('1302');
+
+ fireEvent.click(baseElement.querySelectorAll('.ant-image')[1]!);
+
+ expect(
+ (
+ baseElement.querySelector(
+ '.test-image-preview-group-class .ant-image-preview-wrap',
+ ) as HTMLElement
+ ).style.zIndex,
+ ).toBe('1301');
+ expect(
+ (
+ baseElement.querySelector(
+ '.test-image-preview-group-class.ant-image-preview-operations-wrapper',
+ ) as HTMLElement
+ ).style.zIndex,
+ ).toBe('1302');
+ });
+});
diff --git a/packages/meta/src/image/demo/basic.md b/packages/meta/src/image/demo/basic.md
new file mode 100644
index 0000000..d61b945
--- /dev/null
+++ b/packages/meta/src/image/demo/basic.md
@@ -0,0 +1,7 @@
+## zh-CN
+
+单击图像可以放大显示。
+
+## en-US
+
+Click the image to zoom in.
diff --git a/packages/meta/src/image/demo/basic.tsx b/packages/meta/src/image/demo/basic.tsx
new file mode 100644
index 0000000..30a75d9
--- /dev/null
+++ b/packages/meta/src/image/demo/basic.tsx
@@ -0,0 +1,11 @@
+import React from 'react';
+import { Image } from 'antd';
+
+const App: React.FC = () => (
+
+);
+
+export default App;
diff --git a/packages/meta/src/image/demo/component-token.md b/packages/meta/src/image/demo/component-token.md
new file mode 100644
index 0000000..135a6b2
--- /dev/null
+++ b/packages/meta/src/image/demo/component-token.md
@@ -0,0 +1,7 @@
+## zh-CN
+
+自定义组件 Token。
+
+## en-US
+
+Custom component token.
diff --git a/packages/meta/src/image/demo/component-token.tsx b/packages/meta/src/image/demo/component-token.tsx
new file mode 100644
index 0000000..b2843ad
--- /dev/null
+++ b/packages/meta/src/image/demo/component-token.tsx
@@ -0,0 +1,31 @@
+import React from 'react';
+import { ConfigProvider, Image } from 'antd';
+
+const App: React.FC = () => (
+
+ `当前 ${current} / 总计 ${total}` }}
+ >
+
+
+
+
+);
+
+export default App;
diff --git a/packages/meta/src/image/demo/controlled-preview.md b/packages/meta/src/image/demo/controlled-preview.md
new file mode 100644
index 0000000..e6edd79
--- /dev/null
+++ b/packages/meta/src/image/demo/controlled-preview.md
@@ -0,0 +1,7 @@
+## zh-CN
+
+可以使预览受控。
+
+## en-US
+
+You can make preview controlled.
diff --git a/packages/meta/src/image/demo/controlled-preview.tsx b/packages/meta/src/image/demo/controlled-preview.tsx
new file mode 100644
index 0000000..252e282
--- /dev/null
+++ b/packages/meta/src/image/demo/controlled-preview.tsx
@@ -0,0 +1,41 @@
+import React, { useState } from 'react';
+import { Button, Image, InputNumber } from 'antd';
+
+const App: React.FC = () => {
+ const [visible, setVisible] = useState(false);
+ const [scaleStep, setScaleStep] = useState(0.5);
+
+ return (
+ <>
+
+ scaleStep:{' '}
+ setScaleStep(val!)}
+ />
+
+
+
+ {
+ setVisible(value);
+ },
+ }}
+ />
+ >
+ );
+};
+
+export default App;
diff --git a/packages/meta/src/image/demo/fallback.md b/packages/meta/src/image/demo/fallback.md
new file mode 100644
index 0000000..45c2957
--- /dev/null
+++ b/packages/meta/src/image/demo/fallback.md
@@ -0,0 +1,7 @@
+## zh-CN
+
+加载失败显示图像占位符。
+
+## en-US
+
+Load failed to display image placeholder.
diff --git a/packages/meta/src/image/demo/fallback.tsx b/packages/meta/src/image/demo/fallback.tsx
new file mode 100644
index 0000000..7c2e8ce
--- /dev/null
+++ b/packages/meta/src/image/demo/fallback.tsx
@@ -0,0 +1,13 @@
+import React from 'react';
+import { Image } from 'antd';
+
+const App: React.FC = () => (
+
+);
+
+export default App;
diff --git a/packages/meta/src/image/demo/imageRender.md b/packages/meta/src/image/demo/imageRender.md
new file mode 100644
index 0000000..be37917
--- /dev/null
+++ b/packages/meta/src/image/demo/imageRender.md
@@ -0,0 +1,7 @@
+## zh-CN
+
+可以自定义预览内容。
+
+## en-US
+
+You can customize the preview content.
diff --git a/packages/meta/src/image/demo/imageRender.tsx b/packages/meta/src/image/demo/imageRender.tsx
new file mode 100644
index 0000000..e667a44
--- /dev/null
+++ b/packages/meta/src/image/demo/imageRender.tsx
@@ -0,0 +1,23 @@
+import React from 'react';
+import { Image } from 'antd';
+
+const App: React.FC = () => (
+ (
+
+ ),
+ toolbarRender: () => null,
+ }}
+ src="https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png"
+ />
+);
+
+export default App;
diff --git a/packages/meta/src/image/demo/nested.md b/packages/meta/src/image/demo/nested.md
new file mode 100644
index 0000000..6613b96
--- /dev/null
+++ b/packages/meta/src/image/demo/nested.md
@@ -0,0 +1,7 @@
+## zh-CN
+
+嵌套在弹框当中使用
+
+## en-US
+
+Nested in the modal
diff --git a/packages/meta/src/image/demo/nested.tsx b/packages/meta/src/image/demo/nested.tsx
new file mode 100644
index 0000000..2face13
--- /dev/null
+++ b/packages/meta/src/image/demo/nested.tsx
@@ -0,0 +1,85 @@
+import React, { useState } from 'react';
+import { Button, Divider, Image, Modal } from 'antd';
+
+const App: React.FC = () => {
+ const [show1, setShow1] = useState(false);
+ const [show2, setShow2] = useState(false);
+ const [show3, setShow3] = useState(false);
+ return (
+ <>
+
+ {
+ setShow1(open);
+ }}
+ onCancel={() => {
+ setShow1(false);
+ }}
+ >
+
+ {
+ setShow2(open);
+ }}
+ onCancel={() => {
+ setShow2(false);
+ }}
+ >
+
+ {
+ setShow3(open);
+ }}
+ onCancel={() => {
+ setShow3(false);
+ }}
+ >
+
+
+
+ console.log(`current index: ${current}, prev index: ${prev}`),
+ }}
+ >
+
+
+
+
+
+
+ >
+ );
+};
+
+export default App;
diff --git a/packages/meta/src/image/demo/placeholder.md b/packages/meta/src/image/demo/placeholder.md
new file mode 100644
index 0000000..a796da3
--- /dev/null
+++ b/packages/meta/src/image/demo/placeholder.md
@@ -0,0 +1,7 @@
+## zh-CN
+
+大图使用 placeholder 渐进加载。
+
+## en-US
+
+Progressive when large image loading.
diff --git a/packages/meta/src/image/demo/placeholder.tsx b/packages/meta/src/image/demo/placeholder.tsx
new file mode 100644
index 0000000..3eb9957
--- /dev/null
+++ b/packages/meta/src/image/demo/placeholder.tsx
@@ -0,0 +1,32 @@
+import React, { useState } from 'react';
+import { Button, Image, Space } from 'antd';
+
+const App: React.FC = () => {
+ const [random, setRandom] = useState();
+
+ return (
+
+
+ }
+ />
+
+
+ );
+};
+
+export default App;
diff --git a/packages/meta/src/image/demo/preview-group-top-progress.md b/packages/meta/src/image/demo/preview-group-top-progress.md
new file mode 100644
index 0000000..1c114f2
--- /dev/null
+++ b/packages/meta/src/image/demo/preview-group-top-progress.md
@@ -0,0 +1,7 @@
+## zh-CN
+
+多图预览时顶部展示进度, 支持自定义
+
+## en-US
+
+The progress is displayed at the top of the multi-image preview, and customization is supported
diff --git a/packages/meta/src/image/demo/preview-group-top-progress.tsx b/packages/meta/src/image/demo/preview-group-top-progress.tsx
new file mode 100644
index 0000000..857ce6b
--- /dev/null
+++ b/packages/meta/src/image/demo/preview-group-top-progress.tsx
@@ -0,0 +1,20 @@
+import React from 'react';
+import { Image } from 'antd';
+
+const App: React.FC = () => (
+ `当前 ${current} / 总计 ${total}` }}
+ >
+
+
+
+
+);
+
+export default App;
diff --git a/packages/meta/src/image/demo/preview-group-visible.md b/packages/meta/src/image/demo/preview-group-visible.md
new file mode 100644
index 0000000..cf72bc7
--- /dev/null
+++ b/packages/meta/src/image/demo/preview-group-visible.md
@@ -0,0 +1,7 @@
+## zh-CN
+
+从一张图片点开相册。
+
+## en-US
+
+Preview a collection from one image.
diff --git a/packages/meta/src/image/demo/preview-group-visible.tsx b/packages/meta/src/image/demo/preview-group-visible.tsx
new file mode 100644
index 0000000..d179559
--- /dev/null
+++ b/packages/meta/src/image/demo/preview-group-visible.tsx
@@ -0,0 +1,19 @@
+import React from 'react';
+import { Image } from 'antd';
+
+const App: React.FC = () => (
+
+
+
+);
+
+export default App;
diff --git a/packages/meta/src/image/demo/preview-group.md b/packages/meta/src/image/demo/preview-group.md
new file mode 100644
index 0000000..509a29b
--- /dev/null
+++ b/packages/meta/src/image/demo/preview-group.md
@@ -0,0 +1,7 @@
+## zh-CN
+
+点击左右切换按钮可以预览多张图片。
+
+## en-US
+
+Click the left and right switch buttons to preview multiple images.
diff --git a/packages/meta/src/image/demo/preview-group.tsx b/packages/meta/src/image/demo/preview-group.tsx
new file mode 100644
index 0000000..be6e2f3
--- /dev/null
+++ b/packages/meta/src/image/demo/preview-group.tsx
@@ -0,0 +1,18 @@
+import React from 'react';
+import { Image } from 'antd';
+
+const App: React.FC = () => (
+ console.log(`current index: ${current}, prev index: ${prev}`),
+ }}
+ >
+
+
+
+);
+
+export default App;
diff --git a/packages/meta/src/image/demo/preview-mask.md b/packages/meta/src/image/demo/preview-mask.md
new file mode 100644
index 0000000..dc2734d
--- /dev/null
+++ b/packages/meta/src/image/demo/preview-mask.md
@@ -0,0 +1,17 @@
+## zh-CN
+
+自定义预览文本。
+
+## en-US
+
+Custom preview mask.
+
+```css
+.customize-mask {
+ font-size: 20px;
+ opacity: 1;
+}
+.customize-mask .anticon {
+ font-size: 32px;
+}
+```
diff --git a/packages/meta/src/image/demo/preview-mask.tsx b/packages/meta/src/image/demo/preview-mask.tsx
new file mode 100644
index 0000000..071582b
--- /dev/null
+++ b/packages/meta/src/image/demo/preview-mask.tsx
@@ -0,0 +1,21 @@
+import React from 'react';
+import { ZoomInOutlined } from '@ant-design/icons';
+import { Image, Space } from 'antd';
+
+const App: React.FC = () => (
+
+
+ 示例
+
+ ),
+ }}
+ />
+);
+
+export default App;
diff --git a/packages/meta/src/image/demo/previewSrc.md b/packages/meta/src/image/demo/previewSrc.md
new file mode 100644
index 0000000..9b558c8
--- /dev/null
+++ b/packages/meta/src/image/demo/previewSrc.md
@@ -0,0 +1,7 @@
+## zh-CN
+
+可以设置不同的预览图片。
+
+## en-US
+
+You can set different preview image.
diff --git a/packages/meta/src/image/demo/previewSrc.tsx b/packages/meta/src/image/demo/previewSrc.tsx
new file mode 100644
index 0000000..817a890
--- /dev/null
+++ b/packages/meta/src/image/demo/previewSrc.tsx
@@ -0,0 +1,14 @@
+import React from 'react';
+import { Image } from 'antd';
+
+const App: React.FC = () => (
+
+);
+
+export default App;
diff --git a/packages/meta/src/image/demo/toolbarRender.md b/packages/meta/src/image/demo/toolbarRender.md
new file mode 100644
index 0000000..8e20eb2
--- /dev/null
+++ b/packages/meta/src/image/demo/toolbarRender.md
@@ -0,0 +1,35 @@
+## zh-CN
+
+可以自定义工具栏并添加下载原图或翻转旋转后图片的按钮。
+
+## en-US
+
+You can customize the toolbar and add a button for downloading the original image or downloading the flipped and rotated image.
+
+```css
+.toolbar-wrapper {
+ position: fixed;
+ bottom: 32px;
+ left: 50%;
+ padding: 0px 24px;
+ color: #fff;
+ font-size: 20px;
+ background-color: rgba(0, 0, 0, 0.1);
+ border-radius: 100px;
+ transform: translateX(-50%);
+}
+
+.toolbar-wrapper .anticon {
+ padding: 12px;
+ cursor: pointer;
+}
+
+.toolbar-wrapper .anticon[disabled] {
+ cursor: not-allowed;
+ opacity: 0.3;
+}
+
+.toolbar-wrapper .anticon:hover {
+ opacity: 0.3;
+}
+```
diff --git a/packages/meta/src/image/demo/toolbarRender.tsx b/packages/meta/src/image/demo/toolbarRender.tsx
new file mode 100644
index 0000000..6cc9bef
--- /dev/null
+++ b/packages/meta/src/image/demo/toolbarRender.tsx
@@ -0,0 +1,59 @@
+import React from 'react';
+import {
+ DownloadOutlined,
+ RotateLeftOutlined,
+ RotateRightOutlined,
+ SwapOutlined,
+ ZoomInOutlined,
+ ZoomOutOutlined,
+} from '@ant-design/icons';
+import { Image, Space } from 'antd';
+
+const src = 'https://zos.alipayobjects.com/rmsportal/jkjgkEfvpUPVyRjUImniVslZfWPnJuuZ.png';
+
+const App: React.FC = () => {
+ // or you can download flipped and rotated image
+ // https://codesandbox.io/s/zi-ding-yi-gong-ju-lan-antd-5-7-0-forked-c9jvmp
+ const onDownload = () => {
+ fetch(src)
+ .then((response) => response.blob())
+ .then((blob) => {
+ const url = URL.createObjectURL(new Blob([blob]));
+ const link = document.createElement('a');
+ link.href = url;
+ link.download = 'image.png';
+ document.body.appendChild(link);
+ link.click();
+ URL.revokeObjectURL(url);
+ link.remove();
+ });
+ };
+
+ return (
+ (
+
+
+
+
+
+
+
+
+
+ ),
+ }}
+ />
+ );
+};
+
+export default App;
diff --git a/packages/meta/src/image/index.tsx b/packages/meta/src/image/index.tsx
new file mode 100644
index 0000000..45d02ba
--- /dev/null
+++ b/packages/meta/src/image/index.tsx
@@ -0,0 +1,97 @@
+import * as React from 'react';
+import EyeOutlined from '@ant-design/icons/EyeOutlined';
+import classNames from 'classnames';
+import RcImage from 'rc-image';
+import type { ImageProps } from 'rc-image';
+
+import { useZIndex } from '../_util/hooks/useZIndex';
+import { getTransitionName } from '../_util/motion';
+import { ConfigContext } from '../config-provider';
+import useCSSVarCls from '../config-provider/hooks/useCSSVarCls';
+import defaultLocale from '../locale/en_US';
+import PreviewGroup, { icons } from './PreviewGroup';
+import useStyle from './style';
+
+export interface CompositionImage extends React.FC
{
+ PreviewGroup: typeof PreviewGroup;
+}
+
+const Image: CompositionImage = (props) => {
+ const {
+ prefixCls: customizePrefixCls,
+ preview,
+ className,
+ rootClassName,
+ style,
+ ...otherProps
+ } = props;
+ const {
+ getPrefixCls,
+ locale: contextLocale = defaultLocale,
+ getPopupContainer: getContextPopupContainer,
+ image,
+ } = React.useContext(ConfigContext);
+
+ const prefixCls = getPrefixCls('image', customizePrefixCls);
+ const rootPrefixCls = getPrefixCls();
+
+ const imageLocale = contextLocale.Image || defaultLocale.Image;
+ // Style
+ const rootCls = useCSSVarCls(prefixCls);
+ const [wrapCSSVar, hashId, cssVarCls] = useStyle(prefixCls, rootCls);
+
+ const mergedRootClassName = classNames(rootClassName, hashId, cssVarCls, rootCls);
+
+ const mergedClassName = classNames(className, hashId, image?.className);
+
+ const [zIndex] = useZIndex(
+ 'ImagePreview',
+ typeof preview === 'object' ? preview.zIndex : undefined,
+ );
+
+ const mergedPreview = React.useMemo(() => {
+ if (preview === false) {
+ return preview;
+ }
+ const _preview = typeof preview === 'object' ? preview : {};
+ const { getContainer, closeIcon, ...restPreviewProps } = _preview;
+ return {
+ mask: (
+
+
+ {imageLocale?.preview}
+
+ ),
+ icons,
+ ...restPreviewProps,
+ getContainer: getContainer ?? getContextPopupContainer,
+ transitionName: getTransitionName(rootPrefixCls, 'zoom', _preview.transitionName),
+ maskTransitionName: getTransitionName(rootPrefixCls, 'fade', _preview.maskTransitionName),
+ zIndex,
+ closeIcon: closeIcon ?? image?.preview?.closeIcon,
+ };
+ }, [preview, imageLocale, image?.preview?.closeIcon]);
+
+ const mergedStyle: React.CSSProperties = { ...image?.style, ...style };
+
+ return wrapCSSVar(
+ ,
+ );
+};
+
+export type { ImageProps };
+
+Image.PreviewGroup = PreviewGroup;
+
+if (process.env.NODE_ENV !== 'production') {
+ Image.displayName = 'Image';
+}
+
+export default Image;
diff --git a/packages/meta/src/image/index.zh-CN.md b/packages/meta/src/image/index.zh-CN.md
new file mode 100644
index 0000000..e4b8db5
--- /dev/null
+++ b/packages/meta/src/image/index.zh-CN.md
@@ -0,0 +1,162 @@
+---
+category: Components
+group: 数据展示
+title: Image 图片
+subtitle: 图片
+description: 可预览的图片。
+cols: 2
+---
+
+## 何时使用
+
+- 需要展示图片时使用。
+- 加载显示大图或加载失败时容错处理。
+
+## 代码演示
+
+
+基本用法
+容错处理
+渐进加载
+多张图片预览
+相册模式
+自定义预览图片
+受控的预览
+自定义工具栏
+自定义预览内容
+自定义预览文本
+嵌套
+多图预览时顶部进度自定义
+自定义组件 Token
+
+## API
+
+通用属性参考:[通用属性](/docs/react/common-props)
+
+### Image
+
+| 参数 | 说明 | 类型 | 默认值 | 版本 |
+| --- | --- | --- | --- | --- |
+| alt | 图像描述 | string | - | 4.6.0 |
+| fallback | 加载失败容错地址 | string | - | 4.6.0 |
+| height | 图像高度 | string \| number | - | 4.6.0 |
+| placeholder | 加载占位,为 `true` 时使用默认占位 | ReactNode | - | 4.6.0 |
+| preview | 预览参数,为 `false` 时禁用 | boolean \| [PreviewType](#previewtype) | true | 4.6.0 [PreviewType](#previewyype):4.7.0 |
+| src | 图片地址 | string | - | 4.6.0 |
+| width | 图像宽度 | string \| number | - | 4.6.0 |
+| onError | 加载错误回调 | (event: Event) => void | - | 4.12.0 |
+
+其他属性见 [<img>](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#Attributes)
+
+### PreviewType
+
+| 参数 | 说明 | 类型 | 默认值 | 版本 |
+| --- | --- | --- | --- | --- |
+| visible | 是否显示 | boolean | - | - |
+| src | 自定义预览 src | string | - | 4.10.0 |
+| getContainer | 指定预览挂载的节点,但依旧为全屏展示,false 为挂载在当前位置 | string \| HTMLElement \| (() => HTMLElement) \| false | - | 4.8.0 |
+| movable | 是否可移动 | boolean | true | 5.8.0 |
+| mask | 缩略图遮罩 | ReactNode | - | 4.9.0 |
+| maskClassName | 缩略图遮罩类名 | string | - | 4.11.0 |
+| rootClassName | 预览图的根 DOM 类名 | string | - | 5.4.0 |
+| scaleStep | `1 + scaleStep` 为缩放放大的每步倍数 | number | 0.5 | - |
+| minScale | 最小缩放倍数 | number | 1 | 5.7.0 |
+| maxScale | 最大放大倍数 | number | 50 | 5.7.0 |
+| closeIcon | 自定义关闭 Icon | React.ReactNode | - | 5.7.0 |
+| forceRender | 强制渲染预览图 | boolean | - | - |
+| toolbarRender | 自定义工具栏 | (originalNode: React.ReactElement, info: Omit<[ToolbarRenderInfoType](#toolbarrenderinfotype), 'current' \| 'total'>) => React.ReactNode | - | 5.7.0 |
+| imageRender | 自定义预览内容 | (originalNode: React.ReactElement, info: { transform: [TransformType](#transformtype) }) => React.ReactNode | - | 5.7.0 |
+| destroyOnClose | 关闭预览时销毁子元素 | boolean | false | |
+| onTransform | 预览图 transform 变化的回调 | { transform: [TransformType](#transformtype), action: [TransformAction](#transformaction) } | - | 5.7.0 |
+| onVisibleChange | 当 `visible` 发生改变时的回调 | (visible: boolean, prevVisible: boolean) => void | - | - |
+
+## PreviewGroup
+
+| 参数 | 说明 | 类型 | 默认值 | 版本 |
+| --- | --- | --- | --- | --- |
+| preview | 预览参数,为 `false` 时禁用 | boolean \| [PreviewGroupType](#previewgrouptype) | true | 4.6.0 [PreviewGroupType](#previewgrouptype):4.7.0 |
+| items | 预览数组 | string[] \| { src: string, crossOrigin: string, ... }[] | - | 5.7.0 |
+| fallback | 加载失败容错地址 | string | - | 5.7.0 |
+
+### PreviewGroupType
+
+| 参数 | 说明 | 类型 | 默认值 | 版本 |
+| --- | --- | --- | --- | --- |
+| visible | 是否显示 | boolean | - | - |
+| getContainer | 指定预览挂载的节点,但依旧为全屏展示,false 为挂载在当前位置 | string \| HTMLElement \| (() => HTMLElement) \| false | - | 4.8.0 |
+| movable | 是否可移动 | boolean | true | 5.8.0 |
+| current | 当前预览图的 index | number | - | 4.12.0 |
+| mask | 缩略图遮罩 | ReactNode | - | 4.9.0 |
+| maskClassName | 缩略图遮罩类名 | string | - | 4.11.0 |
+| rootClassName | 预览图的根 DOM 类名 | string | - | 5.4.0 |
+| scaleStep | `1 + scaleStep` 为缩放放大的每步倍数 | number | 0.5 | - |
+| minScale | 最小缩放倍数 | number | 1 | 5.7.0 |
+| maxScale | 最大放大倍数 | number | 50 | 5.7.0 |
+| closeIcon | 自定义关闭 Icon | React.ReactNode | - | 5.7.0 |
+| forceRender | 强制渲染预览图 | boolean | - | - |
+| countRender | 自定义预览计数内容 | (current: number, total: number) => React.ReactNode | - | 4.20.0 |
+| toolbarRender | 自定义工具栏 | (originalNode: React.ReactElement, info: [ToolbarRenderInfoType](#toolbarrenderinfotype)) => React.ReactNode | - | 5.7.0 |
+| imageRender | 自定义预览内容 | (originalNode: React.ReactElement, info: { transform: [TransformType](#transformtype), current: number }) => React.ReactNode | - | 5.7.0 |
+| onTransform | 预览图 transform 变化的回调 | { transform: [TransformType](#transformtype), action: [TransformAction](#transformaction) } | - | 5.7.0 |
+| onChange | 切换预览图的回调 | (current: number, prevCurrent: number) => void | - | 5.3.0 |
+| onVisibleChange | 当 `visible` 发生改变时的回调 | (visible: boolean, prevVisible: boolean, current: number) => void | - | current 参数 5.3.0 |
+
+## Interface
+
+### TransformType
+
+```ts
+{
+ x: number;
+ y: number;
+ rotate: number;
+ scale: number;
+ flipX: boolean;
+ flipY: boolean;
+}
+```
+
+### TransformAction
+
+```ts
+type TransformAction =
+ | 'flipY'
+ | 'flipX'
+ | 'rotateLeft'
+ | 'rotateRight'
+ | 'zoomIn'
+ | 'zoomOut'
+ | 'close'
+ | 'prev'
+ | 'next'
+ | 'wheel'
+ | 'doubleClick'
+ | 'move'
+ | 'dragRebound';
+```
+
+### ToolbarRenderInfoType
+
+```ts
+{
+ icons: {
+ flipYIcon: React.ReactNode;
+ flipXIcon: React.ReactNode;
+ rotateLeftIcon: React.ReactNode;
+ rotateRightIcon: React.ReactNode;
+ zoomOutIcon: React.ReactNode;
+ zoomInIcon: React.ReactNode;
+ };
+ actions: {
+ onFlipY: () => void;
+ onFlipX: () => void;
+ onRotateLeft: () => void;
+ onRotateRight: () => void;
+ onZoomOut: () => void;
+ onZoomIn: () => void;
+ };
+ transform: TransformType,
+ current: number;
+ total: number;
+}
+```
diff --git a/packages/meta/src/image/style/index.ts b/packages/meta/src/image/style/index.ts
new file mode 100644
index 0000000..09e39bd
--- /dev/null
+++ b/packages/meta/src/image/style/index.ts
@@ -0,0 +1,390 @@
+import type { CSSObject } from '@ant-design/cssinjs';
+import { unit } from '@ant-design/cssinjs';
+import { TinyColor } from '@ctrl/tinycolor';
+
+import { genModalMaskStyle } from '../../modal/style';
+import { textEllipsis } from '../../style';
+import { initFadeMotion, initZoomMotion } from '../../style/motion';
+import type { FullToken, GenerateStyle, GetDefaultToken } from '../../theme/internal';
+import { genStyleHooks, mergeToken } from '../../theme/internal';
+
+export interface ComponentToken {
+ /**
+ * @desc 预览浮层 z-index
+ * @descEN z-index of preview popup
+ */
+ zIndexPopup: number;
+ /**
+ * @desc 预览操作图标大小
+ * @descEN Size of preview operation icon
+ */
+ previewOperationSize: number;
+ /**
+ * @desc 预览操作图标颜色
+ * @descEN Color of preview operation icon
+ */
+ previewOperationColor: string;
+ /**
+ * @desc 预览操作图标悬浮颜色
+ * @descEN Color of hovered preview operation icon
+ */
+ previewOperationHoverColor: string;
+ /**
+ * @desc 预览操作图标禁用颜色
+ * @descEN Disabled color of preview operation icon
+ */
+ previewOperationColorDisabled: string;
+}
+
+export interface ImageToken extends FullToken<'Image'> {
+ previewCls: string;
+ modalMaskBg: string;
+ imagePreviewSwitchSize: number;
+}
+
+export type PositionType = 'static' | 'relative' | 'fixed' | 'absolute' | 'sticky' | undefined;
+
+export const genBoxStyle = (position?: PositionType): CSSObject => ({
+ position: position || 'absolute',
+ inset: 0,
+});
+
+export const genImageMaskStyle = (token: ImageToken): CSSObject => {
+ const { iconCls, motionDurationSlow, paddingXXS, marginXXS, prefixCls, colorTextLightSolid } =
+ token;
+ return {
+ position: 'absolute',
+ inset: 0,
+ display: 'flex',
+ alignItems: 'center',
+ justifyContent: 'center',
+ color: colorTextLightSolid,
+ background: new TinyColor('#000').setAlpha(0.5).toRgbString(),
+ cursor: 'pointer',
+ opacity: 0,
+ transition: `opacity ${motionDurationSlow}`,
+
+ [`.${prefixCls}-mask-info`]: {
+ ...textEllipsis,
+ padding: `0 ${unit(paddingXXS)}`,
+ [iconCls]: {
+ marginInlineEnd: marginXXS,
+ svg: {
+ verticalAlign: 'baseline',
+ },
+ },
+ },
+ };
+};
+
+export const genPreviewOperationsStyle = (token: ImageToken): CSSObject => {
+ const {
+ previewCls,
+ modalMaskBg,
+ paddingSM,
+ marginXL,
+ margin,
+ paddingLG,
+ previewOperationColorDisabled,
+ previewOperationHoverColor,
+ motionDurationSlow,
+ iconCls,
+ colorTextLightSolid,
+ } = token;
+
+ const operationBg = new TinyColor(modalMaskBg).setAlpha(0.1);
+ const operationBgHover = operationBg.clone().setAlpha(0.2);
+
+ return {
+ [`${previewCls}-footer`]: {
+ position: 'fixed',
+ bottom: marginXL,
+ left: {
+ _skip_check_: true,
+ value: 0,
+ },
+ width: '100%',
+ display: 'flex',
+ flexDirection: 'column',
+ alignItems: 'center',
+ color: token.previewOperationColor,
+ },
+ [`${previewCls}-progress`]: {
+ marginBottom: margin,
+ },
+ [`${previewCls}-close`]: {
+ position: 'fixed',
+ top: marginXL,
+ right: {
+ _skip_check_: true,
+ value: marginXL,
+ },
+ display: 'flex',
+ color: colorTextLightSolid,
+ backgroundColor: operationBg.toRgbString(),
+ borderRadius: '50%',
+ padding: paddingSM,
+ outline: 0,
+ border: 0,
+ cursor: 'pointer',
+ transition: `all ${motionDurationSlow}`,
+
+ '&:hover': {
+ backgroundColor: operationBgHover.toRgbString(),
+ },
+
+ [`& > ${iconCls}`]: {
+ fontSize: token.previewOperationSize,
+ },
+ },
+ [`${previewCls}-operations`]: {
+ display: 'flex',
+ alignItems: 'center',
+ padding: `0 ${unit(paddingLG)}`,
+ backgroundColor: operationBg.toRgbString(),
+ borderRadius: 100,
+
+ '&-operation': {
+ marginInlineStart: paddingSM,
+ padding: paddingSM,
+ cursor: 'pointer',
+ transition: `all ${motionDurationSlow}`,
+ userSelect: 'none',
+
+ [`&:not(${previewCls}-operations-operation-disabled):hover > ${iconCls}`]: {
+ color: previewOperationHoverColor,
+ },
+
+ '&-disabled': {
+ color: previewOperationColorDisabled,
+ cursor: 'not-allowed',
+ },
+
+ '&:first-of-type': {
+ marginInlineStart: 0,
+ },
+
+ [`& > ${iconCls}`]: {
+ fontSize: token.previewOperationSize,
+ },
+ },
+ },
+ };
+};
+
+export const genPreviewSwitchStyle = (token: ImageToken): CSSObject => {
+ const {
+ modalMaskBg,
+ iconCls,
+ previewOperationColorDisabled,
+ previewCls,
+ zIndexPopup,
+ motionDurationSlow,
+ } = token;
+
+ const operationBg = new TinyColor(modalMaskBg).setAlpha(0.1);
+ const operationBgHover = operationBg.clone().setAlpha(0.2);
+
+ return {
+ [`${previewCls}-switch-left, ${previewCls}-switch-right`]: {
+ position: 'fixed',
+ insetBlockStart: '50%',
+ zIndex: token.calc(zIndexPopup).add(1).equal({ unit: false }),
+ display: 'flex',
+ alignItems: 'center',
+ justifyContent: 'center',
+ width: token.imagePreviewSwitchSize,
+ height: token.imagePreviewSwitchSize,
+ marginTop: token.calc(token.imagePreviewSwitchSize).mul(-1).div(2).equal(),
+ color: token.previewOperationColor,
+ background: operationBg.toRgbString(),
+ borderRadius: '50%',
+ transform: `translateY(-50%)`,
+ cursor: 'pointer',
+ transition: `all ${motionDurationSlow}`,
+ userSelect: 'none',
+
+ '&:hover': {
+ background: operationBgHover.toRgbString(),
+ },
+
+ [`&-disabled`]: {
+ '&, &:hover': {
+ color: previewOperationColorDisabled,
+ background: 'transparent',
+ cursor: 'not-allowed',
+ [`> ${iconCls}`]: {
+ cursor: 'not-allowed',
+ },
+ },
+ },
+ [`> ${iconCls}`]: {
+ fontSize: token.previewOperationSize,
+ },
+ },
+
+ [`${previewCls}-switch-left`]: {
+ insetInlineStart: token.marginSM,
+ },
+
+ [`${previewCls}-switch-right`]: {
+ insetInlineEnd: token.marginSM,
+ },
+ };
+};
+
+export const genImagePreviewStyle: GenerateStyle = (token: ImageToken) => {
+ const { motionEaseOut, previewCls, motionDurationSlow, componentCls } = token;
+
+ return [
+ {
+ [`${componentCls}-preview-root`]: {
+ [previewCls]: {
+ height: '100%',
+ textAlign: 'center',
+ pointerEvents: 'none',
+ },
+
+ [`${previewCls}-body`]: {
+ ...genBoxStyle(),
+ overflow: 'hidden',
+ },
+
+ [`${previewCls}-img`]: {
+ maxWidth: '100%',
+ maxHeight: '70%',
+ verticalAlign: 'middle',
+ transform: 'scale3d(1, 1, 1)',
+ cursor: 'grab',
+ transition: `transform ${motionDurationSlow} ${motionEaseOut} 0s`,
+ userSelect: 'none',
+
+ '&-wrapper': {
+ ...genBoxStyle(),
+ transition: `transform ${motionDurationSlow} ${motionEaseOut} 0s`,
+
+ // https://github.com/ant-design/ant-design/issues/39913
+ // TailwindCSS will reset img default style.
+ // Let's set back.
+ display: 'flex',
+ justifyContent: 'center',
+ alignItems: 'center',
+
+ '& > *': {
+ pointerEvents: 'auto',
+ },
+
+ '&::before': {
+ display: 'inline-block',
+ width: 1,
+ height: '50%',
+ marginInlineEnd: -1,
+ content: '""',
+ },
+ },
+ },
+
+ [`${previewCls}-moving`]: {
+ [`${previewCls}-preview-img`]: {
+ cursor: 'grabbing',
+
+ '&-wrapper': {
+ transitionDuration: '0s',
+ },
+ },
+ },
+ },
+ },
+ // Override
+ {
+ [`${componentCls}-preview-root`]: {
+ [`${previewCls}-wrap`]: {
+ zIndex: token.zIndexPopup,
+ },
+ },
+ },
+
+ // Preview operations & switch
+ {
+ [`${componentCls}-preview-operations-wrapper`]: {
+ position: 'fixed',
+ zIndex: token.calc(token.zIndexPopup).add(1).equal({ unit: false }),
+ },
+ '&': [genPreviewOperationsStyle(token), genPreviewSwitchStyle(token)],
+ },
+ ];
+};
+
+const genImageStyle: GenerateStyle = (token: ImageToken) => {
+ const { componentCls } = token;
+ return {
+ // ============================== image ==============================
+ [componentCls]: {
+ position: 'relative',
+ display: 'inline-block',
+ [`${componentCls}-img`]: {
+ width: '100%',
+ height: 'auto',
+ verticalAlign: 'middle',
+ },
+ [`${componentCls}-img-placeholder`]: {
+ backgroundColor: token.colorBgContainerDisabled,
+ backgroundImage:
+ "url('data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTQuNSAyLjVoLTEzQS41LjUgMCAwIDAgMSAzdjEwYS41LjUgMCAwIDAgLjUuNWgxM2EuNS41IDAgMCAwIC41LS41VjNhLjUuNSAwIDAgMC0uNS0uNXpNNS4yODEgNC43NWExIDEgMCAwIDEgMCAyIDEgMSAwIDAgMSAwLTJ6bTguMDMgNi44M2EuMTI3LjEyNyAwIDAgMS0uMDgxLjAzSDIuNzY5YS4xMjUuMTI1IDAgMCAxLS4wOTYtLjIwN2wyLjY2MS0zLjE1NmEuMTI2LjEyNiAwIDAgMSAuMTc3LS4wMTZsLjAxNi4wMTZMNy4wOCAxMC4wOWwyLjQ3LTIuOTNhLjEyNi4xMjYgMCAwIDEgLjE3Ny0uMDE2bC4wMTUuMDE2IDMuNTg4IDQuMjQ0YS4xMjcuMTI3IDAgMCAxLS4wMi4xNzV6IiBmaWxsPSIjOEM4QzhDIiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48L3N2Zz4=')",
+ backgroundRepeat: 'no-repeat',
+ backgroundPosition: 'center center',
+ backgroundSize: '30%',
+ },
+ [`${componentCls}-mask`]: {
+ ...genImageMaskStyle(token),
+ },
+ [`${componentCls}-mask:hover`]: {
+ opacity: 1,
+ },
+ [`${componentCls}-placeholder`]: {
+ ...genBoxStyle(),
+ },
+ },
+ };
+};
+
+const genPreviewMotion: GenerateStyle = (token) => {
+ const { previewCls } = token;
+
+ return {
+ [`${previewCls}-root`]: initZoomMotion(token, 'zoom'),
+ [`&`]: initFadeMotion(token, true),
+ };
+};
+
+// ============================== Export ==============================
+export const prepareComponentToken: GetDefaultToken<'Image'> = (token) => ({
+ zIndexPopup: token.zIndexPopupBase + 80,
+ previewOperationColor: new TinyColor(token.colorTextLightSolid).setAlpha(0.65).toRgbString(),
+ previewOperationHoverColor: new TinyColor(token.colorTextLightSolid).setAlpha(0.85).toRgbString(),
+ previewOperationColorDisabled: new TinyColor(token.colorTextLightSolid)
+ .setAlpha(0.25)
+ .toRgbString(),
+ previewOperationSize: token.fontSizeIcon * 1.5, // FIXME: fontSizeIconLG
+});
+
+export default genStyleHooks(
+ 'Image',
+ (token) => {
+ const previewCls = `${token.componentCls}-preview`;
+
+ const imageToken = mergeToken(token, {
+ previewCls,
+ modalMaskBg: new TinyColor('#000').setAlpha(0.45).toRgbString(), // FIXME: Shared Token
+ imagePreviewSwitchSize: token.controlHeightLG,
+ });
+
+ return [
+ genImageStyle(imageToken),
+ genImagePreviewStyle(imageToken),
+ genModalMaskStyle(mergeToken(imageToken, { componentCls: previewCls })),
+ genPreviewMotion(imageToken),
+ ];
+ },
+ prepareComponentToken,
+);
diff --git a/packages/meta/src/index.tsx b/packages/meta/src/index.tsx
index 1eb8bdc..52eee01 100644
--- a/packages/meta/src/index.tsx
+++ b/packages/meta/src/index.tsx
@@ -16,10 +16,18 @@ export { default as VideoPlayer } from './VideoPlayer'
export type { VideoViewProps, VideoViewRef } from './VideoPlayer'
export { default as Tabs } from './tabs'
export type { TabPaneProps, TabsProps } from './tabs';
-export { default as Button } from './button'
export { default as message } from './message'
+export { default as Button } from './button'
export type { ArgsProps } from './message'
export type { ButtonProps, ButtonGroupProps } from './button';
+export type { ImageProps } from './image';
+export { default as Image } from './image';
+export { default as FloatButton } from './float-button';
+export type {
+ FloatButtonGroupProps,
+ FloatButtonProps,
+ FloatButtonRef,
+} from './float-button/interface';
export { default as Space } from './space'
export { default as Slider } from './slider'
export type { SliderBaseProps, SliderMarks, SliderRangeProps, SliderSingleProps, SliderTooltipProps } from './slider';
diff --git a/tsconfig.json b/tsconfig.json
index 28e0062..774856c 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -32,6 +32,6 @@
// "@zhst/meta" 全局使用的工具包,不建议写到 npm 包中去
]
},
- "include": [".dumirc.ts", "src/**/*", "packages/**/*"],
+ "include": [".dumirc.ts", "src/**/*", "packages/**/*", "global.d.ts"],
"exclude": ["node_modules", "lib", "es", ".dumi"]
}