diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000000..7e3649acc2
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,16 @@
+# http://editorconfig.org
+root = true
+
+[*]
+indent_style = space
+indent_size = 2
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.md]
+trim_trailing_whitespace = false
+
+[Makefile]
+indent_style = tab
diff --git a/.eslintrc b/.eslintrc
new file mode 100755
index 0000000000..b6d3fb664f
--- /dev/null
+++ b/.eslintrc
@@ -0,0 +1,45 @@
+{
+ "extends": [
+ "eslint-config-egg"
+ ],
+ "globals": {
+ "AMap": true,
+ "L7": true,
+ },
+ "env": {
+ "browser": true,
+ "node": true
+ },
+ "parser": "babel-eslint",
+ "parserOptions": {
+ "sourceType": "module"
+ },
+ "plugins": [
+ "html"
+ ],
+ "rules": {
+ "no-console": [
+ "error",
+ {
+ "allow": [
+ "warn",
+ "error"
+ ]
+ }
+ ],
+ "no-bitwise": [
+ 0
+ ],
+ "experimentalDecorators": [
+ 0
+ ],
+ "comma-dangle": [
+ "error",
+ "never"
+ ],
+ "jsdoc/require-param": 0,
+ "linebreak-style": [
+ 0
+ ]
+ }
+}
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
new file mode 100755
index 0000000000..6ed9d91adb
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE.md
@@ -0,0 +1,24 @@
+
+
+* **L7 Version**:
+* **Platform**:
+* **Mini Showcase(like screenshots)**:
+* **CodePen Link**:
+
+
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100755
index 0000000000..fd86cfc330
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,19 @@
+
+
+##### Checklist
+
+
+- [ ] `npm test` passes
+- [ ] tests and/or benchmarks are included
+- [ ] commit message follows commit guidelines
+
+##### Description of change
+
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000..1dc69bff9f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,75 @@
+
+# Created by https://www.gitignore.io/api/node
+
+### Node ###
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (http://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# Typescript v1 declaration files
+# typings/
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+
+
+# End of https://www.gitignore.io/api/node
+
+lib/
+dist/
+
+.DS_Store
+public
+.cache
+
+yarn.lock
+package-lock.json
diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000000..a531dea305
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,7 @@
+{
+ "printWidth": 80,
+ "tabWidth": 2,
+ "singleQuote": true,
+ "trailingComma": "all",
+ "arrowParens": "always"
+}
diff --git a/.storybook/addons.ts b/.storybook/addons.ts
new file mode 100644
index 0000000000..06915d6e12
--- /dev/null
+++ b/.storybook/addons.ts
@@ -0,0 +1,3 @@
+import '@storybook/addon-actions/register';
+import '@storybook/addon-notes/register';
+import '@storybook/addon-storysource/register';
diff --git a/.storybook/config.ts b/.storybook/config.ts
new file mode 100644
index 0000000000..e2e73a0586
--- /dev/null
+++ b/.storybook/config.ts
@@ -0,0 +1,32 @@
+// tslint:disable-next-line:no-submodule-imports
+import '!style-loader!css-loader!sass-loader!./iframe.scss';
+import '@storybook/addon-console';
+import { addParameters, configure } from '@storybook/react';
+import { create } from '@storybook/theming';
+
+addParameters({
+ options: {
+ isFullscreen: false,
+ showAddonsPanel: true,
+ showSearchBox: false,
+ panelPosition: 'bottom',
+ hierarchySeparator: /\./,
+ // hierarchyRootSeparator: /\|/,
+ enableShortcuts: true,
+ theme: create({
+ base: 'light',
+ brandTitle: 'L7 POC for new architecture',
+ brandUrl: 'https://github.com/xiaoiver/L7-POC',
+ gridCellSize: 12,
+ }),
+ },
+});
+
+// automatically import all files ending in *.stories.tsx
+const req = require.context('../stories', true, /\.stories\.tsx$/);
+
+function loadStories() {
+ req.keys().forEach(req);
+}
+
+configure(loadStories, module);
diff --git a/.storybook/iframe.scss b/.storybook/iframe.scss
new file mode 100644
index 0000000000..fd9c693afd
--- /dev/null
+++ b/.storybook/iframe.scss
@@ -0,0 +1,7 @@
+html, body {
+ margin: 0;
+}
+
+.dg.ac {
+ z-index: 999 !important;
+}
\ No newline at end of file
diff --git a/.storybook/l7.css b/.storybook/l7.css
new file mode 100644
index 0000000000..ca0e4f1fa9
--- /dev/null
+++ b/.storybook/l7.css
@@ -0,0 +1,400 @@
+.l7-marker-container {
+ width:100%
+}
+.l7-marker {
+ position: absolute !important;
+ top: 0;
+ left: 0;
+ z-index: 5;
+}
+.l7-popup-anchor-top,
+.l7-popup-anchor-top-left,
+.l7-popup-anchor-top-right {
+ -webkit-flex-direction: column;
+ flex-direction: column;
+}
+
+.l7-popup-anchor-bottom,
+.l7-popup-anchor-bottom-left,
+.l7-popup-anchor-bottom-right {
+ -webkit-flex-direction: column-reverse;
+ flex-direction: column-reverse;
+}
+
+.l7-popup-anchor-left {
+ -webkit-flex-direction: row;
+ flex-direction: row;
+}
+
+.l7-popup-anchor-right {
+ -webkit-flex-direction: row-reverse;
+ flex-direction: row-reverse;
+}
+.l7-popup {
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: -webkit-flex;
+ display: flex;
+ will-change: transform;
+ pointer-events: none;
+ z-index: 5;
+}
+.l7-popup-tip {
+ width: 0;
+ height: 0;
+ border: 10px solid transparent;
+ z-index: 1;
+}
+.l7-popup-anchor-top .l7-popup-tip {
+ -webkit-align-self: center;
+ align-self: center;
+ border-top: none;
+ border-bottom-color: #fff;
+}
+
+.l7-popup-anchor-top-left .l7-popup-tip {
+ -webkit-align-self: flex-start;
+ align-self: flex-start;
+ border-top: none;
+ border-left: none;
+ border-bottom-color: #fff;
+}
+
+.l7-popup-anchor-top-right .l7-popup-tip {
+ -webkit-align-self: flex-end;
+ align-self: flex-end;
+ border-top: none;
+ border-right: none;
+ border-bottom-color: #fff;
+}
+
+.l7-popup-anchor-bottom .l7-popup-tip {
+ -webkit-align-self: center;
+ align-self: center;
+ border-bottom: none;
+ border-top-color: #fff;
+}
+
+.l7-popup-anchor-bottom-left .l7-popup-tip {
+ -webkit-align-self: flex-start;
+ align-self: flex-start;
+ border-bottom: none;
+ border-left: none;
+ border-top-color: #fff;
+}
+
+.l7-popup-anchor-bottom-right .l7-popup-tip {
+ -webkit-align-self: flex-end;
+ align-self: flex-end;
+ border-bottom: none;
+ border-right: none;
+ border-top-color: #fff;
+}
+
+.l7-popup-anchor-left .l7-popup-tip {
+ -webkit-align-self: center;
+ align-self: center;
+ border-left: none;
+ border-right-color: #fff;
+}
+
+.l7-popup-anchor-right .l7-popup-tip {
+ -webkit-align-self: center;
+ align-self: center;
+ border-right: none;
+ border-left-color: #fff;
+}
+
+.l7-popup-close-button {
+ position: absolute;
+ right: 0;
+ top: 0;
+ border: 0;
+ padding: 0;
+ font-size: 25px;
+ line-height: 20px;
+ border-radius: 0 3px 0 0;
+ cursor: pointer;
+ background-color: transparent;
+}
+
+.l7-popup-close-button:hover {
+ background-color: rgba(0, 0, 0, 0.05);
+}
+
+.l7-popup-content {
+ position: relative;
+ background: #fff;
+ border-radius: 3px;
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
+ padding: 10px 10px 15px;
+ pointer-events: auto;
+}
+
+.l7-popup-anchor-top-left .l7-popup-content {
+ border-top-left-radius: 0;
+}
+
+.l7-popup-anchor-top-right .l7-popup-content {
+ border-top-right-radius: 0;
+}
+
+.l7-popup-anchor-bottom-left .l7-popup-content {
+ border-bottom-left-radius: 0;
+}
+
+.l7-popup-anchor-bottom-right .l7-popup-content {
+ border-bottom-right-radius: 0;
+}
+
+.l7-popup-track-pointer {
+ display: none;
+}
+
+.l7-popup-track-pointer * {
+ pointer-events: none;
+ user-select: none;
+}
+
+.l7-map:hover .l7-popup-track-pointer {
+ display: flex;
+}
+
+.l7-map:active .l7-popup-track-pointer {
+ display: none;
+}
+
+.l7-popup-close-button {
+ position: absolute;
+ right: 0;
+ top: 0;
+ border: 0;
+ border-radius: 0 3px 0 0;
+ cursor: pointer;
+ background-color: transparent;
+}
+
+.l7-popup-close-button:hover {
+ background-color: rgba(0, 0, 0, 0.05);
+}
+
+.l7-popup-content {
+ position: relative;
+ background: #fff;
+ border-radius: 3px;
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
+ padding: 10px 10px 15px;
+ pointer-events: auto;
+}
+
+/* general toolbar styles */
+
+.l7-bar {
+ box-shadow: 0 1px 5px rgba(0,0,0,0.65);
+ border-radius: 4px;
+ }
+.l7-bar a,
+.l7-bar a:hover {
+ background-color: #fff;
+ border-bottom: 1px solid #ccc;
+ width: 26px;
+ height: 26px;
+ line-height: 26px;
+ display: block;
+ text-align: center;
+ text-decoration: none;
+ color: black;
+ }
+.l7-bar a,
+.l7-control-layers-toggle {
+ background-position: 50% 50%;
+ background-repeat: no-repeat;
+ display: block;
+ }
+.l7-bar a:hover {
+ background-color: #f4f4f4;
+ }
+.l7-bar a:first-child {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ }
+.l7-bar a:last-child {
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ border-bottom: none;
+ }
+.l7-bar a.l7-disabled {
+ cursor: default;
+ background-color: #f4f4f4;
+ color: #bbb;
+ }
+
+
+/* control positioning */
+
+.l7-control-container {
+ font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
+}
+.l7-control-hide {
+ display: none;
+}
+.l7-control {
+ position: relative;
+ z-index: 800;
+ pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
+ pointer-events: auto;
+ }
+.l7-top,
+.l7-bottom {
+ position: absolute;
+ z-index: 1000;
+ pointer-events: none;
+ }
+.l7-top {
+ top: 0;
+ }
+.l7-right {
+ right: 0;
+ }
+.l7-bottom {
+ bottom: 0;
+ }
+.l7-left {
+ left: 0;
+ }
+.l7-control {
+ float: left;
+ clear: both;
+ }
+.l7-right .l7-control {
+ float: right;
+ }
+.l7-top .l7-control {
+ margin-top: 10px;
+ }
+.l7-bottom .l7-control {
+ margin-bottom: 10px;
+ }
+.l7-left .l7-control {
+ margin-left: 10px;
+ }
+.l7-right .l7-control {
+ margin-right: 10px;
+ }
+
+ /* attribution and scale controls */
+
+.l7-control-container .l7-control-attribution {
+ background: #fff;
+ background: rgba(255, 255, 255, 0.7);
+ margin: 0;
+ }
+.l7-control-attribution,
+.l7-control-scale-line {
+ padding: 0 5px;
+ color: #333;
+ }
+.l7-control-attribution a {
+ text-decoration: none;
+ }
+.l7-control-attribution a:hover {
+ text-decoration: underline;
+ }
+.l7-container .l7-control-attribution,
+.l7-container .l7-control-scale {
+ font-size: 11px;
+ }
+.l7-left .l7-control-scale {
+ margin-left: 5px;
+ }
+.l7-bottom .l7-control-scale {
+ margin-bottom: 5px;
+ }
+.l7-control-scale-line {
+ border: 2px solid #777;
+ border-top: none;
+ line-height: 1.1;
+ padding: 2px 5px 1px;
+ font-size: 11px;
+ white-space: nowrap;
+ overflow: hidden;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+
+ background: #fff;
+ background: rgba(255, 255, 255, 0.5);
+ }
+.l7-control-scale-line:not(:first-child) {
+ border-top: 2px solid #777;
+ border-bottom: none;
+ margin-top: -2px;
+ }
+.l7-control-scale-line:not(:first-child):not(:last-child) {
+ border-bottom: 2px solid #777;
+ }
+
+.l7-touch .l7-control-attribution,
+.l7-touch .l7-control-layers,
+.l7-touch .l7-bar {
+ box-shadow: none;
+ }
+.l7-touch .l7-control-layers,
+.l7-touch .l7-bar {
+ border: 2px solid rgba(0,0,0,0.2);
+ background-clip: padding-box;
+ }
+
+
+ /* layers control */
+
+.l7-control-layers {
+ box-shadow: 0 1px 5px rgba(0,0,0,0.4);
+ background: #fff;
+ border-radius: 5px;
+ }
+.l7-control-layers-toggle {
+ background-image: url(../images/layers.svg);
+ width: 36px;
+ height: 36px;
+ }
+.l7-retina .l7-control-layers-toggle {
+ background-image: url(../images/layers.svg);
+ background-size: 26px 26px;
+ }
+.l7-touch .l7-control-layers-toggle {
+ width: 44px;
+ height: 44px;
+ }
+.l7-control-layers .l7-control-layers-list,
+.l7-control-layers-expanded .l7-control-layers-toggle {
+ display: none;
+ }
+.l7-control-layers-expanded .l7-control-layers-list {
+ display: block;
+ position: relative;
+ }
+.l7-control-layers-expanded {
+ padding: 6px 10px 6px 6px;
+ color: #333;
+ background: #fff;
+ }
+.l7-control-layers-scrollbar {
+ overflow-y: scroll;
+ overflow-x: hidden;
+ padding-right: 5px;
+ }
+.l7-control-layers-selector {
+ margin-top: 2px;
+ position: relative;
+ top: 1px;
+ }
+.l7-control-layers label {
+ display: block;
+ }
+.l7-control-layers-separator {
+ height: 0;
+ border-top: 1px solid #ddd;
+ margin: 5px -10px 5px -6px;
+ }
+
diff --git a/.storybook/webpack.config.js b/.storybook/webpack.config.js
new file mode 100644
index 0000000000..2d3b00e6e0
--- /dev/null
+++ b/.storybook/webpack.config.js
@@ -0,0 +1,39 @@
+module.exports = ({ config }) => {
+
+ // config.module.rules.push({
+ // test: /\.glsl$/,
+ // loader: 'raw-loader'
+ // });
+
+ // config.module.rules.push({
+ // test: /\.worker\.(js|ts)$/,
+ // use: {
+ // loader: 'worker-loader',
+ // options: { inline: true, fallback: false }
+ // }
+ // });
+
+ config.module.rules.push({
+ test: /\.(ts|tsx)$/,
+ loader: require.resolve('awesome-typescript-loader'),
+ });
+
+ config.module.rules.push({
+ test: /\.stories\.tsx?$/,
+ loaders: [
+ {
+ loader: require.resolve('@storybook/addon-storysource/loader'),
+ options: { parser: 'typescript' },
+ },
+ ],
+ enforce: 'pre',
+ },{
+ test: /\.stories\.css?$/,
+ use: ['style-loader', 'css-loader'],
+ },
+ );
+
+ config.resolve.extensions.push('.ts', '.tsx', '.js', '.glsl');
+
+ return config;
+};
diff --git a/.stylelintrc b/.stylelintrc
new file mode 100644
index 0000000000..0a81b4570a
--- /dev/null
+++ b/.stylelintrc
@@ -0,0 +1,7 @@
+{
+ "processors": ["stylelint-processor-styled-components"],
+ "extends": [
+ "stylelint-config-standard",
+ "stylelint-config-styled-components"
+ ]
+}
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000000..bc97a5937e
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,12 @@
+sudo: false
+language: node_js
+node_js:
+- '12'
+branches:
+ only:
+ - next
+install:
+- yarn install
+script:
+- yarn test
+- yarn coveralls
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000000..0db3279e44
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,3 @@
+{
+
+}
diff --git a/LICENSE.md b/LICENSE.md
new file mode 100644
index 0000000000..7da54ea95c
--- /dev/null
+++ b/LICENSE.md
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017 Alipay.inc
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000..d4dd765c88
--- /dev/null
+++ b/README.md
@@ -0,0 +1,84 @@
+# L7
+
+![最近提交](https://badgen.net/github/last-commit/antvis/L7)
+
+L7 Large-scale WebGL-powered Geospatial data visualization analysis framework
+
+
+<<<<<<< HEAD
+
+
+
+=======
+>>>>>>> f40e44f... fix(fix): fix
+### Installation
+
+```
+ npm install @antv/l7
+
+```
+
+### Features
+
+<<<<<<< HEAD
+
+=======
+>>>>>>> f40e44f... fix(fix): fix
+### Links
+
+
+## Development
+
+使用 Yarn Workspace 完成依赖安装以及各包之间的 link 工作:
+```bash
+yarn install
+```
+
+开发模式:
+```bash
+yarn watch
+```
+
+运行 Demo
+```bash
+yarn storybook
+```
+
+代替 `git commit` 提交:
+```bash
+yarn commit
+```
+
+## view doc example
+
+```bash
+ npm start
+```
+visit http://localhost:8000/
+
+## Add Package
+
+add new package:
+```bash
+lerna create my-pack -y
+```
+
+将 ui-lib 作为 my-pack 的依赖:
+```bash
+yarn workspace my-pack add ui-lib/1.0.0
+```
+
+将 lodash 添加为所有 package 的依赖(不包含root)
+```bash
+yarn workspaces run add lodash
+```
+
+将 typescript 设置为 root 的开发依赖
+```bash
+yarn add -W -D typescript jest
+```
diff --git a/README.zh.md b/README.zh.md
new file mode 100644
index 0000000000..12ec4f7481
--- /dev/null
+++ b/README.zh.md
@@ -0,0 +1,141 @@
+## L7 地理空间数据可视分析引擎
+
+L7 是由蚂蚁金服 AntV 数据可视化团队推出的基于 WebGL 的开源大规模地理空间数据可视分析开发框架。L7 中的 L 代表 Location,7 代表世界七大洲,寓意能为全球位置数据提供可视分析的能力。L7 以图形符号学为理论基础,将抽象复杂的空间数据转化成 2D、3D 符号,通过颜色、大小、体积、纹理等视觉变量实现丰富的可视化表达。
+
+
+
+
+### Installation
+
+```
+ npm install @antv/l7
+
+```
+
+
+## 核心特性
+
+<<<<<<< HEAD
+🌏 数据驱动可视化展示
+
+数据驱动,从数到形,支持丰富的地图可视化类型,更好洞察数据。
+
+🌏 2D,3D 一体化的海量数据高性能渲染
+
+百万级空间数据实时,动态渲染。
+
+🌏 简单灵活的数据接入
+
+支持CSV,JSON,geojson等数据格式接入,可以根据需求自定义数据格式,无需复杂的空间数据转换。
+
+🌏 多地图底图支持,支持离线内网部署
+=======
+### 🌏 数据驱动可视化展示
+
+数据驱动,从数到形,支持丰富的地图可视化类型,更好洞察数据。
+
+### 🌏 2D,3D 一体化的海量数据高性能渲染
+
+百万级空间数据实时,动态渲染。
+
+### 🌏简单灵活的数据接入
+
+支持CSV,JSON,geojson等数据格式接入,可以根据需求自定义数据格式,无需复杂的空间数据转换。
+
+### 🌏 多地图底图支持,支持离线内网部署
+>>>>>>> f40e44f... fix(fix): fix
+
+高德地图国内合法合规的地理底图,Mapbox 满足国际化业务需求。
+
+## 支持丰富的图表类型
+
+### 点图层
+
+ - 气泡图
+ - 散点图
+ - 符号地图
+ - 3D柱状地图
+ - 聚合地图
+ - 复合图表地图
+ - 自定义Marker
+
+### 线图层
+
+- 路径地图
+- 弧线,支持2D弧线、3D弧线以及大圆航线
+- 等值线
+
+### 面图层
+
+- 填充图
+- 3D填充图
+
+### 热力图
+
+- 经典热力图
+- 蜂窝热力图
+- 网格热力图
+
+### 栅格地图
+- 图片
+- Raster
+
+## L7 2.0 Roadmap
+
+![L7 Road Map](https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*3j9HTLTQT2MAAAAAAAAAAABkARQnAQ)
+
+## Development
+
+使用 Yarn Workspace 完成依赖安装以及各包之间的 link 工作:
+```bash
+yarn install
+```
+
+开发模式:
+```bash
+yarn watch
+```
+
+运行 Demo
+```bash
+yarn storybook
+```
+
+代替 `git commit` 提交:
+```bash
+yarn commit
+```
+
+## view doc example
+
+```bash
+ npm start
+```
+visit http://localhost:8000/
+
+## Add Package
+
+add new package:
+```bash
+lerna create my-pack -y
+```
+
+将 ui-lib 作为 my-pack 的依赖:
+```bash
+yarn workspace my-pack add ui-lib/1.0.0
+```
+
+将 lodash 添加为所有 package 的依赖(不包含root)
+```bash
+yarn workspaces run add lodash
+```
+
+将 typescript 设置为 root 的开发依赖
+```bash
+yarn add -W -D typescript jest
+```
\ No newline at end of file
diff --git a/babel.config.js b/babel.config.js
new file mode 100644
index 0000000000..439b91afb5
--- /dev/null
+++ b/babel.config.js
@@ -0,0 +1,120 @@
+// @see https://babeljs.io/docs/en/next/config-files#project-wide-configuration
+module.exports = api => {
+ api.cache(() => process.env.NODE_ENV);
+
+ const isSite = api.env('site');
+ const isCDNBundle = api.env('bundle');
+ const isCommonJS = api.env('cjs');
+ const isESModule = api.env('esm');
+ const isTest = api.env('test');
+
+ if (isSite) { //
+ return {
+ presets: [
+ 'babel-preset-gatsby'
+ ],
+ plugins: [
+ '@babel/plugin-proposal-optional-chaining',
+ '@babel/plugin-proposal-nullish-coalescing-operator',
+ [
+ '@babel/plugin-proposal-decorators',
+ {
+ legacy: true
+ }
+ ],
+ [
+ // import glsl as raw text
+ 'babel-plugin-inline-import',
+ {
+ extensions: [
+ // 由于使用了 TS 的 resolveJsonModule 选项,JSON 可以直接引入,不需要当作纯文本
+ // '.json',
+ '.glsl'
+ ]
+ }
+ ]
+ ]
+ };
+ }
+ return {
+ presets: [
+ [
+ '@babel/env',
+ {
+ targets: {
+ browsers: 'Last 2 Chrome versions, Firefox ESR',
+ node: 'current'
+ },
+ // set `modules: false` when building CDN bundle, let rollup do commonjs works
+ // @see https://github.com/rollup/rollup-plugin-babel#modules
+ modules: (isCDNBundle || isESModule) ? false : 'auto'
+ }
+ ],
+ [
+ '@babel/preset-react',
+ {
+ development: isCommonJS
+ }
+ ],
+ '@babel/preset-typescript'
+ ],
+ plugins: [
+ '@babel/plugin-proposal-optional-chaining',
+ '@babel/plugin-proposal-nullish-coalescing-operator',
+ [
+ '@babel/plugin-proposal-decorators',
+ {
+ legacy: true
+ }
+ ],
+ [
+ '@babel/plugin-proposal-class-properties',
+ {
+ // @see https://github.com/storybookjs/storybook/issues/6069#issuecomment-472544973
+ loose: true
+ }
+ ],
+ '@babel/plugin-syntax-dynamic-import',
+ // let rollup do commonjs works
+ // @see https://github.com/rollup/rollup-plugin-babel#modules
+ (isCDNBundle || isESModule) ? {} : '@babel/plugin-transform-modules-commonjs',
+ // '@babel/plugin-transform-modules-commonjs',
+ // 开发模式下以原始文本引入,便于调试
+ isCDNBundle ? {} : [
+ // import glsl as raw text
+ 'babel-plugin-inline-import',
+ {
+ extensions: [
+ // 由于使用了 TS 的 resolveJsonModule 选项,JSON 可以直接引入,不需要当作纯文本
+ // '.json',
+ '.glsl'
+ ]
+ }
+ ],
+ [
+ // @see https://github.com/babel/babel/issues/8741#issuecomment-509041135
+ 'const-enum',
+ {
+ transform: 'constObject'
+ }
+ ],
+ // 按需引用 @see https://github.com/lodash/babel-plugin-lodash
+ 'lodash',
+ // 内联 WebGL 常量 @see https://www.npmjs.com/package/babel-plugin-inline-webgl-constants
+ isCDNBundle ? 'inline-webgl-constants' : {}
+ ],
+ ignore: [
+ 'node_modules',
+ ...!isTest ? [
+ '**/*.test.tsx',
+ '**/*.test.ts',
+ '**/*.story.tsx',
+ '__snapshots__',
+ '__tests__',
+ '__stories__',
+ '**/*/__snapshots__',
+ '**/*/__tests__'
+ ] : []
+ ]
+ };
+};
diff --git a/build/bundle.ts b/build/bundle.ts
new file mode 100644
index 0000000000..737cb99736
--- /dev/null
+++ b/build/bundle.ts
@@ -0,0 +1,7 @@
+// @ts-ignore
+export * from '@l7/scene';
+// @ts-ignore
+export * from '@l7/layers';
+
+// @ts-ignore
+export * from '@l7/component';
diff --git a/build/rollup-plugin-glsl.js b/build/rollup-plugin-glsl.js
new file mode 100644
index 0000000000..892ddbe944
--- /dev/null
+++ b/build/rollup-plugin-glsl.js
@@ -0,0 +1,33 @@
+import { createFilter } from 'rollup-pluginutils';
+
+// borrow from https://github.com/uber/luma.gl/blob/master/dev-modules/babel-plugin-remove-glsl-comments/index.js#L4-L5
+const INLINE_COMMENT_REGEX = /\s*\/\/.*[\n\r]/g;
+const BLOCK_COMMENT_REGEX = /\s*\/\*(\*(?!\/)|[^*])*\*\//g;
+
+// 生产环境压缩 GLSL
+export default function glsl(include, minify) {
+ const filter = createFilter(include);
+ return {
+ name: 'glsl',
+ transform(code, id) {
+ if (!filter(id)) return;
+
+ if (minify) {
+ code = code
+ .trim() // strip whitespace at the start/end
+ .replace(/\n+/g, '\n') // collapse multi line breaks
+ // remove comments
+ .replace(INLINE_COMMENT_REGEX, '\n')
+ .replace(BLOCK_COMMENT_REGEX, '')
+ .replace(/\n\s+/g, '\n') // strip identation
+ // .replace(/\s?([+-\/*=,])\s?/g, '$1') // strip whitespace around operators
+ // .replace(/([;\(\),\{\}])\n(?=[^#])/g, '$1'); // strip more line breaks
+ }
+
+ return {
+ code: `export default ${JSON.stringify(code)};`,
+ map: { mappings: '' }
+ };
+ }
+ };
+}
\ No newline at end of file
diff --git a/build/rollup.config.js b/build/rollup.config.js
new file mode 100644
index 0000000000..cf07153724
--- /dev/null
+++ b/build/rollup.config.js
@@ -0,0 +1,79 @@
+import path from 'path';
+import alias from '@rollup/plugin-alias';
+import json from '@rollup/plugin-json';
+import resolve from 'rollup-plugin-node-resolve';
+import commonjs from 'rollup-plugin-commonjs';
+import { terser } from "rollup-plugin-terser";
+import analyze from 'rollup-plugin-analyzer';
+import babel from 'rollup-plugin-babel';
+import glsl from './rollup-plugin-glsl';
+
+function resolveFile(filePath) {
+ return path.join(__dirname, '..', filePath)
+}
+
+module.exports = [
+ {
+ input: resolveFile('build/bundle.ts'),
+ output: {
+ file: resolveFile('dist/bundle.js'),
+ format: 'umd',
+ name: 'L7',
+ globals: {
+ 'mapbox-gl': 'mapboxgl',
+ },
+ },
+ external: [
+ 'mapbox-gl',
+ ],
+ treeshake: true,
+ plugins: [
+ alias(
+ {
+ resolve: ['.tsx', '.ts'],
+ entries: [
+ {
+ find: /^@l7\/(.*)/,
+ replacement: resolveFile('packages/$1/src'),
+ },
+ ]
+ },
+ ),
+ resolve({
+ browser: true,
+ preferBuiltins: false,
+ extensions: ['.js', '.ts'],
+ }),
+ glsl(
+ ['**/*.glsl'],
+ true,
+ ),
+ json(),
+ // @see https://github.com/rollup/rollup-plugin-node-resolve#using-with-rollup-plugin-commonjs
+ commonjs({
+ namedExports: {
+ eventemitter3: [ 'EventEmitter' ],
+ // @see https://github.com/rollup/rollup-plugin-commonjs/issues/266
+ lodash: [
+ 'isNil',
+ 'uniq',
+ 'clamp',
+ 'isObject',
+ 'isFunction',
+ 'cloneDeep',
+ 'isString',
+ 'isNumber',
+ ],
+ }
+ }),
+ babel({
+ extensions: ['.js', '.ts'],
+ }),
+ terser(),
+ analyze({
+ summaryOnly: true,
+ limit: 20,
+ }),
+ ],
+ },
+];
diff --git a/commitlint.config.js b/commitlint.config.js
new file mode 100644
index 0000000000..dc0adae16c
--- /dev/null
+++ b/commitlint.config.js
@@ -0,0 +1,5 @@
+module.exports = {
+ extends: [
+ '@commitlint/config-conventional'
+ ]
+};
diff --git a/demos/raster/basic/data/ndviundefined.be75.tif b/demos/raster/basic/data/ndviundefined.be75.tif
new file mode 100755
index 0000000000..b4205d18e4
Binary files /dev/null and b/demos/raster/basic/data/ndviundefined.be75.tif differ
diff --git a/demos/raster/basic/demo/image.js b/demos/raster/basic/demo/image.js
new file mode 100644
index 0000000000..ade1323c73
--- /dev/null
+++ b/demos/raster/basic/demo/image.js
@@ -0,0 +1,25 @@
+import { Scene } from '@l7/scene';
+import { ImageLayer } from '@l7/layers'
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'amap',
+ style: 'light',
+ center: [121.2680, 30.3628],
+ zoom: 13,
+});
+
+const layer = new ImageLayer({});
+layer.source(
+ 'https://gw.alipayobjects.com/zos/rmsportal/FnHFeFklTzKDdUESRNDv.jpg',
+ {
+ parser: {
+ type: 'image',
+ extent: [121.168, 30.2828, 121.384, 30.4219],
+ },
+ },
+);
+scene.on('loaded',()=>{
+ scene.addLayer(layer);
+})
+
diff --git a/demos/raster/basic/demo/meta.json b/demos/raster/basic/demo/meta.json
new file mode 100644
index 0000000000..25b9c47b9e
--- /dev/null
+++ b/demos/raster/basic/demo/meta.json
@@ -0,0 +1,21 @@
+{
+ "title": {
+ "zh": "栅格图层",
+ "en": "Gallery"
+ },
+ "demos": [
+ {
+ "filename": "image.js",
+ "title": "图片",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*ZrCaR53185IAAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "raster.js",
+ "title": "地形"
+ },
+ {
+ "filename": "light.js",
+ "title": "夜光图"
+ }
+ ]
+}
diff --git a/demos/raster/basic/demo/raster.js b/demos/raster/basic/demo/raster.js
new file mode 100644
index 0000000000..c63bcaa948
--- /dev/null
+++ b/demos/raster/basic/demo/raster.js
@@ -0,0 +1,61 @@
+import { Scene } from '@l7/scene';
+import { RasterLayer } from '@l7/layers'
+import * as GeoTIFF from 'geotiff';
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'mapbox',
+ style: 'light',
+ center: [121.2680, 30.3628],
+ zoom: 3,
+});
+ async function getTiffData() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/rmsportal/XKgkjjGaAzRyKupCBiYW.dat',
+ );
+ const arrayBuffer = await response.arrayBuffer();
+ const tiff = await GeoTIFF.fromArrayBuffer(arrayBuffer);
+ const image = await tiff.getImage();
+ const width = image.getWidth();
+ const height = image.getHeight();
+ const values = await image.readRasters();
+ return {
+ data: values[0],
+ width,
+ height,
+ min: 0,
+ max: 8000,
+ };
+}
+
+async function addLayer() {
+ const tiffdata = await getTiffData();
+
+ const layer = new RasterLayer({});
+ layer
+ .source(tiffdata.data, {
+ parser: {
+ type: 'raster',
+ width: tiffdata.width,
+ height: tiffdata.height,
+ min: 0,
+ max: 8000,
+ extent: [73.482190241, 3.82501784112, 135.106618732, 57.6300459963],
+ },
+ })
+ .style({
+ heightRatio:100,
+ opacity: 0.8,
+ rampColors: {
+ colors: [ '#FF4818', '#F7B74A', '#FFF598', '#91EABC', '#2EA9A1', '#206C7C' ].reverse(),
+ positions: [0, 0.2, 0.4, 0.6, 0.8, 1.0]
+ },
+ });
+ return layer;
+}
+scene.on('loaded', async () =>{
+ const layer = await addLayer();
+ scene.addLayer(layer);
+ scene.render();
+})
+
diff --git a/demos/raster/basic/index.en.md b/demos/raster/basic/index.en.md
new file mode 100644
index 0000000000..39ed3aaf30
--- /dev/null
+++ b/demos/raster/basic/index.en.md
@@ -0,0 +1,4 @@
+---
+title: Raster Map
+order: 0
+---
diff --git a/demos/raster/basic/index.zh.md b/demos/raster/basic/index.zh.md
new file mode 100644
index 0000000000..6147459f75
--- /dev/null
+++ b/demos/raster/basic/index.zh.md
@@ -0,0 +1,4 @@
+---
+title: 栅格图层
+order: 0
+---
diff --git a/demos/tutorial/control/demo/amap.js b/demos/tutorial/control/demo/amap.js
new file mode 100644
index 0000000000..957781139c
--- /dev/null
+++ b/demos/tutorial/control/demo/amap.js
@@ -0,0 +1,58 @@
+import { Scene } from '@l7/scene';
+import { PointLayer } from '@l7/layers'
+import { Scale, Zoom, Layers } from '@l7/component';
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'amap',
+ style: 'dark',
+ center: [121.40, 31.258134],
+ zoom: 14,
+});
+
+fetch('https://gw.alipayobjects.com/os/basement_prod/893d1d5f-11d9-45f3-8322-ee9140d288ae.json')
+ .then((res) => res.json())
+ .then((data) => {
+ const pointLayer =
+ new PointLayer({
+ })
+ .source(data, {
+ parser: {
+ type: 'json',
+ x: 'longitude',
+ y: 'latitude'
+ }
+ }).shape('circle')
+ .size('unit_price', [5, 25])
+ .color('name',['#49B5AD', "#5B8FF9"])
+ .style({
+ opacity: 0.3,
+ strokeWidth: 1,
+ })
+
+ scene.addLayer(pointLayer);
+ var overlayers = {
+ "围栏填充": pointLayer,
+ };
+ var baseLayers = {
+ "基础地图": pointLayer,
+ };
+ const layersControl = new Layers({
+ overlayers: overlayers,
+ });
+
+ scene.addControl(layersControl);
+
+ });
+
+
+
+
+ const zoomControl = new Zoom();
+ const scaleControl = new Scale({
+ position:"bottomright"
+ });
+
+ scene.addControl(zoomControl);
+ scene.addControl(scaleControl);
+
diff --git a/demos/tutorial/control/demo/mapbox.js b/demos/tutorial/control/demo/mapbox.js
new file mode 100644
index 0000000000..4f7eb86e7d
--- /dev/null
+++ b/demos/tutorial/control/demo/mapbox.js
@@ -0,0 +1,19 @@
+import { Scene } from '@l7/scene';
+import { Scale, Zoom } from '@l7/component';
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'mapbox',
+ style: 'light',
+ center: [-97.119140625, 38.75408327579141],
+ zoom: 2,
+});
+
+const zoomControl = new Zoom();
+const scaleControl = new Scale({
+ position:'rightbottom',
+});
+scene.addControl(zoomControl);
+scene.addControl(scaleControl);
+
+
diff --git a/demos/tutorial/control/demo/meta.json b/demos/tutorial/control/demo/meta.json
new file mode 100644
index 0000000000..d921629ac5
--- /dev/null
+++ b/demos/tutorial/control/demo/meta.json
@@ -0,0 +1,16 @@
+{
+ "title": {
+ "zh": "地图",
+ "en": "Category"
+ },
+ "demos": [
+ {
+ "filename": "amap.js",
+ "title": "高德底图组件",
+ },
+ {
+ "filename": "mapbox.js",
+ "title": "MapBox底图组件"
+ }
+ ]
+}
diff --git a/demos/tutorial/control/demo/popup.js b/demos/tutorial/control/demo/popup.js
new file mode 100644
index 0000000000..36f094242b
--- /dev/null
+++ b/demos/tutorial/control/demo/popup.js
@@ -0,0 +1,57 @@
+import { Scene } from '@l7/scene';
+import { PointLayer } from '@l7/layers'
+import { Scale, Zoom, Layers } from '@l7/component';
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'amap',
+ style: 'dark',
+ center: [121.40, 31.258134],
+ zoom: 5,
+});
+
+fetch('https://gw.alipayobjects.com/os/basement_prod/893d1d5f-11d9-45f3-8322-ee9140d288ae.json')
+ .then((res) => res.json())
+ .then((data) => {
+ const pointLayer =
+ new PointLayer({
+ })
+ .source(data, {
+ parser: {
+ type: 'json',
+ x: 'longitude',
+ y: 'latitude'
+ }
+ }).shape('circle')
+ .size('unit_price', [5, 25])
+ .color('name',['#49B5AD', "#5B8FF9"])
+ .style({
+ opacity: 0.3,
+ strokeWidth: 1,
+ })
+
+ scene.addLayer(pointLayer);
+ var overlayers = {
+ "围栏填充": pointLayer,
+ };
+ var baseLayers = {
+ "基础地图": pointLayer,
+ };
+ const layersControl = new Layers({
+ overlayers: overlayers,
+ baseLayers,
+ });
+
+ scene.addControl(layersControl);
+
+ });
+
+
+
+
+ const zoomControl = new Zoom();
+ const scaleControl = new Scale();
+
+ scene.addControl(zoomControl);
+ scene.addControl(scaleControl);
+
diff --git a/demos/tutorial/control/index.en.md b/demos/tutorial/control/index.en.md
new file mode 100644
index 0000000000..9dbd64200a
--- /dev/null
+++ b/demos/tutorial/control/index.en.md
@@ -0,0 +1,4 @@
+---
+title: control
+order: 2
+---
diff --git a/demos/tutorial/control/index.zh.md b/demos/tutorial/control/index.zh.md
new file mode 100644
index 0000000000..53dd2eef6b
--- /dev/null
+++ b/demos/tutorial/control/index.zh.md
@@ -0,0 +1,6 @@
+---
+title: 组件
+order: 2
+---
+
+
diff --git a/demos/tutorial/data/demo/line.js b/demos/tutorial/data/demo/line.js
new file mode 100644
index 0000000000..288f28b1dd
--- /dev/null
+++ b/demos/tutorial/data/demo/line.js
@@ -0,0 +1,39 @@
+import { Scene } from '@l7/scene';
+import { LineLayer } from '@l7/layers'
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'mapbox',
+ style: 'light',
+ center: [102.602992, 23.107329],
+ zoom: 13,
+});
+
+fetch('https://gw.alipayobjects.com/os/rmsportal/ZVfOvhVCzwBkISNsuKCc.json')
+ .then((res) => res.json())
+ .then((data) => {
+ const layer =
+ new LineLayer({
+ })
+ .source(data)
+ .size(1)
+ .shape('line')
+ .color(
+ 'ELEV',
+ [
+ '#E8FCFF',
+ '#CFF6FF',
+ '#A1E9ff',
+ '#65CEF7',
+ '#3CB1F0',
+ '#2894E0',
+ '#1772c2',
+ '#105CB3',
+ '#0D408C',
+ '#002466',
+ ].reverse(),
+ )
+ scene.addLayer(layer);
+ console.log(layer);
+
+ });
diff --git a/demos/tutorial/data/demo/meta.json b/demos/tutorial/data/demo/meta.json
new file mode 100644
index 0000000000..42812b23e6
--- /dev/null
+++ b/demos/tutorial/data/demo/meta.json
@@ -0,0 +1,13 @@
+{
+ "title": {
+ "zh": "图库",
+ "en": "Gallery"
+ },
+ "demos": [
+ {
+ "filename": "line.js",
+ "title": "线图层",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*KCyXTJrePiYAAAAAAAAAAABkARQnAQ"
+ }
+ ]
+}
diff --git a/demos/tutorial/data/index.en.md b/demos/tutorial/data/index.en.md
new file mode 100644
index 0000000000..64087c814e
--- /dev/null
+++ b/demos/tutorial/data/index.en.md
@@ -0,0 +1,4 @@
+---
+title: Data
+order: 1
+---
diff --git a/demos/tutorial/data/index.zh.md b/demos/tutorial/data/index.zh.md
new file mode 100644
index 0000000000..4ed5924b03
--- /dev/null
+++ b/demos/tutorial/data/index.zh.md
@@ -0,0 +1,4 @@
+---
+title: 数据
+order: 1
+---
diff --git a/demos/tutorial/map/demo/amap.js b/demos/tutorial/map/demo/amap.js
new file mode 100644
index 0000000000..fd49089062
--- /dev/null
+++ b/demos/tutorial/map/demo/amap.js
@@ -0,0 +1,9 @@
+import { Scene } from '@l7/scene';
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'amap',
+ style: 'dark',
+ center: [121.40, 31.258134],
+ zoom: 5,
+});
diff --git a/demos/tutorial/map/demo/mapbox.js b/demos/tutorial/map/demo/mapbox.js
new file mode 100644
index 0000000000..ec57775e93
--- /dev/null
+++ b/demos/tutorial/map/demo/mapbox.js
@@ -0,0 +1,10 @@
+import { Scene } from '@l7/scene';
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'mapbox',
+ style: 'light',
+ center: [ -97.119140625, 38.75408327579141],
+ zoom: 2,
+});
+
diff --git a/demos/tutorial/map/demo/meta.json b/demos/tutorial/map/demo/meta.json
new file mode 100644
index 0000000000..31bfd25527
--- /dev/null
+++ b/demos/tutorial/map/demo/meta.json
@@ -0,0 +1,18 @@
+{
+ "title": {
+ "zh": "地图",
+ "en": "Category"
+ },
+ "demos": [
+ {
+ "filename": "amap.js",
+ "title": "高德底图",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*KCyXTJrePiYAAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "mapbox.js",
+ "title": "MapBox底图",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*KCyXTJrePiYAAAAAAAAAAABkARQnAQ"
+ }
+ ]
+}
diff --git a/demos/tutorial/map/index.en.md b/demos/tutorial/map/index.en.md
new file mode 100644
index 0000000000..860c4ca494
--- /dev/null
+++ b/demos/tutorial/map/index.en.md
@@ -0,0 +1,6 @@
+---
+title: map
+order: 0
+---
+初始 L7 地图实例
+
diff --git a/demos/tutorial/map/index.zh.md b/demos/tutorial/map/index.zh.md
new file mode 100644
index 0000000000..4fc3d4f1a5
--- /dev/null
+++ b/demos/tutorial/map/index.zh.md
@@ -0,0 +1,9 @@
+---
+title: 地图
+order: 0
+redirect_from:
+ - /zh/tutorial
+---
+初始 L7 地图实例
+
+
diff --git a/dev-docs/ConfigSchemaValidation.md b/dev-docs/ConfigSchemaValidation.md
new file mode 100644
index 0000000000..e8736469b8
--- /dev/null
+++ b/dev-docs/ConfigSchemaValidation.md
@@ -0,0 +1,68 @@
+# ConfigSchemaValidation 设计
+
+用户在使用 L7 的 Scene/Layer API 时,由于参数配置项众多难免会误传。需要在运行时通过校验提前发现并给出友好的提示。
+另外由于 L7 允许用户自定义 Layer 与 LayerPlugin,规范化参数配置项也能提升易用性和质量。
+
+这方面 Webpack 做的很好,使用 [schema-utils](https://github.com/webpack/schema-utils) 基于 JSON Schema 对 Plugin 和 Loader 进行校验。如果传入了错误的配置项,会给出友好的提示:
+```
+Invalid configuration object. MyPlugin has been initialised using a configuration object that does not match the API schema.
+ - configuration.optionName should be a integer.
+```
+
+和 Webpack 一样,我们也选择 [ajv](https://github.com/epoberezkin/ajv) 作为 JSON Schema 校验器。
+目前我们只在 Layer 初始阶段进行校验,一旦校验失败会中断后续初始化插件的处理,并在控制台给出校验失败信息。后续需要在属性更新时同样进行校验。
+
+## Layer 基类配置项 Schema
+
+目前在基类中我们声明了如下属性及其对应的校验规则:
+
+```javascript
+export default {
+ properties: {
+ // 开启拾取
+ enablePicking: {
+ type: 'boolean',
+ },
+ // 开启高亮
+ enableHighlight: {
+ type: 'boolean',
+ },
+ // 高亮颜色:例如 [0, 0, 1, 1] 或者 '#ffffff'
+ highlightColor: {
+ oneOf: [
+ {
+ type: 'array',
+ items: {
+ type: 'number',
+ minimum: 0,
+ maximum: 1,
+ },
+ },
+ {
+ type: 'string',
+ },
+ ],
+ },
+ },
+};
+```
+
+如果传入了错误的配置项则会在控制台给出提示。
+
+## Layer 子类配置项 Schema
+
+Layer 子类可以通过重载 `getConfigSchema()` 方法定义自身的特有属性。例如 `PolygonLayer` 需要定义透明度:
+
+```javascript
+protected getConfigSchema() {
+ return {
+ properties: {
+ opacity: {
+ type: 'number',
+ minimum: 0,
+ maximum: 1,
+ },
+ },
+ };
+}
+```
diff --git a/dev-docs/MultiPassRenderer.md b/dev-docs/MultiPassRenderer.md
new file mode 100644
index 0000000000..533f3a0fd0
--- /dev/null
+++ b/dev-docs/MultiPassRenderer.md
@@ -0,0 +1,167 @@
+# MultiPassRenderer 实现
+
+每个 Layer 渲染时都需要经历多个流程,从最简单的清屏、拾取到各种各样的后处理。我们希望把复杂渲染流程中每个步骤都抽象出来,让 L7 内部以及用户能够方便的扩展,进行渲染流程的自定义。其中的每一个步骤称作 Pass,负责串联调用各个 Pass 的渲染器称作 MultiPassRenderer。
+
+![](./screenshots/blurpass.png)
+
+## 接口设计
+
+目前我们将 Pass 分成两类:
+ 1. 渲染相关。例如 ClearPass、RenderPass、PickingPass、ShadowPass
+ 2. 后处理相关。例如 CopyPass、BlurPass
+
+```typescript
+export enum PassType {
+ Normal = 'normal',
+ PostProcessing = 'post-processing',
+}
+```
+
+每个 Pass 定义两个生命周期节点,初始化和渲染,并将当前 Layer 作为参数传入。因此 Pass 中可以访问 Layer 上的属性及方法:
+```typescript
+export interface IPass {
+ getType(): PassType;
+ init(layer: ILayer): void;
+ render(layer: ILayer): void;
+}
+```
+
+其中后处理相关的 Pass 比较特殊,例如最后一个 PostProcessingPass 需要自动切换 renderTarget 为屏幕:
+```typescript
+export interface IPostProcessingPass extends IPass {
+ setRenderToScreen(renderToScreen: boolean): void;
+ isEnabled(): boolean;
+ setEnabled(enabled: boolean): void;
+}
+```
+
+具体实现依赖 `@l7/renderer` 实现,目前使用 regl 实现 IFramebuffer 等接口。
+
+## 内置 Pass
+
+目前我们仅对外开放 PostProcessing 后处理相关 Pass 的配置。在 L7 内部我们使用如下流程:
+```
+ClearPass -> RenderPass -> [ ...其他后处理 Pass ] -> CopyPass
+```
+
+目前各内置 Pass 说明如下:
+
+| Pass 名称 | 类型 | 参数 | 说明 |
+| -------- | --- | ------------- | --------- |
+| ClearPass | normal | 无 | 清除 framebuffer,clearColor 为 [0, 0, 0, 0] |
+| RenderPass | normal | 无 | 渲染到 framebuffer,作为后续后处理的输入 |
+| PickingPass | normal | 无 | 负责拾取,[详见](./PixelPickingEngine.md) |
+| TAAPass | normal | 无 | [详见](./TAA.md) |
+| CopyPass | post-processing | 无 | 作为后处理最后一个 Pass,负责拷贝 framebuffer 到屏幕输出 |
+
+剩余后处理效果见最后一节。
+后续待实现 Pass 如下:
+
+- [ ] ShadowPass 负责生成 shadowMap,供 PCF、CSM 等实时阴影技术使用
+
+## 使用方法
+
+在每个 Layer 中,通过 `enableMultiPassRenderer` 开启之后,可以配置各个 Pass 的参数。配置方法类似 babel 插件:
+```typescript
+const layer = new PolygonLayer({
+ enableMultiPassRenderer: true,
+ passes: [
+ 'blurH', // 使用 BlurHPass
+ [
+ 'blurV', // 使用 BlurVPass
+ {
+ blurRadius: 20, // 设置模糊半径
+ },
+ ],
+ ],
+});
+```
+
+## 内置后处理效果
+
+参考了 [glfx](https://github.com/evanw/glfx.js) 中的一些常用图像处理效果。可以按照名称引用,顺序决定了各个效果的应用次序。例如我们想依次应用噪声和模糊效果:
+
+```typescript
+const layer = new PolygonLayer({
+ passes: [
+ [
+ 'noise', // 使用 NoisePass
+ {
+ amount: 0.5,
+ },
+ ]
+ 'blurH', // 使用 BlurHPass
+ 'blurV', // 使用 BlurVPass
+ ],
+});
+```
+
+下面详细介绍各个后处理效果及其参数,在 DEMO 中也可以通过 GUI 任意调节参数。
+
+### 高斯模糊
+
+采用 [高斯模糊 blur9](https://github.com/Jam3/glsl-fast-gaussian-blur/blob/master/9.glsl)。
+
+名称:`blurH/blurV`
+
+参数:
+* `blurRadius` 水平/垂直方向模糊半径,默认值为 `8.0`
+
+效果如下:
+
+![](./screenshots/blurpass.png)
+
+### ColorHalftone
+
+CMYK halftone 效果
+
+名称:`colorHalftone`
+
+参数:
+* `angle` pattern 旋转角度,默认值为 0
+* `size` pattern 大小,默认值为 8
+* `center` `[x, y]` pattern 的中心,默认值为 `[0, 0]`
+
+效果如下:
+
+![](./screenshots/halftone.png)
+
+### 噪声
+
+噪声效果。
+
+名称:`noise`
+
+参数:
+* `amount` 噪声程度,范围 `[0, 1]`,默认值为 `0.5`
+
+效果如下:
+
+![](./screenshots/noise.png)
+
+### 六边形像素化处理
+
+六边形像素化处理。
+
+名称:`hexagonalPixelate`
+
+参数:
+* `scale` 六边形大小,默认值为 `10`
+* `center` `[x, y]` pattern 的中心,默认值为 `[0.5, 0.5]`
+
+效果如下:
+
+![](./screenshots/hexagonalPixelate.png)
+
+### Sepia
+
+Sepia 颜色映射。
+
+名称:`sepia`
+
+参数:
+* `amount` 程度,范围 `[0, 1]`,默认值为 `0.5`
+
+效果如下:
+
+![](./screenshots/sepia.png)
\ No newline at end of file
diff --git a/dev-docs/PixelPickingEngine.md b/dev-docs/PixelPickingEngine.md
new file mode 100644
index 0000000000..7a99ec6433
--- /dev/null
+++ b/dev-docs/PixelPickingEngine.md
@@ -0,0 +1,151 @@
+# PixelPickingEngine 设计
+
+在地图交互中,除了地图底图本身提供的平移、旋转、缩放、flyTo 等相机动作,最常用的就是信息要素的拾取以及后续的高亮了。
+
+3D 引擎常用的拾取技术通常有两种:RayPicking 和 PixelPicking。前者从鼠标点击处沿着投影方向发射一根射线,通过包围盒碰撞检测获取到接触到的第一个对象,后续就可以进行选中对象的高亮甚至是跟随移动了,以上运算均在 CPU 侧完成。
+但是在 L7 的场景中,海量数据在同一个 Geometry 中,无法计算每个要素的包围盒,因此在 GPU 侧完成的 PixelPicking 更加适合。
+
+作为拾取引擎 PixelPickingEngine,除了实现内置基本的拾取 Pass,最重要的是提供友好易用的 API,覆盖以下常见场景:
+* 基本的拾取场景,用户只需要开启 Layer 拾取功能并设置高亮颜色即可。
+* 拾取后展示特定 UI 组件的场景,用户需要监听事件,在回调中使用上述拾取对象完成组件展示。
+* 更灵活的联动场景,用户可以不依赖 L7 内置的事件监听机制,直接拾取并高亮指定点/区域包含的要素。
+
+本文会依次介绍:
+* PixelPicking 原理
+* 使用方法
+ * 拾取对象结构
+ * 拾取 API 的使用方法
+ * 开启/关闭拾取
+ * 设置高亮颜色
+ * 展示自定义 UI 组件
+ * 在自定义 Layer 中使用
+
+## PixelPicking 原理
+
+在执行时机方面,基于 [MultiPassRenderer](./MultiPassRenderer.md) 的设计,拾取发生在实际渲染之前:
+```
+ClearPass -> PixelPickingPass -> RenderPass -> [ ...其他后处理 Pass ] -> CopyPass
+```
+
+PixelPickingPass 分解步骤如下:
+1. `ENCODE` 阶段。逐要素编码(idx -> color),传入 attributes 渲染 Layer 到纹理。
+2. 获取鼠标在视口中的位置。由于目前 L7 与地图结合的方案为双 Canvas 而非共享 WebGL Context,事件监听注册在地图底图上。
+3. 读取纹理在指定位置的颜色,进行解码(color -> idx),查找对应要素,作为 Layer `onHover/onClick` 回调参数传入。
+4. `HIGHLIGHT` 阶段(可选)。将待高亮要素对应的颜色传入 Vertex Shader 用于每个 Vertex 判断自身是否被选中,如果被选中,在 Fragment Shader 中将高亮颜色与计算颜色混合。
+
+## 使用方法
+
+### 拾取对象结构定义
+
+拾取对象结构定义如下:
+
+| 参数名 | 类型 | 说明 |
+| -------- | --- | ------------- |
+| x | `number` | 鼠标位置在视口空间 x 坐标,取值范围 `[0, viewportWidth]` |
+| y | `number` | 鼠标位置在视口空间 y 坐标,取值范围 `[0, viewportHeight]` |
+| lnglat | `{ lng: number; lat: number; }` | 鼠标位置经纬度坐标 |
+| feature | `object` | GeoJSON feature 属性 |
+
+### API
+
+对于基本的拾取场景,用户只需要开启 Layer 拾取功能并设置高亮颜色即可。
+而对于拾取后展示特定 UI 组件的场景,用户需要监听事件,在回调中使用上述拾取对象完成组件展示。
+最后,对于更灵活的联动场景,用户可以不依赖 L7 内置的事件监听机制,直接拾取并高亮指定点/区域包含的要素。
+
+#### 禁用/开启拾取
+
+并不是所有 Layer 都需要拾取(例如文本渲染 Layer),通过 `enablePicking` 关闭可以跳过该阶段,减少不必要的渲染开销:
+```typescript
+const layer = new PolygonLayer({
+ enablePicking: false, // 关闭拾取
+});
+```
+
+⚠️L7 默认开启拾取。
+
+#### 设置高亮颜色
+
+如果一个 Layer 开启了拾取,我们可以通过 `highlightColor` 设置高亮颜色:
+```typescript
+const layer = new PolygonLayer({
+ enablePicking: true, // 开启拾取
+ enableHighlight: true, // 开启高亮
+ highlightColor: [0, 0, 1, 1], // 设置高亮颜色为蓝色
+});
+```
+
+#### 展示自定义 UI 组件
+
+监听 Layer 上的 `hover/mousemove` 事件就可以得到拾取对象,然后通过对象中包含的位置以及原始数据信息,就可以使用 L7 内置或者自定义 UI 组件展示:
+```typescript
+layer.on('hover', ({ x, y, lnglat, feature }) => {
+ // 展示 UI 组件
+});
+layer.on('mousemove', ({ x, y, lnglat, feature }) => {
+ // 同上
+});
+```
+
+除了基于事件监听,还可以通过 Layer 的构造函数传入 `onHover` 回调,在后续 Layer 对应的 react 组件中也可以以这种方式使用:
+```typescript
+const layer = new PolygonLayer({
+ enablePicking: true,
+ onHover: ({ x, y, lnglat, feature }) => {
+ // 展示 UI 组件
+ },
+});
+```
+
+#### 直接调用拾取引擎方法
+
+除了默认在地图上交互完成拾取,在与其他系统进行联动时,脱离了地图交互,仍需要具备拾取指定点/区域内包含要素的能力。
+```typescript
+anotherSystem.on('hover', ({ x, y }) => {
+ layer.pick({
+ x,
+ y,
+ });
+});
+```
+
+⚠️目前只支持拾取视口中一个点所在的要素,未来可以实现拾取指定区域内的全部要素。
+
+### 自定义 Layer 中的拾取
+
+用户实现自定义 Layer 时,必然需要实现 Vertex/Fragment Shader。如果也想使用拾取功能,就需要在 Shader 中引入拾取模块,方法如下。
+
+在 Vertex Shader 中引入 `picking` 模块。关于 L7 Shader 的模块化设计,[详见]()。
+```glsl
+// mylayer.vert.glsl
+
+#pragma include "picking"
+
+void main() {
+ setPickingColor(customPickingColors);
+}
+```
+
+在 Fragment Shader 中
+```glsl
+// mylayer.frag.glsl
+
+#pragma include "picking"
+
+void main() {
+ // 必须在末尾,保证后续不会再对 gl_FragColor 进行修改
+ gl_FragColor = filterPickingColor(gl_FragColor);
+}
+```
+
+其中涉及 `picking` 模块方法说明如下:
+
+| 方法名 | 应用 shader | 说明 |
+| -------- | --- | ------------- |
+| `setPickingColor` | `vertex` | 比较自身颜色编码与高亮颜色,判断是否被选中,传递结果给 fragment |
+| `filterPickingColor` | `fragment` | 当前 fragment 被选中则使用高亮颜色混合,否则直接输出原始计算结果 |
+
+## 参考资料
+
+* [Deck.gl 交互文档](https://deck.gl/#/documentation/developer-guide/adding-interactivity)
+* [Deck.gl Picking 实现](https://deck.gl/#/documentation/developer-guide/writing-custom-layers/picking)
+* 「Interactive.Computer.Graphics.Top.Down.Approach - 3.9 Picking」
\ No newline at end of file
diff --git a/dev-docs/TAA.md b/dev-docs/TAA.md
new file mode 100644
index 0000000000..d0ceb98bd5
--- /dev/null
+++ b/dev-docs/TAA.md
@@ -0,0 +1,118 @@
+# 在地理场景中应用 TAA
+
+## 问题背景
+
+关于走样产生的原因以及常用的反走样手段,可以参考「知乎 - 反走样技术(一):几何反走样」[🔗](https://zhuanlan.zhihu.com/p/28800047)。
+我之前也简单总结了下 SSAA、MLAA/SMAA、FXAA 等反走样技术的实现细节。
+
+其中 MSAA 作为浏览器内置实现,开发者使用起来很简单:
+
+> 相对于着色走样,人眼对几何走样更敏感。MSAA 的原理很简单,它仍然把一个像素划分为若干个子采样点,但是相较于 SSAA,每个子采样点的颜色值完全依赖于对应像素的颜色值进行简单的复制(该子采样点位于当前像素光栅化结果的覆盖范围内),不进行单独计算。此外它的做法和 SSAA 相同。由于 MSAA 拥有硬件支持,相对开销比较小,又能很好地解决几何走样问题,在游戏中应用非常广泛(我们在游戏画质选项中常看到的 4x/8x/16x 抗锯齿一般说的就是 MSAA 的子采样点数量分别为4/8/16个)。
+
+下图为 4x MSAA 采样点示意:
+
+![](./screenshots/MSAA.png)
+
+在 Mapbox 中左图未开启 MSAA 而右图选择开启,观察立方体边缘可以发现明显的几何走样:相关 [ISSUE](https://github.com/mapbox/mapbox-gl-js/pull/8474)。
+![](./screenshots/mapbox-MSAA.png)
+
+但是 MSAA 存在一些限制:
+* WebGL1 不支持对 FBO 进行,因此开启 post-processing 后处理时 MSAA 就失效了。当然 WebGL2 支持 🔗。
+* 即使开启,浏览器在某些情况下也不保证应用 🔗。
+
+因此在需要后处理的场景中(例如 L7 的热力图需要 blur pass、PBR 中的 SSAO 环境光遮蔽),只能采用其他反走样手段。
+
+## TAA(Temporal Anti-Aliasing) 原理
+
+来自「知乎 - Experimentalize TAA with no code」🔗:
+
+> 严格来说 TAA 并不能算一个具体的算法,而是更像一个统一的算法框架。和 SSAA 一样,TAA 也能够同时减轻几何走样和着色走样的问题。
+
+关于 TAA 的原理,「GDC - Temporal Reprojection
+Anti-Aliasing in INSIDE」[🔗](http://twvideo01.ubm-us.net/o1/vault/gdc2016/Presentations/Pedersen_LasseJonFuglsang_TemporalReprojectionAntiAliasing.pdf) 讲的十分清晰。如果相机和物体的相对位置在当前帧之前发生过变化,那么当前帧就可以以若干前序帧进行修正。
+
+![](./screenshots/taa-1.png)
+
+但如果在前序帧中相机和物体都没有发生过变化,那对于当前帧就无从修正了。因此可以对视锥进行抖动,在渲染每一帧之前,使用抖动矩阵对投影矩阵进行偏移,最终实现视锥的偏移:
+
+![](./screenshots/taa-step1.png)
+
+然后在 FS 中,最关键的就是 reproject 这一步:
+
+![](./screenshots/taa-step2.png)
+
+对于静止场景,「Three.js - TAA example」[🔗](https://threejs.org/examples/#webgl_postprocessing_taa)、「ECharts.GL - temporalSuperSampling」[🔗](https://echarts.apache.org/zh/option-gl.html#globe.temporalSuperSampling) 都采用了这种方法。
+
+## 实现方法
+
+由于需要对投影矩阵进行抖动,我们需要选取低差异序列。
+来自「知乎 - 低差异序列(一)- 常见序列的定义及性质」🔗,右图明显比左图纯随机生成覆盖面广:
+
+![](./screenshots/halton.png)
+
+参考 Echarts.GL,我们选择 `Halton(2,3)` 低差异序列:
+```typescript
+const offset = this.haltonSequence[this.frame % this.haltonSequence.length];
+this.cameraService.jitterProjectionMatrix(
+ ((offset[0] * 2.0 - 1.0) / width) * jitterScale,
+ ((offset[1] * 2.0 - 1.0) / height) * jitterScale,
+);
+```
+
+在每一帧都会尝试进行累加。如果在连续运动过程中,TAA 的累加过程必然来不及完成,此时只需要输出当前帧原始结果即可,随后尝试继续轮询累加是否完成。因此在累加完成之前,都会输出当前帧未经 TAA 的结果。
+
+最后我们需要进行加权平均,历史帧的权重应当越来越小:
+
+![](./screenshots/taa-step3.png)
+
+这里我们选择当前帧权重为 0.9,历史帧为 0.1:
+
+```typescript
+useFramebuffer(this.outputRenderTarget, () => {
+ this.blendModel.draw({
+ uniforms: {
+ u_opacity: layerStyleOptions.opacity || 1,
+ u_MixRatio: this.frame === 0 ? 1 : 0.9,
+ u_Diffuse1: this.sampleRenderTarget,
+ u_Diffuse2:
+ this.frame === 0
+ ? layer.multiPassRenderer.getPostProcessor().getReadFBO()
+ : this.prevRenderTarget,
+ },
+ });
+});
+```
+
+最后我们将最终的混合结果“拷贝”给后处理模块,实现渐进增强的效果:
+
+```typescript
+useFramebuffer(
+ layer.multiPassRenderer.getPostProcessor().getReadFBO(),
+ () => {
+ this.copyModel.draw({
+ uniforms: {
+ u_Texture: this.copyRenderTarget,
+ },
+ });
+ },
+);
+// 调用后处理模块应用后续效果
+layer.multiPassRenderer.getPostProcessor().render(layer);
+```
+
+## 最终效果
+
+为了更直观地看到效果,在 DEMO 中我们可以调节相机抖动范围:
+
+![](./screenshots/taa-result.gif)
+
+## 参考资料
+
+* 「知乎 - 反走样技术(一):几何反走样」[🔗](https://zhuanlan.zhihu.com/p/28800047)
+* 「知乎 - Experimentalize TAA with no code」[🔗](https://zhuanlan.zhihu.com/p/41642855)
+* 「ECharts.GL - temporalSuperSampling」[🔗](https://echarts.apache.org/zh/option-gl.html#globe.temporalSuperSampling)
+* 「Mapbox - set custom layers and extrusion examples to use antialias: true」[🔗](https://github.com/mapbox/mapbox-gl-js/pull/8474)
+* 「Three.js - TAA example」[🔗](https://threejs.org/examples/#webgl_postprocessing_taa)
+* 「Paper - Amortized Supersampling」[🔗](http://hhoppe.com/supersample.pdf)
+* 「GDC - Temporal Reprojection Anti-Aliasing in INSIDE」[🔗](http://twvideo01.ubm-us.net/o1/vault/gdc2016/Presentations/Pedersen_LasseJonFuglsang_TemporalReprojectionAntiAliasing.pdf)
+* 「知乎 - 低差异序列(一)- 常见序列的定义及性质」[🔗](https://zhuanlan.zhihu.com/p/20197323)
diff --git a/dev-docs/screenshots/MSAA.png b/dev-docs/screenshots/MSAA.png
new file mode 100644
index 0000000000..205a8f2f61
Binary files /dev/null and b/dev-docs/screenshots/MSAA.png differ
diff --git a/dev-docs/screenshots/blurpass.png b/dev-docs/screenshots/blurpass.png
new file mode 100644
index 0000000000..931b96457e
Binary files /dev/null and b/dev-docs/screenshots/blurpass.png differ
diff --git a/dev-docs/screenshots/halftone.png b/dev-docs/screenshots/halftone.png
new file mode 100644
index 0000000000..0b981617a6
Binary files /dev/null and b/dev-docs/screenshots/halftone.png differ
diff --git a/dev-docs/screenshots/halton.png b/dev-docs/screenshots/halton.png
new file mode 100644
index 0000000000..7f8ff63842
Binary files /dev/null and b/dev-docs/screenshots/halton.png differ
diff --git a/dev-docs/screenshots/hexagonalPixelate.png b/dev-docs/screenshots/hexagonalPixelate.png
new file mode 100644
index 0000000000..7a8fd1ce44
Binary files /dev/null and b/dev-docs/screenshots/hexagonalPixelate.png differ
diff --git a/dev-docs/screenshots/jest.png b/dev-docs/screenshots/jest.png
new file mode 100644
index 0000000000..247e12fb69
Binary files /dev/null and b/dev-docs/screenshots/jest.png differ
diff --git a/dev-docs/screenshots/mapbox-MSAA.png b/dev-docs/screenshots/mapbox-MSAA.png
new file mode 100644
index 0000000000..8e79cc088b
Binary files /dev/null and b/dev-docs/screenshots/mapbox-MSAA.png differ
diff --git a/dev-docs/screenshots/monorep.png b/dev-docs/screenshots/monorep.png
new file mode 100644
index 0000000000..99b56ba339
Binary files /dev/null and b/dev-docs/screenshots/monorep.png differ
diff --git a/dev-docs/screenshots/noise.png b/dev-docs/screenshots/noise.png
new file mode 100644
index 0000000000..fb2145ca1e
Binary files /dev/null and b/dev-docs/screenshots/noise.png differ
diff --git a/dev-docs/screenshots/sepia.png b/dev-docs/screenshots/sepia.png
new file mode 100644
index 0000000000..8a3fc791a4
Binary files /dev/null and b/dev-docs/screenshots/sepia.png differ
diff --git a/dev-docs/screenshots/taa-1.png b/dev-docs/screenshots/taa-1.png
new file mode 100644
index 0000000000..4ce4460bc9
Binary files /dev/null and b/dev-docs/screenshots/taa-1.png differ
diff --git a/dev-docs/screenshots/taa-result.gif b/dev-docs/screenshots/taa-result.gif
new file mode 100644
index 0000000000..5beff2810b
Binary files /dev/null and b/dev-docs/screenshots/taa-result.gif differ
diff --git a/dev-docs/screenshots/taa-step1.png b/dev-docs/screenshots/taa-step1.png
new file mode 100644
index 0000000000..0ae395bc6b
Binary files /dev/null and b/dev-docs/screenshots/taa-step1.png differ
diff --git a/dev-docs/screenshots/taa-step2.png b/dev-docs/screenshots/taa-step2.png
new file mode 100644
index 0000000000..00d585ac91
Binary files /dev/null and b/dev-docs/screenshots/taa-step2.png differ
diff --git a/dev-docs/screenshots/taa-step3.png b/dev-docs/screenshots/taa-step3.png
new file mode 100644
index 0000000000..781a7f0164
Binary files /dev/null and b/dev-docs/screenshots/taa-step3.png differ
diff --git "a/dev-docs/\344\275\277\347\224\250\346\226\271\346\263\225.md" "b/dev-docs/\344\275\277\347\224\250\346\226\271\346\263\225.md"
new file mode 100644
index 0000000000..912ac3639b
--- /dev/null
+++ "b/dev-docs/\344\275\277\347\224\250\346\226\271\346\263\225.md"
@@ -0,0 +1,230 @@
+# 使用方法
+
+L7 提供三种使用方式:CDN、Submodule 以及 React 组件。
+
+## 通过 CDN 使用
+
+首先在 `
` 中引入 L7 CDN 版本的 JS 和 CSS 文件:
+```html
+
+
+
+
+```
+
+如果使用 Mapbox,还需要额外引入 Mapbox 的 JS 和 CSS 文件,这一步可以参考 [Mapbox 文档](https://docs.mapbox.com/mapbox-gl-js/overview/#quickstart):
+```html
+
+
+
+
+
+```
+⚠️高德采用异步加载,因此不需要引入任何额外静态文件。
+
+然后在 `` 中定义一个容器并设置一个 `id`。通过全局 `L7` 这个命名空间可以获取场景 `L7.Scene` 和图层 `L7.PolygonLayer`:
+```html
+
+
+
+
+```
+
+⚠️需要获取高德或者 Mapbox 的使用 token 并传入 `L7.Scene` 的构造函数,获取方式如下:
+* 高德地图开发者 Key [申请方法](https://lbs.amap.com/dev/key/)
+* [Mapbox Access Tokens](https://docs.mapbox.com/help/how-mapbox-works/access-tokens/#creating-and-managing-access-tokens)
+
+## 通过 Submodule 使用
+
+首先通过 `npm/yarn` 安装 `@l7/scene` 和 `@l7/layers`:
+```bash
+npm install --save @l7/scene @l7/layers
+// or
+yarn add @l7/scene @l7/layers
+```
+
+然后就可以使用其中包含的场景和各类图层:
+```typescript
+import { Scene } from '@l7/scene';
+import { PolygonLayer } from '@l7/layers';
+
+(async function() {
+ // 获取数据
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d2e0e930-fd44-4fca-8872-c1037b0fee7b.json',
+ );
+ const data = await response.json();
+
+ // 创建场景
+ const scene = new Scene({
+ center: [110.19382669582967, 50.258134],
+ id: 'map',
+ pitch: 0,
+ style: 'dark',
+ type: 'amap',
+ zoom: 3,
+ token: 'pg.xxx', // 高德或者 Mapbox 的 token
+ });
+
+ // 创建图层
+ const layer = new PolygonLayer({});
+ layer
+ .source(data)
+ .size('name', [0, 10000, 50000, 30000, 100000])
+ .color('name', [
+ '#2E8AE6',
+ '#69D1AB',
+ '#DAF291',
+ '#FFD591',
+ '#FF7A45',
+ '#CF1D49',
+ ])
+ .shape('fill')
+ .style({
+ opacity: 0.8,
+ });
+
+ // 添加图层到场景中
+ scene.addLayer(layer);
+
+ // 渲染场景
+ scene.render();
+})();
+```
+
+最后在 `` 中引入 L7 CDN 版本的 CSS 文件:
+```html
+
+
+
+```
+
+L7 目前的文档都通过这种方式使用,可以参考项目中的 stories:
+* [高德地图](https://github.com/antvis/L7/blob/next/stories/MapAdaptor/components/AMap.tsx)
+* [Mapbox](https://github.com/antvis/L7/blob/next/stories/MapAdaptor/components/Mapbox.tsx)
+
+
+## [WIP] React
+
+React 组件待开发,目前可以暂时以 Submodule 方式使用:
+```tsx
+import { Scene } from '@l7/scene';
+import { PolygonLayer } from '@l7/layers';
+import * as React from 'react';
+
+export default class AMap extends React.Component {
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d2e0e930-fd44-4fca-8872-c1037b0fee7b.json',
+ );
+ const scene = new Scene({
+ center: [110.19382669582967, 50.258134],
+ id: 'map',
+ pitch: 0,
+ style: 'dark',
+ type: 'amap',
+ zoom: 3,
+ token: 'pg.xxx', // 高德或者 Mapbox 的 token
+ });
+ const layer = new PolygonLayer({});
+
+ layer
+ .source(await response.json())
+ .size('name', [0, 10000, 50000, 30000, 100000])
+ .color('name', [
+ '#2E8AE6',
+ '#69D1AB',
+ '#DAF291',
+ '#FFD591',
+ '#FF7A45',
+ '#CF1D49',
+ ])
+ .shape('fill')
+ .style({
+ opacity: 0.8,
+ });
+ scene.addLayer(layer);
+ scene.render();
+ this.scene = scene;
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
+```
+
+⚠️组件 Unmount 时需要通过 `scene.destroy()` 手动销毁场景。
diff --git "a/dev-docs/\346\236\204\345\273\272\346\226\271\346\241\210.md" "b/dev-docs/\346\236\204\345\273\272\346\226\271\346\241\210.md"
new file mode 100644
index 0000000000..6de98446e3
--- /dev/null
+++ "b/dev-docs/\346\236\204\345\273\272\346\226\271\346\241\210.md"
@@ -0,0 +1,326 @@
+# 构建方案
+
+考虑到 L7 提供的三种[使用方法](./使用方法.md):CDN、Submodule 和 React 组件,我们需要提供对应的构建方案。
+
+由于 React 组件待开发,下面我们将从方案技术细节、优化手段两方面介绍 CDN 和 Submodule 的构建方案。
+
+## CDN
+
+考虑到后续将引入 WebWorker 特性,目前 Webpack4 暂时还不支持多种 target(web + webworker)混合的输出模式,相关 [ISSUE](https://github.com/webpack/webpack/issues/6525)。
+如果后续支持,配合 SplitChunksPlugin 应该能解决在 Worker 和不同 entry 之间共享代码的问题。
+
+因此目前和 Mapbox 做法一样,我们使用 Rollup 构建 CDN Bundler。
+
+打包命令如下,会在 `dist/` 下输出产物:
+```bash
+yarn bundle
+```
+
+### UMD
+
+以 L7 为命名空间,让用户可以通过类似 `L7.Scene` 的方式使用。同时以 UMD 为构建目标:
+```javascript
+{
+ input: resolveFile('build/bundle.ts'),
+ output: {
+ file: resolveFile('dist/bundle.js'),
+ format: 'umd',
+ name: 'L7',
+ },
+}
+```
+
+目前只需要暴露场景以及图层相关的 API,因此 Bundler 非常简单:
+```typescript
+// build/bundle.ts
+export * from '@l7/scene';
+export * from '@l7/layers';
+```
+
+### Alias
+
+为了帮助 resolver 定位 lerna packages,需要重命名类似 `@l7/scene` 这样的依赖路径:
+```javascript
+import alias from '@rollup/plugin-alias';
+
+plugins: [
+ alias(
+ {
+ resolve: ['.tsx', '.ts'],
+ entries: [
+ {
+ find: /^@l7\/(.*)/,
+ replacement: resolveFile('packages/$1/src'),
+ },
+ ]
+ },
+ ),
+]
+```
+
+配合 [`terser`](https://github.com/TrySound/rollup-plugin-terser) 压缩后,我们就能得到可运行的 CDN 版本了,但从减少构建产物大小出发还有很多优化可以做。
+
+### 减少包大小
+
+除了 Rollup 提供的 TreeShaking,我们主要从三个方面考虑:
+* 减少第三方依赖大小尤其是 Lodash
+* external Mapbox 依赖
+* 压缩 GLSL 代码
+ * 去除多余空格、换行符和注释
+ * 内联 WebGL 常量
+ * 预计算 define 变量
+
+#### Lodash 按需引用
+
+通过 analysis 插件可以看到第三方依赖大小占比:
+```
+/node_modules/lodash/lodash.js
+███████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 23.79 % (540.328 KB)
+/node_modules/regl/dist/regl.js
+██████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 12.21 % (277.403 KB)
+/node_modules/hammerjs/hammer.js
+█░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 3.25 % (73.847 KB)
+/node_modules/uri-js/dist/es5/uri.all.js
+█░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 2.28 % (51.721 KB)
+```
+
+仔细查看 Lodash 的引用情况:
+```
+███████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
+file: /node_modules/lodash/lodash.js
+bundle space: 23.79 %
+rendered size: 540.328 KB
+original size: 540.51 KB
+code reduction: 0.03 %
+dependents: 13
+ - /packages/core/src/services/layer/StyleAttribute.ts
+ - /packages/core/src/services/shader/ShaderModuleService.ts
+ - /packages/core/src/services/renderer/passes/post-processing/BlurHPass.ts
+```
+
+按需引用 Lodash 常见的做法有几种:
+* [loash-es](https://github.com/lodash/lodash/tree/es)
+* babel-plugin-lodash
+* lodash-webpack-plugin
+
+由于我们使用 Rollup 以及 `rollup-plugin-babel`,[babel-plugin-lodash](https://github.com/lodash/babel-plugin-lodash) 可以很好地解决这个问题。该插件的[原理](https://github.com/rollup/rollup/issues/610#issuecomment-270801483)其实也是引用 `lodash-es`:
+```javascript
+// this...
+import { template } from 'lodash-es';
+
+// ...basically becomes this:
+import template from 'lodash-es/template.js';
+```
+
+最终的效果还是很明显的:
+```
+/node_modules/regl/dist/regl.js
+████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 16.55 % (277.403 KB)
+/node_modules/hammerjs/hammer.js
+██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 4.41 % (73.847 KB)
+/node_modules/uri-js/dist/es5/uri.all.js
+█░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 3.09 % (51.721 KB)
+/node_modules/lodash.mergewith/index.js
+█░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 3.06 % (51.256 KB)
+```
+
+#### 剔除 Mapbox
+
+不同于高德异步加载的方式,Mapbox 用户需要手动引入 Mapbox 的 JS 和 CSS,因此 L7 CDN 版本就需要剔除了。通过 `globals` 假定用户负责引入 Mapbox 的 CDN 版本:
+```javascript
+{
+ output: {
+ globals: {
+ 'mapbox-gl': 'mapboxgl',
+ },
+ },
+ external: [
+ 'mapbox-gl',
+ ],
+}
+```
+
+这样 L7 Bundler 中就不包含 Mapbox 的 Module Bundler(mapbox-gl) 了。
+
+#### 内联 WebGL 常量
+
+在构建阶段可以将 WebGL 常量替换成对应的值,可以减少字符长度:
+```javascript
+// from
+const max = gl.MAX_VERTEX_ATTRIBS;
+// to
+const max = 34921;
+```
+
+luma.gl 和 deck.gl 都使用了 [babel-plugin-inline-webgl-constants](https://www.npmjs.com/package/babel-plugin-inline-webgl-constants)。
+
+来看一下实际效果,在压缩前就能减少字符长度:
+```javascript
+// 内联前
+const usageMap = {
+ [gl.STATIC_DRAW]: 'static',
+ [gl.DYNAMIC_DRAW]: 'dynamic',
+ [gl.STREAM_DRAW]: 'stream'
+};
+// 内联后
+const usageMap = {
+ [35044]: 'static',
+ [35048]: 'dynamic',
+ [35040]: 'stream'
+};
+```
+
+#### 压缩 GLSL 代码
+
+在开发编写 Shader 时,我们是不需要对 GLSL 代码进行压缩的,因为在 Shader 编译失败时能根据错误信息定位到具体行列。
+
+但是在生产环境下,我们就需要把 GLSL 源代码中包含的**多余**的换行、空格以及注释去掉,减少最终引入字符串的大小。
+
+这里需要注意的是并不是所有换行都可以简单去除,例如 `define` 语句末尾的换行一定要保留。
+
+luma.gl 和 deck.gl 使用了 [babel-plugin-remove-glsl-comments](https://github.com/uber/luma.gl/tree/master/dev-modules/babel-plugin-remove-glsl-comments) 简单地移除注释,但很明显,多余的空格和换行符依然存在。
+
+因此我们需要写一个简单的 Rollup 插件:
+```javascript
+export default function glsl(include, minify) {
+ const filter = createFilter(include);
+ return {
+ name: 'glsl',
+ transform(code, id) {
+ if (!filter(id)) return;
+
+ if (minify) {
+ code = code
+ .trim() // strip whitespace at the start/end
+ .replace(/\n+/g, '\n') // collapse multi line breaks
+ // remove comments
+ .replace(INLINE_COMMENT_REGEX, '\n')
+ .replace(BLOCK_COMMENT_REGEX, '')
+ .replace(/\n\s+/g, '\n') // strip identation
+ }
+
+ return {
+ code: `export default ${JSON.stringify(code)};`,
+ map: { mappings: '' }
+ };
+ }
+ };
+}
+```
+
+#### GLSL minifier
+
+以上针对 GLSL 的压缩仅限于字符替换,更彻底的优化必然需要生成 GLSL 对应的 AST,从而进行变量重命名、死代码消除等等更高级的优化手段。[glsl-minifier](https://github.com/TimvanScherpenzeel/glsl-minifier) 就是这样一个 CLI 工具。
+
+其中的预计算特性有点类似 [Prepack](https://github.com/facebook/prepack),在构建阶段就计算出 `define` 变量的值:
+```glsl
+#define SPREAD 8.00
+#define MAX_DIR_LIGHTS 0
+#define MAX_POINT_LIGHTS 0
+#define MAX_SPOT_LIGHTS 0
+#define MAX_HEMI_LIGHTS 0
+#define MAX_SHADOWS 0
+#define GAMMA_FACTOR 2
+
+uniform mat4 viewMatrix;
+uniform vec3 cameraPosition;
+
+uniform vec2 resolution;
+uniform float time;
+uniform sampler2D texture;
+
+void main() {
+ vec2 uv = gl_FragCoord.xy / resolution.xy;
+
+ float v = texture2D( texture, uv ).x;
+
+ if (v == 1000.) discard;
+ v = sqrt(v);
+
+ gl_FragColor = vec4( vec3( 1. - v / SPREAD ), 1.0 );
+}
+```
+
+上述代码压缩结果如下,`define` 统统不见了,变量名也进行了改写:
+```glsl
+uniform highp vec2 resolution;uniform sampler2D texture;void main(){highp vec2 a;a=(gl_FragCoord.xy/resolution);lowp vec4 b;b=texture2D(texture,a);if((b.x==1000.0)){discard;}lowp vec4 c;c.w=1.0;c.xyz=vec3((1.0-(sqrt(b.x)/8.0)));gl_FragColor=c;}
+```
+
+当然 glsl-minifier 做的远不止这些,还会应用变量名改写、死代码消除等等优化手段:
+> Optimisations include function inlining, dead code removal, copy propagation, constant folding, constant propagation, arithmetic optimizations and so on. Minifications includes variable rewriting and whitespace trimming.
+
+显然这种手段要求我们的 Shader 代码在构建时是稳定的,然而 L7 使用的 GLSL 模块化方案需要在运行时进行模块拼接,如果在构建时代码片段中包含的变量发生了改写,势必影响运行时的拼接结果。另外 minifier 会校验代码的正确性,不理解我们自定义的模块引入语句 `pragma include 'module'` 是一定会报错的。
+
+以这样的 Shader 为例:
+```glsl
+#pragma include "project"
+
+void main() {
+ // 从 project 模块引入方法
+ project(position);
+}
+```
+
+执行压缩时会报错:
+```bash
+$ node_modules/.bin/glsl-minifier -i ./build/example.frag -o ./build/example.min.frag
+Error:
+(28,2): error: no function with name 'project'
+
+Exiting glsl-minifier!
+```
+
+因此要想使用这个终极压缩方案,需要修改 L7 目前的 GLSL 模块化方案,代码拼接不能在运行时而需要在构建时完成。但这样就很难兼顾扩展性,毕竟用户自定义图层的 Shader 代码肯定只有运行时才能拿到。
+
+所以一个折中的办法是在构建时先对 L7 内置图层的 Shader 代码进行模块化处理,得到最终的 GLSL 文本,然后再 minify。同时保留运行时模块化拼接的能力,应对用户自定义图层。
+
+## Submodule
+
+npm 和 yarn 只提供了例如 `npm link` 以及 `yarn link` 这样的功能,而 yarn workspaces 只提供了 monorep 需要的底层 link 功能。相比之下 lerna 提供了更高级的功能例如 publish 和 version。因此 yarn workspaces 和 lerna 完全可以组合使用,这也是例如 Jest 等大型项目的使用方式。
+
+![](./screenshots/monorep.png)
+
+构建命令如下,会在各个 package 下生成 `/lib` 和 `/es` 两个文件夹分别包含 ES2015 和 ESModule 产物:
+```bash
+yarn build
+```
+
+### 编译 TS
+
+使用 TS 有两种构建方式:
+* native TypeScript with tsc
+* [@babel/preset-typescript](https://babeljs.io/docs/en/babel-preset-typescript)
+
+由于我们的项目中需要使用到一些 babel plugin(装饰器、引入 GLSL 等),因此后者显然是更好的选择。这里我们使用 babel 7 的项目全局配置 configFile。
+
+为了合并 ES2015 与 ESModule,我们参考 [redux](https://babeljs.io/blog/2018/06/26/on-consuming-and-publishing-es2015+-packages#conflating-javascript-modules-and-es2015):
+```json
+// redux package.json
+{
+ "main": "lib/redux.js", // ES5 + Common JS
+ "module": "es/redux.js", // ES5 + JS Modules
+}
+```
+
+开发模式加上 `--watch` 即可。
+* `--root-mode upward` 使用 root 下的 babel 配置文件
+* `--out-dir dist` 输出到 /dist 文件夹下
+* `--delete-dir-on-start` 每次构建前清空,因此不需要 `rimraf`
+```json
+"scripts": {
+ "build": "run-p build:*",
+ "build:cjs": "BABEL_ENV=cjs babel src --root-mode upward --out-dir lib --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
+ "build:esm": "BABEL_ENV=esm babel src --root-mode upward --out-dir es --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments"
+},
+```
+
+### [WIP] 生成 TS 声明文件
+
+和构建前类型检查不同,此时我们需要 tsc 输出类型声明文件了,当然不需要包含 story 和测试用例。
+
+### [WIP] 异步加载 Mapbox
+
+以 L7 Bundler 方式使用时,由于需要在运行时根据用户配置项选择地图底图,会导致构建时需要将全部地图依赖引入,无法进行 TreeShaking。
+目前高德地图使用运行时异步加载方式引入,不会导致该问题,但 Mapbox 同样使用 Bundler,对于高德用户就多余了。
+
+一个可能的方案是对于 Mapbox 使用 CodeSplitting。在容器首次获取 Mapbox 地图服务时异步加载并缓存。
\ No newline at end of file
diff --git "a/dev-docs/\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\346\226\271\346\241\210.md" "b/dev-docs/\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\346\226\271\346\241\210.md"
new file mode 100644
index 0000000000..58fd2b55ab
--- /dev/null
+++ "b/dev-docs/\350\207\252\345\212\250\345\214\226\346\265\213\350\257\225\346\226\271\346\241\210.md"
@@ -0,0 +1,142 @@
+# 自动化测试方案
+
+如何测试一个 WebGL 应用渲染结果是否正确呢?常用的做法是进行像素比对,当然这也只能用于一些简单的判断例如渲染是否成功,整体的 Snapshot 比对开销很大。
+
+但不管怎么说,这都意味着我们必须使用 WebGL API 进行真实的渲染。
+
+以上过程在测试用例中描述如下:
+```javascript
+// 1. 绘制
+// 2. 读取像素
+const pixels = new Uint8Array(width * height * 4);
+gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels);
+// 3. 判断某个像素点是否符合预期
+```
+
+在与测试框架结合时,常用的方案有:
+* Electron 除了 WebGL API,DOM API 等其他浏览器实现对于 WebGL 测试都是多余的,在 CI 时需要安装的依赖过大,所需的启动时间也很长。
+* [node-webgl](https://github.com/mikeseven/node-webgl) 不同于 WebGL,可以直接调用 OpenGL 驱动,但同样包含了很多 WebGL 之外的特性。
+
+这里我们选择 [headless-gl](https://github.com/stackgl/headless-gl),一个纯粹的 WebGL 1 规范的实现。并且能够很容易集成进现有的 [CI 流程](https://github.com/stackgl/headless-gl#how-can-i-use-headless-gl-with-a-continuous-integration-service)中,例如 [TravisCI](https://travis-ci.org/) 和 [AppVeyor](http://www.appveyor.com/)。
+
+## 测试框架
+
+在配置测试框架前,我们必须解决一个 WebGL 项目中常见的问题。
+
+### 引入 GLSL 文件
+
+如何在测试时正确引入 GLSL 文件是一个问题。目前各个 3D 引擎常用的做法有两种:
+
+* 以字符串形式直接写在 `.js` 文件中。`luma.gl/deck.gl` 使用[这种方式](https://github.com/uber/deck.gl/blob/7.1-release/modules/layers/src/arc-layer/arc-layer-fragment.glsl.js)。
+* 使用 `.glsl` 编写,测试前使用构建脚本自动生成对应的 `.js` 文件。`Three.js`、`clay.gl` 使用[这种方式](https://github.com/pissang/claygl/blob/master/build/glsl2js.js)。
+
+前者的好处是测试流程无需做过多修改,坏处则是无法享受编辑器对于 GLSL 的语法高亮,影响开发体验。而后者又需要编写额外的 `glsl2js` 的转换脚本。
+
+我们显然希望如后者一样直接写 GLSL,但最好能让测试框架帮助我们完成自动转换的工作。
+
+之前我们选择 `@babel/preset-typescript` 而非官方 `tsc` 的一大原因就是可以使用 `babel` 丰富的插件,`babel-plugin-inline-import` 就能完成类似 webpack 中 `raw-loader` 的功能,直接以字符串形式引入 GLSL 代码:
+
+```javascript
+// 以字符串形式引入 GLSL 代码
+import circleFrag from '../../shaders/circle_frag.glsl';
+```
+
+这样测试框架只需要使用同一套 babel 项目全局配置就行了。我们使用 Jest:
+```javascript
+// jest.config.js
+module.exports = {
+ transform: {
+ '^.+\\.(ts|tsx)$': 'babel-jest',
+ },
+}
+```
+
+下面就可以编写测试用例了。
+
+## 测试用例编写
+
+我们将测试用例分成三类:
+* 内部服务的单元测试
+* 渲染服务结果的 Snapshot 快照测试
+* React 组件测试
+
+将测试用例放在任意路径的 `__tests__` 文件夹下并以 `xxx.spec.ts` 命名就可以帮助框架发现并执行了。
+
+使用 `yarn test` 运行所有测试用例:
+
+![](./screenshots/jest.png)
+
+### 单元测试
+
+这类测试直接使用 Jest API 就好了,我们以 `@l7/core` 模块的 `ShaderModuleService` 为例,编写一个简单的测试用例:
+
+```typescript
+// services/shader/__test__/shader.spec.ts
+import 'reflect-metadata';
+import IShaderModuleService from '../IShaderModuleService';
+import ShaderModuleService from '../ShaderModuleService';
+
+describe('ShaderService', () => {
+ let shaderService: IShaderModuleService;
+
+ beforeEach(() => {
+ shaderService = new ShaderModuleService();
+ });
+
+ it('should register common module correctly and generate fragment/vertex shader code', () => {
+ const rawShaderCode = `
+ #define PI 3.14
+ `;
+
+ const commonModule = {
+ fs: rawShaderCode,
+ vs: rawShaderCode,
+ };
+ shaderService.registerModule('common', commonModule);
+
+ const { vs, fs } = shaderService.getModule('common');
+
+ expect(vs).toMatch(/3\.14/);
+ expect(fs).toMatch(/3\.14/);
+ });
+});
+```
+
+### 渲染结果测试
+
+得益于 L7 使用的基于 Inversify 的依赖注入方案,我们能够很轻易地将渲染服务替换为基于 headless-gl 的渲染服务。
+
+具体到我们目前的渲染服务实现 `regl`,它能轻易做到这一点。事实上 regl 的[测试用例](https://github.com/regl-project/regl/blob/gh-pages/test/util/create-context.js#L28)也是这样使用的。
+
+
+### [WIP] React 组件测试
+
+### Coverage Report
+
+我们使用 Coveralls.io:
+```json
+// package.json
+"coveralls": "jest --coverage && cat ./tests/coverage/lcov.info | coveralls",
+```
+
+运行 `yarn coveralls` 可以查看代码覆盖率,我们为分支、行覆盖率等指标设置了阈值:
+
+```javascript
+// jest.config.js
+module.exports = {
+ coverageThreshold: {
+ global: {
+ branches: 80,
+ functions: 80,
+ lines: 80,
+ statements: 80,
+ },
+ },
+};
+```
+
+## TravisCI
+
+TravisCI 检测到 `yarn.lock` 就会默认安装 `yarn` 并使用它安装依赖,所以不需要[额外的配置](https://yarnpkg.com/en/docs/install-ci#travis-tab)。
+
+TravisCI 配合之前的 Coveralls.io。
diff --git a/docs/api/component/control.en.md b/docs/api/component/control.en.md
new file mode 100644
index 0000000000..7e1e7c0cf8
--- /dev/null
+++ b/docs/api/component/control.en.md
@@ -0,0 +1,138 @@
+---
+title: Control
+order: 1
+---
+# control
+
+地图组件 用于控制地图的状态如果平移,缩放,或者展示地图一些的辅助信息如图例,比例尺
+
+
+## 构造函数
+
+```javascript
+const baseControl = new L7.Control.Base(option);
+```
+
+
+#### option
+
+ position: `string` 控件位置支持是个方位 `bottomright, topright, bottomleft, topleft`
+
+
+#### scene 内置地图组件
+zoom 地图放大缩小 默认添加
Scale 地图比例尺 默认添加
attribution 地图数据属性 默认添加
layer 图层列表
+
+**scene配置项设置控件添加状态**
+
+```javascript
+scene = new L7.scene({
+ zoomControl: true,
+ scaleControl: true,
+ attributionControl: true
+})
+```
+
+####
+
+#### Zoom
+放大缩小组件 默认 左上角
+
+```javascript
+ new L7.Control.Zoom({
+ position: 'topleft'
+ }).addTo(scene);
+```
+
+
+#### Scale
+比例尺组件默认左下角
+
+```javascript
+ new L7.Control.Scale({
+ position: 'bottomleft'
+ }).addTo(scene);
+```
+
+
+#### attribution
+默认右下角
+
+```javascript
+new L7.Control.Attribution({
+ position: 'bottomleft'
+ }).addTo(scene);
+```
+
+
+#### layer
+图层列表目前只支持可视化overlayers 图层控制
+
+```javascript
+ var overlayers = {
+ "围栏填充": layer,
+ "围栏边界": layer2
+ };
+new L7.Control.Layers({
+ overlayers: overlayers
+}).addTo(scene);
+```
+
+
+## 方法
+
+#### onAdd
+组件添加到地图Scene时调用,自定义组件时需要实现此方法
+
+
+#### addTo
+添加到地图scene
+
+```javascript
+control.addTo(scene);
+```
+
+
+#### setPosition
+设置组件位置
+
+```javascript
+control.setPosition('bottomright');
+```
+
+
+#### remove
+移除地图组件
+
+```javascript
+control.remove();
+```
+
+
+
+## 示例代码
+
+
+#### 自定义图例控件
+[源码](https://antv.alipay.com/zh-cn/l7/1.x/demo/component/extendControl.html)
+
+```javascript
+var legend = new L7.Control.Base({
+ position: 'bottomright'
+ });
+ legend.onAdd = function() {
+ var el = document.createElement('div');
+ el.className = 'infolegend legend';
+ var grades = [0, 8, 15, 30, 65, 120];
+ for (var i = 0; i < grades.length; i++) {
+ el.innerHTML += ' ' + grades[i] + (grades[i + 1] ? '–' + grades[i + 1] + '
' : '+');
+ }
+ return el;
+ };
+ legend.addTo(scene);
+
+```
+
+##
+
+## FAQ
+
diff --git a/docs/api/component/control.zh.md b/docs/api/component/control.zh.md
new file mode 100644
index 0000000000..16d9950e31
--- /dev/null
+++ b/docs/api/component/control.zh.md
@@ -0,0 +1,137 @@
+---
+title: Control
+order: 3
+---
+# control
+
+地图组件 用于控制地图的状态如果平移,缩放,或者展示地图一些的辅助信息如图例,比例尺
+
+
+## 构造函数
+
+```javascript
+const baseControl = new L7.Control.Base(option);
+```
+
+
+#### option
+ position: `string` 控件位置支持是个方位 `bottomright, topright, bottomleft, topleft`
+
+
+#### scene 内置地图组件
+zoom 地图放大缩小 默认添加
Scale 地图比例尺 默认添加
attribution 地图数据属性 默认添加
layer 图层列表
+
+**scene配置项设置控件添加状态**
+
+```javascript
+scene = new L7.scene({
+ zoomControl: true,
+ scaleControl: true,
+ attributionControl: true
+})
+```
+
+####
+
+#### Zoom
+放大缩小组件 默认 左上角
+
+```javascript
+ new L7.Control.Zoom({
+ position: 'topleft'
+ }).addTo(scene);
+```
+
+
+#### Scale
+比例尺组件默认左下角
+
+```javascript
+ new L7.Control.Scale({
+ position: 'bottomleft'
+ }).addTo(scene);
+```
+
+
+#### attribution
+默认右下角
+
+```javascript
+new L7.Control.Attribution({
+ position: 'bottomleft'
+ }).addTo(scene);
+```
+
+
+#### layer
+图层列表目前只支持可视化overlayers 图层控制
+
+```javascript
+ var overlayers = {
+ "围栏填充": layer,
+ "围栏边界": layer2
+ };
+new L7.Control.Layers({
+ overlayers: overlayers
+}).addTo(scene);
+```
+
+
+## 方法
+
+#### onAdd
+组件添加到地图Scene时调用,自定义组件时需要实现此方法
+
+
+#### addTo
+添加到地图scene
+
+```javascript
+control.addTo(scene);
+```
+
+
+#### setPosition
+设置组件位置
+
+```javascript
+control.setPosition('bottomright');
+```
+
+
+#### remove
+移除地图组件
+
+```javascript
+control.remove();
+```
+
+
+
+## 示例代码
+
+
+#### 自定义图例控件
+[源码](https://antv.alipay.com/zh-cn/l7/1.x/demo/component/extendControl.html)
+
+```javascript
+var legend = new L7.Control.Base({
+ position: 'bottomright'
+ });
+ legend.onAdd = function() {
+ var el = document.createElement('div');
+ el.className = 'infolegend legend';
+ var grades = [0, 8, 15, 30, 65, 120];
+ for (var i = 0; i < grades.length; i++) {
+ el.innerHTML += ' ' + grades[i] + (grades[i + 1] ? '–' + grades[i + 1] + '
' : '+');
+ }
+ return el;
+ };
+ legend.addTo(scene);
+
+```
+
+##
+
+## FAQ
+
diff --git a/docs/api/component/marker.en.md b/docs/api/component/marker.en.md
new file mode 100644
index 0000000000..5adbea840f
--- /dev/null
+++ b/docs/api/component/marker.en.md
@@ -0,0 +1,83 @@
+---
+title: Marker
+order: 3
+---
+
+Marker 地图标注 目前只支持2D dom标注
+
+
+## 构造函数
+Marker
`const Marker = new L7.Marker(option)`
+
+
+#### option
+
+- color `string ` ![map-marker.png](https://cdn.nlark.com/yuque/0/2019/png/104251/1566814628445-4f3152c8-71d1-4908-a651-246c17e507b5.png#align=left&display=inline&height=32&name=map-marker.png&originHeight=32&originWidth=32&size=635&status=done&width=32) 设置默认marker的颜色
+- element `Dom|string` 自定义marker Dom节点,可以是dom实例,也可以是dom id
+- anchor `string` 锚点位置 支持 center, top, top-left, top-right, bottom, bottom-left,bottom- right,left, right
+- offset `Array` 偏移量 [ 0, 0 ] 分别表示 X, Y 的偏移量
+
+
+## 方法
+
+#### setLnglat
+设置marker经纬度位置
+
+#### addTo
+将marker添加到地图Scene
+
+#### remove
+移除marker
+
+#### getElement
+获取marker dom Element
+
+#### getLngLat
+获取marker经纬度坐标
+
+#### togglePopup
+开启或者关闭marker弹出框
+
+#### setPopup
+为marker设置popup
+
+#### getPopup
+获取marker弹出框
+
+
+## 示例代码
+
+#### 默认Marker
+**
` const marker = new L7.Marker({color:'blue'})`
+
+
+#### 自定义Marker
+
+```javascript
+var el = document.createElement('label');
+ el.className = 'lableclass';
+ el.textContent = data[i].v;
+ el.style.background = getColor(data[i].v);
+ new L7.Marker({
+ element: el
+ })
+ .setLnglat([data[i].x * 1, data[i].y])
+ .addTo(scene);
+```
+
+
+#### 设置 popup
+
+```javascript
+ var popup = new L7.Popup({
+ anchor: 'left'
+ }).setText(item.name);
+
+new L7.Marker({
+ element: el
+}).setLnglat(item.coordinates)
+ .setPopup(popup)
+ .addTo(scene);
+```
+
+
diff --git a/docs/api/component/marker.zh.md b/docs/api/component/marker.zh.md
new file mode 100644
index 0000000000..5adbea840f
--- /dev/null
+++ b/docs/api/component/marker.zh.md
@@ -0,0 +1,83 @@
+---
+title: Marker
+order: 3
+---
+
+Marker 地图标注 目前只支持2D dom标注
+
+
+## 构造函数
+Marker
`const Marker = new L7.Marker(option)`
+
+
+#### option
+
+- color `string ` ![map-marker.png](https://cdn.nlark.com/yuque/0/2019/png/104251/1566814628445-4f3152c8-71d1-4908-a651-246c17e507b5.png#align=left&display=inline&height=32&name=map-marker.png&originHeight=32&originWidth=32&size=635&status=done&width=32) 设置默认marker的颜色
+- element `Dom|string` 自定义marker Dom节点,可以是dom实例,也可以是dom id
+- anchor `string` 锚点位置 支持 center, top, top-left, top-right, bottom, bottom-left,bottom- right,left, right
+- offset `Array` 偏移量 [ 0, 0 ] 分别表示 X, Y 的偏移量
+
+
+## 方法
+
+#### setLnglat
+设置marker经纬度位置
+
+#### addTo
+将marker添加到地图Scene
+
+#### remove
+移除marker
+
+#### getElement
+获取marker dom Element
+
+#### getLngLat
+获取marker经纬度坐标
+
+#### togglePopup
+开启或者关闭marker弹出框
+
+#### setPopup
+为marker设置popup
+
+#### getPopup
+获取marker弹出框
+
+
+## 示例代码
+
+#### 默认Marker
+**
` const marker = new L7.Marker({color:'blue'})`
+
+
+#### 自定义Marker
+
+```javascript
+var el = document.createElement('label');
+ el.className = 'lableclass';
+ el.textContent = data[i].v;
+ el.style.background = getColor(data[i].v);
+ new L7.Marker({
+ element: el
+ })
+ .setLnglat([data[i].x * 1, data[i].y])
+ .addTo(scene);
+```
+
+
+#### 设置 popup
+
+```javascript
+ var popup = new L7.Popup({
+ anchor: 'left'
+ }).setText(item.name);
+
+new L7.Marker({
+ element: el
+}).setLnglat(item.coordinates)
+ .setPopup(popup)
+ .addTo(scene);
+```
+
+
diff --git a/docs/api/component/popup.en.md b/docs/api/component/popup.en.md
new file mode 100644
index 0000000000..fca06aefdd
--- /dev/null
+++ b/docs/api/component/popup.en.md
@@ -0,0 +1,92 @@
+---
+title: Popup
+order: 4
+---
+# popup
+
+地图标注信息窗口,用于展示地图要素的属性信息
+
+
+## 构造函数
+Popup
+
+```javascript
+const popup = new L7.Popup(option)
+```
+
+
+#### option
+
+- closeButton
+- closeOnClick
+- maxWidth
+- anchor
+
+
+## 方法
+
+#### setLnglat
+设置popup的经纬度位置
**参数**:lnglat 经纬度数组 [112,32]
+
+```javascript
+popup.setLnglat([112, 32]);
+```
+
+
+#### addTo
+**参数**:scene 地图scene实例
+
+将popup添加到地图scene显示
+
+```javascript
+popup.addTo(scene);
+```
+
+
+#### setHtml
+**参数**:html 字符串
+
+设置popup html 内容
+
+```javascript
+var html = '\u7701\u4EFD\uFF1A' + feature.s + '
\n \u5730\u533A\uFF1A' + feature.m + '
\n \u6E29\u5EA6\uFF1A' + feature.t + '
\n ';
+popup.setHtml(html);
+
+```
+
+
+#### setText
+设置 popup 显示文本内容
+
+```javascript
+popup.setText('hello world');
+```
+
+
+#### remove
+移除popup
+
+```javascript
+popup.remove()
+```
+
+
+## 事件
+
+#### close
+
+```javascript
+popup.on('close',()=>{})
+```
+
+
+## 示例代码
+
+#### 添加popup
+
+```
+ var html = ''+feature.m+'
';
+ const new L7.Popup().setLnglat([112, 32]).setHTML(html).addTo(scene);
+```
+
+### FAQ
diff --git a/docs/api/component/popup.zh.md b/docs/api/component/popup.zh.md
new file mode 100644
index 0000000000..e3fa32bfbe
--- /dev/null
+++ b/docs/api/component/popup.zh.md
@@ -0,0 +1,92 @@
+---
+title: popup
+order: 0
+---
+# popup
+
+地图标注信息窗口,用于展示地图要素的属性信息
+
+
+## 构造函数
+Popup
+
+```javascript
+const popup = new L7.Popup(option)
+```
+
+
+#### option
+
+- closeButton
+- closeOnClick
+- maxWidth
+- anchor
+
+
+## 方法
+
+#### setLnglat
+设置popup的经纬度位置
**参数**:lnglat 经纬度数组 [112,32]
+
+```javascript
+popup.setLnglat([112, 32]);
+```
+
+
+#### addTo
+**参数**:scene 地图scene实例
+
+将popup添加到地图scene显示
+
+```javascript
+popup.addTo(scene);
+```
+
+
+#### setHtml
+**参数**:html 字符串
+
+设置popup html 内容
+
+```javascript
+var html = '\u7701\u4EFD\uFF1A' + feature.s + '
\n \u5730\u533A\uFF1A' + feature.m + '
\n \u6E29\u5EA6\uFF1A' + feature.t + '
\n ';
+popup.setHtml(html);
+
+```
+
+
+#### setText
+设置 popup 显示文本内容
+
+```javascript
+popup.setText('hello world');
+```
+
+
+#### remove
+移除popup
+
+```javascript
+popup.remove()
+```
+
+
+## 事件
+
+#### close
+
+```javascript
+popup.on('close',()=>{})
+```
+
+
+## 示例代码
+
+#### 添加popup
+
+```
+ var html = ''+feature.m+'
';
+ const new L7.Popup().setLnglat([112, 32]).setHTML(html).addTo(scene);
+```
+
+### FAQ
diff --git a/docs/api/l7.en.md b/docs/api/l7.en.md
new file mode 100644
index 0000000000..c26a8f7e2e
--- /dev/null
+++ b/docs/api/l7.en.md
@@ -0,0 +1,75 @@
+---
+title: Introduction
+order: 0
+redirect_from:
+ - /en/docs/api
+---
+#### An open source large-scale geospatial data visualization analysis development framework powered by WebGL
+
+L7 是由蚂蚁金服 AntV 数据可视化团队推出的基于 WebGL 的开源大规模地理空间数据可视分析开发框架。L7 中的 L 代表 Location,7 代表世界七大洲,寓意能为全球位置数据提供可视分析的能力。L7 以图形符号学为理论基础,将抽象复杂的空间数据转化成 2D、3D 符号,通过颜色、大小、体积、纹理等视觉变量实现丰富的可视化表达。
+
+
+
+## 核心特性
+
+
+🌏 数据驱动可视化展示
+
+数据驱动,从数到形,支持丰富的地图可视化类型,更好洞察数据。
+
+🌏 2D,3D 一体化的海量数据高性能渲染
+
+百万级空间数据实时,动态渲染。
+
+🌏 简单灵活的数据接入
+
+支持CSV,JSON,geojson等数据格式接入,可以根据需求自定义数据格式,无需复杂的空间数据转换。
+
+ 🌏 多地图底图支持,支持离线内网部署
+
+高德地图国内合法合规的地理底图,Mapbox 满足国际化业务需求。
+
+## 支持丰富的图表类型
+
+### 点图层
+
+ - 气泡图
+ - 散点图
+ - 符号地图
+ - 3D柱状地图
+ - 聚合地图
+ - 复合图表地图
+ - 自定义Marker
+
+### 线图层
+
+- 路径地图
+- 弧线,支持2D弧线、3D弧线以及大圆航线
+- 等值线
+
+### 面图层
+
+- 填充图
+- 3D填充图
+
+### 热力图
+
+- 经典热力图
+- 蜂窝热力图
+- 网格热力图
+
+### 栅格地图
+- 图片
+- Raster
+
+## L7 2.0 Roadmap
+
+![L7 Road Map](https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*3j9HTLTQT2MAAAAAAAAAAABkARQnAQ)
+
+
+更多技术细节,详细进展,请关注 [GitHub](https://github.com/antvis/L7),欢迎大家来给点点 Star,让更多人看到这个开源的项目。
\ No newline at end of file
diff --git a/docs/api/l7.zh.md b/docs/api/l7.zh.md
new file mode 100644
index 0000000000..99742bd0c3
--- /dev/null
+++ b/docs/api/l7.zh.md
@@ -0,0 +1,76 @@
+---
+title: 简介
+order: 0
+redirect_from:
+ - /zh/docs/api
+---
+
+# L7 地理空间数据可视分析引擎
+
+L7 是由蚂蚁金服 AntV 数据可视化团队推出的基于 WebGL 的开源大规模地理空间数据可视分析开发框架。L7 中的 L 代表 Location,7 代表世界七大洲,寓意能为全球位置数据提供可视分析的能力。L7 以图形符号学为理论基础,将抽象复杂的空间数据转化成 2D、3D 符号,通过颜色、大小、体积、纹理等视觉变量实现丰富的可视化表达。
+
+
+
+## 核心特性
+
+
+🌏 数据驱动可视化展示
+
+数据驱动,从数到形,支持丰富的地图可视化类型,更好洞察数据。
+
+🌏 2D,3D 一体化的海量数据高性能渲染
+
+百万级空间数据实时,动态渲染。
+
+🌏 简单灵活的数据接入
+
+支持CSV,JSON,geojson等数据格式接入,可以根据需求自定义数据格式,无需复杂的空间数据转换。
+
+ 🌏 多地图底图支持,支持离线内网部署
+
+高德地图国内合法合规的地理底图,Mapbox 满足国际化业务需求。
+
+## 支持丰富的图表类型
+
+### 点图层
+
+ - 气泡图
+ - 散点图
+ - 符号地图
+ - 3D柱状地图
+ - 聚合地图
+ - 复合图表地图
+ - 自定义Marker
+
+### 线图层
+
+- 路径地图
+- 弧线,支持2D弧线、3D弧线以及大圆航线
+- 等值线
+
+### 面图层
+
+- 填充图
+- 3D填充图
+
+### 热力图
+
+- 经典热力图
+- 蜂窝热力图
+- 网格热力图
+
+### 栅格地图
+- 图片
+- Raster
+
+## L7 2.0 Roadmap
+
+![L7 Road Map](https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*3j9HTLTQT2MAAAAAAAAAAABkARQnAQ)
+
+
+更多技术细节,详细进展,请关注 [GitHub](https://github.com/antvis/L7),欢迎大家来给点点 Star,让更多人看到这个开源的项目。
\ No newline at end of file
diff --git a/docs/api/layer/heatmap.en.md b/docs/api/layer/heatmap.en.md
new file mode 100644
index 0000000000..2bf68b6740
--- /dev/null
+++ b/docs/api/layer/heatmap.en.md
@@ -0,0 +1,205 @@
+---
+title: HeatmapLayer
+order: 5
+---
+
+# heatmapLayer
+
+
+### 简介
+
+热力图图层,包含三种类型的,
+- 方格热力图
+
+将一组点数据按照等大小的正方形网格进行聚合,一个正方形网格代表网格内所有点的统计值。方格热力图特点以方格网布局。
+
+- 六边形热力图
+
+将一组点数据按照等大小的六边形网格进行聚合,一个六边形网格代表网格内所有点的统计值。蜂窝热力图特点以六边形热力图网格布局
+
+- 经典热力图
+
+
+
+⚠️ 网格热力图和蜂窝热力图需要对数据聚合处理,使用之前需要在source方法设置数据聚合方法
+
+### source
+
+热力图只支持点数据作为数据源
+
+布局方法 通过source的 tansforms属性配置
+
+- type 数据聚合类型 grid、hexagon
+- size 网格半径 单位 米
+- field 聚合字段
+- method 聚合方法 count,max,min,sum,mean5个统计维度
+
+```javascript
+
+layer.source(data, {
+ parser: {
+ type: 'csv',
+ x: 'lng',
+ y: 'lat'
+ },
+ transforms:[
+ {
+ type: 'grid',
+ size: 15000,
+ field:'v',
+ method:'sum'
+ }
+ ],
+ }
+```
+
+### shape
+
+不同类型热力图shape支持
+
+| | 2D | 3d |
+| --- | --- | --- |
+| 网格格热力图 | circle,triangle,square,heaxgon | cylinder,triangleColumn,hexagonColum,squareColumn |
+| 蜂窝热力图 | circle,triangle,square,heaxgon | circle,triangle,square,heaxgon |
+| 普通热力图 | heatmap | heatmap |
+
+
+热力图布局下只shape方法只支持常量的可视化。
+
+```javascript
+HeatmapLayer.shape('square');
+HeatmapLayer.shape('hexagon');
+// 默认类型可以不设置
+```
+
+### size
+当前版本 shape 为grid,hexagon不需要设置 size 映射
+
+default 类型需要设置size映射 详细参数见[Size](https://www.yuque.com/antv/l7/layer#size)
+
+**size(field,values) **
+
+- field: 热力图权重字段
+- values: 数据映射区间 热力图显示 [0, 1] 效果最佳
+
+```javascript
+HeatmapLayer.size ('field', [0, 1])
+```
+
+
+### color
+default heatMap 类型不需设置 color映射
+
+color 配置项同 [**color**](https://www.yuque.com/antv/l7/layer#color)
+
+
+
+### style
+
+grid hexagon 可以通过style 设置透明度
+
+default热力图需要通过style配置参数热力图参数
+
+- intensity 全局热力权重 推荐权重范围 1-5
+- radius 热力半径,单位像素
+- rampColors 色带参数
+ - colors 颜色数组
+ - positions 数据区间
+
+```javascript
+ HeatmapLayer.style({
+ intensity: 3,
+ radius: 20,
+ rampColors: {
+ colors: [ 'rgba(33,102,172,0.0)', 'rgb(103,169,207)', 'rgb(209,229,240)', 'rgb(253,219,199)', 'rgb(239,138,98)', 'rgb(178,24,43,1.0)' ],
+ positions: [ 0, 0.2, 0.4, 0.6, 0.8, 1.0 ]
+ }
+ })
+```
+
+
+### 完整代码示例
+
+#### 普通热力图
+
+```javascript
+// 测试数据 url https://gw.alipayobjects.com/os/basement_prod/08c6ea00-dc5f-4bb0-b0b5-52bde5edf0a3.json
+
+ HeatmapLayer({
+ zIndex: 2
+ })
+ .source(data)
+ .size('mag', [ 0, 1 ]) // weight映射通道
+ .style({
+ intensity: 3,
+ radius: 20,
+ rampColors: {
+ colors: [ 'rgba(33,102,172,0.0)', 'rgb(103,169,207)', 'rgb(209,229,240)', 'rgb(253,219,199)', 'rgb(239,138,98)', 'rgb(178,24,43,1.0)' ],
+ positions: [ 0, 0.2, 0.4, 0.6, 0.8, 1.0 ]
+ }
+ })
+```
+
+
+
+#### 网格热力图
+
+```javascript
+var layer = scene.HeatmapLayer({
+ zIndex: 2
+ })
+ .source(data, {
+ parser: {
+ type: 'csv',
+ x: 'lng',
+ y: 'lat'
+ },
+ transforms:[
+
+ {
+ type: 'grid',
+ size: 15000,
+ field:'v',
+ method:'sum'
+ }
+ ]
+ })
+ .shape('grid')
+ .style({
+ coverage: 0.8
+ })
+ .color('count',
+ ["#002466","#105CB3","#2894E0","#CFF6FF","#FFF5B8","#FFAB5C","#F27049","#730D1C"])
+
+```
+
+
+#### 六边形热力图
+
+```javascript
+ var layer = scene.HeatmapLayer({
+ zIndex: 2
+ }).
+ souce(data,{
+ parser:{
+ type:'csv',
+ x:lng,
+ y:lat,
+ },
+ transforms:[
+ {
+ type:'hexgon',
+ size:1500,
+ field:'count',
+ operation: 'sum',
+ }
+ ]
+ })
+ .shape('hexgon')
+ .size(1000)
+ .color('sum')
+ .style({
+ coverage:0.8
+ })
+render()
+```
\ No newline at end of file
diff --git a/docs/api/layer/heatmap.zh.md b/docs/api/layer/heatmap.zh.md
new file mode 100644
index 0000000000..2431fc5cb7
--- /dev/null
+++ b/docs/api/layer/heatmap.zh.md
@@ -0,0 +1,204 @@
+---
+title: HeatmapLayer
+order: 5
+---
+# heatmapLayer
+
+
+### 简介
+
+热力图图层,包含三种类型的,
+- 方格热力图
+
+将一组点数据按照等大小的正方形网格进行聚合,一个正方形网格代表网格内所有点的统计值。方格热力图特点以方格网布局。
+
+- 六边形热力图
+
+将一组点数据按照等大小的六边形网格进行聚合,一个六边形网格代表网格内所有点的统计值。蜂窝热力图特点以六边形热力图网格布局
+
+- 经典热力图
+
+
+
+⚠️ 网格热力图和蜂窝热力图需要对数据聚合处理,使用之前需要在source方法设置数据聚合方法
+
+### source
+
+热力图只支持点数据作为数据源
+
+布局方法 通过source的 tansforms属性配置
+
+- type 数据聚合类型 grid、hexagon
+- size 网格半径 单位 米
+- field 聚合字段
+- method 聚合方法 count,max,min,sum,mean5个统计维度
+
+```javascript
+
+layer.source(data, {
+ parser: {
+ type: 'csv',
+ x: 'lng',
+ y: 'lat'
+ },
+ transforms:[
+ {
+ type: 'grid',
+ size: 15000,
+ field:'v',
+ method:'sum'
+ }
+ ],
+ }
+```
+
+### shape
+
+不同类型热力图shape支持
+
+| | 2D | 3d |
+| --- | --- | --- |
+| 网格格热力图 | circle,triangle,square,heaxgon | cylinder,triangleColumn,hexagonColum,squareColumn |
+| 蜂窝热力图 | circle,triangle,square,heaxgon | circle,triangle,square,heaxgon |
+| 普通热力图 | heatmap | heatmap |
+
+
+热力图布局下只shape方法只支持常量的可视化。
+
+```javascript
+HeatmapLayer.shape('square');
+HeatmapLayer.shape('hexagon');
+// 默认类型可以不设置
+```
+
+### size
+当前版本 shape 为grid,hexagon不需要设置 size 映射
+
+default 类型需要设置size映射 详细参数见[Size](https://www.yuque.com/antv/l7/layer#size)
+
+**size(field,values) **
+
+- field: 热力图权重字段
+- values: 数据映射区间 热力图显示 [0, 1] 效果最佳
+
+```javascript
+HeatmapLayer.size ('field', [0, 1])
+```
+
+
+### color
+default heatMap 类型不需设置 color映射
+
+color 配置项同 [**color**](https://www.yuque.com/antv/l7/layer#color)
+
+
+
+### style
+
+grid hexagon 可以通过style 设置透明度
+
+default热力图需要通过style配置参数热力图参数
+
+- intensity 全局热力权重 推荐权重范围 1-5
+- radius 热力半径,单位像素
+- rampColors 色带参数
+ - colors 颜色数组
+ - positions 数据区间
+
+```javascript
+ HeatmapLayer.style({
+ intensity: 3,
+ radius: 20,
+ rampColors: {
+ colors: [ 'rgba(33,102,172,0.0)', 'rgb(103,169,207)', 'rgb(209,229,240)', 'rgb(253,219,199)', 'rgb(239,138,98)', 'rgb(178,24,43,1.0)' ],
+ positions: [ 0, 0.2, 0.4, 0.6, 0.8, 1.0 ]
+ }
+ })
+```
+
+
+### 完整代码示例
+
+#### 普通热力图
+
+```javascript
+// 测试数据 url https://gw.alipayobjects.com/os/basement_prod/08c6ea00-dc5f-4bb0-b0b5-52bde5edf0a3.json
+
+ HeatmapLayer({
+ zIndex: 2
+ })
+ .source(data)
+ .size('mag', [ 0, 1 ]) // weight映射通道
+ .style({
+ intensity: 3,
+ radius: 20,
+ rampColors: {
+ colors: [ 'rgba(33,102,172,0.0)', 'rgb(103,169,207)', 'rgb(209,229,240)', 'rgb(253,219,199)', 'rgb(239,138,98)', 'rgb(178,24,43,1.0)' ],
+ positions: [ 0, 0.2, 0.4, 0.6, 0.8, 1.0 ]
+ }
+ })
+```
+
+
+
+#### 网格热力图
+
+```javascript
+var layer = scene.HeatmapLayer({
+ zIndex: 2
+ })
+ .source(data, {
+ parser: {
+ type: 'csv',
+ x: 'lng',
+ y: 'lat'
+ },
+ transforms:[
+
+ {
+ type: 'grid',
+ size: 15000,
+ field:'v',
+ method:'sum'
+ }
+ ]
+ })
+ .shape('grid')
+ .style({
+ coverage: 0.8
+ })
+ .color('count',
+ ["#002466","#105CB3","#2894E0","#CFF6FF","#FFF5B8","#FFAB5C","#F27049","#730D1C"])
+
+```
+
+
+#### 六边形热力图
+
+```javascript
+ var layer = scene.HeatmapLayer({
+ zIndex: 2
+ }).
+ souce(data,{
+ parser:{
+ type:'csv',
+ x:lng,
+ y:lat,
+ },
+ transforms:[
+ {
+ type:'hexgon',
+ size:1500,
+ field:'count',
+ operation: 'sum',
+ },
+ ],
+ })
+ .shape('hexgon')
+ .size(1000)
+ .color('sum')
+ .style({
+ coverage:0.8
+ })
+render()
+```
\ No newline at end of file
diff --git a/docs/api/layer/imagelayer.en.md b/docs/api/layer/imagelayer.en.md
new file mode 100644
index 0000000000..4d0c122617
--- /dev/null
+++ b/docs/api/layer/imagelayer.en.md
@@ -0,0 +1,23 @@
+---
+title: ImageLayer
+order: 5
+---
+# ImageLayer
+
+## 简介
+将图片添加到地图上,需要指定图片的经纬度范围
+
+### 代码示例
+
+```javascript
+const layer = new ImageLayer({});
+layer.source(
+ 'https://gw.alipayobjects.com/zos/rmsportal/FnHFeFklTzKDdUESRNDv.jpg',
+ {
+ parser: {
+ type: 'image',
+ extent: [ 121.168, 30.2828, 121.384, 30.4219 ]
+ }
+ }
+);
+```
diff --git a/docs/api/layer/imagelayer.zh.md b/docs/api/layer/imagelayer.zh.md
new file mode 100644
index 0000000000..4d0c122617
--- /dev/null
+++ b/docs/api/layer/imagelayer.zh.md
@@ -0,0 +1,23 @@
+---
+title: ImageLayer
+order: 5
+---
+# ImageLayer
+
+## 简介
+将图片添加到地图上,需要指定图片的经纬度范围
+
+### 代码示例
+
+```javascript
+const layer = new ImageLayer({});
+layer.source(
+ 'https://gw.alipayobjects.com/zos/rmsportal/FnHFeFklTzKDdUESRNDv.jpg',
+ {
+ parser: {
+ type: 'image',
+ extent: [ 121.168, 30.2828, 121.384, 30.4219 ]
+ }
+ }
+);
+```
diff --git a/docs/api/layer/layer.en.md b/docs/api/layer/layer.en.md
new file mode 100644
index 0000000000..21ccab7477
--- /dev/null
+++ b/docs/api/layer/layer.en.md
@@ -0,0 +1,322 @@
+---
+title: Map Layer
+order: 0
+---
+# Layer
+
+
+## 简介
+L7 Layer 接口设计遵循图形语法,在可视表达上
+
+语法示例
+
+```javascript
+new Layer(option)
+.source()
+.color()
+.size()
+.shape()
+.style()
+
+```
+
+
+## 构造函数
+
+
+## 配置项
+
+### visable
+图层是否可见 {bool } default true
+
+### zIndex
+ 图层绘制顺序,数值越小优先绘制,可以控制图层绘制的上下层级 {int} default 0
+### minZoom
+图层显示最小缩放等级,(0-18) {number} default 0
+
+### maxZoom
+ 图层显示最大缩放等级 (0-18) {number} default 18
+
+
+## 鼠标事件
+
+beta版当前不支持,正式版会支持
+
+```javascript
+layer.on('click', (ev)=>{}); // 鼠标左键点击图层事件
+layer.on('dblclick', (ev)=>{}); // 鼠标左键双击图层事件
+layer.on('mousemove', (ev)=>{}); // 鼠标在图层上移动时触发
+layer.on('mouseover', (ev)=>{}); // 鼠标移入图层要素内时触发
+layer.on('mouseout', (ev)=>{}); // 鼠标移出图层要素时触发
+layer.on('mouseup', (ev)=>{}); // 鼠标在图层上单击抬起时触发
+layer.on('mousedown', (ev)=>{}); // 鼠标在图层上单击按下时触发
+layer.on('mouseleave', (ev)=>{}); // 鼠标离开图层要素
+layer.on('rightclick', (ev)=>{}); // 鼠标右键图层要素
+
+```
+
+
+## 方法
+
+### source
+数据源为layer设置数据 source(data,config)
+
+- data {geojson|json|csv}
+
+
+ 源数据
+
+- config 可选 数据源配置项
+ - parser 数据解析,默认是解析层geojson
+ - transforms [transform,transform ] 数据处理转换 可设置多个
+
+ parser和 transforms [见source文档](https://www.yuque.com/antv/l7/source)
+
+```javascript
+layer.source(data, {
+ parser: {
+ type: 'csv',
+ x: 'lng',
+ y: 'lat'
+ },
+ transforms:[
+ {
+ type: 'map',
+ callback:function(item){
+ const [x, y] = item.coordinates;
+ item.lat = item.lat*1;
+ item.lng = item.lng*1;
+ item.v = item.v *1;
+ item.coordinates = [x*1,y*1];
+ return item;
+ }
+
+ },
+ {
+ type: 'hexagon',
+ size: 6000,
+ field:'v',
+ method:'sum'
+ }
+ ]
+ })
+```
+
+###
+
+### scale
+
+
+cscle('field', scaleConfig)
+
+(field: string, scaleConfig: object)
+
+为指定的数据字段进行列定义,返回 layer 实例。
+
+
+
+- `field` 字段名。
+
+- `scaleConfig` 列定义配置,对象类型,可配置的属性如下:
+
+```javascript
+{
+ type: "linear" // 指定数据类型,可声明的类型为:identity、linear、cat、time、timeCat、log、pow, quantile,quantize
+}
+
+```
+
+### size
+
+将数据值映射到图形的大小上的方法。
+
+**注意:**
+
+不同图层的 size 的含义有所差别:
+
+- point 图形的 size 影响点的半径大小和高度;
+
+- line, arc, path 中的 size 影响线的粗细,和高度;
+
+- polygon size 影响的是高度
+
+
+
+```javascript
+pointLayer.size(10); // 常量
+pointLayer.size('type'); // 使用字段映射到大小
+pointLayer.size('type', [ 0, 10 ]); // 使用字段映射到大小,并指定最大值和最小值
+pointLayer.size('type', (type) => { // 回调函数
+ if(type === 'a') {
+ return 10;
+ }
+ return 5;
+});
+```
+
+
+#### size(value)
+
+传入数字常量,如 `pointLayer.size(20)`
+
+#### size(field)
+根据 field 字段的值映射大小,使用默认的`最大值 max:10` 和`最小值 min: 1`。
+
+#### size(field, callback)
+使用回调函数控制图形大小。
+
+- `callback`: function 回调函数。
+
+```javascript
+pointLayer.size('age', (value) => {
+ if(value === 1) {
+ return 5;
+ }
+ return 10;
+});
+```
+
+### color
+
+将数据值映射到图形的颜色上的方法。
+
+```javascript
+layer.color('red'); // 常量颜色
+layer.color('type'); // 对 type 字段进行映射,使用内置的颜色
+layer.color('type', [ 'red', 'blue' ]) // 指定颜色
+layer.color('type', (type) => { // 通过回调函数
+ if (type === 'a') {
+ return 'red';
+ }
+ return 'blue';
+});
+layer.color('type*value', (type, value) => { //多个参数,通过回调函数
+ if (type === 'a' && value > 100) {
+ return 'red';
+ }
+ return 'blue';
+});
+```
+
+
+#### color(value)
+
+
+参数:`value` :string
+只支持接收一个参数,value 可以是:
+
+- 映射至颜色属性的数据源字段名,如果数据源中不存在这个字段名的话,则按照常量进行解析,这个时候会使用 L7 默认提供的颜色。
+
+- 也可以直接指定某一个具体的颜色值 color,如 '#fff', 'white','rgba(255,0,0,0.5)' ,rgb(255,0,1) 等。
+
+
+示例
+```javascript
+layer.color('name') // 映射数据字段
+layer.color('white') // 指定颜色
+```
+
+
+#### color(field, colors)
+
+参数:
+
+- `field`: stringfield 为映射至颜色属性的数据源字段名,也支持指定多个参数。
+
+- `colors`: string | array | function
+
+
+colors 的参数有以下情况: 如果为空,即未指定颜色的数组,那么使用内置的全局的颜色;如果需要指定颜色,则需要以数组格式传入,那么分类的颜色按照数组中的颜色确定。对于颜色的分配顺序。
+
+```javascript
+layer.color('name'); // 使用默认的颜色
+layer.color('name', [ 'red', 'blue' ]); // 使用传入的指定颜色
+```
+
+- colors 如果是回调函数,则该回调函数的参数为对应字段的数值,具体使用如下,当 color 映射为多个字段时,参数按照字段声明的顺序传入:
+
+
+
+```javascript
+layer.color('gender', (value) => {
+ if(value === 1) {
+ return 'red'
+ }
+ return 'blue';
+});
+layer.color('gender*age', (gender, age) => {
+ if(age === 20 && gender ==' 男' ) {
+ return 'red'
+ }
+ return 'blue';
+});
+```
+
+### shape
+将数据值映射到图形的形状上的方法。
+
+**shape(shape)**
+
+参数`shape` string
+
+只支持接收一个参数,指定几何图像对象绘制的形状。下表列出了不同的 图层 几何图形对象支持的 shape 形状
+
+| layer类型 | shape类型 | 备注 |
+| --- | --- | --- |
+| point | 2d:point,circle, square, triangle,hexagon,image,text 3d:circle,triangle,hexagon,square | |
+| line | line,arc, arc3d, greatcircle | |
+| polygon | fill,line, extrude | |
+
+
+**shape(field, shapes)**
+
+**shape(field, callback)**
+
+
+### style
+
+用于配置几何体显示图像属性目前支持以下属性,其他属性会逐步开放
+
+- fill
+
+- opacity 设置透明度
+
+- stroke 线填充颜色
+
+- strokeWidth 线的宽度
+
+
+```javascript
+layer.style({
+ fill:'red',
+ opacity:0.8,
+ stroke:'white'
+})
+```
+
+
+### show
+图层显示
+
+```javascript
+layer.show();
+```
+
+
+### hide
+
+图层隐藏
+
+```javascript
+layer.hide();
+```
+
+
+### fitBounds
+
+缩放到图层范围
+
+```javascript
+layer.fitBounds()
+
+```
\ No newline at end of file
diff --git a/docs/api/layer/layer.zh.md b/docs/api/layer/layer.zh.md
new file mode 100644
index 0000000000..dfefab69a6
--- /dev/null
+++ b/docs/api/layer/layer.zh.md
@@ -0,0 +1,322 @@
+---
+title: Layer
+order: 0
+---
+# Layer
+
+
+## 简介
+L7 Layer 接口设计遵循图形语法,在可视表达上
+
+语法示例
+
+```javascript
+new Layer(option)
+.source()
+.color()
+.size()
+.shape()
+.style()
+
+```
+
+
+## 构造函数
+
+
+## 配置项
+
+### visable
+图层是否可见 {bool } default true
+
+### zIndex
+ 图层绘制顺序,数值越小优先绘制,可以控制图层绘制的上下层级 {int} default 0
+### minZoom
+图层显示最小缩放等级,(0-18) {number} default 0
+
+### maxZoom
+ 图层显示最大缩放等级 (0-18) {number} default 18
+
+
+## 鼠标事件
+
+beta版当前不支持,正式版会支持
+
+```javascript
+layer.on('click', (ev)=>{}); // 鼠标左键点击图层事件
+layer.on('dblclick', (ev)=>{}); // 鼠标左键双击图层事件
+layer.on('mousemove', (ev)=>{}); // 鼠标在图层上移动时触发
+layer.on('mouseover', (ev)=>{}); // 鼠标移入图层要素内时触发
+layer.on('mouseout', (ev)=>{}); // 鼠标移出图层要素时触发
+layer.on('mouseup', (ev)=>{}); // 鼠标在图层上单击抬起时触发
+layer.on('mousedown', (ev)=>{}); // 鼠标在图层上单击按下时触发
+layer.on('mouseleave', (ev)=>{}); // 鼠标离开图层要素
+layer.on('rightclick', (ev)=>{}); // 鼠标右键图层要素
+
+```
+
+
+## 方法
+
+### source
+数据源为layer设置数据 source(data,config)
+
+- data {geojson|json|csv}
+
+
+ 源数据
+
+- config 可选 数据源配置项
+ - parser 数据解析,默认是解析层geojson
+ - transforms [transform,transform ] 数据处理转换 可设置多个
+
+ parser和 transforms [见source文档](https://www.yuque.com/antv/l7/source)
+
+```javascript
+layer.source(data, {
+ parser: {
+ type: 'csv',
+ x: 'lng',
+ y: 'lat'
+ },
+ transforms:[
+ {
+ type: 'map',
+ callback:function(item){
+ const [x, y] = item.coordinates;
+ item.lat = item.lat*1;
+ item.lng = item.lng*1;
+ item.v = item.v *1;
+ item.coordinates = [x*1,y*1];
+ return item;
+ }
+
+ },
+ {
+ type: 'hexagon',
+ size: 6000,
+ field:'v',
+ method:'sum'
+ }
+ ]
+ })
+```
+
+###
+
+### scale
+
+
+cscle('field', scaleConfig)
+
+(field: string, scaleConfig: object)
+
+为指定的数据字段进行列定义,返回 layer 实例。
+
+
+
+- `field` 字段名。
+
+- `scaleConfig` 列定义配置,对象类型,可配置的属性如下:
+
+```javascript
+{
+ type: "linear" // 指定数据类型,可声明的类型为:identity、linear、cat、time、timeCat、log、pow, quantile,quantize
+}
+
+```
+
+### size
+
+将数据值映射到图形的大小上的方法。
+
+**注意:**
+
+不同图层的 size 的含义有所差别:
+
+- point 图形的 size 影响点的半径大小和高度;
+
+- line, arc, path 中的 size 影响线的粗细,和高度;
+
+- polygon size 影响的是高度
+
+
+
+```javascript
+pointLayer.size(10); // 常量
+pointLayer.size('type'); // 使用字段映射到大小
+pointLayer.size('type', [ 0, 10 ]); // 使用字段映射到大小,并指定最大值和最小值
+pointLayer.size('type', (type) => { // 回调函数
+ if(type === 'a') {
+ return 10;
+ }
+ return 5;
+});
+```
+
+
+#### size(value)
+
+传入数字常量,如 `pointLayer.size(20)`
+
+#### size(field)
+根据 field 字段的值映射大小,使用默认的`最大值 max:10` 和`最小值 min: 1`。
+
+#### size(field, callback)
+使用回调函数控制图形大小。
+
+- `callback`: function 回调函数。
+
+```javascript
+pointLayer.size('age', (value) => {
+ if(value === 1) {
+ return 5;
+ }
+ return 10;
+});
+```
+
+### color
+
+将数据值映射到图形的颜色上的方法。
+
+```javascript
+layer.color('red'); // 常量颜色
+layer.color('type'); // 对 type 字段进行映射,使用内置的颜色
+layer.color('type', [ 'red', 'blue' ]) // 指定颜色
+layer.color('type', (type) => { // 通过回调函数
+ if (type === 'a') {
+ return 'red';
+ }
+ return 'blue';
+});
+layer.color('type*value', (type, value) => { //多个参数,通过回调函数
+ if (type === 'a' && value > 100) {
+ return 'red';
+ }
+ return 'blue';
+});
+```
+
+
+#### color(value)
+
+
+参数:`value` :string
+只支持接收一个参数,value 可以是:
+
+- 映射至颜色属性的数据源字段名,如果数据源中不存在这个字段名的话,则按照常量进行解析,这个时候会使用 L7 默认提供的颜色。
+
+- 也可以直接指定某一个具体的颜色值 color,如 '#fff', 'white','rgba(255,0,0,0.5)' ,rgb(255,0,1) 等。
+
+
+示例
+```javascript
+layer.color('name') // 映射数据字段
+layer.color('white') // 指定颜色
+```
+
+
+#### color(field, colors)
+
+参数:
+
+- `field`: stringfield 为映射至颜色属性的数据源字段名,也支持指定多个参数。
+
+- `colors`: string | array | function
+
+
+colors 的参数有以下情况: 如果为空,即未指定颜色的数组,那么使用内置的全局的颜色;如果需要指定颜色,则需要以数组格式传入,那么分类的颜色按照数组中的颜色确定。对于颜色的分配顺序。
+
+```javascript
+layer.color('name'); // 使用默认的颜色
+layer.color('name', [ 'red', 'blue' ]); // 使用传入的指定颜色
+```
+
+- colors 如果是回调函数,则该回调函数的参数为对应字段的数值,具体使用如下,当 color 映射为多个字段时,参数按照字段声明的顺序传入:
+
+
+
+```javascript
+layer.color('gender', (value) => {
+ if(value === 1) {
+ return 'red'
+ }
+ return 'blue';
+});
+layer.color('gender*age', (gender, age) => {
+ if(age === 20 && gender ==' 男' ) {
+ return 'red'
+ }
+ return 'blue';
+});
+```
+
+### shape
+将数据值映射到图形的形状上的方法。
+
+**shape(shape)**
+
+参数`shape` string
+
+只支持接收一个参数,指定几何图像对象绘制的形状。下表列出了不同的 图层 几何图形对象支持的 shape 形状
+
+| layer类型 | shape类型 | 备注 |
+| --- | --- | --- |
+| point | 2d:point,circle, square, triangle,hexagon,image,text 3d:circle,triangle,hexagon,square | |
+| line | line,arc, arc3d, greatcircle | |
+| polygon | fill,line, extrude | |
+
+
+**shape(field, shapes)**
+
+**shape(field, callback)**
+
+
+### style
+
+用于配置几何体显示图像属性目前支持以下属性,其他属性会逐步开放
+
+- fill
+
+- opacity 设置透明度
+
+- stroke 线填充颜色
+
+- strokeWidth 线的宽度
+
+
+```javascript
+layer.style({
+ fill:'red',
+ opacity:0.8,
+ stroke:'white'
+})
+```
+
+
+### show
+图层显示
+
+```javascript
+layer.show();
+```
+
+
+### hide
+
+图层隐藏
+
+```javascript
+layer.hide();
+```
+
+
+### fitBounds
+
+缩放到图层范围
+
+```javascript
+layer.fitBounds()
+
+```
\ No newline at end of file
diff --git a/docs/api/layer/linelayer.en.md b/docs/api/layer/linelayer.en.md
new file mode 100644
index 0000000000..90d7b56a43
--- /dev/null
+++ b/docs/api/layer/linelayer.en.md
@@ -0,0 +1,72 @@
+---
+title: LineLayer
+order: 2
+---
+## 线图层
+
+### shape
+
+线图层支持4种 shape
+
+- line 绘制路径图,
+- arc 绘制弧线 通过贝塞尔曲线算法技术弧线
+- greatcircle 大圆航线,地图两个点的最近距离不是两个点连线,而是大圆航线
+- arc3d 3d弧线地图 3D视角
+
+⚠️ 弧线只需要设置起始点坐标即可
+
+```
+ new LineLayer()
+ .source(data, {
+ parser: {
+ type: 'csv',
+ x: 'lng1',
+ y: 'lat1',
+ x1: 'lng2',
+ y1: 'lat2',
+ },
+ })
+```
+
+如果geojson 数据绘制弧线图 coordinates 第一对坐标为起点,第二对为终点
+```
+{
+ "type": "FeatureCollection",
+ "features": [
+ {
+ "type": "Feature",
+ "properties": {},
+ "geometry": {
+ "type": "LineString",
+ "coordinates": [
+ [
+ 106.5234375,
+ 57.51582286553883
+ ],
+ [
+ 136.40625,
+ 61.77312286453146
+ ]
+ ]
+ }
+ }
+ ]
+}
+
+```
+
+### size
+
+线图层 可以设置高度
+
+- size 类型为number 则表示 line的宽度
+- size 类型为 [number , number] 分别表示宽度和高度
+
+```javascript
+
+lineLayer.size(1); // 线的宽度为 1
+lineLayer.size([1,2]); // 宽度为1,高度2
+
+```
+
+
diff --git a/docs/api/layer/linelayer.zh.md b/docs/api/layer/linelayer.zh.md
new file mode 100644
index 0000000000..90d7b56a43
--- /dev/null
+++ b/docs/api/layer/linelayer.zh.md
@@ -0,0 +1,72 @@
+---
+title: LineLayer
+order: 2
+---
+## 线图层
+
+### shape
+
+线图层支持4种 shape
+
+- line 绘制路径图,
+- arc 绘制弧线 通过贝塞尔曲线算法技术弧线
+- greatcircle 大圆航线,地图两个点的最近距离不是两个点连线,而是大圆航线
+- arc3d 3d弧线地图 3D视角
+
+⚠️ 弧线只需要设置起始点坐标即可
+
+```
+ new LineLayer()
+ .source(data, {
+ parser: {
+ type: 'csv',
+ x: 'lng1',
+ y: 'lat1',
+ x1: 'lng2',
+ y1: 'lat2',
+ },
+ })
+```
+
+如果geojson 数据绘制弧线图 coordinates 第一对坐标为起点,第二对为终点
+```
+{
+ "type": "FeatureCollection",
+ "features": [
+ {
+ "type": "Feature",
+ "properties": {},
+ "geometry": {
+ "type": "LineString",
+ "coordinates": [
+ [
+ 106.5234375,
+ 57.51582286553883
+ ],
+ [
+ 136.40625,
+ 61.77312286453146
+ ]
+ ]
+ }
+ }
+ ]
+}
+
+```
+
+### size
+
+线图层 可以设置高度
+
+- size 类型为number 则表示 line的宽度
+- size 类型为 [number , number] 分别表示宽度和高度
+
+```javascript
+
+lineLayer.size(1); // 线的宽度为 1
+lineLayer.size([1,2]); // 宽度为1,高度2
+
+```
+
+
diff --git a/docs/api/layer/pointlayer.en.md b/docs/api/layer/pointlayer.en.md
new file mode 100644
index 0000000000..340d0d39d3
--- /dev/null
+++ b/docs/api/layer/pointlayer.en.md
@@ -0,0 +1,77 @@
+---
+title: PointLayer
+order: 1
+---
+# PointLayer
+
+
+## 简介
+点数据的展示,数据源支持JSON,GeoJSON,CSV 三种数据格式。
+
+shape 支持
+
+**3D类型 柱图**
+
+```
+'cylinder', 'triangleColumn', 'hexagonColumn', 'squareColumn'
+
+```
+
+**2D 符号图**
+
+```
+'circle', 'square', 'hexagon', 'triangle', 'pentagon', 'octogon', 'hexagram','rhombus', 'vesica',
+
+```
+
+**图片标注**
+
+通过 ```Scene.addImage()``` 可以添加图片资源,
+
+
+### 代码示例
+
+
+#### 基本图形显示示例
+
+```javascript
+import { PointLayer } from "@antv/l7"
+
+const layer = PointLayer({
+ zIndex: 2
+ })
+ .source(data.list, {
+ type: 'array',
+ x: 'j',
+ y: 'w',
+ })
+ .shape('cylinder')
+ .size('t',(level)=> {
+ return [4,4,(level+40)];
+ })
+ .color('t', ["#002466","#105CB3","#2894E0","#CFF6FF","#FFF5B8","#FFAB5C","#F27049","#730D1C"])
+
+```
+
+
+#### 符号图
+
+使用图片添加地图标注
+
+```javascript
+
+scene.addImage('local', 'https://gw.alipayobjects.com/zos/rmsportal/xZXhTxbglnuTmZEwqQrE.png');
+
+
+const layer = new PointLayer({
+ zIndex: 4
+ })
+ .source(city)
+ .size(20.0)
+ .shape('local')
+ .color('#0D408C')
+
+```
+
+
+
diff --git a/docs/api/layer/pointlayer.zh.md b/docs/api/layer/pointlayer.zh.md
new file mode 100644
index 0000000000..1381b60128
--- /dev/null
+++ b/docs/api/layer/pointlayer.zh.md
@@ -0,0 +1,78 @@
+---
+title: PointLayer
+order: 1
+---
+
+# PointLayer
+
+
+## 简介
+点数据的展示,数据源支持JSON,GeoJSON,CSV 三种数据格式。
+
+shape 支持
+
+**3D类型 柱图**
+
+```
+'cylinder', 'triangleColumn', 'hexagonColumn', 'squareColumn'
+
+```
+
+**2D 符号图**
+
+```
+'circle', 'square', 'hexagon', 'triangle', 'pentagon', 'octogon', 'hexagram','rhombus', 'vesica',
+
+```
+
+**图片标注**
+
+通过 ```Scene.addImage()``` 可以添加图片资源,
+
+
+### 代码示例
+
+
+#### 基本图形显示示例
+
+```javascript
+import { PointLayer } from "@antv/l7"
+
+const layer = PointLayer({
+ zIndex: 2
+ })
+ .source(data.list, {
+ type: 'array',
+ x: 'j',
+ y: 'w',
+ })
+ .shape('cylinder')
+ .size('t',(level)=> {
+ return [4,4,(level+40)];
+ })
+ .color('t', ["#002466","#105CB3","#2894E0","#CFF6FF","#FFF5B8","#FFAB5C","#F27049","#730D1C"])
+
+```
+
+
+#### 符号图
+
+使用图片添加地图标注
+
+```javascript
+
+scene.addImage('local', 'https://gw.alipayobjects.com/zos/rmsportal/xZXhTxbglnuTmZEwqQrE.png');
+
+
+const layer = new PointLayer({
+ zIndex: 4
+ })
+ .source(city)
+ .size(20.0)
+ .shape('local')
+ .color('#0D408C')
+
+```
+
+
+
diff --git a/docs/api/layer/polygonlayer.en.md b/docs/api/layer/polygonlayer.en.md
new file mode 100644
index 0000000000..bbfe14d1a3
--- /dev/null
+++ b/docs/api/layer/polygonlayer.en.md
@@ -0,0 +1,26 @@
+---
+title: PolygonLayer
+order: 3
+---
+# 填充图
+
+绘制 2D 多边形以及沿 Z 轴拉伸后的 3D 图形。
+
+### shape
+
+填充图支持3种shape
+
+- fill 绘制填充面 不支持数据映射
+- line 绘制填充图描边 不支持数据映射
+- extrude 对填充图3D拉伸 不支持数据映射
+
+``` javascript
+ PolyonLayer.shape('fill');
+ PolyonLayer.shape('line').size(1); // size 表示线宽度
+ PolyonLayer.shape('extrude'); // size 表示高度
+
+```
+
+其他方法,事件,同基类 [Layer](/zh/docs/api/layer/layer)
+
+
diff --git a/docs/api/layer/polygonlayer.zh.md b/docs/api/layer/polygonlayer.zh.md
new file mode 100644
index 0000000000..bbfe14d1a3
--- /dev/null
+++ b/docs/api/layer/polygonlayer.zh.md
@@ -0,0 +1,26 @@
+---
+title: PolygonLayer
+order: 3
+---
+# 填充图
+
+绘制 2D 多边形以及沿 Z 轴拉伸后的 3D 图形。
+
+### shape
+
+填充图支持3种shape
+
+- fill 绘制填充面 不支持数据映射
+- line 绘制填充图描边 不支持数据映射
+- extrude 对填充图3D拉伸 不支持数据映射
+
+``` javascript
+ PolyonLayer.shape('fill');
+ PolyonLayer.shape('line').size(1); // size 表示线宽度
+ PolyonLayer.shape('extrude'); // size 表示高度
+
+```
+
+其他方法,事件,同基类 [Layer](/zh/docs/api/layer/layer)
+
+
diff --git a/docs/api/quickstart.en.md b/docs/api/quickstart.en.md
new file mode 100644
index 0000000000..91a02644b5
--- /dev/null
+++ b/docs/api/quickstart.en.md
@@ -0,0 +1,174 @@
+---
+title: quickStart
+order: 0
+redirect_from:
+ - /en/docs/tutorial
+---
+# 使用方法
+
+L7 提供三种使用方式:CDN、Submodule 以及 React 组件。
+
+## 通过 CDN 使用
+
+首先在 `` 中引入 L7 CDN 版本的 JS 和 CSS 文件:
+```html
+
+
+
+
+```
+
+如果使用 Mapbox,还需要额外引入 Mapbox 的 JS 和 CSS 文件,这一步可以参考 [Mapbox 文档](https://docs.mapbox.com/mapbox-gl-js/overview/#quickstart):
+```html
+
+
+
+
+
+```
+⚠️高德采用异步加载,因此不需要引入任何额外静态文件。
+
+然后在 `` 中定义一个容器并设置一个 `id`。通过全局 `L7` 这个命名空间可以获取场景 `L7.Scene` 和图层 `L7.PolygonLayer`:
+⚠️需要获取高德或者 Mapbox 的使用 token 并传入 `L7.Scene` 的构造函数,获取方式如下:
+* 高德地图开发者 Key [申请方法](https://lbs.amap.com/dev/key/)
+* [Mapbox Access Tokens](https://docs.mapbox.com/help/how-mapbox-works/access-tokens/#creating-and-managing-access-tokens)
+
+## 通过 Submodule 使用
+
+首先通过 `npm/yarn` 安装 `@l7/scene` 和 `@l7/layers`:
+```bash
+npm install --save @l7/scene @l7/layers
+// or
+yarn add @l7/scene @l7/layers
+```
+
+然后就可以使用其中包含的场景和各类图层:
+```typescript
+import { Scene } from '@l7/scene';
+import { PolygonLayer } from '@l7/layers';
+
+(async function() {
+ // 获取数据
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d2e0e930-fd44-4fca-8872-c1037b0fee7b.json',
+ );
+ const data = await response.json();
+
+ // 创建场景
+ const scene = new Scene({
+ center: [110.19382669582967, 50.258134],
+ id: 'map',
+ pitch: 0,
+ style: 'dark',
+ type: 'amap',
+ zoom: 3,
+ token: 'pg.xxx', // 高德或者 Mapbox 的 token
+ });
+
+ // 创建图层
+ const layer = new PolygonLayer({});
+ layer
+ .source(data)
+ .size('name', [0, 10000, 50000, 30000, 100000])
+ .color('name', [
+ '#2E8AE6',
+ '#69D1AB',
+ '#DAF291',
+ '#FFD591',
+ '#FF7A45',
+ '#CF1D49',
+ ])
+ .shape('fill')
+ .style({
+ opacity: 0.8,
+ });
+
+ // 添加图层到场景中
+ scene.addLayer(layer);
+
+ // 渲染场景
+ scene.render();
+})();
+```
+
+最后在 `` 中引入 L7 CDN 版本的 CSS 文件:
+```html
+
+
+
+```
+
+L7 目前的文档都通过这种方式使用,可以参考项目中的 stories:
+* [高德地图](https://github.com/antvis/L7/blob/next/stories/MapAdaptor/components/AMap.tsx)
+* [Mapbox](https://github.com/antvis/L7/blob/next/stories/MapAdaptor/components/Mapbox.tsx)
+
+
+## [WIP] React
+
+React 组件待开发,目前可以暂时以 Submodule 方式使用:
+```tsx
+import { Scene } from '@l7/scene';
+import { PolygonLayer } from '@l7/layers';
+import * as React from 'react';
+
+export default class AMap extends React.Component {
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d2e0e930-fd44-4fca-8872-c1037b0fee7b.json',
+ );
+ const scene = new Scene({
+ center: [110.19382669582967, 50.258134],
+ id: 'map',
+ pitch: 0,
+ style: 'dark',
+ type: 'amap',
+ zoom: 3,
+ token: 'pg.xxx', // 高德或者 Mapbox 的 token
+ });
+ const layer = new PolygonLayer({});
+
+ layer
+ .source(await response.json())
+ .size('name', [0, 10000, 50000, 30000, 100000])
+ .color('name', [
+ '#2E8AE6',
+ '#69D1AB',
+ '#DAF291',
+ '#FFD591',
+ '#FF7A45',
+ '#CF1D49',
+ ])
+ .shape('fill')
+ .style({
+ opacity: 0.8,
+ });
+ scene.addLayer(layer);
+ scene.render();
+ this.scene = scene;
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
+```
+
+⚠️组件 Unmount 时需要通过 `scene.destroy()` 手动销毁场景。
+
diff --git a/docs/api/quickstart.zh.md b/docs/api/quickstart.zh.md
new file mode 100644
index 0000000000..447a6baadc
--- /dev/null
+++ b/docs/api/quickstart.zh.md
@@ -0,0 +1,174 @@
+---
+title: 快速上手
+order: 0
+redirect_from:
+ - /zh/docs/tutorial
+---
+# 使用方法
+
+L7 提供三种使用方式:CDN、Submodule 以及 React 组件。
+
+## 通过 CDN 使用
+
+首先在 `` 中引入 L7 CDN 版本的 JS 和 CSS 文件:
+```html
+
+
+
+
+```
+
+如果使用 Mapbox,还需要额外引入 Mapbox 的 JS 和 CSS 文件,这一步可以参考 [Mapbox 文档](https://docs.mapbox.com/mapbox-gl-js/overview/#quickstart):
+```html
+
+
+
+
+
+```
+⚠️高德采用异步加载,因此不需要引入任何额外静态文件。
+
+然后在 `` 中定义一个容器并设置一个 `id`。通过全局 `L7` 这个命名空间可以获取场景 `L7.Scene` 和图层 `L7.PolygonLayer`:
+⚠️需要获取高德或者 Mapbox 的使用 token 并传入 `L7.Scene` 的构造函数,获取方式如下:
+* 高德地图开发者 Key [申请方法](https://lbs.amap.com/dev/key/)
+* [Mapbox Access Tokens](https://docs.mapbox.com/help/how-mapbox-works/access-tokens/#creating-and-managing-access-tokens)
+
+## 通过 Submodule 使用
+
+首先通过 `npm/yarn` 安装 `@l7/scene` 和 `@l7/layers`:
+```bash
+npm install --save @l7/scene @l7/layers
+// or
+yarn add @l7/scene @l7/layers
+```
+
+然后就可以使用其中包含的场景和各类图层:
+```typescript
+import { Scene } from '@l7/scene';
+import { PolygonLayer } from '@l7/layers';
+
+(async function() {
+ // 获取数据
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d2e0e930-fd44-4fca-8872-c1037b0fee7b.json',
+ );
+ const data = await response.json();
+
+ // 创建场景
+ const scene = new Scene({
+ center: [110.19382669582967, 50.258134],
+ id: 'map',
+ pitch: 0,
+ style: 'dark',
+ type: 'amap',
+ zoom: 3,
+ token: 'pg.xxx', // 高德或者 Mapbox 的 token
+ });
+
+ // 创建图层
+ const layer = new PolygonLayer({});
+ layer
+ .source(data)
+ .size('name', [0, 10000, 50000, 30000, 100000])
+ .color('name', [
+ '#2E8AE6',
+ '#69D1AB',
+ '#DAF291',
+ '#FFD591',
+ '#FF7A45',
+ '#CF1D49',
+ ])
+ .shape('fill')
+ .style({
+ opacity: 0.8,
+ });
+
+ // 添加图层到场景中
+ scene.addLayer(layer);
+
+ // 渲染场景
+ scene.render();
+})();
+```
+
+最后在 `` 中引入 L7 CDN 版本的 CSS 文件:
+```html
+
+
+
+```
+
+L7 目前的文档都通过这种方式使用,可以参考项目中的 stories:
+* [高德地图](https://github.com/antvis/L7/blob/next/stories/MapAdaptor/components/AMap.tsx)
+* [Mapbox](https://github.com/antvis/L7/blob/next/stories/MapAdaptor/components/Mapbox.tsx)
+
+
+## [WIP] React
+
+React 组件待开发,目前可以暂时以 Submodule 方式使用:
+```tsx
+import { Scene } from '@l7/scene';
+import { PolygonLayer } from '@l7/layers';
+import * as React from 'react';
+
+export default class AMap extends React.Component {
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d2e0e930-fd44-4fca-8872-c1037b0fee7b.json',
+ );
+ const scene = new Scene({
+ center: [110.19382669582967, 50.258134],
+ id: 'map',
+ pitch: 0,
+ style: 'dark',
+ type: 'amap',
+ zoom: 3,
+ token: 'pg.xxx', // 高德或者 Mapbox 的 token
+ });
+ const layer = new PolygonLayer({});
+
+ layer
+ .source(await response.json())
+ .size('name', [0, 10000, 50000, 30000, 100000])
+ .color('name', [
+ '#2E8AE6',
+ '#69D1AB',
+ '#DAF291',
+ '#FFD591',
+ '#FF7A45',
+ '#CF1D49',
+ ])
+ .shape('fill')
+ .style({
+ opacity: 0.8,
+ });
+ scene.addLayer(layer);
+ scene.render();
+ this.scene = scene;
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
+```
+
+⚠️组件 Unmount 时需要通过 `scene.destroy()` 手动销毁场景。
+
diff --git a/docs/api/scene.en.md b/docs/api/scene.en.md
new file mode 100644
index 0000000000..345f9e5dc7
--- /dev/null
+++ b/docs/api/scene.en.md
@@ -0,0 +1,321 @@
+---
+title: Scene
+order: 1
+---
+
+## 简介
+`Scene `基础的地图类,提供地图创建,图层创建,管理等功能
+
+示例代码
+
+```javascript
+import {Scene} from '@l7/scene';
+const scene =new L7.Scene({
+ id:'map',
+ mapStyle:'dark',
+ center:[ 110.770672, 34.159869 ],
+ pitch:45
+})
+```
+
+
+### 构造函数
+
+**Scene**
支持两种实例化方式
+
+- 独立实例化 内部根据id自动穿件地图实例
+- 传入地图实例
+
+
+
+
+
+#### 独立实例化 Scene
+
+```javascript
+const scene = new L7.Scene({
+ id: 'map',
+ mapStyle: 'dark',
+ center: [ 120.19382669582967, 30.258134 ],
+ pitch: 0,
+ zoom: 12,
+ maxZoom:20,
+ minZoom:0,
+});
+```
+
+
+#### 根据map 实例创建Sence
+
+_L7 基于高德地图3D模式开发的,因此传入Map实例 __viewModes需要设置成3d_
_
+```javascript
+var mapinstance = new AMap.Map('map',{
+ center: [ 120.19382669582967, 30.258134 ],
+ viewMode: '3D',
+ pitch: 0,
+ zoom: 12,
+ maxZoom:20,
+ minZoom:0,
+ });
+
+const scene = new L7.Scene({
+ mapStyle: 'dark',
+ map:mapinstance
+});
+```
+
+
+## map
+L7 在scene 下保留了高德地图实例,可以通过scene.map 调用高德地图的map方法。
map 实例方法见[高德地图文档](https://lbs.amap.com/api/javascript-api/reference/map)
+
+```javascript
+scene.map
+```
+
+
+## 构造类
+
+### PointLayer
+新建点图层
+
+### PolylineLayer
+新建线图层
+
+### PolygonLayer
+新建面图层
+
+### ImageLayer
+新建图片图层
+
+
+## 配置项
+
+### id
+需传入 dom 容器或者容器 id {domObject || string} [必选]
+
+
+### zoom
+地图初始显示级别 {number} (0-22)
+
+### center
+地图初始中心经纬度 {Lnglat}
+
+### pitch
+地图初始俯仰角度 {number} default 0
+
+### mapSyle
+地图样式 {style} 目前仅支持高德地图。 default 'dark'
L7 内置三种种默认地图样式 dark | light|blank 空地图
+
+设置地图的显示样式,目前支持两种地图样式:
第一种:自定义地图样式,如`"amap://styles/d6bf8c1d69cea9f5c696185ad4ac4c86"`
可前往[地图自定义平台](https://lbs.amap.com/dev/mapstyle/index)定制自己的个性地图样式;
第二种:官方样式模版,如`"amap://styles/grey"`。
其他模版样式及自定义地图的使用说明见[开发指南](https://lbs.amap.com/api/javascript-api/guide/create-map/mapstye/)
+
+
+### minZoom
+地图最小缩放等级 {number} default 0 (0-22)
+
+### maxZoom
+地图最大缩放等级 {number} default 22 (0-22)
+
+### rotateEnable
+地图是否可旋转 {Boolean} default true
+
+
+
+
+## 方法
+
+### getZoom
+获取当前缩放等级
+
+```javascript
+scene.getZoom();
+```
+
+return {float} 当前缩放等级
+
+### getLayers()
+获取所有的地图图层
+```javascript
+scene.getLayers();
+```
+
+return 图层数组 {Array}
+
+
+### getCenter()
+获取地图中心点
+```javascript
+scene.getCenter()
+```
+
+return {Lnglat} :地图中心点
+
+### getSize()
+获取地图容器大小
+```javascript
+scene.getSize()
+```
+return { Object } 地图容器的 width,height
+
+### getPitch()
+获取地图俯仰角
+```javascript
+scene.getPitch();
+```
+
+return {number} pitch
+
+### setCenter()
+设置地图中心点坐标
+
+```javascript
+scene.setCenter([lng,lat])
+```
+
+参数:`center` {LngLat} 地图中心点
+
+
+### setZoomAndCenter
+设置地图等级和中心
+```javascript
+scene.setZoomAndCenter(zoom,center)
+```
+
+参数:zoom {number}
center {LngLat}
+
+
+### setRotation
+设置地图顺时针旋转角度,旋转原点为地图容器中心点,取值范围 [0-360]
+```javascript
+scene.setRotation(rotation)
+```
+
+参数: `rotation` {number}
+
+### zoomIn
+地图放大一级
+```javascript
+scene.zoomIn()
+```
+
+### zoomOut
+地图缩小一级
+```javascript
+scene.ZoomOUt()
+```
+
+### panTo
+地图平移到指定的位置
+```javascript
+scene.panTo(LngLat)
+```
+
+参数:`center` LngLat 中心位置坐标
+
+### panBy
+以像素为单位沿X方向和Y方向移动地图
+```javascript
+scene.panBy(x,y)
+```
+参数:
`x` {number} 水平方向移动像素 向右为正方向
`y` {number} 垂直方向移动像素 向下为正方向
+
+
+### setPitch
+设置地图仰俯角度
+```javascript
+scene.setPitch(pitch)
+```
+
+参数 :
`pitch` {number}
+
+###
+
+### setStatus
+设置当前地图显示状态,包括是否可鼠标拖拽移动地图、地图是否可缩放、地图是否可旋转(rotateEnable)、是否可双击放大地图、是否可以通过键盘控制地图旋转(keyboardEnable)等
+
+```javascript
+ scene.setStatus({
+ dragEnable: true,
+ keyboardEnable: true,
+ doubleClickZoom: true,
+ zoomEnable: true,
+ rotateEnable: true
+ });
+```
+
+
+### fitBounds
+地图缩放到某个范围内
参数 :
`extent` { array} 经纬度范围 [minlng,minlat,maxlng,maxlat]
+
+```javascript
+scene.fitBounds([112,32,114,35]);
+```
+
+
+
+### removeLayer
+移除layer
+
+```javascript
+scene.removeLayer(layer)
+```
+
+参数
`layer` {Layer}
+
+### getLayers
+ 获取所有的layer
+
+```javascript
+scene.getLayers()
+```
+
+return layers {array}
+
+## 事件
+
+
+### on
+事件监听
+
+#### 参数
+`eventName` {string} 事件名
`hander` {function } 事件回调函数
+
+
+### off
+移除事件监听
`eventName` {string} 事件名
`hander` {function } 事件回调函数
+
+
+### 地图事件
+```javascript
+scene.on('loaded',()=>{}) //地图加载完成触发
+scene.on('mapmove',()=>{}) // 地图平移时触发事件
+scene.on('movestart',()=>{}) // 地图平移开始时触发
+scene.on('moveend',()=>{}) // 地图移动结束后触发,包括平移,以及中心点变化的缩放。如地图有拖拽缓动效果,则在缓动结束后触发
+scene.on('zoomchange',()=>{}) // 地图缩放级别更改后触发
+scene.on('zoomstart',()=>{}) // 缩放开始时触发
+scene.on('zoomend',()=>{}) // 缩放停止时触发
+```
+
+
+### 鼠标事件
+
+```javascript
+scene.on('click', (ev)=>{}); // 鼠标左键点击事件
+scene.on('dblclick', (ev)=>{}); // 鼠标左键双击事件
+scene.on('mousemove', (ev)=>{}); // 鼠标在地图上移动时触发
+scene.on('mousewheel', (ev)=>{}); // 鼠标滚轮开始缩放地图时触发
+scene.on('mouseover', (ev)=>{}); // 鼠标移入地图容器内时触发
+scene.on('mouseout', (ev)=>{}); // 鼠标移出地图容器时触发
+scene.on('mouseup', (ev)=>{}); // 鼠标在地图上单击抬起时触发
+scene.on('mousedown', (ev)=>{}); // 鼠标在地图上单击按下时触发
+scene.on('rightclick', (ev)=>{}); // 鼠标右键单击事件
+scene.on('dragstart', (ev)=>{}); //开始拖拽地图时触发
+scene.on('dragging', (ev)=>{}); // 拖拽地图过程中触发
+scene.on('dragend', (ev)=>{}); //停止拖拽地图时触发。如地图有拖拽缓动效果,则在拽停止,缓动开始前触发
+```
+
+### 其它事件
+```javascript
+scene.on('resize',()=>{}) // 地图容器大小改变事件
+```
+
+
diff --git a/docs/api/scene.zh.md b/docs/api/scene.zh.md
new file mode 100644
index 0000000000..a0eb5cc2eb
--- /dev/null
+++ b/docs/api/scene.zh.md
@@ -0,0 +1,292 @@
+---
+title: 场景 Scene
+order: 1
+---
+
+# 简介
+
+## Scene
+
+L7 地理可视化 地图,图层,组件,以及可视化所需要的资源,如图片,字体通过Scene统一管理
+
+
+## Map
+
+ L7 地理可视化侧重于地理数据的可视化表达,地图层需要依赖第三方地图,第三方地图通过Scene 统一创建,创建管理
+ 只需要通过Scene传入地图配置项即可。
+
+目前L7 支持两种地图底图
+
+- 高德地图 国内业务场景 合规中国地图
+- MapBox 国际业务,或者内网离线部署场景
+
+
+
+示例代码
+
+```javascript
+import {Scene} from '@l7/scene';
+const scene =new L7.Scene({
+ id:'map',
+ mapStyle:'dark',
+ center:[ 110.770672, 34.159869 ],
+ pitch:45
+})
+```
+
+
+### 构造函数
+
+**Scene**
+
+
+
+
+
+
+## map
+L7 在scene 下保留了高德地图实例,可以通过scene.map 调用高德地图的map方法。
map 实例方法见[高德地图文档](https://lbs.amap.com/api/javascript-api/reference/map)
+
+```javascript
+scene.map
+```
+
+## 配置项
+
+### 地图配置项
+
+### id
+需传入 dom 容器或者容器 id {domObject || string} [必选]
+
+
+### zoom
+地图初始显示级别 {number} (0-22)
+
+### center
+地图初始中心经纬度 {Lnglat}
+
+### pitch
+地图初始俯仰角度 {number} default 0
+
+### mapSyle
+
+简化地图样式设置,L7 内置了三种主题默认样式
+- dark
+- light
+- normal
+
+地图样式 {style} 目前仅支持高德地图。 default 'dark'
L7 内置三种种默认地图样式 dark | light|blank 空地图
+
+设置地图的显示样式,目前支持两种地图样式:
第一种:自定义地图样式,如`"amap://styles/d6bf8c1d69cea9f5c696185ad4ac4c86"`
可前往[地图自定义平台](https://lbs.amap.com/dev/mapstyle/index)定制自己的个性地图样式;
第二种:官方样式模版,如`"amap://styles/grey"`。
其他模版样式及自定义地图的使用说明见[开发指南](https://lbs.amap.com/api/javascript-api/guide/create-map/mapstye/)
+
+
+### minZoom
+地图最小缩放等级 {number} default 0 (0-22)
+
+### maxZoom
+地图最大缩放等级 {number} default 22 (0-22)
+
+### rotateEnable
+地图是否可旋转 {Boolean} default true
+
+
+
+
+## 方法
+
+### getZoom
+获取当前缩放等级
+
+```javascript
+scene.getZoom();
+```
+
+return {float} 当前缩放等级
+
+### getLayers()
+获取所有的地图图层
+```javascript
+scene.getLayers();
+```
+
+return 图层数组 {Array}
+
+
+### getCenter()
+获取地图中心点
+```javascript
+scene.getCenter()
+```
+
+return {Lnglat} :地图中心点
+
+### getSize()
+获取地图容器大小
+```javascript
+scene.getSize()
+```
+return { Object } 地图容器的 width,height
+
+### getPitch()
+获取地图俯仰角
+```javascript
+scene.getPitch();
+```
+
+return {number} pitch
+
+### setCenter()
+设置地图中心点坐标
+
+```javascript
+scene.setCenter([lng,lat])
+```
+
+参数:`center` {LngLat} 地图中心点
+
+
+### setZoomAndCenter
+设置地图等级和中心
+```javascript
+scene.setZoomAndCenter(zoom,center)
+```
+
+参数:zoom {number}
center {LngLat}
+
+
+### setRotation
+设置地图顺时针旋转角度,旋转原点为地图容器中心点,取值范围 [0-360]
+```javascript
+scene.setRotation(rotation)
+```
+
+参数: `rotation` {number}
+
+### zoomIn
+地图放大一级
+```javascript
+scene.zoomIn()
+```
+
+### zoomOut
+地图缩小一级
+```javascript
+scene.ZoomOUt()
+```
+
+### panTo
+地图平移到指定的位置
+```javascript
+scene.panTo(LngLat)
+```
+
+参数:`center` LngLat 中心位置坐标
+
+### panBy
+以像素为单位沿X方向和Y方向移动地图
+```javascript
+scene.panBy(x,y)
+```
+参数:
`x` {number} 水平方向移动像素 向右为正方向
`y` {number} 垂直方向移动像素 向下为正方向
+
+
+### setPitch
+设置地图仰俯角度
+```javascript
+scene.setPitch(pitch)
+```
+
+参数 :
`pitch` {number}
+
+###
+
+### setStatus
+设置当前地图显示状态,包括是否可鼠标拖拽移动地图、地图是否可缩放、地图是否可旋转(rotateEnable)、是否可双击放大地图、是否可以通过键盘控制地图旋转(keyboardEnable)等
+
+```javascript
+ scene.setStatus({
+ dragEnable: true,
+ keyboardEnable: true,
+ doubleClickZoom: true,
+ zoomEnable: true,
+ rotateEnable: true
+ });
+```
+
+
+### fitBounds
+地图缩放到某个范围内
参数 :
`extent` { array} 经纬度范围 [minlng,minlat,maxlng,maxlat]
+
+```javascript
+scene.fitBounds([112,32,114,35]);
+```
+
+
+
+### removeLayer
+移除layer
+
+```javascript
+scene.removeLayer(layer)
+```
+
+参数
`layer` {Layer}
+
+### getLayers
+ 获取所有的layer
+
+```javascript
+scene.getLayers()
+```
+
+return layers {array}
+
+## 事件
+
+
+### on
+事件监听
+
+#### 参数
+`eventName` {string} 事件名
`hander` {function } 事件回调函数
+
+
+### off
+移除事件监听
`eventName` {string} 事件名
`hander` {function } 事件回调函数
+
+
+### 地图事件
+```javascript
+scene.on('loaded',()=>{}) //地图加载完成触发
+scene.on('mapmove',()=>{}) // 地图平移时触发事件
+scene.on('movestart',()=>{}) // 地图平移开始时触发
+scene.on('moveend',()=>{}) // 地图移动结束后触发,包括平移,以及中心点变化的缩放。如地图有拖拽缓动效果,则在缓动结束后触发
+scene.on('zoomchange',()=>{}) // 地图缩放级别更改后触发
+scene.on('zoomstart',()=>{}) // 缩放开始时触发
+scene.on('zoomend',()=>{}) // 缩放停止时触发
+```
+
+
+### 鼠标事件
+
+```javascript
+scene.on('click', (ev)=>{}); // 鼠标左键点击事件
+scene.on('dblclick', (ev)=>{}); // 鼠标左键双击事件
+scene.on('mousemove', (ev)=>{}); // 鼠标在地图上移动时触发
+scene.on('mousewheel', (ev)=>{}); // 鼠标滚轮开始缩放地图时触发
+scene.on('mouseover', (ev)=>{}); // 鼠标移入地图容器内时触发
+scene.on('mouseout', (ev)=>{}); // 鼠标移出地图容器时触发
+scene.on('mouseup', (ev)=>{}); // 鼠标在地图上单击抬起时触发
+scene.on('mousedown', (ev)=>{}); // 鼠标在地图上单击按下时触发
+scene.on('rightclick', (ev)=>{}); // 鼠标右键单击事件
+scene.on('dragstart', (ev)=>{}); //开始拖拽地图时触发
+scene.on('dragging', (ev)=>{}); // 拖拽地图过程中触发
+scene.on('dragend', (ev)=>{}); //停止拖拽地图时触发。如地图有拖拽缓动效果,则在拽停止,缓动开始前触发
+```
+
+### 其它事件
+```javascript
+scene.on('resize',()=>{}) // 地图容器大小改变事件
+```
+
+
diff --git a/docs/api/source/geojson.en.md b/docs/api/source/geojson.en.md
new file mode 100644
index 0000000000..d6949d2fc5
--- /dev/null
+++ b/docs/api/source/geojson.en.md
@@ -0,0 +1,27 @@
+---
+title: geojson
+order: 1
+---
+
+
+# geojson 数据介绍
+
+
+## 简介
+
+GeoJSON是一种对各种地理数据结构进行编码的格式。GeoJSON对象可以表示几何、特征或者特征集合。GeoJSON支持下面几何类型:点、线、面、多点、多线、多面和几何集合。GeoJSON里的特征包含一个几何对象和其他属性,特征集合表示一系列特征。
+
+[geojson详细文档]()
+
+## Geojson相关的JS库
+
+### 地理统计分析工具
+
+[turfjs](http://turfjs.org/): 地理数据计算,处理,统计,分析的Javascript 库
+
+
+### 在线工具:
+
+[http://geojson.io/](http://geojson.io/) 可以在线查看,绘制,修改GeoJSON数据
+
+[https://mapshaper.org/](https://mapshaper.org/) 可以查看较大的geojson,还能够简化GeoJSON数据
diff --git a/docs/api/source/geojson.zh.md b/docs/api/source/geojson.zh.md
new file mode 100644
index 0000000000..d6949d2fc5
--- /dev/null
+++ b/docs/api/source/geojson.zh.md
@@ -0,0 +1,27 @@
+---
+title: geojson
+order: 1
+---
+
+
+# geojson 数据介绍
+
+
+## 简介
+
+GeoJSON是一种对各种地理数据结构进行编码的格式。GeoJSON对象可以表示几何、特征或者特征集合。GeoJSON支持下面几何类型:点、线、面、多点、多线、多面和几何集合。GeoJSON里的特征包含一个几何对象和其他属性,特征集合表示一系列特征。
+
+[geojson详细文档]()
+
+## Geojson相关的JS库
+
+### 地理统计分析工具
+
+[turfjs](http://turfjs.org/): 地理数据计算,处理,统计,分析的Javascript 库
+
+
+### 在线工具:
+
+[http://geojson.io/](http://geojson.io/) 可以在线查看,绘制,修改GeoJSON数据
+
+[https://mapshaper.org/](https://mapshaper.org/) 可以查看较大的geojson,还能够简化GeoJSON数据
diff --git a/docs/api/source/source.en.md b/docs/api/source/source.en.md
new file mode 100644
index 0000000000..5487b1d723
--- /dev/null
+++ b/docs/api/source/source.en.md
@@ -0,0 +1,298 @@
+---
+title: Source
+order: 0
+---
+
+
+# Source
+
+
+### 概述
+
+source 地理数据处理模块,主要包含数据解析(parser),和数据处理(transform);
+
+**parser:**
+
+不同数据类型处理成统一数据格式。矢量数据包括 GeoJON, CSV,Json等不同数据格式,栅格数据,包括Raster,Image数据。将来还会支持瓦片格式数据。
+
+**transform**
+
+数据转换,数据统计,网格布局,数据聚合等数据操作。
+
+
+## API
+
+### parser
+
+空间数据分矢量数据和栅格数据两大类
+
+- 矢量数据 支持 csv,geojson,json 三种数据类型
+
+- 栅格数据 支持 image,Raster
+
+
+
+#### geojson
+
+[geojson](https://www.yuque.com/antv/l7/dm2zll) 数据为默认数据格式,可以
+
+不需要设置parser 参数
+
+```javascript
+layer.source(data)
+```
+
+
+#### json
+
+json 不是标准的地理数据结构,因此需要设置对应的经纬度字段
+
+**点数据**
+
+x: 经度字段
+
+y: 纬度字段
+
+```javascript
+
+const data = [{
+ lng:112.345,
+ lat:30.455,
+ value: 10
+ },{
+ lng:114.345,
+ lat:31.455,
+ value: 10
+ }
+]
+
+layer.source(
+ data,
+ {
+ parser: {
+ type:'json',
+ x:'lng',
+ y:'lat',
+ }
+})
+```
+
+**线段数据**
+
+ type: json
+
+这里的直线表示有两个点组成的线段,主要绘制弧线的时候比较常用,只需指定线段的起始点坐标
+
+ x:经度字段 起点经度
+ y:纬度字段 起点纬度
+ x1:经度字段 终点经度
+ y1:纬度字段 终点纬度
+
+```javascript
+const data = [{
+ lng1:112.345,
+ lat1:30.455,
+ lng2:112.345,
+ lat2:30.455,
+ value: 10
+ },{
+ lng1:114.345,
+ lat1:31.455,
+ lng2:112.345,
+ lat2:30.455,
+ value: 10
+ }
+];
+
+layer.source(
+ data,
+ {
+ parser:{
+ type:'json',
+ x:'lng1',
+ y:'lat1' ,
+ x1:'lng1',
+ y1:'lat2' ,
+ }
+ }
+})
+```
+
+**面数据**
+
+需要指定coordinates 字段, coordinates据格式
+
+**注意面数据 coord 是三层数据结构**
+
+```javascript
+
+[ {
+ type: "Polygon",
+ 'geometryCoord': [
+ [
+ [
+ 115.1806640625,
+ 30.637912028341123
+ ],
+ [
+ 114.9609375,
+ 29.152161283318915
+ ],
+ [
+ 117.79541015625001,
+ 27.430289738862594
+ ],
+ [
+ 118.740234375,
+ 29.420460341013133
+ ],
+ [
+ 117.46582031249999,
+ 31.50362930577303
+ ],
+ [
+ 115.1806640625,
+ 30.637912028341123
+ ]
+ ]
+ ]
+ }
+ ]
+
+ layer.source(data,{
+ parser:{
+ type:'json',
+ coordinates:'geometryCoord'
+ }
+ })
+```
+
+
+
+
+#### csv
+点,线数据配置项同json数据类型
+
+```javascript
+layer.source(
+ data,
+ {
+ parser:{
+ type:'csv',
+ x:'lng1',
+ y:'lat1' ,
+ x1:'lng1',
+ y1:'lat2' ,
+ }
+})
+```
+
+**栅格数据类型****
+
+#### image
+ 根据图片的经纬度范围,将图片添加到地图上。 配置项
+
+- type: image
+- extent: 图像的经纬度范围 []
+
+```javascript
+layer.source('https://gw.alipayobjects.com/zos/rmsportal/FnHFeFklTzKDdUESRNDv.jpg',{
+ parser:{
+ type:'image',
+ extent: [ 121.1680, 30.2828, 121.3840, 30.4219 ]
+ }
+
+ })
+```
+
+
+#### raster
+栅格数据类型,主要表示遥感数据类型data 栅格数据的二维矩阵数据parser 配置项
+
+- type raster
+- width 数据宽度二维矩阵 columns
+- height 数据高度
+- min 数据最大值
+- max 数据最小值
+- extent 经纬度范围
+
+```javascript
+ source(values, {
+ parser: {
+ type: 'raster',
+ width: n,
+ height: m,
+ min: 0,
+ max: 8000,
+ extent: [ 73.482190241, 3.82501784112, 135.106618732, 57.6300459963 ]
+ }
+ })
+```
+
+
+### transforms
+目前支持三种数据处理方法 map,grid,hexagon transform配置项
+
+- type 数据处理类型
+- tansform cfg 数据处理配置项
+
+
+#### map
+数据处理,支持自定义callback函数
+
+- callback:function 回调函数
+
+```javascript
+ layer.source(data, {
+ transforms:[
+ {
+ type: 'map',
+ callback:function(item){
+ const [x, y] = item.coordinates;
+ item.lat = item.lat*1;
+ item.lng = item.lng*1;
+ item.v = item.v *1;
+ item.coordinates = [x*1,y*1];
+ return item;
+ }
+
+ },
+```
+
+
+#### grid
+
+生成方格网布局,根据数据字段统计,主要在网格热力图中使用
+
+- type: 'grid',
+- size: 网格半径
+- field: 数据统计字段
+- method:聚合方法 count,max,min,sum,mean5个统计维度
+
+```javascript
+ layer.source(data, {
+ transforms:[
+ {
+ type: 'grid',
+ size: 15000,
+ field:'v',
+ method:'sum'
+ }
+ ]
+ }
+```
+
+
+#### hexagon
+生成六边形网格布局,根据数据字段统计
+
+- type: 'hexagon',
+- size: 网格半径
+- field: 数据统计字段
+- method:聚合方法 count,max,min,sum,mean5个统计维度
+
+
+```
+
+
+
diff --git a/docs/api/source/source.zh.md b/docs/api/source/source.zh.md
new file mode 100644
index 0000000000..e094d1f6a9
--- /dev/null
+++ b/docs/api/source/source.zh.md
@@ -0,0 +1,298 @@
+---
+title: Source
+order: 0
+---
+
+
+# Source
+
+
+### 概述
+
+source 地理数据处理模块,主要包含数据解析(parser),和数据处理(transform);
+
+**parser:**
+
+不同数据类型处理成统一数据格式。矢量数据包括 GeoJON, CSV,Json等不同数据格式,栅格数据,包括Raster,Image数据。将来还会支持瓦片格式数据。
+
+**transform:**
+
+数据转换,数据统计,网格布局,数据聚合等数据操作。
+
+
+## API
+
+### parser
+
+空间数据分矢量数据和栅格数据两大类
+
+- 矢量数据 支持 csv,geojson,json 三种数据类型
+
+- 栅格数据 支持 image,Raster
+
+
+
+#### geojson
+
+[geojson](https://www.yuque.com/antv/l7/dm2zll) 数据为默认数据格式,可以
+
+不需要设置parser 参数
+
+```javascript
+layer.source(data);
+```
+
+
+#### json
+
+json 不是标准的地理数据结构,因此需要设置对应的经纬度字段
+
+**点数据**
+
+x: 经度字段
+
+y: 纬度字段
+
+```javascript
+
+const data = [{
+ lng:112.345,
+ lat:30.455,
+ value: 10
+ },{
+ lng:114.345,
+ lat:31.455,
+ value: 10
+ }
+]
+
+layer.source(
+ data,
+ {
+ parser: {
+ type:'json',
+ x:'lng',
+ y:'lat',
+ }
+})
+```
+
+**线段数据**
+
+ type: json
+
+这里的直线表示有两个点组成的线段,主要绘制弧线的时候比较常用,只需指定线段的起始点坐标
+
+ x:经度字段 起点经度
+ y:纬度字段 起点纬度
+ x1:经度字段 终点经度
+ y1:纬度字段 终点纬度
+
+```javascript
+const data = [{
+ lng1:112.345,
+ lat1:30.455,
+ lng2:112.345,
+ lat2:30.455,
+ value: 10
+ },{
+ lng1:114.345,
+ lat1:31.455,
+ lng2:112.345,
+ lat2:30.455,
+ value: 10
+ }
+];
+
+layer.source(
+ data,
+ {
+ parser:{
+ type:'json',
+ x:'lng1',
+ y:'lat1' ,
+ x1:'lng1',
+ y1:'lat2' ,
+ }
+ }
+})
+```
+
+**面数据**
+
+需要指定coordinates 字段, coordinates据格式
+
+**注意面数据 coord 是三层数据结构**
+
+```javascript
+
+[ {
+ type: "Polygon",
+ 'geometryCoord': [
+ [
+ [
+ 115.1806640625,
+ 30.637912028341123
+ ],
+ [
+ 114.9609375,
+ 29.152161283318915
+ ],
+ [
+ 117.79541015625001,
+ 27.430289738862594
+ ],
+ [
+ 118.740234375,
+ 29.420460341013133
+ ],
+ [
+ 117.46582031249999,
+ 31.50362930577303
+ ],
+ [
+ 115.1806640625,
+ 30.637912028341123
+ ]
+ ]
+ ]
+ }
+ ];
+
+ layer.source(data,{
+ parser:{
+ type:'json',
+ coordinates:'geometryCoord'
+ }
+ });
+```
+
+
+
+
+#### csv
+点,线数据配置项同json数据类型
+
+```javascript
+layer.source(
+ data,
+ {
+ parser:{
+ type:'csv',
+ x:'lng1',
+ y:'lat1' ,
+ x1:'lng1',
+ y1:'lat2' ,
+ }
+})
+```
+
+**栅格数据类型****
+
+#### image
+ 根据图片的经纬度范围,将图片添加到地图上。 配置项
+
+- type: image
+- extent: 图像的经纬度范围 []
+
+```javascript
+layer.source('https://gw.alipayobjects.com/zos/rmsportal/FnHFeFklTzKDdUESRNDv.jpg',{
+ parser:{
+ type:'image',
+ extent: [ 121.1680, 30.2828, 121.3840, 30.4219 ]
+ }
+ });
+```
+
+
+#### raster
+栅格数据类型,主要表示遥感数据类型data 栅格数据的二维矩阵数据parser 配置项
+
+- type raster
+- width 数据宽度二维矩阵 columns
+- height 数据高度
+- min 数据最大值
+- max 数据最小值
+- extent 经纬度范围
+
+```javascript
+ source(values, {
+ parser: {
+ type: 'raster',
+ width: n,
+ height: m,
+ min: 0,
+ max: 8000,
+ extent: [ 73.482190241, 3.82501784112, 135.106618732, 57.6300459963 ]
+ }
+ });
+```
+
+
+### transforms
+
+目前支持三种数据处理方法 map,grid,hexagon transform配置项
+
+- type 数据处理类型
+- tansform cfg 数据处理配置项
+
+
+#### map
+数据处理,支持自定义callback函数
+
+- callback:function 回调函数
+
+```javascript
+ layer.source(data, {
+ transforms:[
+ {
+ type: 'map',
+ callback:function(item){
+ const [x, y] = item.coordinates;
+ item.lat = item.lat*1;
+ item.lng = item.lng*1;
+ item.v = item.v *1;
+ item.coordinates = [x*1,y*1];
+ return item;
+ }
+ }
+ ]
+ });
+```
+
+
+#### grid
+
+生成方格网布局,根据数据字段统计,主要在网格热力图中使用
+
+- type: 'grid',
+- size: 网格半径
+- field: 数据统计字段
+- method:聚合方法 count,max,min,sum,mean5个统计维度
+
+```javascript
+ layer.source(data, {
+ transforms:[
+ {
+ type: 'grid',
+ size: 15000,
+ field:'v',
+ method:'sum'
+ }
+ ],
+ })
+```
+
+
+#### hexagon
+生成六边形网格布局,根据数据字段统计
+
+- type: 'hexagon',
+- size: 网格半径
+- field: 数据统计字段
+- method:聚合方法 count,max,min,sum,mean5个统计维度
+
+```
+
+
+
diff --git a/docs/manual/tutorial/data.en.md b/docs/manual/tutorial/data.en.md
new file mode 100644
index 0000000000..f6ddefc5df
--- /dev/null
+++ b/docs/manual/tutorial/data.en.md
@@ -0,0 +1,65 @@
+---
+title: data
+order: 1
+---
+
+## 数据
+
+目前L7支持的数据格式有GeoJson,CSV,JSon Image
+
+GeoJSON 支持点、线、面,等所有的空间数据格式。
CSV 支持,点,线段,弧线的支持。
JSON 支持简单的点、线,面,不支持多点,多线的,多面数据格式。
+
+
+## GeoJSON
+
+> GeoJSON是一种对各种地理数据结构进行编码的格式。GeoJSON对象可以表示几何、特征或者特征集合。GeoJSON支持下面几何类型:点、线、面、多点、多线、多面和几何集合。GeoJSON里的特征包含一个几何对象和其他属性,特征集合表示一系列特征。
+
+
+
+```json
+{
+ "type": "FeatureCollection",
+ "features": [
+ {
+ "type": "Feature",
+ "properties": {},
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [
+ 110.478515625,
+ 32.76880048488168
+ ],
+ [
+ 117.68554687499999,
+ 32.76880048488168
+ ],
+ [
+ 117.68554687499999,
+ 37.64903402157866
+ ],
+ [
+ 110.478515625,
+ 37.64903402157866
+ ],
+ [
+ 110.478515625,
+ 32.76880048488168
+ ]
+ ]
+ ]
+ }
+ }
+ ]
+}
+```
+
+## 地理统计分析工具
+[turfjs](http://turfjs.org/): 地理数据计算,处理,统计,分析的Javascript 库
+
+## 在线工具
+
+[http://geojson.io/](http://geojson.io/) 可以在线查看,绘制,修改GeoJSON数据
+
+[https://mapshaper.org/](https://mapshaper.org/) 可以查看较大的geojson,还能够简化GeoJSON数据
diff --git a/docs/manual/tutorial/data.zh.md b/docs/manual/tutorial/data.zh.md
new file mode 100644
index 0000000000..781c763b24
--- /dev/null
+++ b/docs/manual/tutorial/data.zh.md
@@ -0,0 +1,74 @@
+---
+title: 数据
+order: 1
+---
+
+## 数据
+
+目前L7支持的数据格式有GeoJson,CSV,JSon Image
+
+GeoJSON 支持点、线、面,等所有的空间数据格式。
CSV 支持,点,线段,弧线的支持。
JSON 支持简单的点、线,面,不支持多点,多线的,多面数据格式。
+
+
+## GeoJSON
+
+> GeoJSON是一种对各种地理数据结构进行编码的格式。GeoJSON对象可以表示几何、特征或者特征集合。GeoJSON支持下面几何类型:点、线、面、多点、多线、多面和几何集合。GeoJSON里的特征包含一个几何对象和其他属性,特征集合表示一系列特征。
+
+
+
+```json
+{
+ "type": "FeatureCollection",
+ "features": [
+ {
+ "type": "Feature",
+ "properties": {},
+ "geometry": {
+ "type": "Polygon",
+ "coordinates": [
+ [
+ [
+ 110.478515625,
+ 32.76880048488168
+ ],
+ [
+ 117.68554687499999,
+ 32.76880048488168
+ ],
+ [
+ 117.68554687499999,
+ 37.64903402157866
+ ],
+ [
+ 110.478515625,
+ 37.64903402157866
+ ],
+ [
+ 110.478515625,
+ 32.76880048488168
+ ]
+ ]
+ ]
+ }
+ }
+ ]
+}
+```
+
+## 地理统计分析工具
+[turfjs](http://turfjs.org/): 地理数据计算,处理,统计,分析的Javascript 库
+
+## 在线工具
+
+[http://geojson.io/](http://geojson.io/) 可以在线查看,绘制,修改GeoJSON数据
+
+[https://mapshaper.org/](https://mapshaper.org/) 可以查看较大的geojson,还能够简化GeoJSON数据
+
+## 数据资源
+
+#### 全国行政区划边界
+[支持 geojson, svg下载](http://datav.aliyun.com/tools/atlas/#&lat=33.50475906922609&lng=104.32617187499999&zoom=4)
+
+#### HighCharts 全球行政区划数据集
+
+[https://img.hcharts.cn/mapdata/](https://img.hcharts.cn/mapdata/)
diff --git a/examples/gallery/basic/demo/arcCircle.js b/examples/gallery/basic/demo/arcCircle.js
new file mode 100644
index 0000000000..1e3c6cf053
--- /dev/null
+++ b/examples/gallery/basic/demo/arcCircle.js
@@ -0,0 +1,33 @@
+import { LineLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'mapbox',
+ style: 'dark',
+ center: [ 107.77791556935472, 35.443286920228644 ],
+ zoom: 2.9142882493605033
+});
+window.mapScene = scene;
+fetch('https://gw.alipayobjects.com/os/rmsportal/UEXQMifxtkQlYfChpPwT.txt')
+ .then(res => res.text())
+ .then(data => {
+ const layer = new LineLayer({})
+ .source(data, {
+ parser: {
+ type: 'csv',
+ x: 'lng1',
+ y: 'lat1',
+ x1: 'lng2',
+ y1: 'lat2'
+ }
+ })
+ .size(1)
+ .shape('arc')
+ .color('#8C1EB2')
+ .style({
+ opacity: 0.8,
+ blur: 0.99
+ });
+ scene.addLayer(layer);
+ });
diff --git a/examples/gallery/basic/demo/bus_dark.js b/examples/gallery/basic/demo/bus_dark.js
new file mode 100644
index 0000000000..bac741e028
--- /dev/null
+++ b/examples/gallery/basic/demo/bus_dark.js
@@ -0,0 +1,45 @@
+import { Scene } from '@l7/scene';
+import { LineLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ center: [ 103.83735604457024, 1.360253881403068 ],
+ pitch: 4.00000000000001,
+ zoom: 10.210275860702593,
+ rotation: 19.313180925794313,
+ type: 'mapbox',
+ style: 'dark'
+});
+
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/ee07641d-5490-4768-9826-25862e8019e1.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ const layer = new LineLayer({})
+ .source(data, {
+ parser: {
+ coordinates: 'path',
+ type: 'json'
+ }
+ })
+ .size('level', level => {
+ return [ 1.0, level * 1 ];
+ })
+ .shape('line')
+ .color(
+ 'level',
+ [
+ '#312B60',
+ '#4A457E',
+ '#615C99',
+ '#816CAD',
+ '#A67FB5',
+ '#C997C7',
+ '#DEB8D4',
+ '#F5D4E6',
+ '#FAE4F1',
+ '#FFF3FC'
+ ].slice(0, 8)
+ );
+ scene.addLayer(layer);
+ });
diff --git a/examples/gallery/basic/demo/column_dark.js b/examples/gallery/basic/demo/column_dark.js
new file mode 100644
index 0000000000..42a1d405f8
--- /dev/null
+++ b/examples/gallery/basic/demo/column_dark.js
@@ -0,0 +1,44 @@
+import { Scene } from '@l7/scene';
+import { PointLayer } from '@l7/layers';
+
+const scene = new Scene({
+ id: 'map',
+ pitch: 35.210526315789465,
+ type: 'amap',
+ style: 'dark',
+ center: [ 104.288144, 31.239692 ],
+ zoom: 4.4
+});
+window.mapScene = scene;
+fetch('https://gw.alipayobjects.com/os/rmsportal/oVTMqfzuuRFKiDwhPSFL.json')
+ .then(res => res.json())
+ .then(data => {
+ const pointLayer = new PointLayer({})
+ .source(data.list, {
+ parser: {
+ type: 'json',
+ x: 'j',
+ y: 'w'
+ }
+ })
+ .shape('cylinder')
+ .size('t', function(level) {
+ return [ 1, 2, level * 2 + 20 ];
+ })
+ .color('t', [
+ '#094D4A',
+ '#146968',
+ '#1D7F7E',
+ '#289899',
+ '#34B6B7',
+ '#4AC5AF',
+ '#5FD3A6',
+ '#7BE39E',
+ '#A1EDB8',
+ '#CEF8D6'
+ ])
+ .style({
+ opacity: 1.0
+ });
+ scene.addLayer(pointLayer);
+ });
diff --git a/examples/gallery/basic/demo/light.js b/examples/gallery/basic/demo/light.js
new file mode 100644
index 0000000000..b82b29bca7
--- /dev/null
+++ b/examples/gallery/basic/demo/light.js
@@ -0,0 +1,59 @@
+import { HeatmapLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+const scene = new Scene({
+ id: 'map',
+ style: 'dark',
+ pitch: 43,
+ center: [ 120.13383079335335, 29.651873105004427 ],
+ zoom: 7.068989519212174,
+ type: 'mapbox'
+});
+
+window.mapScene = scene;
+
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/a1a8158d-6fe3-424b-8e50-694ccf61c4d7.csv'
+)
+ .then(res => res.text())
+ .then(data => {
+ const layer = new HeatmapLayer({})
+ .source(data, {
+ parser: {
+ type: 'csv',
+ x: 'lng',
+ y: 'lat'
+ },
+ transforms: [
+ {
+ type: 'hexagon',
+ size: 2500,
+ field: 'v',
+ method: 'sum'
+ }
+ ]
+ })
+ .size('sum', sum => {
+ return sum * 200;
+ })
+ .shape('hexagonColumn')
+ .style({
+ coverage: 0.8,
+ angle: 0,
+ opacity: 1.0
+ })
+ .color('sum', [
+ '#094D4A',
+ '#146968',
+ '#1D7F7E',
+ '#289899',
+ '#34B6B7',
+ '#4AC5AF',
+ '#5FD3A6',
+ '#7BE39E',
+ '#A1EDB8',
+ '#C3F9CC',
+ '#DEFAC0',
+ '#ECFFB1'
+ ]);
+ scene.addLayer(layer);
+ });
diff --git a/examples/gallery/basic/demo/meta.json b/examples/gallery/basic/demo/meta.json
new file mode 100644
index 0000000000..fd3ec679f1
--- /dev/null
+++ b/examples/gallery/basic/demo/meta.json
@@ -0,0 +1,39 @@
+{
+ "title": {
+ "zh": "图库",
+ "en": "Gallery"
+ },
+ "demos": [
+ {
+ "filename": "column_dark.js",
+ "title": "",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*WkpEQqzuM-oAAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "arcCircle.js",
+ "title": "",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*FTp1Roy34qgAAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "bus_dark.js",
+ "title": "",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*c80NRaMfGLAAAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "light.js",
+ "title": "",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*HxpoRIcBA80AAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "point.js",
+ "title": "",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*Xp7iRaORYuIAAAAAAAAAAABkARQnAQ"
+ }
+ ,
+ {
+ "filename": "normal.js",
+ "title": "",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*Kva7R7AimzsAAAAAAAAAAABkARQnAQ"
+ }
+ ]
+}
diff --git a/examples/gallery/basic/demo/normal.js b/examples/gallery/basic/demo/normal.js
new file mode 100644
index 0000000000..6111b8d699
--- /dev/null
+++ b/examples/gallery/basic/demo/normal.js
@@ -0,0 +1,30 @@
+import { Scene } from '@l7/scene';
+import { PointLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ type: 'amap',
+ style: 'dark',
+ center: [ 121.417463, 31.215175 ],
+ pitch: 0,
+ zoom: 11
+});
+window.mapScene = scene;
+fetch('https://gw.alipayobjects.com/os/rmsportal/BElVQFEFvpAKzddxFZxJ.txt')
+ .then(res => res.text())
+ .then(data => {
+ const pointLayer = new PointLayer({})
+ .source(data, {
+ parser: {
+ type: 'csv',
+ y: 'lat',
+ x: 'lng'
+ }
+ })
+ .size(0.5)
+ .color('#080298')
+ .style({
+ opacity: 1
+ });
+
+ scene.addLayer(pointLayer);
+ });
diff --git a/examples/gallery/basic/demo/point.js b/examples/gallery/basic/demo/point.js
new file mode 100644
index 0000000000..d9a622c9db
--- /dev/null
+++ b/examples/gallery/basic/demo/point.js
@@ -0,0 +1,37 @@
+import { Scene } from '@l7/scene';
+import { PointLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ pitch: 64.88,
+ type: 'amap',
+ style: 'dark',
+ center: [ 114.060288, 22.53684 ],
+ zoom: 15.63
+});
+window.mapScene = scene;
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/513add53-dcb2-4295-8860-9e7aa5236699.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ const pointLayer = new PointLayer({})
+ .source(data)
+ .size(2)
+ .color('h8', [
+ '#0A3663',
+ '#1558AC',
+ '#3771D9',
+ '#4D89E5',
+ '#64A5D3',
+ '#72BED6',
+ '#83CED6',
+ '#A6E1E0',
+ '#B8EFE2',
+ '#D7F9F0'
+ ])
+ .style({
+ opacity: 1
+ });
+
+ scene.addLayer(pointLayer);
+ });
diff --git a/examples/gallery/basic/index.en.md b/examples/gallery/basic/index.en.md
new file mode 100644
index 0000000000..c779938cb0
--- /dev/null
+++ b/examples/gallery/basic/index.en.md
@@ -0,0 +1,6 @@
+---
+title: Gallery
+order: 0
+redirect_from:
+ - /en/examples
+---
diff --git a/examples/gallery/basic/index.zh.md b/examples/gallery/basic/index.zh.md
new file mode 100644
index 0000000000..71b6406985
--- /dev/null
+++ b/examples/gallery/basic/index.zh.md
@@ -0,0 +1,6 @@
+---
+title: Gallery
+order: 0
+redirect_from:
+ - /zh/examples
+---
diff --git a/examples/heatmap/grid/demo/china.js b/examples/heatmap/grid/demo/china.js
new file mode 100644
index 0000000000..d4c8d255f6
--- /dev/null
+++ b/examples/heatmap/grid/demo/china.js
@@ -0,0 +1,62 @@
+import { HeatmapLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+const scene = new Scene({
+ id: 'map',
+ style: 'light',
+ pitch: 0,
+ center: [ 107.054293, 35.246265 ],
+ zoom: 4.056,
+ type: 'amap'
+});
+window.mapScene = scene;
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/7359a5e9-3c5e-453f-b207-bc892fb23b84.csv'
+)
+ .then(res => res.text())
+ .then(data => {
+ const layer = new HeatmapLayer({})
+ .source(data, {
+ parser: {
+ type: 'csv',
+ x: 'lng',
+ y: 'lat'
+ },
+ transforms: [
+ {
+ type: 'grid',
+ size: 20000,
+ field: 'v',
+ method: 'sum'
+ }
+ ]
+ })
+ .size('count', value => {
+ return value * 0;
+ })
+ .shape('square')
+ .style({
+ coverage: 1,
+ angle: 0
+ })
+ .color(
+ 'count',
+ [
+ '#0B0030',
+ '#100243',
+ '#100243',
+ '#1B048B',
+ '#051FB7',
+ '#0350C1',
+ '#0350C1',
+ '#0072C4',
+ '#0796D3',
+ '#2BA9DF',
+ '#30C7C4',
+ '#6BD5A0',
+ '#A7ECB2',
+ '#D0F4CA'
+ ].reverse()
+ );
+
+ scene.addLayer(layer);
+ });
diff --git a/examples/heatmap/grid/demo/grid1.js b/examples/heatmap/grid/demo/grid1.js
new file mode 100644
index 0000000000..6e84814be9
--- /dev/null
+++ b/examples/heatmap/grid/demo/grid1.js
@@ -0,0 +1,53 @@
+import { HeatmapLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+const scene = new Scene({
+ id: 'map',
+ style: 'dark',
+ pitch: 0,
+ center: [ 110.097892, 33.853662 ],
+ zoom: 4.056,
+ type: 'amap'
+});
+window.mapScene = scene;
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/7359a5e9-3c5e-453f-b207-bc892fb23b84.csv'
+)
+ .then(res => res.text())
+ .then(data => {
+ const layer = new HeatmapLayer({})
+ .source(data, {
+ parser: {
+ type: 'csv',
+ x: 'lng',
+ y: 'lat'
+ },
+ transforms: [
+ {
+ type: 'grid',
+ size: 10000,
+ field: 'v',
+ method: 'sum'
+ }
+ ]
+ })
+ .size('count', value => {
+ return value * 0;
+ })
+ .shape('square')
+ .style({
+ coverage: 1,
+ angle: 0
+ })
+ .color(
+ 'count',
+ [
+ '#FF4818',
+ '#F7B74A',
+ '#FFF598',
+ '#FF40F3',
+ '#9415FF',
+ '#421EB2'
+ ].reverse()
+ );
+ scene.addLayer(layer);
+ });
diff --git a/examples/heatmap/grid/demo/heatmap3.js b/examples/heatmap/grid/demo/heatmap3.js
new file mode 100644
index 0000000000..7ba761b1b0
--- /dev/null
+++ b/examples/heatmap/grid/demo/heatmap3.js
@@ -0,0 +1,59 @@
+import { HeatmapLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+const scene = new Scene({
+ id: 'map',
+ style: 'light',
+ pitch: 0,
+ center: [ 110.097892, 33.853662 ],
+ zoom: 4.056,
+ type: 'amap'
+});
+
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/7359a5e9-3c5e-453f-b207-bc892fb23b84.csv'
+)
+ .then(res => res.text())
+ .then(data => {
+ const layer = new HeatmapLayer({})
+ .source(data, {
+ parser: {
+ type: 'csv',
+ x: 'lng',
+ y: 'lat'
+ },
+ transforms: [
+ {
+ type: 'grid',
+ size: 20000,
+ field: 'v',
+ method: 'sum'
+ }
+ ]
+ })
+ .size('count', value => {
+ return value * 0;
+ })
+ .shape('circle')
+ .style({
+ coverage: 0.9,
+ angle: 0
+ })
+ .color(
+ 'count',
+ [
+ '#8C1EB2',
+ '#8C1EB2',
+ '#DA05AA',
+ '#F0051A',
+ '#FF2A3C',
+ '#FF4818',
+ '#FF4818',
+ '#FF8B18',
+ '#F77B00',
+ '#ED9909',
+ '#ECC357',
+ '#EDE59C'
+ ].reverse()
+ );
+ scene.addLayer(layer);
+ });
diff --git a/examples/heatmap/grid/demo/meta.json b/examples/heatmap/grid/demo/meta.json
new file mode 100644
index 0000000000..78fceffda3
--- /dev/null
+++ b/examples/heatmap/grid/demo/meta.json
@@ -0,0 +1,32 @@
+{
+ "title": {
+ "zh": "网格热力图",
+ "en": "heatmap"
+ },
+ "demos": [
+ {
+ "filename": "china.js",
+ "title": "网格热力图",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*anD-Q4u83R0AAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "grid1.js",
+ "title": "",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*tAGKS6EClQ4AAAAAAAAAAABkARQnAQ"
+
+ },
+ {
+ "filename": "heatmap3.js",
+ "title": "网格布局 圆形",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*6cA0R6us9osAAAAAAAAAAABkARQnAQ"
+
+ },
+ {
+ "filename": "world.js",
+ "title": "网格热力图",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*6danQJDzkyoAAAAAAAAAAABkARQnAQ"
+
+ }
+
+ ]
+}
diff --git a/examples/heatmap/grid/demo/world.js b/examples/heatmap/grid/demo/world.js
new file mode 100644
index 0000000000..3dbd9c88eb
--- /dev/null
+++ b/examples/heatmap/grid/demo/world.js
@@ -0,0 +1,56 @@
+import { HeatmapLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+const scene = new Scene({
+ id: 'map',
+ style: 'dark',
+ pitch: 0,
+ center: [ 110.097892, 33.853662 ],
+ zoom: 4.056,
+ type: 'amap'
+});
+
+window.mapScene = scene;
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/7359a5e9-3c5e-453f-b207-bc892fb23b84.csv'
+)
+ .then(res => res.text())
+ .then(data => {
+ const layer = new HeatmapLayer({})
+ .source(data, {
+ parser: {
+ type: 'csv',
+ x: 'lng',
+ y: 'lat'
+ },
+ transforms: [
+ {
+ type: 'grid',
+ size: 10000,
+ field: 'v',
+ method: 'sum'
+ }
+ ]
+ })
+ .size('count', value => {
+ return value * 0;
+ })
+ .shape('square')
+ .style({
+ coverage: 1,
+ angle: 0
+ })
+ .color(
+ 'count',
+ [
+ '#FF3417',
+ '#FF7412',
+ '#FFB02A',
+ '#FFE754',
+ '#46F3FF',
+ '#02BEFF',
+ '#1A7AFF',
+ '#0A1FB2'
+ ].reverse()
+ );
+ scene.addLayer(layer);
+ });
diff --git a/examples/heatmap/grid/index.en.md b/examples/heatmap/grid/index.en.md
new file mode 100644
index 0000000000..c793d961b4
--- /dev/null
+++ b/examples/heatmap/grid/index.en.md
@@ -0,0 +1,6 @@
+---
+title: Grid Map
+order: 1
+---
+
+
diff --git a/examples/heatmap/grid/index.zh.md b/examples/heatmap/grid/index.zh.md
new file mode 100644
index 0000000000..f27fed7fa8
--- /dev/null
+++ b/examples/heatmap/grid/index.zh.md
@@ -0,0 +1,5 @@
+---
+title: 网格热力图
+order: 1
+---
+热力图的变体,网格布局呈现数据分级分布的聚合现象。
\ No newline at end of file
diff --git a/examples/heatmap/heatmap/demo/heatmap.js b/examples/heatmap/heatmap/demo/heatmap.js
new file mode 100644
index 0000000000..33371ea29d
--- /dev/null
+++ b/examples/heatmap/heatmap/demo/heatmap.js
@@ -0,0 +1,38 @@
+import { Scene } from '@l7/scene';
+import { HeatmapLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ style: 'dark',
+ pitch: 0,
+ center: [ 127.5671666579043, 7.445038892195569 ],
+ type: 'mapbox',
+ zoom: 2.632456779444394
+});
+
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d3564b06-670f-46ea-8edb-842f7010a7c6.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ const layer = new HeatmapLayer({})
+ .source(data)
+ .shape('heatmap')
+ .size('mag', [ 0, 1.0 ]) // weight映射通道
+ .style({
+ intensity: 2,
+ radius: 20,
+ opacity: 1.0,
+ rampColors: {
+ colors: [
+ '#FF4818',
+ '#F7B74A',
+ '#FFF598',
+ '#91EABC',
+ '#2EA9A1',
+ '#206C7C'
+ ].reverse(),
+ positions: [ 0, 0.2, 0.4, 0.6, 0.8, 1.0 ]
+ }
+ });
+ scene.addLayer(layer);
+ });
diff --git a/examples/heatmap/heatmap/demo/heatmap3d.js b/examples/heatmap/heatmap/demo/heatmap3d.js
new file mode 100644
index 0000000000..b6c687f80f
--- /dev/null
+++ b/examples/heatmap/heatmap/demo/heatmap3d.js
@@ -0,0 +1,41 @@
+import { Scene } from '@l7/scene';
+import { HeatmapLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ style: 'dark',
+ pitch: 58.5,
+ center: [ 111.8759, 30.6942 ],
+ rotation: 0.519,
+ type: 'mapbox',
+ zoom: 3.6116
+});
+window.mapScene = scene;
+
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/337ddbb7-aa3f-4679-ab60-d64359241955.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ const layer = new HeatmapLayer({})
+ .source(data)
+ .size('capacity', [ 0, 1 ])
+ .shape('heatmap3D')
+ // weight映射通道
+ .style({
+ intensity: 10,
+ radius: 5,
+ opacity: 1.0,
+ rampColors: {
+ colors: [
+ '#2E8AE6',
+ '#69D1AB',
+ '#DAF291',
+ '#FFD591',
+ '#FF7A45',
+ '#CF1D49'
+ ],
+ positions: [ 0, 0.2, 0.4, 0.6, 0.8, 1.0 ]
+ }
+ });
+ scene.addLayer(layer);
+ });
diff --git a/examples/heatmap/heatmap/demo/heatmap_purple.js b/examples/heatmap/heatmap/demo/heatmap_purple.js
new file mode 100644
index 0000000000..2c5214cb62
--- /dev/null
+++ b/examples/heatmap/heatmap/demo/heatmap_purple.js
@@ -0,0 +1,38 @@
+import { Scene } from '@l7/scene';
+import { HeatmapLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ style: 'dark',
+ pitch: 0,
+ center: [ 127.5671666579043, 7.445038892195569 ],
+ type: 'mapbox',
+ zoom: 2.632456779444394
+});
+
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d3564b06-670f-46ea-8edb-842f7010a7c6.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ const layer = new HeatmapLayer({})
+ .source(data)
+ .shape('heatmap')
+ .size('mag', [ 0, 1.0 ]) // weight映射通道
+ .style({
+ intensity: 2,
+ radius: 20,
+ opacity: 1.0,
+ rampColors: {
+ colors: [
+ '#FF4818',
+ '#F7B74A',
+ '#FFF598',
+ '#F27DEB',
+ '#8C1EB2',
+ '#421EB2'
+ ].reverse(),
+ positions: [ 0, 0.2, 0.4, 0.6, 0.8, 1.0 ]
+ }
+ });
+ scene.addLayer(layer);
+ });
diff --git a/examples/heatmap/heatmap/demo/meta.json b/examples/heatmap/heatmap/demo/meta.json
new file mode 100644
index 0000000000..48f26cb957
--- /dev/null
+++ b/examples/heatmap/heatmap/demo/meta.json
@@ -0,0 +1,24 @@
+{
+ "title": {
+ "zh": "经典热力图",
+ "en": "heatmap"
+ },
+ "demos": [
+ {
+ "filename": "heatmap.js",
+ "title": "经典热力图2D",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*9zUcSK07PHgAAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "heatmap_purple.js",
+ "title": "经典热力图2D",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*DFwET7xJTA8AAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "heatmap3d.js",
+ "title": "经典热力图3D",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*K_nOTa1C7PoAAAAAAAAAAABkARQnAQ"
+ }
+
+ ]
+}
diff --git a/examples/heatmap/heatmap/index.en.md b/examples/heatmap/heatmap/index.en.md
new file mode 100644
index 0000000000..f71ebbe652
--- /dev/null
+++ b/examples/heatmap/heatmap/index.en.md
@@ -0,0 +1,4 @@
+---
+title: HeatMap
+order: 0
+---
diff --git a/examples/heatmap/heatmap/index.zh.md b/examples/heatmap/heatmap/index.zh.md
new file mode 100644
index 0000000000..2cb7ecb9c5
--- /dev/null
+++ b/examples/heatmap/heatmap/index.zh.md
@@ -0,0 +1,7 @@
+---
+title: 经典热力图
+order: 0
+redirect_from:
+ - /zh/examples/heatmap/
+---
+区域范围内数据具有的一定热度分级分布情况的聚合面状现象,常用于描述人群分布、密度和变化趋势等。
\ No newline at end of file
diff --git a/examples/heatmap/hexagon/demo/china.js b/examples/heatmap/hexagon/demo/china.js
new file mode 100644
index 0000000000..f6c7ee98ac
--- /dev/null
+++ b/examples/heatmap/hexagon/demo/china.js
@@ -0,0 +1,54 @@
+import { HeatmapLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+const scene = new Scene({
+ id: 'map',
+ style: 'dark',
+ pitch: 47.49999999999995,
+ center: [ 112.50447776627743, 30.830476390931125 ],
+ zoom: 3.9879693680088626,
+ type: 'mapbox'
+});
+window.mapScene = scene;
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/7359a5e9-3c5e-453f-b207-bc892fb23b84.csv'
+)
+ .then(res => res.text())
+ .then(data => {
+ const layer = new HeatmapLayer({})
+ .source(data, {
+ parser: {
+ type: 'csv',
+ x: 'lng',
+ y: 'lat'
+ },
+ transforms: [
+ {
+ type: 'hexagon',
+ size: 17000,
+ field: 'v',
+ method: 'sum'
+ }
+ ]
+ })
+ .size('sum', value => {
+ return value * 20;
+ })
+ .shape('hexagonColumn')
+ .color(
+ 'count',
+ [
+ '#FF4818',
+ '#F7B74A',
+ '#FFF598',
+ '#FF40F3',
+ '#9415FF',
+ '#421EB2'
+ ].reverse()
+ )
+ .style({
+ coverage: 0.9,
+ angle: 0
+ });
+
+ scene.addLayer(layer);
+ });
diff --git a/examples/heatmap/hexagon/demo/hexagon.js b/examples/heatmap/hexagon/demo/hexagon.js
new file mode 100644
index 0000000000..22309c9f7e
--- /dev/null
+++ b/examples/heatmap/hexagon/demo/hexagon.js
@@ -0,0 +1,52 @@
+import { HeatmapLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+const scene = new Scene({
+ id: 'map',
+ style: 'light',
+ pitch: 56.499,
+ center: [ 114.07737552216226, 22.542656745583486 ],
+ rotation: 39.19,
+ zoom: 12.47985,
+ type: 'mapbox'
+});
+window.mapScene = scene;
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/513add53-dcb2-4295-8860-9e7aa5236699.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ const layer = new HeatmapLayer({})
+ .source(data, {
+ transforms: [
+ {
+ type: 'hexagon',
+ size: 100,
+ field: 'h12',
+ method: 'sum'
+ }
+ ]
+ })
+ .size('sum', [ 0, 600 ])
+ .shape('hexagonColumn')
+ .style({
+ coverage: 0.8,
+ angle: 0,
+ opacity: 1.0
+ })
+ .color(
+ 'sum',
+ [
+ '#094D4A',
+ '#146968',
+ '#1D7F7E',
+ '#289899',
+ '#34B6B7',
+ '#4AC5AF',
+ '#5FD3A6',
+ '#7BE39E',
+ '#A1EDB8',
+ '#CEF8D6'
+ ].reverse()
+ );
+ scene.addLayer(layer);
+ });
diff --git a/examples/heatmap/hexagon/demo/light.js b/examples/heatmap/hexagon/demo/light.js
new file mode 100644
index 0000000000..b82b29bca7
--- /dev/null
+++ b/examples/heatmap/hexagon/demo/light.js
@@ -0,0 +1,59 @@
+import { HeatmapLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+const scene = new Scene({
+ id: 'map',
+ style: 'dark',
+ pitch: 43,
+ center: [ 120.13383079335335, 29.651873105004427 ],
+ zoom: 7.068989519212174,
+ type: 'mapbox'
+});
+
+window.mapScene = scene;
+
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/a1a8158d-6fe3-424b-8e50-694ccf61c4d7.csv'
+)
+ .then(res => res.text())
+ .then(data => {
+ const layer = new HeatmapLayer({})
+ .source(data, {
+ parser: {
+ type: 'csv',
+ x: 'lng',
+ y: 'lat'
+ },
+ transforms: [
+ {
+ type: 'hexagon',
+ size: 2500,
+ field: 'v',
+ method: 'sum'
+ }
+ ]
+ })
+ .size('sum', sum => {
+ return sum * 200;
+ })
+ .shape('hexagonColumn')
+ .style({
+ coverage: 0.8,
+ angle: 0,
+ opacity: 1.0
+ })
+ .color('sum', [
+ '#094D4A',
+ '#146968',
+ '#1D7F7E',
+ '#289899',
+ '#34B6B7',
+ '#4AC5AF',
+ '#5FD3A6',
+ '#7BE39E',
+ '#A1EDB8',
+ '#C3F9CC',
+ '#DEFAC0',
+ '#ECFFB1'
+ ]);
+ scene.addLayer(layer);
+ });
diff --git a/examples/heatmap/hexagon/demo/meta.json b/examples/heatmap/hexagon/demo/meta.json
new file mode 100644
index 0000000000..3671341cac
--- /dev/null
+++ b/examples/heatmap/hexagon/demo/meta.json
@@ -0,0 +1,27 @@
+{
+ "title": {
+ "zh": "蜂窝热力图",
+ "en": "heatmap"
+ },
+ "demos": [ {
+ "filename": "china.js",
+ "title": "蜂窝热力图",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*bx-9TqimungAAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "light.js",
+ "title": "蜂窝热力图",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*HxpoRIcBA80AAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "hexagon.js",
+ "title": "蜂窝热力图",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*rjkiQLCoZxUAAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "world.js",
+ "title": "蜂窝热力图",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*C3V7ToIoEvkAAAAAAAAAAABkARQnAQ"
+ }
+ ]
+}
diff --git a/examples/heatmap/hexagon/demo/world.js b/examples/heatmap/hexagon/demo/world.js
new file mode 100644
index 0000000000..245eb6bc17
--- /dev/null
+++ b/examples/heatmap/hexagon/demo/world.js
@@ -0,0 +1,55 @@
+import { Scene } from '@l7/scene';
+import { HeatmapLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ style: 'light',
+ pitch: 0,
+ center: [ 104.995156, 31.450658 ],
+ type: 'amap',
+ zoom: 3.79
+});
+
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/337ddbb7-aa3f-4679-ab60-d64359241955.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ const layer = new HeatmapLayer({})
+ .source(data, {
+ transforms: [
+ {
+ type: 'hexagon',
+ size: 90000,
+ field: 'capacity',
+ method: 'sum'
+ }
+ ]
+ })
+ .size('sum', value => {
+ return value * 50;
+ })
+ .shape('hexagon')
+ .style({
+ coverage: 0.9,
+ angle: 0,
+ opacity: 1.0
+ })
+ .color(
+ 'sum',
+ [
+ '#3F4BBA',
+ '#3F4BBA',
+ '#3F4BBA',
+ '#3F4BBA',
+ '#3C73DA',
+ '#3C73DA',
+ '#3C73DA',
+ '#0F62FF',
+ '#0F62FF',
+ '#30B2E9',
+ '#30B2E9',
+ '#40C4CE'
+ ].reverse()
+ );
+ scene.addLayer(layer);
+ });
diff --git a/examples/heatmap/hexagon/index.en.md b/examples/heatmap/hexagon/index.en.md
new file mode 100644
index 0000000000..b27d0e7208
--- /dev/null
+++ b/examples/heatmap/hexagon/index.en.md
@@ -0,0 +1,4 @@
+---
+title: Hexagon Map
+order: 1
+---
diff --git a/examples/heatmap/hexagon/index.zh.md b/examples/heatmap/hexagon/index.zh.md
new file mode 100644
index 0000000000..0a943ead55
--- /dev/null
+++ b/examples/heatmap/hexagon/index.zh.md
@@ -0,0 +1,5 @@
+---
+title: 蜂窝热力图
+order: 1
+---
+热力图的变体,蜂窝布局呈现数据分级分布的聚合现象。
\ No newline at end of file
diff --git a/examples/line/arc/demo/arc.js b/examples/line/arc/demo/arc.js
new file mode 100644
index 0000000000..7d9330816a
--- /dev/null
+++ b/examples/line/arc/demo/arc.js
@@ -0,0 +1,38 @@
+import { LineLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'mapbox',
+ style: 'dark',
+ center: [ 0, 23.107329 ],
+ zoom: 0
+});
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/b83699f9-a96d-49b8-b2ea-f99299faebaf.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ function getAirportCoord(idx) {
+ return [ data.airports[idx][3], data.airports[idx][4] ];
+ }
+ const routes = data.routes.map(function(airline) {
+ return {
+ coord: [ getAirportCoord(airline[1]), getAirportCoord(airline[2]) ]
+ };
+ });
+ const layer = new LineLayer({})
+ .source(routes, {
+ parser: {
+ type: 'json',
+ coordinates: 'coord'
+ }
+ })
+ .size(0.6)
+ .shape('arc')
+ .color('rgb(5, 5, 50)')
+ .style({
+ opacity: 0.05
+ });
+ scene.addLayer(layer);
+ });
diff --git a/examples/line/arc/demo/arcCircle.js b/examples/line/arc/demo/arcCircle.js
new file mode 100644
index 0000000000..346a044551
--- /dev/null
+++ b/examples/line/arc/demo/arcCircle.js
@@ -0,0 +1,32 @@
+import { LineLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'mapbox',
+ style: 'dark',
+ center: [ 107.77791556935472, 35.443286920228644 ],
+ zoom: 2.9142882493605033
+});
+fetch('https://gw.alipayobjects.com/os/rmsportal/UEXQMifxtkQlYfChpPwT.txt')
+ .then(res => res.text())
+ .then(data => {
+ const layer = new LineLayer({})
+ .source(data, {
+ parser: {
+ type: 'csv',
+ x: 'lng1',
+ y: 'lat1',
+ x1: 'lng2',
+ y1: 'lat2'
+ }
+ })
+ .size(1)
+ .shape('greatcircle')
+ .color('#8C1EB2')
+ .style({
+ opacity: 0.8,
+ blur: 0.99
+ });
+ scene.addLayer(layer);
+ });
diff --git a/examples/line/arc/demo/meta.json b/examples/line/arc/demo/meta.json
new file mode 100644
index 0000000000..aad9b67e22
--- /dev/null
+++ b/examples/line/arc/demo/meta.json
@@ -0,0 +1,30 @@
+{
+ "title": {
+ "zh": "弧线",
+ "en": "line"
+ },
+ "demos": [
+ {
+ "filename": "arcCircle.js",
+ "title": "大圆弧线",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*FTp1Roy34qgAAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "arc.js",
+ "title": "弧线",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*gdcqTa6UCsYAAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "trip_arc_dark.js",
+ "title": "3D 弧线",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*jXsbSYCqLu8AAAAAAAAAAABkARQnAQ"
+
+ },
+ {
+ "filename": "trip_arc.js",
+ "title": "3D 弧线",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*29BZTqIJkuEAAAAAAAAAAABkARQnAQ"
+
+ }
+ ]
+}
diff --git a/examples/line/arc/demo/trip_arc.js b/examples/line/arc/demo/trip_arc.js
new file mode 100644
index 0000000000..bfc2c62d81
--- /dev/null
+++ b/examples/line/arc/demo/trip_arc.js
@@ -0,0 +1,34 @@
+import { LineLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+const scene = new Scene({
+ id: 'map',
+ pitch: 60,
+ type: 'mapbox',
+ style: 'light',
+ center: [ -74.06967, 40.720399 ],
+ zoom: 12.45977
+});
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/bd33a685-a17e-4686-bc79-b0e6a89fd950.csv'
+)
+ .then(res => res.text())
+ .then(data => {
+ const layer = new LineLayer({})
+ .source(data, {
+ parser: {
+ type: 'csv',
+ x: 'start station longitude',
+ y: 'start station latitude',
+ x1: 'end station longitude',
+ y1: 'end station latitude'
+ }
+ })
+ .size(1)
+ .shape('arc3d')
+ .color('#0C47BF')
+ .style({
+ opacity: 1,
+ blur: 0.9
+ });
+ scene.addLayer(layer);
+ });
diff --git a/examples/line/arc/demo/trip_arc_dark.js b/examples/line/arc/demo/trip_arc_dark.js
new file mode 100644
index 0000000000..05114d0faa
--- /dev/null
+++ b/examples/line/arc/demo/trip_arc_dark.js
@@ -0,0 +1,33 @@
+import { LineLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+const scene = new Scene({
+ id: 'map',
+ pitch: 60,
+ type: 'mapbox',
+ style: 'dark',
+ center: [ 104.34278, 41.12554 ],
+ zoom: 2.94888,
+ rotation: 42.3999
+});
+
+fetch('https://gw.alipayobjects.com/os/rmsportal/UEXQMifxtkQlYfChpPwT.txt')
+ .then(res => res.text())
+ .then(data => {
+ const layer = new LineLayer({})
+ .source(data, {
+ parser: {
+ type: 'csv',
+ x: 'lng1',
+ y: 'lat1',
+ x1: 'lng2',
+ y1: 'lat2'
+ }
+ })
+ .size(1)
+ .shape('arc3d')
+ .color('#FF7C6A')
+ .style({
+ opacity: 0.8
+ });
+ scene.addLayer(layer);
+ });
diff --git a/examples/line/arc/index.en.md b/examples/line/arc/index.en.md
new file mode 100644
index 0000000000..f341a10f2b
--- /dev/null
+++ b/examples/line/arc/index.en.md
@@ -0,0 +1,4 @@
+---
+title: Arc Line Map
+order: 1
+---
diff --git a/examples/line/arc/index.zh.md b/examples/line/arc/index.zh.md
new file mode 100644
index 0000000000..3d926174f7
--- /dev/null
+++ b/examples/line/arc/index.zh.md
@@ -0,0 +1,5 @@
+---
+title: 弧线地图
+order: 1
+---
+将两个点的连线绘制成弧形,绘制的弧线可以是贝塞尔曲线,大圆航线,通常用来表示两种地理事物关系和联系,或者人口迁移,物流起点目的地等。
\ No newline at end of file
diff --git a/examples/line/isoline/demo/ele.js b/examples/line/isoline/demo/ele.js
new file mode 100644
index 0000000000..acb143d941
--- /dev/null
+++ b/examples/line/isoline/demo/ele.js
@@ -0,0 +1,40 @@
+import { Scene } from '@l7/scene';
+import { LineLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ pitch: 53.6305,
+ type: 'amap',
+ style: 'light',
+ center: [ 102.600579, 23.114887 ],
+ zoom: 14.66
+});
+
+fetch('https://gw.alipayobjects.com/os/rmsportal/ZVfOvhVCzwBkISNsuKCc.json')
+ .then(res => res.json())
+ .then(data => {
+ const layer = new LineLayer({})
+ .source(data)
+ .size('ELEV', h => {
+ return [ h % 50 === 0 ? 1.0 : 0.5, (h - 1300) * 20 ];
+ })
+ .shape('line')
+ .scale('ELEV', {
+ type: 'quantize'
+ })
+ .color(
+ 'ELEV',
+ [
+ '#E4682F',
+ '#FF8752',
+ '#FFA783',
+ '#FFBEA8',
+ '#FFDCD6',
+ '#EEF3FF',
+ '#C8D7F5',
+ '#A5C1FC',
+ '#7FA7F9',
+ '#5F8AE5'
+ ].reverse()
+ );
+ scene.addLayer(layer);
+ });
diff --git a/examples/line/isoline/demo/ele_dark.js b/examples/line/isoline/demo/ele_dark.js
new file mode 100644
index 0000000000..a7e91d9ad4
--- /dev/null
+++ b/examples/line/isoline/demo/ele_dark.js
@@ -0,0 +1,37 @@
+import { Scene } from '@l7/scene';
+import { LineLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ pitch: 26.842105263157915,
+ type: 'amap',
+ style: 'dark',
+ center: [ 102.599436, 23.116371 ],
+ zoom: 14.78
+});
+
+fetch('https://gw.alipayobjects.com/os/rmsportal/ZVfOvhVCzwBkISNsuKCc.json')
+ .then(res => res.json())
+ .then(data => {
+ const layer = new LineLayer({})
+ .source(data)
+ .size('ELEV', h => {
+ return [ h % 50 === 0 ? 1.0 : 0.5, (h - 1300) * 20 ];
+ })
+ .shape('line')
+ .scale('ELEV', {
+ type: 'quantize'
+ })
+ .color('ELEV', [
+ '#094D4A',
+ '#146968',
+ '#1D7F7E',
+ '#289899',
+ '#34B6B7',
+ '#4AC5AF',
+ '#5FD3A6',
+ '#7BE39E',
+ '#A1EDB8',
+ '#CEF8D6'
+ ]);
+ scene.addLayer(layer);
+ });
diff --git a/examples/line/isoline/demo/isoline.js b/examples/line/isoline/demo/isoline.js
new file mode 100644
index 0000000000..efda905fc8
--- /dev/null
+++ b/examples/line/isoline/demo/isoline.js
@@ -0,0 +1,40 @@
+import { Scene } from '@l7/scene';
+import { LineLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'amap',
+ style: 'light',
+ center: [ 104.117492, 36.492696 ],
+ zoom: 3.89
+});
+
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/9f6afbcd-3aec-4a26-bd4a-2276d3439e0d.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ const layer = new LineLayer({})
+ .source(data)
+ .scale('value', {
+ type: 'quantile'
+ })
+ .size('value', [ 0.5, 1, 1.5, 2 ])
+ .shape('line')
+ .color(
+ 'value',
+ [
+ '#0A3663',
+ '#1558AC',
+ '#3771D9',
+ '#4D89E5',
+ '#64A5D3',
+ '#72BED6',
+ '#83CED6',
+ '#A6E1E0',
+ '#B8EFE2',
+ '#D7F9F0'
+ ].reverse()
+ );
+ scene.addLayer(layer);
+ });
diff --git a/examples/line/isoline/demo/meta.json b/examples/line/isoline/demo/meta.json
new file mode 100644
index 0000000000..6d731b96d8
--- /dev/null
+++ b/examples/line/isoline/demo/meta.json
@@ -0,0 +1,24 @@
+{
+ "title": {
+ "zh": "线图层",
+ "en": "line"
+ },
+ "demos": [
+ {
+ "filename": "ele.js",
+ "title": "等高线",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*FGliTJ7eSBIAAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "ele_dark.js",
+ "title": "等高线",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*X1LgSKQbrD0AAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "isoline.js",
+ "title": "等高线",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*YBNRRrk5IV4AAAAAAAAAAABkARQnAQ"
+ }
+
+ ]
+}
diff --git a/examples/line/isoline/index.en.md b/examples/line/isoline/index.en.md
new file mode 100644
index 0000000000..afbfabfb29
--- /dev/null
+++ b/examples/line/isoline/index.en.md
@@ -0,0 +1,4 @@
+---
+title: Isoline Map
+order: 2
+---
diff --git a/examples/line/isoline/index.zh.md b/examples/line/isoline/index.zh.md
new file mode 100644
index 0000000000..42af5d8f70
--- /dev/null
+++ b/examples/line/isoline/index.zh.md
@@ -0,0 +1,5 @@
+---
+title: 等值线地图
+order: 2
+---
+指需要用一连串首尾闭合相等数值点的连线的图层,表示连续分布且逐渐变化的数量特征的地图,常用于等高线图、等温线图等图。
\ No newline at end of file
diff --git a/examples/line/line/demo/isoline.js b/examples/line/line/demo/isoline.js
new file mode 100644
index 0000000000..aa9828a82d
--- /dev/null
+++ b/examples/line/line/demo/isoline.js
@@ -0,0 +1,40 @@
+import { Scene } from './node_modules/@l7/scene';
+import { LineLayer } from './node_modules/@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'amap',
+ style: 'light',
+ center: [ 104.117492, 36.492696 ],
+ zoom: 3.89
+});
+
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/9f6afbcd-3aec-4a26-bd4a-2276d3439e0d.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ const layer = new LineLayer({})
+ .source(data)
+ .scale('value', {
+ type: 'quantile'
+ })
+ .size('value', [ 0.5, 1, 1.5, 2 ])
+ .shape('line')
+ .color(
+ 'value',
+ [
+ '#0A3663',
+ '#1558AC',
+ '#3771D9',
+ '#4D89E5',
+ '#64A5D3',
+ '#72BED6',
+ '#83CED6',
+ '#A6E1E0',
+ '#B8EFE2',
+ '#D7F9F0'
+ ].reverse()
+ );
+ scene.addLayer(layer);
+ });
diff --git a/examples/line/path/demo/bus_dark.js b/examples/line/path/demo/bus_dark.js
new file mode 100644
index 0000000000..f1df3747d3
--- /dev/null
+++ b/examples/line/path/demo/bus_dark.js
@@ -0,0 +1,45 @@
+import { Scene } from '@l7/scene';
+import { LineLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ center: [ 103.83735604457024, 1.360253881403068 ],
+ pitch: 4.00000000000001,
+ zoom: 10.210275860702593,
+ rotation: 19.313180925794313,
+ type: 'mapbox',
+ style: 'dark'
+});
+
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/ee07641d-5490-4768-9826-25862e8019e1.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ const layer = new LineLayer({})
+ .source(data, {
+ parser: {
+ type: 'json',
+ coordinates: 'path'
+ }
+ })
+ .size('level', level => {
+ return [ 0.8, level * 1 ];
+ })
+ .shape('line')
+ .color(
+ 'level',
+ [
+ '#312B60',
+ '#4A457E',
+ '#615C99',
+ '#816CAD',
+ '#A67FB5',
+ '#C997C7',
+ '#DEB8D4',
+ '#F5D4E6',
+ '#FAE4F1',
+ '#FFF3FC'
+ ].slice(0, 8)
+ );
+ scene.addLayer(layer);
+ });
diff --git a/examples/line/path/demo/bus_light.js b/examples/line/path/demo/bus_light.js
new file mode 100644
index 0000000000..5ed5a806c9
--- /dev/null
+++ b/examples/line/path/demo/bus_light.js
@@ -0,0 +1,47 @@
+import { Scene } from '@l7/scene';
+import { LineLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ center: [ 103.83735604457024, 1.360253881403068 ],
+ pitch: 4.00000000000001,
+ zoom: 10.210275860702593,
+ rotation: 19.313180925794313,
+ type: 'mapbox',
+ style: 'light'
+});
+
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/ee07641d-5490-4768-9826-25862e8019e1.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ const layer = new LineLayer({})
+ .source(data, {
+ parser: {
+ type: 'json',
+ coordinates: 'path'
+ }
+ })
+ .size('level', level => {
+ return [ 0.8, level * 1 ];
+ })
+ .shape('line')
+ .color(
+ 'level',
+ [
+ '#0A3663',
+ '#1558AC',
+ '#3771D9',
+ '#4D89E5',
+ '#64A5D3',
+ '#72BED6',
+ '#83CED6',
+ '#A6E1E0',
+ '#B8EFE2',
+ '#D7F9F0'
+ ]
+ .reverse()
+ .slice(0, 8)
+ );
+ scene.addLayer(layer);
+ });
diff --git a/examples/line/path/demo/meta.json b/examples/line/path/demo/meta.json
new file mode 100644
index 0000000000..26b7c15314
--- /dev/null
+++ b/examples/line/path/demo/meta.json
@@ -0,0 +1,28 @@
+{
+ "title": {
+ "zh": "线图层",
+ "en": "line"
+ },
+ "demos": [
+ {
+ "filename": "bus_light.js",
+ "title": "公交线路",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*fuSLRL8Ym4kAAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "bus_dark.js",
+ "title": "公交线路",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*c80NRaMfGLAAAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "road_light.js",
+ "title": "路径",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*1gddQ6x8Jq4AAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "road_dark.js",
+ "title": "路径",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*1FVsSLUncw4AAAAAAAAAAABkARQnAQ"
+ }
+ ]
+}
diff --git a/examples/line/path/demo/road_dark.js b/examples/line/path/demo/road_dark.js
new file mode 100644
index 0000000000..9c867c292d
--- /dev/null
+++ b/examples/line/path/demo/road_dark.js
@@ -0,0 +1,24 @@
+import { Scene } from '@l7/scene';
+import { LineLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ center: [ 116.3956, 39.9392 ],
+ pitch: 0,
+ zoom: 10,
+ rotation: 0,
+ type: 'mapbox',
+ style: 'dark'
+});
+
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/0d2f0113-f48b-4db9-8adc-a3937243d5a3.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ const layer = new LineLayer({})
+ .source(data)
+ .size(1.5)
+ .shape('line')
+ .color('标准名称', [ '#5B8FF9', '#5CCEA1', '#F6BD16' ]);
+ scene.addLayer(layer);
+ });
diff --git a/examples/line/path/demo/road_light.js b/examples/line/path/demo/road_light.js
new file mode 100644
index 0000000000..01407c55c2
--- /dev/null
+++ b/examples/line/path/demo/road_light.js
@@ -0,0 +1,24 @@
+import { Scene } from '@l7/scene';
+import { LineLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ center: [ 116.3956, 39.9392 ],
+ pitch: 0,
+ zoom: 10,
+ rotation: 0,
+ type: 'mapbox',
+ style: 'light'
+});
+
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/0d2f0113-f48b-4db9-8adc-a3937243d5a3.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ const layer = new LineLayer({})
+ .source(data)
+ .size(1.5)
+ .shape('line')
+ .color('标准名称', [ '#5B8FF9', '#5CCEA1', '#5D7092' ]);
+ scene.addLayer(layer);
+ });
diff --git a/examples/line/path/index.en.md b/examples/line/path/index.en.md
new file mode 100644
index 0000000000..d62b6f276a
--- /dev/null
+++ b/examples/line/path/index.en.md
@@ -0,0 +1,5 @@
+---
+title: Path Map
+order: 0
+---
+
diff --git a/examples/line/path/index.zh.md b/examples/line/path/index.zh.md
new file mode 100644
index 0000000000..d997c38a38
--- /dev/null
+++ b/examples/line/path/index.zh.md
@@ -0,0 +1,5 @@
+---
+title: 路径地图
+order: 0
+---
+指需要用一连串首尾不闭合的点坐标对来定位的线图层,通常用来表示轨迹,线路,道路等
\ No newline at end of file
diff --git a/examples/point/bubble/demo/color.js b/examples/point/bubble/demo/color.js
new file mode 100644
index 0000000000..bfd9450294
--- /dev/null
+++ b/examples/point/bubble/demo/color.js
@@ -0,0 +1,44 @@
+import { Scene } from '@l7/scene';
+import { PointLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'amap',
+ style: 'light',
+ center: [ 121.435159, 31.256971 ],
+ zoom: 14.89,
+ minZoom: 10
+});
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/893d1d5f-11d9-45f3-8322-ee9140d288ae.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ const pointLayer = new PointLayer({})
+ .source(data, {
+ parser: {
+ type: 'json',
+ x: 'longitude',
+ y: 'latitude'
+ }
+ })
+ .shape('name', [
+ 'circle',
+ 'triangle',
+ 'square',
+ 'pentagon',
+ 'hexagon',
+ 'octogon',
+ 'hexagram',
+ 'rhombus',
+ 'vesica'
+ ])
+ .size('unit_price', [ 10, 25 ])
+ .color('name', [ '#5B8FF9', '#5CCEA1', '#5D7092', '#F6BD16', '#E86452' ])
+ .style({
+ opacity: 0.3,
+ strokeWidth: 2
+ });
+
+ scene.addLayer(pointLayer);
+ });
diff --git a/examples/point/bubble/demo/meta.json b/examples/point/bubble/demo/meta.json
new file mode 100644
index 0000000000..9c9bf0e4ca
--- /dev/null
+++ b/examples/point/bubble/demo/meta.json
@@ -0,0 +1,31 @@
+{
+ "title": {
+ "zh": "中文分类",
+ "en": "Category"
+ },
+ "demos": [
+ {
+ "filename": "point.js",
+ "title": "气泡图",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*_9ETS5_1yCEAAAAAAAAAAABkARQnAQ"
+
+ },
+ {
+ "filename": "color.js",
+ "title": "形状映射",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*K8ACRr5TY7UAAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "world.js",
+ "title": "气泡图",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*DMREQYwsCF4AAAAAAAAAAABkARQnAQ"
+
+ }, {
+ "filename": "scatter.js",
+ "title": "定点图",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*Jt3ZSb8VH98AAAAAAAAAAABkARQnAQ"
+
+ }
+
+ ]
+}
diff --git a/examples/point/bubble/demo/point.js b/examples/point/bubble/demo/point.js
new file mode 100644
index 0000000000..e44d076368
--- /dev/null
+++ b/examples/point/bubble/demo/point.js
@@ -0,0 +1,31 @@
+import { Scene } from '@l7/scene';
+import { PointLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'amap',
+ style: 'light',
+ center: [ 140.067171, 36.26186 ],
+ zoom: 5.32,
+ maxZoom: 10
+});
+
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d3564b06-670f-46ea-8edb-842f7010a7c6.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ const pointLayer = new PointLayer({})
+ .source(data)
+ .shape('circle')
+ .size('mag', [ 1, 25 ])
+ .color('mag', mag => {
+ return mag > 4.5 ? '#5B8FF9' : '#5CCEA1';
+ })
+ .style({
+ opacity: 0.3,
+ strokeWidth: 1
+ });
+
+ scene.addLayer(pointLayer);
+ });
diff --git a/examples/point/bubble/demo/scatter.js b/examples/point/bubble/demo/scatter.js
new file mode 100644
index 0000000000..884dfedece
--- /dev/null
+++ b/examples/point/bubble/demo/scatter.js
@@ -0,0 +1,45 @@
+import { Scene } from '@l7/scene';
+import { PointLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ type: 'amap',
+ style: 'light',
+ center: [ -121.24357, 37.58264 ],
+ pitch: 0,
+ zoom: 6.45
+});
+
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/6c4bb5f2-850b-419d-afc4-e46032fc9f94.csv'
+)
+ .then(res => res.text())
+ .then(data => {
+ const pointLayer = new PointLayer({})
+ .source(data, {
+ parser: {
+ type: 'csv',
+ x: 'Longitude',
+ y: 'Latitude'
+ }
+ })
+ .shape('circle')
+ .size(4)
+ .color('Magnitude', [
+ '#0A3663',
+ '#1558AC',
+ '#3771D9',
+ '#4D89E5',
+ '#64A5D3',
+ '#72BED6',
+ '#83CED6',
+ '#A6E1E0',
+ '#B8EFE2',
+ '#D7F9F0'
+ ])
+ .style({
+ opacity: 0.5,
+ strokeWidth: 0
+ });
+
+ scene.addLayer(pointLayer);
+ });
diff --git a/examples/point/bubble/demo/world.js b/examples/point/bubble/demo/world.js
new file mode 100644
index 0000000000..b89cae4e45
--- /dev/null
+++ b/examples/point/bubble/demo/world.js
@@ -0,0 +1,38 @@
+import { Scene } from '@l7/scene';
+import { PointLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'mapbox',
+ style: 'dark',
+ center: [ 96.99215001469588, 29.281597225674773 ],
+ zoom: 2.194613775109773,
+ maxZoom: 10
+});
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/337ddbb7-aa3f-4679-ab60-d64359241955.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ data.features = data.features.filter(item => {
+ return item.properties.capacity > 800;
+ });
+ const pointLayer = new PointLayer({})
+ .source(data)
+ .shape('circle')
+ .size('capacity', [ 0, 16 ])
+ .color('capacity', [
+ '#34B6B7',
+ '#4AC5AF',
+ '#5FD3A6',
+ '#7BE39E',
+ '#A1EDB8',
+ '#CEF8D6'
+ ])
+ .style({
+ opacity: 0.5,
+ strokeWidth: 0
+ });
+
+ scene.addLayer(pointLayer);
+ });
diff --git a/examples/point/bubble/index.en.md b/examples/point/bubble/index.en.md
new file mode 100644
index 0000000000..d06551432b
--- /dev/null
+++ b/examples/point/bubble/index.en.md
@@ -0,0 +1,4 @@
+---
+title: Bubble Map
+order: 0
+---
diff --git a/examples/point/bubble/index.zh.md b/examples/point/bubble/index.zh.md
new file mode 100644
index 0000000000..38a626dc3b
--- /dev/null
+++ b/examples/point/bubble/index.zh.md
@@ -0,0 +1,5 @@
+---
+title: 气泡地图
+order: 0
+---
+指地图上可用一个形状相同、大小和与其代表的数值成固定比率的圆点符号来定位的点图层,用于表达离散现象分布特征的地图。
\ No newline at end of file
diff --git a/examples/point/chart/demo/bar.js b/examples/point/chart/demo/bar.js
new file mode 100644
index 0000000000..f0e43874db
--- /dev/null
+++ b/examples/point/chart/demo/bar.js
@@ -0,0 +1,78 @@
+import { Scene } from '@l7/scene';
+import { Marker } from '@l7/component';
+import * as G2 from '@antv/g2';
+const scene = new Scene({
+ id: 'map',
+ type: 'amap',
+ style: 'light',
+ center: [ 2.6125016864608597, 49.359131 ],
+ pitch: 0,
+ zoom: 4.19
+});
+
+scene.on('loaded', () => {
+ addChart();
+});
+function addChart() {
+ fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/0b96cca4-7e83-449a-93d0-2a77053e74ab.json'
+ )
+ .then(res => res.json())
+ .then(data => {
+ data.nodes.forEach(function(item) {
+ const el = document.createElement('div');
+ const total =
+ item.gdp.Agriculture + item.gdp.Industry + item.gdp.Service;
+
+ const size = Math.min(parseInt(total / 30000, 10), 70);
+ if (size < 30) {
+ return;
+ }
+ const itemData = [
+ {
+ item: 'Agriculture',
+ count: item.gdp.Agriculture,
+ percent: item.gdp.Agriculture / total
+ },
+ {
+ item: 'Industry',
+ count: item.gdp.Industry,
+ percent: item.gdp.Industry / total
+ },
+ {
+ item: 'Service',
+ count: item.gdp.Service,
+ percent: item.gdp.Service / total
+ }
+ ];
+
+ const chart = new G2.Chart({
+ container: el,
+ width: size,
+ height: size,
+ render: 'svg',
+ padding: 0
+ });
+ chart.legend(false);
+ chart.source(itemData);
+ chart.tooltip(false);
+ chart.axis('count', {
+ grid: false
+ });
+ chart
+ .interval()
+ .position('item*count')
+ .color('item', [ '#5CCEA1', '#5D7092', '#5B8FF9' ])
+ .opacity(1);
+ chart.render();
+ new Marker({
+ element: el
+ })
+ .setLnglat({
+ lng: item.coordinates[0],
+ lat: item.coordinates[1]
+ })
+ .addTo(scene);
+ });
+ });
+}
diff --git a/examples/point/chart/demo/chart.js b/examples/point/chart/demo/chart.js
new file mode 100644
index 0000000000..bae4c58db9
--- /dev/null
+++ b/examples/point/chart/demo/chart.js
@@ -0,0 +1,101 @@
+import { Scene } from '@l7/scene';
+import { Marker } from '@l7/component';
+import * as G2 from '@antv/g2';
+const scene = new Scene({
+ id: 'map',
+ type: 'amap',
+ style: 'light',
+ center: [ 2.6125016864608597, 49.359131 ],
+ pitch: 0,
+ zoom: 4.19
+});
+
+scene.on('loaded', () => {
+ addChart();
+});
+window.mapScene = scene;
+function addChart() {
+ fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/0b96cca4-7e83-449a-93d0-2a77053e74ab.json'
+ )
+ .then(res => res.json())
+ .then(data => {
+ data.nodes.forEach(function(item) {
+ const el = document.createElement('div');
+ const total =
+ item.gdp.Agriculture + item.gdp.Industry + item.gdp.Service;
+
+ const size = Math.min(parseInt(total / 30000, 10), 70);
+ if (size < 30) {
+ return;
+ }
+ const itemData = [
+ {
+ item: 'Agriculture',
+ count: item.gdp.Agriculture,
+ percent: item.gdp.Agriculture / total
+ },
+ {
+ item: 'Industry',
+ count: item.gdp.Industry,
+ percent: item.gdp.Industry / total
+ },
+ {
+ item: 'Service',
+ count: item.gdp.Service,
+ percent: item.gdp.Service / total
+ }
+ ];
+
+ const sliceNumber = 0.02;
+
+ // 自定义 other 的图形,增加两条线
+ G2.Shape.registerShape('interval', 'sliceShape', {
+ draw: function draw(cfg, container) {
+ const points = cfg.points;
+ let path = [];
+ path.push([ 'M', points[0].x, points[0].y ]);
+ path.push([ 'L', points[1].x, points[1].y - sliceNumber ]);
+ path.push([ 'L', points[2].x, points[2].y - sliceNumber ]);
+ path.push([ 'L', points[3].x, points[3].y ]);
+ path.push('Z');
+ path = this.parsePath(path);
+ return container.addShape('path', {
+ attrs: {
+ fill: cfg.color,
+ path
+ }
+ });
+ }
+ });
+
+ const chart = new G2.Chart({
+ container: el,
+ width: size,
+ height: size,
+ render: 'svg',
+ padding: 0
+ });
+ chart.legend(false);
+ chart.source(itemData);
+ chart.coord('theta', {
+ innerRadius: 0.6
+ });
+ chart.tooltip(false);
+ chart
+ .intervalStack()
+ .position('percent')
+ .color('item', [ '#5CCEA1', '#5D7092', '#5B8FF9' ])
+ .shape('sliceShape');
+ chart.render();
+ new Marker({
+ element: el
+ })
+ .setLnglat({
+ lng: item.coordinates[0],
+ lat: item.coordinates[1]
+ })
+ .addTo(scene);
+ });
+ });
+}
diff --git a/examples/point/chart/demo/meta.json b/examples/point/chart/demo/meta.json
new file mode 100644
index 0000000000..3a94fcf334
--- /dev/null
+++ b/examples/point/chart/demo/meta.json
@@ -0,0 +1,23 @@
+{
+ "title": {
+ "zh": "中文分类",
+ "en": "Category"
+ },
+ "demos": [
+ {
+ "filename": "bar.js",
+ "title": "柱图",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*-Tw3TLzyJ5wAAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "chart.js",
+ "title": "环图",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*Uq_RQqyMrbQAAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "ring.js",
+ "title": "环图",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*zUu0RYKaF28AAAAAAAAAAABkARQnAQ"
+ }
+ ]
+}
diff --git a/examples/point/chart/demo/ring.js b/examples/point/chart/demo/ring.js
new file mode 100644
index 0000000000..4401242d9d
--- /dev/null
+++ b/examples/point/chart/demo/ring.js
@@ -0,0 +1,111 @@
+import { Scene } from '@l7/scene';
+import { Marker } from '@l7/component';
+import * as G2 from '@antv/g2';
+
+const CSS = `.l7-marker .g2-guide-html {
+ width: 50px;
+ height: 50px;
+ vertical-align: middle;
+ text-align: center;
+ line-height: 0.1
+}
+
+l7-marker .g2-guide-html .title {
+ font-size: 12px;
+ color: #8c8c8c;
+ font-weight: 300;
+}
+
+l7-marker .g2-guide-html .value {
+ font-size: 18px;
+ color: #000;
+ font-weight: bold;
+}
+`;
+function loadCssCode(code) {
+ const style = document.createElement('style');
+ style.type = 'text/css';
+ style.rel = 'stylesheet';
+ // for Chrome Firefox Opera Safari
+ style.appendChild(document.createTextNode(code));
+ // for IE
+ // style.styleSheet.cssText = code;
+ const head = document.getElementsByTagName('head')[0];
+ head.appendChild(style);
+}
+loadCssCode(CSS);
+
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'mapbox',
+ style: 'dark',
+ center: [ 52.21496184144132, 24.121126851768906 ],
+ zoom: 3.802
+});
+window.mapScene = scene;
+scene.on('loaded', () => {
+ Promise.all([
+ fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/5b772136-a1f4-4fc5-9a80-9f9974b4b182.json'
+ ).then(d => d.json()),
+ fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/f3c467a4-9ae0-4f08-bb5f-11f9c869b2cb.json'
+ ).then(d => d.json())
+ ]).then(function onLoad([ center, population ]) {
+ const popobj = {};
+ population.forEach(element => {
+ popobj[element.Code] =
+ element['Population, female (% of total) (% of total)'];
+ });
+ // 数据绑定
+
+ center.features = center.features.map(fe => {
+ fe.properties.female = popobj[fe.properties.id] * 1 || 0;
+ return fe;
+ });
+ center.features.forEach(point => {
+ const el = document.createElement('div');
+ const coord = point.geometry.coordinates;
+ const v = point.properties.female * 1;
+ if (v < 1 || (v > 46 && v < 54)) { return; }
+ const size = 60;
+ const data = [
+ {
+ type: '男性',
+ value: 100.0 - v.toFixed(2)
+ },
+ {
+ type: '女性',
+ value: v.toFixed(2) * 1
+ }
+ ];
+ const chart = new G2.Chart({
+ container: el,
+ width: size,
+ height: size,
+ render: 'svg',
+ padding: 0
+ });
+ chart.source(data);
+ chart.legend(false);
+ chart.tooltip(false);
+ chart.coord('theta', {
+ radius: 0.9,
+ innerRadius: 0.6
+ });
+ chart
+ .intervalStack()
+ .position('value')
+ .color('type', [ '#5CCEA1', '#5B8FF9' ])
+ .opacity(1);
+ chart.render();
+ new Marker({ element: el })
+ .setLnglat({
+ lng: coord[0],
+ lat: coord[1]
+ })
+ .addTo(scene);
+ });
+ });
+});
diff --git a/examples/point/chart/index.en.md b/examples/point/chart/index.en.md
new file mode 100644
index 0000000000..683c5cf293
--- /dev/null
+++ b/examples/point/chart/index.en.md
@@ -0,0 +1,5 @@
+---
+title: Chart Map
+order: 6
+---
+
diff --git a/examples/point/chart/index.zh.md b/examples/point/chart/index.zh.md
new file mode 100644
index 0000000000..0680f65140
--- /dev/null
+++ b/examples/point/chart/index.zh.md
@@ -0,0 +1,5 @@
+---
+title: 复合图表地图
+order: 6
+---
+使用二维统计图表代替点状符号的一种特殊复合形式,复合图表地图中常用扩展图形还有柱状图、曲线图、玫瑰图等
\ No newline at end of file
diff --git a/examples/point/column/demo/clumn_shape.js b/examples/point/column/demo/clumn_shape.js
new file mode 100644
index 0000000000..c1265e15c0
--- /dev/null
+++ b/examples/point/column/demo/clumn_shape.js
@@ -0,0 +1,42 @@
+import { Scene } from '@l7/scene';
+import { PointLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ pitch: 66.02383,
+ type: 'amap',
+ style: 'dark',
+ center: [ 121.400257, 31.25287 ],
+ zoom: 14.55,
+ rotation: 134.9507
+});
+window.mapScene = scene;
+
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/893d1d5f-11d9-45f3-8322-ee9140d288ae.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ const pointLayer = new PointLayer({})
+ .source(data, {
+ parser: {
+ type: 'json',
+ x: 'longitude',
+ y: 'latitude'
+ }
+ })
+ .shape('name', [
+ 'cylinder',
+ 'triangleColumn',
+ 'hexagonColumn',
+ 'squareColumn'
+ ])
+ .size('unit_price', h => {
+ return [ 6, 6, h / 500 ];
+ })
+ .color('name', [ '#739DFF', '#61FCBF', '#FFDE74', '#FF896F' ])
+ .style({
+ opacity: 1.0
+ });
+
+ scene.addLayer(pointLayer);
+ });
diff --git a/examples/point/column/demo/clumn_shape_light.js b/examples/point/column/demo/clumn_shape_light.js
new file mode 100644
index 0000000000..0cf8f527f0
--- /dev/null
+++ b/examples/point/column/demo/clumn_shape_light.js
@@ -0,0 +1,42 @@
+import { Scene } from '@l7/scene';
+import { PointLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ pitch: 60,
+ type: 'mapbox',
+ style: 'light',
+ center: [ 121.412224, 31.26192438 ],
+ zoom: 13.13438,
+ rotation: 35.97133
+});
+window.mapScene = scene;
+
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/893d1d5f-11d9-45f3-8322-ee9140d288ae.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ const pointLayer = new PointLayer({})
+ .source(data, {
+ parser: {
+ type: 'json',
+ x: 'longitude',
+ y: 'latitude'
+ }
+ })
+ .shape('name', [
+ 'cylinder',
+ 'triangleColumn',
+ 'hexagonColumn',
+ 'squareColumn'
+ ])
+ .size('unit_price', h => {
+ return [ 6, 6, h / 500 ];
+ })
+ .color('name', [ '#5B8FF9', '#70E3B5', '#FFD458', '#FF7C6A' ])
+ .style({
+ opacity: 1.0
+ });
+
+ scene.addLayer(pointLayer);
+ });
diff --git a/examples/point/column/demo/column_dark.js b/examples/point/column/demo/column_dark.js
new file mode 100644
index 0000000000..42a1d405f8
--- /dev/null
+++ b/examples/point/column/demo/column_dark.js
@@ -0,0 +1,44 @@
+import { Scene } from '@l7/scene';
+import { PointLayer } from '@l7/layers';
+
+const scene = new Scene({
+ id: 'map',
+ pitch: 35.210526315789465,
+ type: 'amap',
+ style: 'dark',
+ center: [ 104.288144, 31.239692 ],
+ zoom: 4.4
+});
+window.mapScene = scene;
+fetch('https://gw.alipayobjects.com/os/rmsportal/oVTMqfzuuRFKiDwhPSFL.json')
+ .then(res => res.json())
+ .then(data => {
+ const pointLayer = new PointLayer({})
+ .source(data.list, {
+ parser: {
+ type: 'json',
+ x: 'j',
+ y: 'w'
+ }
+ })
+ .shape('cylinder')
+ .size('t', function(level) {
+ return [ 1, 2, level * 2 + 20 ];
+ })
+ .color('t', [
+ '#094D4A',
+ '#146968',
+ '#1D7F7E',
+ '#289899',
+ '#34B6B7',
+ '#4AC5AF',
+ '#5FD3A6',
+ '#7BE39E',
+ '#A1EDB8',
+ '#CEF8D6'
+ ])
+ .style({
+ opacity: 1.0
+ });
+ scene.addLayer(pointLayer);
+ });
diff --git a/examples/point/column/demo/column_light.js b/examples/point/column/demo/column_light.js
new file mode 100644
index 0000000000..685999cff5
--- /dev/null
+++ b/examples/point/column/demo/column_light.js
@@ -0,0 +1,33 @@
+import { Scene } from '@l7/scene';
+import { PointLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ pitch: 48.62562,
+ type: 'amap',
+ style: 'light',
+ center: [ 104.026043, 31.847 ],
+ rotation: -0.76,
+ zoom: 4.48
+});
+window.mapScene = scene;
+fetch('https://gw.alipayobjects.com/os/rmsportal/oVTMqfzuuRFKiDwhPSFL.json')
+ .then(res => res.json())
+ .then(data => {
+ const pointLayer = new PointLayer({})
+ .source(data.list, {
+ parser: {
+ type: 'json',
+ x: 'j',
+ y: 'w'
+ }
+ })
+ .shape('cylinder')
+ .size('t', function(level) {
+ return [ 1, 2, level * 2 + 20 ];
+ })
+ .color('#006CFF')
+ .style({
+ opacity: 1.0
+ });
+ scene.addLayer(pointLayer);
+ });
diff --git a/examples/point/column/demo/meta.json b/examples/point/column/demo/meta.json
new file mode 100644
index 0000000000..fbe1c8c40c
--- /dev/null
+++ b/examples/point/column/demo/meta.json
@@ -0,0 +1,31 @@
+{
+ "title": {
+ "zh": "中文分类",
+ "en": "Category"
+ },
+ "demos": [
+ {
+ "filename": "column_light.js",
+ "title": "3D柱图_浅色底图",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*5WdiT7MmU_cAAAAAAAAAAABkARQnAQ"
+
+ },
+ {
+ "filename": "clumn_shape_light.js",
+ "title": "3D 浅色柱图",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*pAKGQrCFSjAAAAAAAAAAAABkARQnAQ"
+
+ },
+ {
+ "filename": "column_dark.js",
+ "title": "3D柱图_深色底图",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*WkpEQqzuM-oAAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "clumn_shape.js",
+ "title": "3D 深色柱图",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*HNbARpUVOdYAAAAAAAAAAABkARQnAQ"
+
+ }
+ ]
+}
diff --git a/examples/point/column/index.en.md b/examples/point/column/index.en.md
new file mode 100644
index 0000000000..eb926efa8c
--- /dev/null
+++ b/examples/point/column/index.en.md
@@ -0,0 +1,4 @@
+---
+title: Column Map
+order: 4
+---
diff --git a/examples/point/column/index.zh.md b/examples/point/column/index.zh.md
new file mode 100644
index 0000000000..3c36daa306
--- /dev/null
+++ b/examples/point/column/index.zh.md
@@ -0,0 +1,5 @@
+---
+title: 3D 柱状地图
+order: 4
+---
+用形状大小相同的柱状体代替点状符号,高度与数值大小映射共同表达离散现象分布特征的地图
\ No newline at end of file
diff --git a/examples/point/image/demo/image.js b/examples/point/image/demo/image.js
new file mode 100644
index 0000000000..d9e6c56638
--- /dev/null
+++ b/examples/point/image/demo/image.js
@@ -0,0 +1,40 @@
+import { Scene } from '@l7/scene';
+import { PointLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'amap',
+ style: 'light',
+ center: [ 121.434765, 31.256735 ],
+ zoom: 14.83
+});
+
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/893d1d5f-11d9-45f3-8322-ee9140d288ae.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ scene.addImage(
+ '00',
+ 'https://gw.alipayobjects.com/zos/basement_prod/604b5e7f-309e-40db-b95b-4fac746c5153.svg'
+ );
+ scene.addImage(
+ '01',
+ 'https://gw.alipayobjects.com/zos/basement_prod/30580bc9-506f-4438-8c1a-744e082054ec.svg'
+ );
+ scene.addImage(
+ '02',
+ 'https://gw.alipayobjects.com/zos/basement_prod/7aa1f460-9f9f-499f-afdf-13424aa26bbf.svg'
+ );
+ const imageLayer = new PointLayer()
+ .source(data, {
+ parser: {
+ type: 'json',
+ x: 'longitude',
+ y: 'latitude'
+ }
+ })
+ .shape('name', [ '00', '01', '02' ])
+ .size(20);
+ scene.addLayer(imageLayer);
+ });
diff --git a/examples/point/image/demo/locate.js b/examples/point/image/demo/locate.js
new file mode 100644
index 0000000000..a7443e4abd
--- /dev/null
+++ b/examples/point/image/demo/locate.js
@@ -0,0 +1,26 @@
+import { Scene } from '@l7/scene';
+import { PointLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'amap',
+ style: 'light',
+ center: [ 116.276227, 35.256776 ],
+ zoom: 6
+});
+
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/e2fc6e0a-af2a-4320-96e5-d9f5a5fda442.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ scene.addImage(
+ 'marker',
+ 'https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*BJ6cTpDcuLcAAAAAAAAAAABkARQnAQ'
+ );
+ const imageLayer = new PointLayer()
+ .source(data)
+ .shape('marker')
+ .size(12);
+ scene.addLayer(imageLayer);
+ });
diff --git a/examples/point/image/demo/meta.json b/examples/point/image/demo/meta.json
new file mode 100644
index 0000000000..c6fe6cae81
--- /dev/null
+++ b/examples/point/image/demo/meta.json
@@ -0,0 +1,23 @@
+{
+ "title": {
+ "zh": "中文分类",
+ "en": "Category"
+ },
+ "demos": [
+ {
+ "filename": "image.js",
+ "title": "气泡图",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*c0IDRIg_n4MAAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "locate.js",
+ "title": "顶点符号",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*jrFoQrZNL3wAAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "weather.js",
+ "title": "天气",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*a_rnSI6p6RoAAAAAAAAAAABkARQnAQ"
+ }
+ ]
+}
diff --git a/examples/point/image/demo/weather.js b/examples/point/image/demo/weather.js
new file mode 100644
index 0000000000..a8ab5e55ff
--- /dev/null
+++ b/examples/point/image/demo/weather.js
@@ -0,0 +1,72 @@
+import { Scene } from '@l7/scene';
+import { PointLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ type: 'amap',
+ style: 'dark',
+ center: [ 120.5969, 29.7918 ],
+ pitch: 35,
+ zoom: 7,
+ rotation: 4.183582
+});
+scene.addImage(
+ '00',
+ 'https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*kzTMQqS2QdUAAAAAAAAAAABkARQnAQ'
+);
+scene.addImage(
+ '01',
+ 'https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*jH1XRb7F7hMAAAAAAAAAAABkARQnAQ'
+);
+scene.addImage(
+ '02',
+ 'https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*YaKSTr3L5i8AAAAAAAAAAABkARQnAQ'
+);
+scene.addImage(
+ '04',
+ 'https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*dmniQrDpCYwAAAAAAAAAAABkARQnAQ'
+);
+scene.addImage(
+ '11',
+ 'https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*YaKSTr3L5i8AAAAAAAAAAABkARQnAQ'
+);
+scene.addImage(
+ '15',
+ 'https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*YNlXQYCIzroAAAAAAAAAAABkARQnAQ'
+);
+scene.addImage(
+ '07',
+ 'https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*DccRTI6ZRLoAAAAAAAAAAABkARQnAQ'
+);
+scene.addImage(
+ '16',
+ 'https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*iQKoS6I-rO8AAAAAAAAAAABkARQnAQ'
+);
+scene.addImage(
+ '06',
+ 'https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*f-wyS7ad5p0AAAAAAAAAAABkARQnAQ'
+);
+scene.addImage(
+ '08',
+ 'https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*lHhzQrOW4AQAAAAAAAAAAABkARQnAQ'
+);
+scene.addImage(
+ '17',
+ 'https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*9Q0QS4GdaYcAAAAAAAAAAABkARQnAQ'
+);
+scene.addImage(
+ '05',
+ 'https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*LyuVRowl6nAAAAAAAAAAAABkARQnAQ'
+);
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/c6042c6b-45fd-4e2e-adf8-fdbf060441e8.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ const imageLayer = new PointLayer()
+ .source(data)
+ .shape('w', function(w) {
+ return w;
+ })
+ .size(15);
+ scene.addLayer(imageLayer);
+ });
diff --git a/examples/point/image/index.en.md b/examples/point/image/index.en.md
new file mode 100644
index 0000000000..0f0394e583
--- /dev/null
+++ b/examples/point/image/index.en.md
@@ -0,0 +1,4 @@
+---
+title: Symbol Map
+order: 2
+---
diff --git a/examples/point/image/index.zh.md b/examples/point/image/index.zh.md
new file mode 100644
index 0000000000..ec8ba9c381
--- /dev/null
+++ b/examples/point/image/index.zh.md
@@ -0,0 +1,5 @@
+---
+title: 符号地图
+order: 2
+---
+以形状变量中具象的图标映射的点图层,将真实地物具化为利于直观识别的图标,常用于突出信息的突出表达。
\ No newline at end of file
diff --git a/examples/point/marker/demo/marker.js b/examples/point/marker/demo/marker.js
new file mode 100644
index 0000000000..5c9c428122
--- /dev/null
+++ b/examples/point/marker/demo/marker.js
@@ -0,0 +1,54 @@
+import { Scene } from '@l7/scene';
+import { Marker } from '@l7/component';
+const scene = new Scene({
+ id: 'map',
+ type: 'amap',
+ style: 'light',
+ center: [ 105.790327, 36.495636 ],
+ pitch: 0,
+ zoom: 4
+});
+
+scene.on('loaded', () => {
+ addMarkers();
+});
+
+function addMarkers() {
+ fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/67f47049-8787-45fc-acfe-e19924afe032.json'
+ )
+ .then(res => res.json())
+ .then(nodes => {
+ for (let i = 0; i < nodes.length; i++) {
+ if (nodes[i].g !== '1' || nodes[i].v === '') { continue; }
+ const el = document.createElement('label');
+ el.className = 'lableclass';
+ el.textContent = nodes[i].v + '℃';
+ el.style.background = getColor(nodes[i].v);
+ el.style.borderColor = getColor(nodes[i].v);
+ new Marker({
+ element: el
+ })
+ .setLnglat({ lng: nodes[i].x * 1, lat: nodes[i].y })
+ .addTo(scene);
+ }
+ });
+}
+
+function getColor(v) {
+ return v > 50
+ ? '#800026'
+ : v > 40
+ ? '#BD0026'
+ : v > 30
+ ? '#E31A1C'
+ : v > 20
+ ? '#FC4E2A'
+ : v > 10
+ ? '#FD8D3C'
+ : v > 5
+ ? '#FEB24C'
+ : v > 0
+ ? '#FED976'
+ : '#FFEDA0';
+}
diff --git a/examples/point/marker/demo/meta.json b/examples/point/marker/demo/meta.json
new file mode 100644
index 0000000000..c09db23baa
--- /dev/null
+++ b/examples/point/marker/demo/meta.json
@@ -0,0 +1,14 @@
+{
+ "title": {
+ "zh": "中文分类",
+ "en": "Category"
+ },
+ "demos": [
+ {
+ "filename": "marker.js",
+ "title": "温度",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*oPofT5YBOksAAAAAAAAAAABkARQnAQ"
+
+ }
+ ]
+}
diff --git a/examples/point/marker/index.en.md b/examples/point/marker/index.en.md
new file mode 100644
index 0000000000..68e443a8c7
--- /dev/null
+++ b/examples/point/marker/index.en.md
@@ -0,0 +1,4 @@
+---
+title: Custom Marker
+order: 7
+---
diff --git a/examples/point/marker/index.zh.md b/examples/point/marker/index.zh.md
new file mode 100644
index 0000000000..7ebaa62a10
--- /dev/null
+++ b/examples/point/marker/index.zh.md
@@ -0,0 +1,5 @@
+---
+title: 自定义 Marker
+order: 7
+---
+可自定义点符号,通过自定义dom实现地图标注,富文本、动态点状符号都可用于地图上信息的标记。
\ No newline at end of file
diff --git a/examples/point/scatter/demo/meta.json b/examples/point/scatter/demo/meta.json
new file mode 100644
index 0000000000..f592a11c51
--- /dev/null
+++ b/examples/point/scatter/demo/meta.json
@@ -0,0 +1,19 @@
+{
+ "title": {
+ "zh": "中文分类",
+ "en": "Category"
+ },
+ "demos": [
+ {
+ "filename": "normal2.js",
+ "title": "城市亮度图",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*Xp7iRaORYuIAAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "normal.js",
+ "title": "海量点",
+ "screenshot":"https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*Kva7R7AimzsAAAAAAAAAAABkARQnAQ"
+ }
+
+ ]
+}
diff --git a/examples/point/scatter/demo/normal.js b/examples/point/scatter/demo/normal.js
new file mode 100644
index 0000000000..6111b8d699
--- /dev/null
+++ b/examples/point/scatter/demo/normal.js
@@ -0,0 +1,30 @@
+import { Scene } from '@l7/scene';
+import { PointLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ type: 'amap',
+ style: 'dark',
+ center: [ 121.417463, 31.215175 ],
+ pitch: 0,
+ zoom: 11
+});
+window.mapScene = scene;
+fetch('https://gw.alipayobjects.com/os/rmsportal/BElVQFEFvpAKzddxFZxJ.txt')
+ .then(res => res.text())
+ .then(data => {
+ const pointLayer = new PointLayer({})
+ .source(data, {
+ parser: {
+ type: 'csv',
+ y: 'lat',
+ x: 'lng'
+ }
+ })
+ .size(0.5)
+ .color('#080298')
+ .style({
+ opacity: 1
+ });
+
+ scene.addLayer(pointLayer);
+ });
diff --git a/examples/point/scatter/demo/normal2.js b/examples/point/scatter/demo/normal2.js
new file mode 100644
index 0000000000..d9a622c9db
--- /dev/null
+++ b/examples/point/scatter/demo/normal2.js
@@ -0,0 +1,37 @@
+import { Scene } from '@l7/scene';
+import { PointLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ pitch: 64.88,
+ type: 'amap',
+ style: 'dark',
+ center: [ 114.060288, 22.53684 ],
+ zoom: 15.63
+});
+window.mapScene = scene;
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/513add53-dcb2-4295-8860-9e7aa5236699.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ const pointLayer = new PointLayer({})
+ .source(data)
+ .size(2)
+ .color('h8', [
+ '#0A3663',
+ '#1558AC',
+ '#3771D9',
+ '#4D89E5',
+ '#64A5D3',
+ '#72BED6',
+ '#83CED6',
+ '#A6E1E0',
+ '#B8EFE2',
+ '#D7F9F0'
+ ])
+ .style({
+ opacity: 1
+ });
+
+ scene.addLayer(pointLayer);
+ });
diff --git a/examples/point/scatter/index.en.md b/examples/point/scatter/index.en.md
new file mode 100644
index 0000000000..0db3c39e7c
--- /dev/null
+++ b/examples/point/scatter/index.en.md
@@ -0,0 +1,4 @@
+---
+title: Scatter Map
+order: 1
+---
diff --git a/examples/point/scatter/index.zh.md b/examples/point/scatter/index.zh.md
new file mode 100644
index 0000000000..faf3bf0a17
--- /dev/null
+++ b/examples/point/scatter/index.zh.md
@@ -0,0 +1,5 @@
+---
+title: "散点地图"
+order: 1
+---
+指地图上可用一个形状大小相同的点状符号来定位,用表达离散现象分布特征的地图,如人口、农作物、动植物等的分布。
\ No newline at end of file
diff --git a/examples/polygon/3d/demo/meta.json b/examples/polygon/3d/demo/meta.json
new file mode 100644
index 0000000000..9d69303a8c
--- /dev/null
+++ b/examples/polygon/3d/demo/meta.json
@@ -0,0 +1,13 @@
+{
+ "title": {
+ "zh": "中文分类",
+ "en": "Category"
+ },
+ "demos": [
+ {
+ "filename": "polygon.js",
+ "title": "3D 建筑面",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*JgXVSoV03n4AAAAAAAAAAABkARQnAQ"
+ }
+ ]
+}
diff --git a/examples/polygon/3d/demo/polygon.js b/examples/polygon/3d/demo/polygon.js
new file mode 100644
index 0000000000..1edfcbda7c
--- /dev/null
+++ b/examples/polygon/3d/demo/polygon.js
@@ -0,0 +1,35 @@
+import { Scene } from '@l7/scene';
+import { PolygonLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'amap',
+ style: 'dark',
+ center: [ 114.050008, 22.529272 ],
+ zoom: 14.1
+});
+
+window.mapScene = scene;
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/972566c5-a2b9-4a7e-8da1-bae9d0eb0117.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ const layer = new PolygonLayer({})
+ .source(data)
+ .shape('extrude')
+ .size('h20', [ 100, 120, 160, 200, 260, 500 ])
+ .color('h20', [
+ '#816CAD',
+ '#A67FB5',
+ '#C997C7',
+ '#DEB8D4',
+ '#F5D4E6',
+ '#FAE4F1',
+ '#FFF3FC'
+ ])
+ .style({
+ opacity: 1.0
+ });
+ scene.addLayer(layer);
+ });
diff --git a/examples/polygon/3d/index.en.md b/examples/polygon/3d/index.en.md
new file mode 100644
index 0000000000..bc3ca8ef68
--- /dev/null
+++ b/examples/polygon/3d/index.en.md
@@ -0,0 +1,4 @@
+---
+title: Extrude Map
+order: 0
+---
diff --git a/examples/polygon/3d/index.zh.md b/examples/polygon/3d/index.zh.md
new file mode 100644
index 0000000000..7a97e3407c
--- /dev/null
+++ b/examples/polygon/3d/index.zh.md
@@ -0,0 +1,7 @@
+---
+title: 3D填充图
+order: 0
+redirect_from:
+ - /zh/examples/polygon/
+---
+填充地图的增强实现,通过三维视角中的高度体现数据差异。
\ No newline at end of file
diff --git a/examples/polygon/fill/demo/fill.js b/examples/polygon/fill/demo/fill.js
new file mode 100644
index 0000000000..9745bfb83c
--- /dev/null
+++ b/examples/polygon/fill/demo/fill.js
@@ -0,0 +1,50 @@
+import { Scene } from '@l7/scene';
+import { PolygonLayer, LineLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'amap',
+ style: 'light',
+ center: [ 116.368652, 39.93866 ],
+ zoom: 10.07
+});
+window.mapScene = scene;
+fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/1d27c363-af3a-469e-ab5b-7a7e1ce4f311.json'
+)
+ .then(res => res.json())
+ .then(data => {
+ const layer = new PolygonLayer({})
+ .source(data)
+ .color(
+ 'unit_price',
+ [
+ '#1A4397',
+ '#2555B7',
+ '#3165D1',
+ '#467BE8',
+ '#6296FE',
+ '#7EA6F9',
+ '#98B7F7',
+ '#BDD0F8',
+ '#DDE6F7',
+ '#F2F5FC'
+ ].reverse()
+ )
+ .shape('fill')
+ .style({
+ opacity: 1
+ });
+ const layer2 = new LineLayer({
+ zIndex: 2
+ })
+ .source(data)
+ .color('#fff')
+ .size(0.3)
+ .style({
+ opacity: 1
+ });
+
+ scene.addLayer(layer);
+ scene.addLayer(layer2);
+ });
diff --git a/examples/polygon/fill/demo/meta.json b/examples/polygon/fill/demo/meta.json
new file mode 100644
index 0000000000..2f3a2bb710
--- /dev/null
+++ b/examples/polygon/fill/demo/meta.json
@@ -0,0 +1,23 @@
+{
+ "title": {
+ "zh": "中文分类",
+ "en": "Category"
+ },
+ "demos": [
+ {
+ "filename": "polygon.js",
+ "title": "全国地图行政区划",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*AoD6SZ4kz0wAAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "fill.js",
+ "title": "连续填充图",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*g93EQYYz9HEAAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "population.js",
+ "title": "世界地图 女性人口比例",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*j6OrT7kgAnAAAAAAAAAAAABkARQnAQ"
+ }
+ ]
+}
diff --git a/examples/polygon/fill/demo/polygon.js b/examples/polygon/fill/demo/polygon.js
new file mode 100644
index 0000000000..5bda22aa84
--- /dev/null
+++ b/examples/polygon/fill/demo/polygon.js
@@ -0,0 +1,45 @@
+import { Scene } from '@l7/scene';
+import { PolygonLayer, LineLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'amap',
+ style: 'light',
+ center: [ 107.042225, 37.66565 ],
+ zoom: 3.87
+});
+
+fetch('https://gw.alipayobjects.com/os/rmsportal/JToMOWvicvJOISZFCkEI.json')
+ .then(res => res.json())
+ .then(data => {
+ const colors = [
+ '#D7F9F0',
+ '#A6E1E0',
+ '#72BED6',
+ '#5B8FF9',
+ '#3474DB',
+ '#005CBE',
+ '#00419F',
+ '#00287E'
+ ];
+ const layer = new PolygonLayer({})
+ .source(data)
+ .color('name', colors)
+ .shape('fill')
+ .style({
+ opacity: 0.9
+ });
+
+ const layer2 = new LineLayer({
+ zIndex: 2
+ })
+ .source(data)
+ .color('#fff')
+ .size(0.3)
+ .style({
+ opacity: 1
+ });
+
+ scene.addLayer(layer);
+ scene.addLayer(layer2);
+ });
diff --git a/examples/polygon/fill/demo/population.js b/examples/polygon/fill/demo/population.js
new file mode 100644
index 0000000000..4dffd60a8a
--- /dev/null
+++ b/examples/polygon/fill/demo/population.js
@@ -0,0 +1,64 @@
+import { Scene } from '@l7/scene';
+import { PolygonLayer, LineLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'mapbox',
+ style: 'light',
+ center: [ 3.438, 40.16797 ],
+ zoom: 0.51329
+});
+Promise.all([
+ fetch(
+ 'https://gw.alipayobjects.com/os/antvdemo/assets/data/world.geo.json'
+ ).then(d => d.json()),
+ fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/f3c467a4-9ae0-4f08-bb5f-11f9c869b2cb.json'
+ ).then(d => d.json())
+]).then(function onLoad([ world, population ]) {
+ const popobj = {};
+ population.forEach(element => {
+ popobj[element.Code] =
+ element['Population, female (% of total) (% of total)'];
+ });
+ // 数据绑定
+ world.features = world.features.map(fe => {
+ fe.properties.female = popobj[fe.id] * 1 || 0;
+ return fe;
+ });
+ const colors = [
+ '#0A3663',
+ '#1558AC',
+ '#3771D9',
+ '#4D89E5',
+ '#64A5D3',
+ '#72BED6',
+ '#83CED6',
+ '#A6E1E0',
+ '#B8EFE2',
+ '#D7F9F0'
+ ];
+ const layer = new PolygonLayer({})
+ .source(world)
+ .scale('female', {
+ type: 'quantile'
+ })
+ .color('female', colors)
+ .shape('fill')
+ .style({
+ opacity: 0.9
+ });
+
+ const layer2 = new LineLayer({
+ zIndex: 2
+ })
+ .source(world)
+ .color('#fff')
+ .size(0.3)
+ .style({
+ opacity: 1
+ });
+
+ scene.addLayer(layer);
+ scene.addLayer(layer2);
+});
diff --git a/examples/polygon/fill/index.en.md b/examples/polygon/fill/index.en.md
new file mode 100644
index 0000000000..c8e3fe60e2
--- /dev/null
+++ b/examples/polygon/fill/index.en.md
@@ -0,0 +1,4 @@
+---
+title: Choropleth Map
+order: 0
+---
diff --git a/examples/polygon/fill/index.zh.md b/examples/polygon/fill/index.zh.md
new file mode 100644
index 0000000000..800d015675
--- /dev/null
+++ b/examples/polygon/fill/index.zh.md
@@ -0,0 +1,5 @@
+---
+title: 填充地图
+order: 0
+---
+填充图,也叫分级统计图,指用一连串首尾闭合的点坐标对来表达的面图层,常用表达区域范围具有分类现象的面状分布。
\ No newline at end of file
diff --git a/examples/raster/basic/data/ndviundefined.be75.tif b/examples/raster/basic/data/ndviundefined.be75.tif
new file mode 100755
index 0000000000..b4205d18e4
Binary files /dev/null and b/examples/raster/basic/data/ndviundefined.be75.tif differ
diff --git a/examples/raster/basic/demo/image.js b/examples/raster/basic/demo/image.js
new file mode 100644
index 0000000000..49ab82e123
--- /dev/null
+++ b/examples/raster/basic/demo/image.js
@@ -0,0 +1,24 @@
+import { Scene } from '@l7/scene';
+import { ImageLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'amap',
+ style: 'light',
+ center: [ 121.268, 30.3628 ],
+ zoom: 13
+});
+
+const layer = new ImageLayer({});
+layer.source(
+ 'https://gw.alipayobjects.com/zos/rmsportal/FnHFeFklTzKDdUESRNDv.jpg',
+ {
+ parser: {
+ type: 'image',
+ extent: [ 121.168, 30.2828, 121.384, 30.4219 ]
+ }
+ }
+);
+scene.on('loaded', () => {
+ scene.addLayer(layer);
+});
diff --git a/examples/raster/basic/demo/meta.json b/examples/raster/basic/demo/meta.json
new file mode 100644
index 0000000000..9a2b724e4a
--- /dev/null
+++ b/examples/raster/basic/demo/meta.json
@@ -0,0 +1,22 @@
+{
+ "title": {
+ "zh": "栅格图层",
+ "en": "Gallery"
+ },
+ "demos": [
+ {
+ "filename": "image.js",
+ "title": "图片",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*ZrCaR53185IAAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "radar.js",
+ "title": "地形",
+ "screenshot": "https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*ZiMnSZlmblIAAAAAAAAAAABkARQnAQ"
+ },
+ {
+ "filename": "light.js",
+ "title": "夜光图"
+ }
+ ]
+}
diff --git a/examples/raster/basic/demo/radar.js b/examples/raster/basic/demo/radar.js
new file mode 100644
index 0000000000..e5b1486ad7
--- /dev/null
+++ b/examples/raster/basic/demo/radar.js
@@ -0,0 +1,24 @@
+import { Scene } from '@l7/scene';
+import { ImageLayer } from '@l7/layers';
+const scene = new Scene({
+ id: 'map',
+ pitch: 0,
+ type: 'amap',
+ style: 'dark',
+ center: [ 115.5268, 34.3628 ],
+ zoom: 7
+});
+
+const layer = new ImageLayer({});
+layer.source(
+ 'https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*8SUaRr7bxNsAAAAAAAAAAABkARQnAQ',
+ {
+ parser: {
+ type: 'image',
+ extent: [ 113.1277263548, 32.3464238863, 118.1365790452, 36.4786759137 ]
+ }
+ }
+);
+scene.on('loaded', () => {
+ scene.addLayer(layer);
+});
diff --git a/examples/raster/basic/index.en.md b/examples/raster/basic/index.en.md
new file mode 100644
index 0000000000..39ed3aaf30
--- /dev/null
+++ b/examples/raster/basic/index.en.md
@@ -0,0 +1,4 @@
+---
+title: Raster Map
+order: 0
+---
diff --git a/examples/raster/basic/index.zh.md b/examples/raster/basic/index.zh.md
new file mode 100644
index 0000000000..29cc71a8e1
--- /dev/null
+++ b/examples/raster/basic/index.zh.md
@@ -0,0 +1,6 @@
+---
+title: 栅格图层
+order: 0
+redirect_from:
+ - /zh/examples/raster/
+---
diff --git a/gatsby-browser.js b/gatsby-browser.js
new file mode 100644
index 0000000000..d8b2a8344b
--- /dev/null
+++ b/gatsby-browser.js
@@ -0,0 +1,9 @@
+
+require('./site/css/demo.css');
+require('./packages/component/src/css/l7.css');
+window.geotiff = require('geotiff/dist/geotiff.bundle.min.js');
+window.scene = require('./packages/scene/src');
+window.layers = require('./packages/layers/src');
+window.component = require('./packages/component/src');
+window.g2 = require('@antv/g2');
+//
diff --git a/gatsby-config.js b/gatsby-config.js
new file mode 100644
index 0000000000..94405ca5e5
--- /dev/null
+++ b/gatsby-config.js
@@ -0,0 +1,147 @@
+module.exports = {
+ plugins: [
+ {
+ resolve: '@antv/gatsby-theme-antv',
+ options: {
+ GATrackingId: 'UA-148148901-7',
+ pathPrefix: '/L7'
+ }
+ }
+ ],
+ siteMetadata: {
+ title: 'L7',
+ description: 'Large-scale WebGL-powered Geospatial data visualization analysis framework',
+ githubUrl: 'https://github.com/antvis/L7',
+ navs: [
+ {
+ slug: 'docs/api',
+ title: {
+ zh: '文档',
+ en: 'Document'
+ },
+ redirect: 'api/l7'
+ },
+ {
+ slug: 'examples',
+ title: {
+ zh: '图表演示',
+ en: 'Examples'
+ },
+ redirect: 'gallery/basic'
+ }
+ // target: '_blank',
+ ],
+ docs: [
+ {
+ slug: 'api/l7',
+ title: {
+ zh: '简介 L7',
+ en: 'Introduction'
+ },
+ order: 0
+ },
+ {
+ slug: 'api/quickstart',
+ title: {
+ zh: '快速入门',
+ en: 'quickstart'
+ },
+ order: 0
+ },
+ {
+ slug: 'api/scene',
+ title: {
+ zh: '场景 Scene',
+ en: 'Scene'
+ },
+ order: 1
+ },
+ {
+ slug: 'api/layer',
+ title: {
+ zh: '图层 Layer',
+ en: 'Layer'
+ },
+ order: 2
+ },
+ {
+ slug: 'api/source',
+ title: {
+ zh: '数据 Source',
+ en: 'Source'
+ },
+ order: 3
+ },
+ {
+ slug: 'api/component',
+ title: {
+ zh: '组件 Component',
+ en: 'Component'
+ },
+ order: 4
+ }
+ ],
+ examples: [
+ {
+ slug: 'gallery',
+ icon: 'gallery',
+ title: {
+ zh: 'Gallery',
+ en: 'Gallery'
+ }
+ },
+ {
+ slug: 'point',
+ icon: 'point',
+ title: {
+ zh: '点图层',
+ en: 'Point Layer'
+ }
+ },
+ {
+ slug: 'line',
+ icon: 'line',
+ title: {
+ zh: '线图层',
+ en: 'Line Layer'
+ }
+ },
+ {
+ slug: 'polygon',
+ icon: 'polygon',
+ title: {
+ zh: '面图层',
+ en: 'Polygon Layer'
+ }
+ },
+ {
+ slug: 'heatmap',
+ icon: 'heatmap',
+ title: {
+ zh: '热力图',
+ en: 'HeatMap Layer'
+ },
+ order: 5
+ },
+ {
+ slug: 'raster',
+ icon: 'raster',
+ title: {
+ zh: '栅格图层',
+ en: 'Raster Layer'
+ }
+ },
+ {
+ slug: 'tutorial',
+ icon: 'map',
+ title: {
+ zh: '教程示例',
+ en: 'Tutorial demo'
+ }
+ }
+ ],
+ playground: {
+ container: ''
+ }
+ }
+};
diff --git a/gatsby-node.js b/gatsby-node.js
new file mode 100644
index 0000000000..6c3b894361
--- /dev/null
+++ b/gatsby-node.js
@@ -0,0 +1,16 @@
+const path = require('path');
+exports.onCreateWebpackConfig = ({ getConfig }) => {
+ const config = getConfig();
+ config.resolve.extensions.push('.glsl');
+ config.resolve.alias = {
+ ...config.resolve.alias,
+ '@l7/core': path.resolve(__dirname, 'packages/core/src'),
+ '@l7/component': path.resolve(__dirname, 'packages/component/src'),
+ '@l7/layers': path.resolve(__dirname, 'packages/layers/src'),
+ '@l7/maps': path.resolve(__dirname, 'packages/maps/src'),
+ '@l7/renderer': path.resolve(__dirname, 'packages/renderer/src'),
+ '@l7/scene': path.resolve(__dirname, 'packages/scene/src'),
+ '@l7/source': path.resolve(__dirname, 'packages/source/src'),
+ '@l7/utils': path.resolve(__dirname, 'packages/utils/src')
+ };
+};
diff --git a/jest.config.js b/jest.config.js
new file mode 100644
index 0000000000..5eb81a6ac9
--- /dev/null
+++ b/jest.config.js
@@ -0,0 +1,42 @@
+module.exports = {
+ preset: 'ts-jest',
+ clearMocks: true,
+ collectCoverageFrom: [
+ 'packages/**/*.{ts,tsx}',
+ '!**/node_modules/**',
+ '!**/__tests__/**',
+ '!**/*.d.ts'
+ ],
+ coverageDirectory: 'coverage',
+ coverageReporters: [ 'text', 'clover' ],
+ coverageThreshold: {
+ global: {
+ branches: 80,
+ functions: 80,
+ lines: 80,
+ statements: 80
+ }
+ },
+ // globals: {
+ // 'ts-jest': {
+ // // @see https://github.com/kulshekhar/ts-jest/issues/933#issuecomment-479821844
+ // babelConfig: require('./babel.config.js'),
+ // },
+ // },
+ moduleFileExtensions: [ 'ts', 'tsx', 'js' ],
+ modulePathIgnorePatterns: [ 'dist' ],
+ moduleNameMapper: {
+ '@l7/(.+)$': 'packages/$1/src'
+ },
+ notify: true,
+ notifyMode: 'always',
+ roots: [ 'packages' ],
+ testMatch: [ '**/__tests__/*.spec.+(ts|tsx|js)', '**/*.test.+(ts|tsx|js)', '**/__tests__/*/*.spec.+(ts|tsx|js)' ],
+ transform: {
+ // '^.+\\.(ts|tsx)$': 'ts-jest',
+ // @see https://github.com/kulshekhar/ts-jest/issues/1130
+ '^.+\\.(ts|tsx)$': 'babel-jest'
+ },
+ setupFilesAfterEnv: [ 'jest/setupTests.ts' ],
+ snapshotSerializers: [ 'enzyme-to-json/serializer' ]
+};
diff --git a/jest/setupTests.ts b/jest/setupTests.ts
new file mode 100644
index 0000000000..10bb359f03
--- /dev/null
+++ b/jest/setupTests.ts
@@ -0,0 +1,5 @@
+import Enzyme from 'enzyme';
+import Adapter from 'enzyme-adapter-react-16';
+import 'jest-styled-components';
+
+Enzyme.configure({ adapter: new Adapter() });
diff --git a/lerna.json b/lerna.json
new file mode 100644
index 0000000000..9d523790c5
--- /dev/null
+++ b/lerna.json
@@ -0,0 +1,22 @@
+{
+ "packages": [
+ "packages/*"
+ ],
+ "command": {
+ "publish": {
+ "ignoreChanges": ["*.md"],
+ "allowBranch": [
+ "master",
+ "develop",
+ "next"
+ ],
+ "message": "chore: publish"
+ }
+ },
+ "version": "0.0.1",
+ "npmClient": "yarn",
+ "useWorkspaces": true,
+ "publishConfig": {
+ "access": "public"
+ }
+}
\ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644
index 0000000000..0bfd8c2720
--- /dev/null
+++ b/package.json
@@ -0,0 +1,158 @@
+{
+ "private": true,
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/antvis/L7"
+ },
+ "devDependencies": {
+ "@antv/g2": "^3.5.9",
+ "@antv/gatsby-theme-antv": "^0.9.52",
+ "@babel/cli": "^7.6.4",
+ "@babel/core": "^7.6.4",
+ "@babel/plugin-proposal-decorators": "^7.6.0",
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.4.4",
+ "@babel/plugin-proposal-optional-chaining": "^7.6.0",
+ "@babel/preset-env": "^7.5.5",
+ "@babel/preset-react": "^7.0.0",
+ "@babel/preset-typescript": "^7.3.3",
+ "@commitlint/cli": "^8.1.0",
+ "@commitlint/config-conventional": "^8.1.0",
+ "@rollup/plugin-alias": "^2.2.0",
+ "@rollup/plugin-json": "^4.0.0",
+ "@storybook/addon-actions": "^5.1.9",
+ "@storybook/addon-console": "^1.2.1",
+ "@storybook/addon-info": "^5.1.9",
+ "@storybook/addon-knobs": "^5.1.9",
+ "@storybook/addon-notes": "^5.1.9",
+ "@storybook/addon-storysource": "^5.1.11",
+ "@storybook/react": "^5.1.9",
+ "@types/dat.gui": "^0.7.1",
+ "@types/enzyme": "^3.1.14",
+ "@types/enzyme-adapter-react-16": "^1.0.3",
+ "@types/gl": "^4.1.0",
+ "@types/jest": "^24.0.18",
+ "@types/node": "^12.7.3",
+ "@types/storybook__react": "^4.0.2",
+ "@types/supercluster": "^5.0.1",
+ "awesome-typescript-loader": "^5.2.1",
+ "babel-jest": "^24.9.0",
+ "babel-loader": "^8.0.6",
+ "babel-plugin-const-enum": "^0.0.2",
+ "babel-plugin-css-modules-transform": "^1.6.2",
+ "babel-plugin-inline-import": "^3.0.0",
+ "babel-plugin-inline-webgl-constants": "^1.0.1",
+ "babel-plugin-lodash": "^3.3.4",
+ "babel-plugin-transform-postcss": "^0.3.0",
+ "babel-preset-gatsby": "^0.2.20",
+ "clean-webpack-plugin": "^0.1.19",
+ "commitizen": "^4.0.3",
+ "copy-webpack-plugin": "^4.5.2",
+ "coveralls": "^3.0.7",
+ "css-loader": "^3.2.0",
+ "cz-conventional-changelog": "^3.0.2",
+ "dat.gui": "^0.7.2",
+ "enzyme": "^3.6.0",
+ "enzyme-adapter-react-16": "^1.5.0",
+ "enzyme-to-json": "^3.0.0-beta6",
+ "eslint-config-egg": "^7.5.1",
+ "eslint-plugin-html": "^6.0.0",
+ "gatsby": "^2.17.7",
+ "gatsby-plugin-google-analytics": "^2.1.27",
+ "gatsby-remark-prettier": "^1.0.0",
+ "geotiff": "^1.0.0-beta.6",
+ "gh-pages": "^2.1.1",
+ "gl": "^4.4.0",
+ "glsl-minifier": "^0.0.13",
+ "html-webpack-plugin": "^3.2.0",
+ "husky": "^3.0.9",
+ "jest": "^24.9.0",
+ "jest-styled-components": "^6.2.1",
+ "lerna": "^3.16.4",
+ "lint-staged": "^9.2.4",
+ "node-sass": "^4.12.0",
+ "npm-run-all": "^4.1.5",
+ "postcss": "^7.0.18",
+ "postcss-plugin": "^1.0.0",
+ "prettier": "^1.19.1",
+ "raw-loader": "^1.0.0",
+ "react": "^16.8.6",
+ "react-docgen-typescript-loader": "^3.1.0",
+ "react-dom": "^16.12.0",
+ "react-i18next": "^11.0.1",
+ "rimraf": "^2.6.2",
+ "rollup": "^1.27.0",
+ "rollup-plugin-analyzer": "^3.2.2",
+ "rollup-plugin-babel": "^4.3.3",
+ "rollup-plugin-commonjs": "^10.1.0",
+ "rollup-plugin-node-resolve": "^5.2.0",
+ "rollup-plugin-terser": "^5.1.2",
+ "rollup-pluginutils": "^2.8.2",
+ "sass-loader": "^7.1.0",
+ "style-loader": "^1.0.0",
+ "styled-components": "^3.4.6",
+ "stylelint": "^9.5.0",
+ "stylelint-config-recommended": "^2.1.0",
+ "stylelint-config-standard": "^18.2.0",
+ "stylelint-config-styled-components": "^0.1.1",
+ "stylelint-processor-styled-components": "^1.3.2",
+ "ts-jest": "^24.0.2",
+ "tslint": "^5.11.0",
+ "tslint-config-prettier": "^1.15.0",
+ "tslint-plugin-prettier": "^1.3.0",
+ "tslint-react": "^3.6.0",
+ "typescript": "^3.7.0-beta",
+ "webpack": "^4.17.1",
+ "webpack-cli": "^3.1.0",
+ "webpack-dev-server": "^3.1.7",
+ "webpack-merge": "^4.1.4",
+ "worker-loader": "^2.0.0"
+ },
+ "scripts": {
+ "start": "NODE_ENV=site npm run site:develop",
+ "build_site": "NODE_ENV=site npm run site:build",
+ "site:develop": "gatsby develop --open -H 0.0.0.0",
+ "site:build": "npm run site:clean && NODE_ENV=site gatsby build --prefix-paths",
+ "site:clean": "gatsby clean",
+ "site:deploy": "NODE_ENV=site npm run site:build && gh-pages -d public",
+ "site:publish": "gh-pages -d public",
+ "lint-fix:examples": "prettier --write examples/**/**/*.js",
+ "lint:site": "eslint examples/**/**/*.js --fix",
+ "prebuild": "run-p tsc lint",
+ "build": "yarn clean && lerna run build",
+ "todo:postbuild": "yarn build:declarations",
+ "fix": "run-p -c 'lint:ts-* --fix'",
+ "lint:css": "stylelint 'packages/**/*.js{,x}'",
+ "lint:ts-prod": "tslint --config tslint.prod.json 'packages/**/*.ts{,x}'",
+ "lint:ts-test": "tslint --config tslint.test.json 'packages/**/*.{spec,story}.ts{,x}'",
+ "lint:ts": "run-p -c lint:ts-*",
+ "lint": "run-p -c lint:*",
+ "commit": "git-cz",
+ "version": "lerna version --conventional-commits",
+ "prerelease": "yarn build",
+ "release": "lerna publish from-package --registry https://registry.npmjs.com/",
+ "storybook": "start-storybook -p 6006",
+ "test": "BABEL_ENV=test jest",
+ "coveralls": "jest --coverage && cat ./tests/coverage/lcov.info | coveralls",
+ "tsc": "tsc",
+ "build:declarations": "lerna exec --stream --no-bail 'tsc --project ./tsconfig.build.json'",
+ "watch": "yarn clean && lerna exec --parallel 'BABEL_ENV=cjs babel --watch src --root-mode upward --out-dir lib --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments'",
+ "bundle": "BABEL_ENV=bundle node_modules/.bin/rollup -c ./build/rollup.config.js",
+ "glsl-minify": "node_modules/.bin/glsl-minifier -i ./build/example.frag -o ./build/example.min.frag",
+ "clean": "lerna run clean"
+ },
+ "workspaces": [
+ "packages/*",
+ "stories/*"
+ ],
+ "husky": {
+ "hooks": {
+ "pre-commit": "npm run lint",
+ "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
+ }
+ },
+ "config": {
+ "commitizen": {
+ "path": "cz-conventional-changelog"
+ }
+ }
+}
diff --git a/packages/component/.gitignore b/packages/component/.gitignore
new file mode 100644
index 0000000000..49c199b6ab
--- /dev/null
+++ b/packages/component/.gitignore
@@ -0,0 +1,3 @@
+lib
+es
+dist
diff --git a/packages/component/package.json b/packages/component/package.json
new file mode 100644
index 0000000000..ad36ea2dc2
--- /dev/null
+++ b/packages/component/package.json
@@ -0,0 +1,39 @@
+{
+ "name": "@l7/component",
+ "version": "0.0.1",
+ "description": "",
+ "main": "lib/index.js",
+ "module": "es/index.js",
+ "types": "es/index.d.ts",
+ "sideEffects": true,
+ "files": [
+ "lib",
+ "es",
+ "README.md"
+ ],
+ "scripts": {
+ "tsc": "tsc --project tsconfig.build.json",
+ "clean": "rimraf dist; rimraf es; rimraf lib;",
+ "build": "run-p build:*",
+ "build:cjs": "BABEL_ENV=cjs babel src --root-mode upward --out-dir lib --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
+ "build:esm": "BABEL_ENV=esm babel src --root-mode upward --out-dir es --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
+ "watch": "BABEL_ENV=cjs babel src --watch --root-mode upward --out-dir lib --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
+ "lint:ts": "run-p -c lint:ts-*",
+ "test": "jest"
+ },
+ "author": "lzxue",
+ "license": "ISC",
+ "dependencies": {
+ "@l7/core": "0.0.1",
+ "@l7/utils": "0.0.1",
+ "@turf/distance": "^6.0.1",
+ "eventemitter3": "^4.0.0",
+ "inversify": "^5.0.1",
+ "inversify-inject-decorators": "^3.1.0",
+ "inversify-logging": "^0.2.1"
+ },
+ "gitHead": "0563f357f3a07c099bf1ffa9350e6fa3c88353ae",
+ "publishConfig": {
+ "access": "public"
+ }
+}
diff --git a/packages/component/src/control/BaseControl.ts b/packages/component/src/control/BaseControl.ts
new file mode 100644
index 0000000000..6911adb15a
--- /dev/null
+++ b/packages/component/src/control/BaseControl.ts
@@ -0,0 +1,109 @@
+import {
+ IControlService,
+ ILayerService,
+ IMapService,
+ IRendererService,
+ lazyInject,
+ TYPES,
+} from '@l7/core';
+import { DOM } from '@l7/utils';
+import { EventEmitter } from 'eventemitter3';
+
+export enum PositionType {
+ 'TOPRIGHT' = 'topright',
+ 'TOPLEFT' = 'topleft',
+ 'BOTTOMRIGHT' = 'bottomright',
+ 'BOTTOMLEFT' = 'bottomleft',
+}
+export type PositionName =
+ | 'topright'
+ | 'topleft'
+ | 'bottomright'
+ | 'bottomleft';
+export interface IControlOption {
+ position: PositionName;
+ [key: string]: any;
+}
+export default class Control extends EventEmitter {
+ public controlOption: IControlOption;
+ protected mapsService: IMapService;
+ protected container: HTMLElement;
+
+ @lazyInject(TYPES.IRendererService)
+ protected readonly renderService: IRendererService;
+ @lazyInject(TYPES.ILayerService)
+ protected readonly layerService: ILayerService;
+ @lazyInject(TYPES.IControlService)
+ private readonly controlService: IControlService;
+
+ private isShow: boolean;
+
+ constructor(cfg?: Partial) {
+ super();
+ this.controlOption = {
+ ...this.getDefault(),
+ ...(cfg || {}),
+ };
+ }
+ public getDefault() {
+ return {
+ position: PositionType.TOPRIGHT,
+ };
+ }
+ public setPosition(position: PositionName) {
+ const controlService = this.controlService;
+ if (controlService) {
+ controlService.removeControl(this);
+ }
+ this.controlOption.position = position;
+ if (controlService) {
+ controlService.addControl(this, this.mapsService);
+ }
+ return this;
+ }
+ public addTo(mapService: IMapService) {
+ this.remove();
+ this.isShow = true;
+ this.mapsService = mapService;
+ this.container = this.onAdd(mapService);
+ const container = this.container;
+ const pos = this.controlOption.position;
+ const corner = this.controlService.controlCorners[pos];
+ DOM.addClass(container, 'l7-control');
+
+ if (pos.indexOf('bottom') !== -1) {
+ corner.insertBefore(container, corner.firstChild);
+ } else {
+ corner.appendChild(container);
+ }
+ return this;
+ }
+ public onAdd(Map: IMapService): HTMLElement {
+ throw new Error('Method not implemented.');
+ }
+ public hide() {
+ const container = this.container;
+ DOM.addClass(container, 'l7-control-hide');
+ this.isShow = false;
+ }
+ public show() {
+ const container = this.container;
+ DOM.removeClass(container, 'l7-control-hide');
+ this.isShow = true;
+ }
+ public remove() {
+ if (!this.mapsService) {
+ return this;
+ }
+ DOM.remove(this.container);
+ }
+ public _refocusOnMap(e: MouseEvent) {
+ // if map exists and event is not a keyboard event
+ if (this.mapsService && e && e.screenX > 0 && e.screenY > 0) {
+ const container = this.mapsService.getContainer();
+ if (container !== null) {
+ container.focus();
+ }
+ }
+ }
+}
diff --git a/packages/component/src/control/layer.ts b/packages/component/src/control/layer.ts
new file mode 100644
index 0000000000..05ae2c5b05
--- /dev/null
+++ b/packages/component/src/control/layer.ts
@@ -0,0 +1,312 @@
+import { IMapService } from '@l7/core';
+import { bindAll, DOM, lnglatDistance } from '@l7/utils';
+import Control, {
+ IControlOption,
+ PositionName,
+ PositionType,
+} from './BaseControl';
+export interface ILayerControlOption extends IControlOption {
+ collapsed: boolean;
+ autoZIndex: boolean;
+ hideSingleBase: boolean;
+ sortLayers: boolean;
+
+ sortFunction: (...args: any[]) => any;
+}
+interface IInputItem extends HTMLInputElement {
+ layerId: string;
+}
+export default class Layers extends Control {
+ private layerControlInputs: any[];
+ private layers: any[];
+ private lastZIndex: number;
+ private handlingClick: boolean;
+ private layersLink: HTMLElement;
+ private baseLayersList: HTMLElement;
+ private separator: HTMLElement;
+ private overlaysList: HTMLElement;
+ private form: HTMLElement;
+
+ constructor(cfg: Partial) {
+ super(cfg);
+ this.layerControlInputs = [];
+ this.layers = [];
+ this.lastZIndex = 0;
+ this.handlingClick = false;
+ const { baseLayers = {}, overlayers = {} } = this.controlOption;
+
+ Object.keys(baseLayers).forEach((name: string, index: number) => {
+ this.addLayer(baseLayers[name], name, false);
+ });
+ Object.keys(overlayers).forEach((name: any, index: number) => {
+ this.addLayer(overlayers[name], name, true);
+ });
+ bindAll(
+ [
+ 'checkDisabledLayers',
+ 'onLayerChange',
+ 'collapse',
+ 'extend',
+ 'expand',
+ 'onInputClick',
+ ],
+ this,
+ );
+ }
+
+ public getDefault() {
+ return {
+ collapsed: true,
+ position: PositionType.TOPRIGHT,
+ autoZIndex: true,
+ hideSingleBase: false,
+ sortLayers: false,
+ };
+ }
+ public onAdd(MapService: IMapService) {
+ this.initLayout();
+ this.update();
+ this.mapsService.on('zoomend', this.checkDisabledLayers);
+ this.layers.forEach((layerItem) => {
+ layerItem.layer.on('remove', this.onLayerChange);
+ layerItem.layer.on('add', this.onLayerChange);
+ });
+ return this.container;
+ }
+
+ public addVisualLayer(layer: any, name: string | number) {
+ this.addLayer(layer, name, true);
+ return this.mapsService ? this.update() : this;
+ }
+ public expand() {
+ const { height } = this.renderService.getViewportSize();
+ DOM.addClass(this.container, 'l7-control-layers-expanded');
+ this.form.style.height = 'null';
+ const acceptableHeight = height - (this.container.offsetTop + 50);
+ if (acceptableHeight < this.form.clientHeight) {
+ DOM.addClass(this.form, 'l7-control-layers-scrollbar');
+ this.form.style.height = acceptableHeight + 'px';
+ } else {
+ DOM.removeClass(this.form, 'l7-control-layers-scrollbar');
+ }
+ this.checkDisabledLayers();
+ return this;
+ }
+
+ public collapse() {
+ DOM.removeClass(this.container, 'l7-control-layers-expanded');
+ return this;
+ }
+
+ private initLayout() {
+ const className = 'l7-control-layers';
+ const container = (this.container = DOM.create('div', className));
+ const { collapsed } = this.controlOption;
+
+ // makes this work on IE touch devices by stopping it from firing a mouseout event when the touch is released
+ container.setAttribute('aria-haspopup', 'true');
+
+ const form = (this.form = DOM.create(
+ 'form',
+ className + '-list',
+ ) as HTMLElement);
+
+ // if (collapsed) {
+ // this.mapsService.on('click', this.collapse);
+ // container.addEventListener('mouseenter', this.expand);
+ // container.addEventListener('mouseleave', this.collapse);
+ // }
+
+ this.layersLink = DOM.create('a', className + '-toggle', container);
+ const link = this.layersLink;
+ // link.href = '#';
+ link.title = 'Layers';
+ if (!collapsed) {
+ this.expand();
+ }
+ this.expand();
+
+ this.baseLayersList = DOM.create('div', className + '-base', form);
+ this.separator = DOM.create('div', className + '-separator', form);
+ this.overlaysList = DOM.create('div', className + '-overlays', form);
+ container.appendChild(form);
+ }
+
+ private update() {
+ if (!this.container) {
+ return this;
+ }
+
+ DOM.empty(this.baseLayersList);
+ DOM.empty(this.overlaysList);
+
+ this.layerControlInputs = [];
+ let baseLayersPresent;
+ let overlaysPresent;
+ let i;
+ let obj;
+ let baseLayersCount = 0;
+
+ for (i = 0; i < this.layers.length; i++) {
+ obj = this.layers[i];
+ this.addItem(obj);
+ overlaysPresent = overlaysPresent || obj.overlay;
+ baseLayersPresent = baseLayersPresent || !obj.overlay;
+ baseLayersCount += !obj.overlay ? 1 : 0;
+ }
+
+ // Hide base layers section if there's only one layer.
+ if (this.controlOption.hideSingleBase) {
+ baseLayersPresent = baseLayersPresent && baseLayersCount > 1;
+ this.baseLayersList.style.display = baseLayersPresent ? '' : 'none';
+ }
+
+ this.separator.style.display =
+ overlaysPresent && baseLayersPresent ? '' : 'none';
+
+ return this;
+ }
+
+ private checkDisabledLayers() {
+ const inputs = this.layerControlInputs;
+ let input: IInputItem;
+ let layer;
+ const zoom = this.mapsService.getZoom();
+
+ for (let i = inputs.length - 1; i >= 0; i--) {
+ input = inputs[i];
+ layer = this.layerService.getLayer(input.layerId);
+ if (layer) {
+ input.disabled = layer.visible && !layer.isVisible();
+ }
+ }
+ }
+
+ private addLayer(layer: any, name: string | number, overlay: boolean) {
+ if (this.mapsService) {
+ layer.on('add', this.onLayerChange);
+ layer.on('remove', this.onLayerChange);
+ }
+ this.layers.push({
+ layer,
+ name,
+ overlay,
+ });
+ const { sortLayers, sortFunction, autoZIndex } = this.controlOption;
+ if (sortLayers) {
+ this.layers.sort((a, b) => {
+ return sortFunction(a.layer, b.layer, a.name, b.name);
+ });
+ }
+
+ if (autoZIndex && layer.setZIndex) {
+ this.lastZIndex++;
+ layer.setZIndex(this.lastZIndex);
+ }
+
+ this.expandIfNotCollapsed();
+ }
+
+ private expandIfNotCollapsed() {
+ if (this.mapsService && !this.controlOption.collapsed) {
+ this.expand();
+ }
+ return this;
+ }
+
+ private onLayerChange(e: any) {
+ if (!this.handlingClick) {
+ this.update();
+ }
+
+ const obj = this.layerService.getLayer(e.target.layerId);
+
+ // @ts-ignore
+ const type = obj?.overlay
+ ? e.type === 'add'
+ ? 'overlayadd'
+ : 'overlayremove'
+ : e.type === 'add'
+ ? 'baselayerchange'
+ : null;
+
+ if (type) {
+ this.emit(type, obj); // TODO:图
+ }
+ }
+
+ private createRadioElement(name: string, checked: boolean): ChildNode {
+ const radioHtml =
+ '';
+
+ const radioFragment = document.createElement('div');
+ radioFragment.innerHTML = radioHtml;
+
+ return radioFragment.firstChild as ChildNode;
+ }
+
+ private addItem(obj: any) {
+ const label = document.createElement('label');
+ const checked =
+ this.layerService.getLayer(obj.layer.id) && obj.layer.isVisible();
+ let input: IInputItem;
+
+ if (obj.overlay) {
+ input = document.createElement('input') as IInputItem;
+ input.type = 'checkbox';
+ input.className = 'l7-control-layers-selector';
+ input.defaultChecked = checked;
+ } else {
+ input = this.createRadioElement('l7-base-layers', checked) as IInputItem;
+ }
+ this.layerControlInputs.push(input);
+ input.layerId = obj.layer.id;
+ input.addEventListener('click', this.onInputClick);
+
+ const name = document.createElement('span');
+ name.innerHTML = ' ' + obj.name;
+
+ const holder = document.createElement('div');
+
+ label.appendChild(holder);
+ holder.appendChild(input);
+ holder.appendChild(name);
+
+ const container = obj.overlay ? this.overlaysList : this.baseLayersList;
+ container.appendChild(label);
+
+ this.checkDisabledLayers();
+ return label;
+ }
+
+ private onInputClick() {
+ const inputs = this.layerControlInputs;
+ let input;
+ let layer;
+ const addedLayers = [];
+ const removedLayers = [];
+ this.handlingClick = true;
+ for (let i = inputs.length - 1; i >= 0; i--) {
+ input = inputs[i];
+ layer = this.layerService.getLayer(input.layerId);
+
+ if (input.checked) {
+ addedLayers.push(layer);
+ } else if (!input.checked) {
+ removedLayers.push(layer);
+ }
+ }
+ removedLayers.forEach((l: any) => {
+ l.hide();
+ });
+ addedLayers.forEach((l: any) => {
+ l.show();
+ });
+
+ this.handlingClick = false;
+ }
+}
diff --git a/packages/component/src/control/logo.ts b/packages/component/src/control/logo.ts
new file mode 100644
index 0000000000..75b07eda59
--- /dev/null
+++ b/packages/component/src/control/logo.ts
@@ -0,0 +1,25 @@
+import { IMapService } from '@l7/core';
+import { bindAll, DOM } from '@l7/utils';
+import Control, { IControlOption, PositionType } from './BaseControl';
+export default class Logo extends Control {
+ public getDefault() {
+ return {
+ position: PositionType.BOTTOMLEFT,
+ };
+ }
+ public onAdd(MapService: IMapService) {
+ const className = 'l7-control-logo';
+ const container = DOM.create('div', className);
+ const anchor: HTMLLinkElement = DOM.create(
+ 'a',
+ 'l7-ctrl-logo',
+ ) as HTMLLinkElement;
+ anchor.target = '_blank';
+ anchor.rel = 'noopener nofollow';
+ anchor.href = 'https://antv.alipay.com/l7';
+ anchor.setAttribute('aria-label', 'AntV logo');
+ anchor.setAttribute('rel', 'noopener nofollow');
+ container.appendChild(anchor);
+ return container;
+ }
+}
diff --git a/packages/component/src/control/scale.ts b/packages/component/src/control/scale.ts
new file mode 100644
index 0000000000..345f1ae220
--- /dev/null
+++ b/packages/component/src/control/scale.ts
@@ -0,0 +1,104 @@
+import { IMapService } from '@l7/core';
+import { bindAll, DOM, lnglatDistance } from '@l7/utils';
+import Control, { IControlOption, PositionType } from './BaseControl';
+export interface IScaleControlOption extends IControlOption {
+ maxWidth: number;
+ metric: boolean;
+ updateWhenIdle: boolean;
+ imperial: boolean;
+}
+export default class Scale extends Control {
+ private mScale: HTMLElement;
+ private iScale: HTMLElement;
+ constructor(cfg?: Partial) {
+ super(cfg);
+ bindAll(['update'], this);
+ }
+
+ public getDefault() {
+ return {
+ position: PositionType.BOTTOMLEFT,
+ maxWidth: 100,
+ metric: true,
+ updateWhenIdle: false,
+ imperial: false,
+ };
+ }
+
+ public onAdd(MapService: IMapService) {
+ const className = 'l7-control-scale';
+ const container = DOM.create('div', className);
+ this.addScales(className + '-line', container);
+ const { updateWhenIdle } = this.controlOption;
+ // TODO: 高德地图和MapBox地图事件不一致问题
+ this.mapsService.on(updateWhenIdle ? 'moveend' : 'mapmove', this.update);
+ this.update();
+
+ return container;
+ }
+ public onRemove(MapService: IMapService) {
+ const { updateWhenIdle } = this.controlOption;
+ this.mapsService.off(updateWhenIdle ? 'moveend' : 'mapmove', this.update);
+ }
+ public update() {
+ const mapsService = this.mapsService;
+ const { maxWidth } = this.controlOption;
+ const y = mapsService.getSize()[1] / 2;
+
+ const p1 = mapsService.containerToLngLat([0, y]);
+ const p2 = mapsService.containerToLngLat([maxWidth, y]);
+ const maxMeters = lnglatDistance([p1.lng, p1.lat], [p2.lng, p2.lat]);
+ this.updateScales(maxMeters);
+ }
+ public updateScales(maxMeters: number) {
+ const { metric, imperial } = this.controlOption;
+ if (metric && maxMeters) {
+ this.updateMetric(maxMeters);
+ }
+ if (imperial && maxMeters) {
+ this.updateImperial(maxMeters);
+ }
+ }
+ private updateMetric(maxMeters: number) {
+ const meters = this.getRoundNum(maxMeters);
+ const label = meters < 1000 ? meters + ' m' : meters / 1000 + ' km';
+ this.updateScale(this.mScale, label, meters / maxMeters);
+ }
+ private updateImperial(maxMeters: number) {
+ const maxFeet = maxMeters * 3.2808399;
+ let maxMiles: number;
+ let miles: number;
+ let feet: number;
+
+ if (maxFeet > 5280) {
+ maxMiles = maxFeet / 5280;
+ miles = this.getRoundNum(maxMiles);
+ this.updateScale(this.iScale, miles + ' mi', miles / maxMiles);
+ } else {
+ feet = this.getRoundNum(maxFeet);
+ this.updateScale(this.iScale, feet + ' ft', feet / maxFeet);
+ }
+ }
+ private updateScale(scale: HTMLElement, text: string, ratio: number) {
+ const { maxWidth } = this.controlOption;
+ scale.style.width = Math.round(maxWidth * ratio) + 'px';
+ scale.innerHTML = text;
+ }
+ private getRoundNum(num: number) {
+ const pow10 = Math.pow(10, (Math.floor(num) + '').length - 1);
+ let d = num / pow10;
+
+ d = d >= 10 ? 10 : d >= 5 ? 5 : d >= 3 ? 3 : d >= 2 ? 2 : 1;
+
+ return pow10 * d;
+ }
+ private addScales(className: string, container: HTMLElement) {
+ const { metric, imperial } = this.controlOption;
+ if (metric) {
+ this.mScale = DOM.create('div', className, container);
+ }
+ if (imperial) {
+ this.iScale = DOM.create('div', className, container);
+ }
+ }
+}
diff --git a/packages/component/src/control/zoom.ts b/packages/component/src/control/zoom.ts
new file mode 100644
index 0000000000..d5b64c8136
--- /dev/null
+++ b/packages/component/src/control/zoom.ts
@@ -0,0 +1,111 @@
+import { IMapService } from '@l7/core';
+import { bindAll, DOM } from '@l7/utils';
+import Control, { IControlOption, PositionType } from './BaseControl';
+export interface IZoomControlOption extends IControlOption {
+ zoomInText: string;
+ zoomInTitle: string;
+ zoomOutText: string;
+ zoomOutTitle: string;
+}
+export default class Zoom extends Control {
+ private disabled: boolean;
+ private zoomInButton: HTMLElement;
+ private zoomOutButton: HTMLElement;
+
+ constructor(cfg?: Partial) {
+ super(cfg);
+ bindAll(['updateDisabled', 'zoomIn', 'zoomOut'], this);
+ }
+ public getDefault() {
+ return {
+ position: PositionType.TOPLEFT,
+ zoomInText: '+',
+ zoomInTitle: 'Zoom in',
+ zoomOutText: '−',
+ zoomOutTitle: 'Zoom out',
+ };
+ }
+
+ public onAdd(MapService: IMapService) {
+ const zoomName = 'l7-control-zoom';
+ const container = DOM.create('div', zoomName + ' l7-bar');
+
+ this.zoomInButton = this.createButton(
+ this.controlOption.zoomInText,
+ this.controlOption.zoomInTitle,
+ zoomName + '-in',
+ container,
+ this.zoomIn,
+ );
+ this.zoomOutButton = this.createButton(
+ this.controlOption.zoomOutText,
+ this.controlOption.zoomOutTitle,
+ zoomName + '-out',
+ container,
+ this.zoomOut,
+ );
+ this.mapsService.on('zoomend', this.updateDisabled);
+ this.mapsService.on('zoomchange', this.updateDisabled);
+ this.updateDisabled();
+ return container;
+ }
+
+ public onRemove() {
+ this.mapsService.off('zoomend', this.updateDisabled);
+ this.mapsService.off('zoomchange', this.updateDisabled);
+ }
+
+ public disable() {
+ this.disabled = true;
+ this.updateDisabled();
+ return this;
+ }
+
+ public enable() {
+ this.disabled = false;
+ this.updateDisabled();
+ return this;
+ }
+
+ private zoomIn() {
+ if (
+ !this.disabled &&
+ this.mapsService.getZoom() < this.mapsService.getMaxZoom()
+ ) {
+ this.mapsService.zoomIn();
+ }
+ }
+ private zoomOut() {
+ if (
+ !this.disabled &&
+ this.mapsService.getZoom() > this.mapsService.getMinZoom()
+ ) {
+ this.mapsService.zoomOut();
+ }
+ }
+ private createButton(
+ html: string,
+ tile: string,
+ className: string,
+ container: HTMLElement,
+ fn: (...arg: any[]) => any,
+ ) {
+ const link = DOM.create('a', className, container) as HTMLLinkElement;
+ link.innerHTML = html;
+ link.href = '#';
+ link.addEventListener('click', fn);
+ return link;
+ }
+ private updateDisabled() {
+ const mapsService = this.mapsService;
+ const className = 'l7-disabled';
+ DOM.removeClass(this.zoomInButton, className);
+ DOM.removeClass(this.zoomOutButton, className);
+ if (this.disabled || mapsService.getZoom() <= mapsService.getMinZoom()) {
+ DOM.addClass(this.zoomOutButton, className);
+ }
+ if (this.disabled || mapsService.getZoom() >= mapsService.getMaxZoom()) {
+ DOM.addClass(this.zoomInButton, className);
+ }
+ }
+}
diff --git a/packages/component/src/css/l7.css b/packages/component/src/css/l7.css
index 0c563176b0..026705a4a8 100644
--- a/packages/component/src/css/l7.css
+++ b/packages/component/src/css/l7.css
@@ -359,7 +359,11 @@
border-radius: 5px;
}
.l7-control-layers-toggle {
+<<<<<<< HEAD
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAkCAYAAAGf7Ah0AAAABGdBTUEAALGPC/xhBQAABzdJREFUWAnVV3lslEUUn/l2F0tpwdAih1HEqCReDcphNCo1EkgFkXa5PNpuC0Fo2e7Wgko8KiaKWrvbK5672xYFpNtiRRuNiY0aURA14BGviBcVlaKltVa6+42/N9v5Mrtt05rwj/PHzjt+8743b+a9N8vYwKgMNlUQyemnMtAkaJajvb3dToQSGp8e6boopkr4VYgEMYwO0vhCTfMVzBcMf8bx086YyODcuM80zTqp9IWat+7evW8sMdIxIqqCLa6oiAaJpuEtcBqcc2HEWMZ0JclgZR/Nchf++ubrzKjJSguXS4tVjXvPjfb3/UAAacGTn/MOMb7QnjNpNqP/bKZ50Ai0tqYmCi0n4zbM+W+lBc7JBOa+QPhDwcTsxJXE2+32edKCL9h8hRDmRzpIOWydAylhrcMfDN+ugBRKSdP3KwPhsFJIPth02FISIYQwYsDYcVfWhy/Bon4JgumffMGmiGTwQ0B/sHml4q2ZFAD3WQIQVhx0IdFw8B189lolN+w8w5PnjPmlhJgtA8/vfn3iye7u3yGzDljDxZEG4097Cp3rSSjBtMHunp6vFR+HHoIxmbgTe1xHKssDHecLNFUjMzbqMs5ZlHF7ute17M84+TMHDzr+OvR9JwKdCms9yRkzJq6bPTsWXh05QOPUN+PUHyPWMPhm6UHd7vaUohWZPSRE8OqxpTyibQa/qcTlbEP0vwF7AWUAT3JM9dy69FfSNza+MU4awNE8iQtXSkJuGLleV852ov2h5jkwVof0mUs8aO4LhTuYYFOAjExId0wcFIPahpaLTkWiX9ECfHG/sLNi1i8+HODfgLFFRI96+INNi0cNTgTS1obKQh03aAuk9DeELzcj4pACYivvwvXrFK/PcQZiQWo+hmidpYMUjQC7EOB6xdNsGfAHwk/RDdOVw9Dm+NTUSWtWLDohDVQ37JkbiUT2DwMeVswZP+gtdM4x3HnLDhjcGM2XLWOISaenIGee9MCSgqgMht/H/q/SZYk0qviV3oKcj5XcioESyOoqIseFYDYloxnAGm/hcrcuk3JV2XBMl+pKqn6mENux11+w12m6jpqMMFn7rPPTHdwfCm8yTfG4tMaNu+GepPUFiqbM7T105ARSPQU+dY/LOC/N2gI65WEkyWUEtjmSppfkLvlRLaQ5VnZFDtGGzbheNRROKZmbu/AvUvh3tE4Wff2/0IUC+y2q+4VVoXBW1BSvkR7Rb8BW84lWJQBdlGozcs7GLy3Nd35OSqTxBqtfgkc1+sPjcqbDgEl6xK0dH5lv545LOCVL1/F+3CoY4eyY1+WcBiC2KYEHQBd5XDkyndE17xCm2Ug6BLcSwb3LigE1AlOYu6TS4HUwVEw0Df1osfBnLDwnpiFDCQPuvQ73Fkqxg8/hEVYLXt66MXbbzOK8bKre1hhkgDT0RDja3fEHytwZxCMLH0YWPkD0fxqjqUZDejDSV3z1LbexqPkEPJxKWLqtKOGbvPnZL460NlE/KgfkIZiRrfjShsQcG2QQDUwwXjcuZcID61Ys6ErUJ/LDOiCfLUzUjVQdEg0O4jn/ABEq0iuIjrEcwE0x/KGWNbjPj4BO00Gni0ZOoIPzLR5X9vMqqaQDqDzzENra4V5zp8sBZQcROYjsLvYUOPdbEVBKeiZ193QjCmwtZCM+ldS6EWYTH3wuNSV1i+pFCj/IAaWgGUfBq0N78qPM3DZcp9TxcTQeyzZm3ON2LatXpSlOP8BIB6qDLddHmHnFrBlpNZmZmdZbNXEB9XsRlZXFennqGHzoXW5DaId4iSoc/Q365EjnRjszPnYXZL9NDWUtGsqzCjAw7xprTypbn7fkaILcYqkInzzeX06C8emO8sKlS7stZQLxVMPes/+O9FVAvEpXob+utY6gZmfrtMjf/RUI+2odhF7wJbq+Gzf3zTj5CAwyaoEwozVoCzN1KKK00z7WUbZx9dIOklsO6CAZpu87i5gpHoJ8gtLh9vZixSO2KckV7qysf5Sc5uq2tjOix3rL0FW3IJuSNV0XM/iDs85LqxvqeKUD8n3LxUobt5WVuLJlS9IM4O9i09VRwWtxLWfpcix+hXjs8mZdjn19YuOiuKRgufzXqOuqQi2r8O+yAk/tl2Q/RMW7ETe8UdX1GJhHDM5qjDHJ5e7bs07qBp7ZsTe9t6/vUXykkLKEdLFbLgLJSUn3rrt1yXEdX/1C23jzVG+5Keg/B5r2wJD9g/NcaUAJq4MvXxxl/TWoATcoGc0Av4eUKnIXZlsvXpLHO0CS2KgOtGQgdeuwqWuUjGbUgrdszLHRXXDLF0oe54AS0kyPnc5Iz/2CmV7EeIzSwcjvsHQPXkUhld/kCP6Xu+DRNjg/SWHh+SnODF+aPeVh9XCydAPEsA4kAqsCzcuiTPiw7+maTj6SwGsVk/9gY9xbUpizR8MNS47aAd0C7s35CG8VdrxYyjl/FcdUgo73nY77X9D/Au9RDMh+aBoVAAAAAElFTkSuQmCC');
+=======
+ background-image: url(../images/layers.png);
+>>>>>>> f40e44f... fix(fix): fix
width: 36px;
height: 36px;
}
@@ -719,7 +723,11 @@
display: block;
background-repeat: no-repeat;
cursor: pointer;
+<<<<<<< HEAD
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALIAAAAgCAYAAAHBIxK2AAAABGdBTUEAALGPC/xhBQAAIJZJREFUeAHtfAl8Tkf3/9z7PNmDRFbZSawhQcRSaqva1xCqpataqrT2UkuUUiqlaKtafe1VS1pUiypB0dIgIkpKRPZIELI/2/zO98akN48nltL3838//84nNzNzzpkzc+eee+bMOXMfxijNaMJ7LOrGO/HdYfZ8fb12gD2JJINJdR8WNHVQnRtSn7hilpz0u2DMKaEcFhZmhdzLNbiPyNVlwPxcm4Qh93Fr0gO4Ol5hfqiz6Q14G+QzGpYzQ9nXrUl7X/fgbrXdG3skX7m26+bNW2fQqJ5XmCs6RQKd6EQwB0zgtKgsvCidGF+N8wV/SBLqSKnXzx2WKIHw1xNxq2xtrKsBXqgrbePt1rivJFmloa5OoD129NcVQwa9Phxwaflw3ifvHCus1YIVjW7fwEF66dIhdYO/XV7Qk+9HY/5F7RA+w0G5TdRxq7gw10FBPWwA+3r9jpkYGcoJ5/7YiFxMiYCjLspsekOeCiJ1AhJJNER+8rfTX/j4BNcUMNCLMmhF+wC3cE9RZmMd/0IQjeTtGdwJjURD5EajsRQN1EwEHjAkUVce2LLhnKf8xGId3ZhkX4uxmj7MMKqJz0ZmMr3MJNZBmphV8WDBOCCgo+2QiE7DF3005wvU75e8vMLs4+P3HwwN7do5MzOu2NcjpPHRX/csCqjt2wvtxEAy8xJ3o+7j3jjkcurpn2xtrT0EPiS0oQPKSOfi/ygqL9H/qNbls8EXuer4+65xUa149QnBvGYFgapAN21EZ+pnuH3rrrnKdNA/zCRmjoqGzu36RoL21q38BLAAjRgo6iir63g1QAOcOoU27DAgwKtpPzVMKU+qBWIuve3Jx0zw4j/eQ0CASeNnjUi5mrYH72ZxUfFV0emJ479/BvrM9KxDAgZZEjziTp1d8+pL415sEdJloIAhF7QCZmnQoCkuLkkXNPfkozU8b4wVb30P4i4ADNQ41P08mtSBogHc27Vx70CPEHeUgRNwgUOuTqBR8wwODraGSIkrKipKxqVuI300mntri1jz9OOs0IHeHUdvms2t0iG+vn5nxmnan5QeUff6GGWttpidSjvGbCSZJdAAGTMwtjWSH2G5XrOp3oEv9wuWxqdeUPchZkW8OGqcedmcdujgUcMOH/zltmgL2YW2Fu22fbMz6q2xM+IEvmvHiCGyRq7AK3QLe959+T6v46co0uVBisLk0/9SqIIhcnQiVBPqULJ4dPVd2ypLg6Dx8wxuhAGDHrCOHTtqUfZ2b6KsYYIOuUiXL1/dKW4SMJRxkbbpG9nv5ecVutlt+PSoNvw7VPg8V4X5wqf4YQVp9g+NDQZDITr2cm/8lNIGlbvp+edGD/946eqJqOKmoBJRhjyjrclk0qlZAqeumw8YOEwE6ILdgh0raN9pcHeWx9n3mViPh9IKnlmBVBWI4bfoePDAEcOGPz9WWUDBzMe1cUdft5CnUfb2DvFR8rsz2avrkOdmT18wJisz5zDaqthVWjwAtzRgtBF9VbSdVofXIPWmB2CCouYqUBUFH59QbwwEqg0XykAi96/VuCEetRrm59msEfA+nqEtAUeqNEt324JGJEsDxpMi26gnaCpUxqJk6bahkGFp3akrZO8IBurcVGponpGW+VOdQP++uIAznzE1/cBBvRRZTc+OP0miUBJ78OiyxNxE6uX+KSP3vDIZuEE/z9BgWZZtHHj1oxZbkS6uJFNqIn+SWSy1AubjFtLd171xoHrQooyFQJRB7+0eHBrk2cxNtBW5mgYwoYNFXg5r7CvoFXWxajQ3mjiTc84wVkB2kTWt5NYk3lZ02SCvzphDDVrNZOY2p3mdA0wrhQoGSm5ig6SRyTsqwSxUaMKk+t4tXJIy4/IsoP82yNu7pYusKwk2WdslZmScvGHOyNs1tJ5GNrjVaeT2W2xsLCnuv5J6woQq/QtbXoLCMJqYtbWj208pKbGK4aamgWJR19XlCvpFEdxn6SDOl0byAjXB/cp8rlM/PteZ83k1T92PTuAw0Ly8GychmosWLB/v7xFSW+AeJQ/0auyLiYFEBgQ0dYKdDRsJfFOvpe0V76fgCVrgkNQTao63hAONr2vjFtAFltoTTFLzB415Al7RFdNipHRviWlLbzCHhZ05HxfEy9e7T/zX8FV+XLk+96e8Tl0xOJZfOpjdKp4kzboZXgGrouDj1rTunHnTQl1caoZ/unLNlKnTx32sNxobR0ZGakQTDCY8tEtEkG+LfihDg+NC2ccjpBXoyMTqVaLjTaFLduxe219XqH+67HYGKU5D0pbN30X5+vl0a9m6mZOPTxvFUIayPRAbM1RpS1uztp0a/SD6e9hcYlKVqgi7QEg/DAyRsAUsKSlNLyvT56Bs8e2Ias4LZzfnfEowJyOOVocZDs9jt8YnMDvUZzblZ+jis1rwtqg/KMHgwEThCUOCUS64U/An6iiL9oIGcFjwqMOQQB0JdTyEXd/tfR/1rMzsWCrPBxwPCxJMfJMELVYq0KO+fNkXk6CHRV/qXPSLXA0XZejpqiRZ0IgcY7hzu+AS2TB3quInaNnU2vzSlNqcT/fhHSqAVJgawAunEXxCPU4W9MMlcRN0ryZMAl2XcOHm6YlnYgMAToIOuxks+YBBErGrAa0YtKDDDkeYAaBFErjSUl2uKOfm5v1GE9y1nOLe/4IO+b3YchfKw0wy3lZ6m2arxyr4KV4RURH54qtS/fGufEMZZ7Hja/Ko0ptsgYML0+kKGM+4wbTbmGQUtPfLMfBrWWc3gIZenX4aJmUp9OQdqunk4nv2QmzMus0rO730wtj0qu2DqnuQjCYbrOjYrINq5JuRe/CKQp3QtRMweivm0yur+FBQf9xk6WFQX99Tvw2GDO0390jssWXW1vKf6n4q7Dc1EOXledJwQxF7RV/EomQbptMXssJlNyT5YSe4dq1m/s907eik1WprNKjdur9sW/1AWt7535Ur6/zvN2/lpcds/37eM892mEgTXGHuHD1y4qLRYK0YvrJsMly5knKu0tg0csmObbvfC2/ZbETK9bOnW4TU7xtGEw0a2geZbKysz/Xu9txQvV6fX6VOrMTw/hVsdF8b/tbGgX1feqF1m7Bq5hda+/o+pVgXm9Ztmzk0ctTBlMyEi/fnaoZ9g3HH1xmv5GgwI/m3+oAZUOzkj4fx7rQBt7qdxnhJDiuj/YlBe9dG1pLNbF9D8c2dem2xVMA3NQhjBk6WMyVaelmZVaL0+vmcB/Tz/zVa+8lIPlWW2SLMQh559ZSNCE2sbCq/FBuLyrrbLJVHsYZMr/sdfpiKJOv1pOxtyISp0tQRtHXqhNWQZffSy5d/LBOwJ5H71mrcAnzSSA2Z84ObJPlCbiujSZubkRefZI5X61hL5pavbzMvY4kuTCuzm6nXE4+Ztwf/lBRmcW1zcSkwxsXF6bWmEnbQSPJsoqWMZumwUqYC7QCVi3Y6tMmnCZdYDItiJezj0v3MaLJmRmXX58w0zKJ3w3ww2IwE+fk7JSUll9b2Crl4NfPcJXOav1OH7fyfdSs6cS7zl18Y65GRd36Pmk/S+dwex0/tHTN54pxNJ0/I2tTsM5WccqDFQgn9rW4nyphg4J95ut9gZis7p6Ym3BI4L9eQ+sS/ntrbLXDIE8/fLKaHVP7goyN5whKyKKMHcsWboSasqsznORfSRYEaz3v29uZt4JiDxMC8QVJLjzntg+ow+dBe7BhRJ1MwQ/AVkRbwQbBj7OtTXgVu49qt79LDrW/OX4yrqjEJ/OIPVrwlfM2CB/rW6XQ3wd9SgjsM41SsC9pLt+H0AptK2fdRjFdYHHwdhY0QOsL1VZDimkIHfLLD8xThcmCF+p3SjOxc0WlV+Zervm2x68dN/QQ+MLC2DVSHqOOVw6ZFXDRgCXjUBQ1y7Py+3bO+HyQLO0bArGV2auRrkxRv1orPPgjXF6XVARxJz0vCPvz4vbkoT50899yTenvAD0ljLx0L8Gr2Et4C9XXnTkEiecNKv/xiU/q1nHNXlQmN2iYVlpWwL0qLmSR3ZNFgQCpCogXuLDMa45WrTH8AcCVpTL8Q7ChbVDhAgO6XmwwGj7AWoa9lZ+UcBt3ufZvn6Ar0bUSbP/+42cJQ7NhbNjj3ybpW2p0G3LtP966DUIYk0TbZDr4Kk9Ho7lXLw1+0g6qo6Wtz8+f9sfmARQzqPZNWiCCBJ/NLtrOz9SkoKPxDlmT1SiJIHiuH6oAeF5e1o9XRGjWqa6pXrxbcqlm3YY7Wtifu6WDeU1xHF59an1cDki9wm8nnU7h3AV0fergDNrsln0+BtKUoP0yizYJr/57DhuJ1wnY5/mziepTVr6e3R0hrsbPLyck7BrxIZO/eAi2uuwE4I3Aok5rIAtzPPbjtxQuXtgCOOtQTwkqrPvlqMmBd2vcfDGeSpfGCXrS7H96SujCnBy+oj6LComSoEoGvUA0A6EvZ8DLaO9nYsUOoSzNy57Oi4mJyBu2SpuRcj2rGvZievUsRgleBf5gk6cpabd62egFoaYtr6NFl8DaUoz96LzTAq0kDlNWppLhE2UTg9Tuf8MdG2sw4DRjQU9H7e3b/FE2vomLoU3nJjm92rYSEwoXZuX3EJvDZsWtdz/+sjGlqMJqCXx/90jzALlz4syQl5awi7aj/EwnxPfC1srJy7ti232Sb6jZHRT+VJvm909I3pjKWayxjYdODeLkO1hnC2OLC/mhQWsJO6UvInCtjHQWDB+XKK2tvF3Dq5JkvVR4t/tzwiHk6namuefunwruvEq9ft86RW4Ef9sqQcK2WXRkzYtKBgtsFGYCNHjHpt3enzd+cnpvwo8pHbKQd2Wg9M3qDhjz9tqd+O7tao2XZqP+TKf8Ga3vyzP630EdGRpY+OTnutuiv0iQDqDOxVgaaSDLpjqMuResukoXHpwTw7jT5XnQlfHBBOgPcgxIiEqu+jG4NuoYN63a4mHzio0vJvy7Blhcwa2srWW0NAFZVgh0uaTSKj0LQYFERZVmy+WP1Z2uno25vZyd/tX5FO5T79x72faoF+xm4J5m4geLOPl7PHPvl1CeyLF1T875nkpdckq7qdOwIqY4aEz35i+XEXCYJ30MXs7dnSghSzaSqMunN2n36dZsBfG7uzYt3r0vpaVm/AHbkxJ4xJYWpD80PbapK6bmnL8+dvURRJXsPbXu5W49OU6n/ItA/zEapKr4PA8fC7OVVS1EXgwe8sq9Nh4aJ6nYWdyrFmayLvQsrIwleF8n4Jk9ntlCvo00gZ6ujE6UHBujQAZw2ZY52Cv8fvj/wwahXJu6VGFdu2sh4rdTs+M6+fl7dSAI+kTS0yfkbCWEndbhJIzPdjRu3TgcGBijqbcHc6Km21iz+b7C22KTEaGxFi1slHDyLsrGgKHr5kvYCsW3btkpeynskGYSrmaQnvTufLubhyL6WDGwK0zH9ypvSKMHoQXmuoaztz0diJoHu9VfePp6el3BYeOGstVYJ0Ys/VSR81OjhPmQqKAvbg3hqZNOd9PTsZNAt/3Rhi+5dW/cmy6SzaGfv7HS817NDlUUWsFWfrU9LzkxMFfjHyadMe3MZ7HPzCwJjMnK/8JbNI6rib1GSQfxpoTT7TRs+mYzLSJJoWkTYsKqYWIIbTNzWuaZTA0iWOT4l+2zKxx99fpXCUKxXv+5hn6/akP7n5eRztbw9O5rToi7cnx5+0rWIvi/uSU4/M2BgZJ/ZAwb2KiO9HynaXLp0rIAkTZeff/tc7MFju2Qm0T7r8RPcnJa43MjL1+PtocUif8SrE2ZkpWWX0Tmbex4q5q/KNFLLO8mcHSTXRc7nRsmzSkILCOzWsJkAypLjBXE4U+mdtmSCGclC+AEbC8US0Wh+u5Jz7jraIWREYfRGuJG064n7AAvxCHHIMxorpLcac4q9lHesYjLRb06qrgtZMoVpuecqzCi0tZRg2wq4pXEiKCDwlnIRMMD9WFvrjGqrwhK9RRj5kp+bwLgS37NI8C/wgTOgSPLyV7ibxoa9Rp7kV8nrVo1E3qSjJSr/CuNlBUxHTswSZmLFkhWTtLSGUqSEjO7yXEN1DZW1FBuQrQllxzK5FVuTc5HtnnOIwlRf1X6Waa1GM24KoNGQT69SkpiGFtIyYwwrMK1jb1+9/U9bApV6/7fyxGYAwewzZ1IdiosNBvF2PzHmD8FIWfcoKPIV7ZZ7Q8rImmJGPWPpR0jqdMxEAs5IgEkWCUm6mf6YRITIOXIFUC6heCvIyguhPIR5s1PE9TYrMixlWkM9ZqRwC2jLkywKSm4tPc005KKeOxe+qb+oKhE9fAUOvLLi0ubYH6AVNpoaLU++lnWezs8/OLbw8D09GUp8HkB7wHCEEwVHjBkOxqvX7x906kgOzMvn89qZWLm7SbSXmXwnqLHLMdVmWKAq5eolSY2wtDyp8aIcFNSqekl+Uftjhy5IbduGV0tKulrCdMEGrcRupeYm/iLoLOXkMpJqe4fUN+hZHRM3keQ9Wip3IGiSEIupmLjooXwByeoUA2daCrSw4nx2Kucye86qhJUq7MUKSznt+SqSHcq0KAqY1okZxqySrlcQUIEvJ7e+RDocW2JdmR3T8K0UT2lOwk1viKQnh2oUuaIqrFt120ct4ySGwaALHDPuVb8ZM9+OxjlFOh95oGXzrsvpxk2e/jb7ERB6VL6PQw9hS79427lUqzOOGBGZj5i64IcPYUp1paHDXxzs+UH07NUCvnrVumlzZ334h0ajuZqWc+68gKtz+Bq//CSmq4kbrRL/PDbPyalGKPDJySm7n27V+wtJywozshMPqduYl4Ugw/oHDm455A8ryDjEhp3CkV+/HxEYGKC0/XDRyreXLVmVbKeyE8HTPOE0DNmONhS3Gu0f4NPTHP+gOj7JGRwx4icYzRU7kUlfSzMW9+PJJMTLS03MztqahXs1YuuK8tmAqFgp70FM74eXxpeHTvhkR3eKY2wic6K5YmRoWBE51UdI825tuV/7h8Uh1qQzFAf26vusy8zZE1eKdt6+Xl1ooovbt+795fVUXRuC03rzzyecisZBYwoCsvETRgbcupFfunrl1mwSHtIW7EpqduKF5My4VBIG9w3rt7L+g3qtggsRI3t91IvzNq7d/sKVK1drk8bOtaSZ16zc3pw0sdV332/sLYSYzofd7tdj+H/Aw1O2/S0DhX8wlWvFv7eI0jpJqs1gs33brv09ej6TT7wqFKulIbt7utalw5RKxJwO4+yCEGMDFdjILbFCkNFw6k7py0XP8qu0Fm8nl4UTcW1nY81ORHXjPaL2SZcFcxq2xNbUXsSstB0oiCbA5TkWCCMvYQbda9KotCuVkCbTQGYyNCFb3ESh72wmayOlRbePV6L5m5UAOh+sK8wNh4tzxaeLF99lY6KjunGuri7h0BZf/GfZBfhQfDyaNEnPSUgw70o5bm8yuZrDUcdSTXftYL4EaiT5tobZJqXknsq+p52e+wB28vT+cfQyPYtyxOA+nw/oPXwPyiKl5ibE+Xs06UJb9x/OJB4OdXd3aUMmkPX2XWsnNAvu8EGZJDWhZfi62izyouPDRh2v9cabr/iGt2o6UvCa9c7CqfQFo0Gy0ZyJyyg/uiZw/0SuNocelX9qbvwv8F5+suxzv6VLPo211J6EvRZWnCXL5jUb+sKAoaDBh5SYKzyT1JxzRzAvlQQZRNN+kn6Oepq3JXn8gar+JKZBRPQbffnSJ+qEpAgdCTjnt/UbGCt7jkq+lbZwVmQqGPlcaVJWhRBHPcXd6ciG29xDbOecNtIGCm3VkKJLnqiy0JfcbIvxxx7fOc7Gxkpx6G3ZEDNn1rsLEy5cOb6GIkIuPXt3eef5FwaO3LxpByNteTM9Pb7yGO7az7+fPTBR+Km2bIyZPWPa/Pi1m1b0b0FONnt7Oz/0g0Su6oLLSVd+GP/G9G9154uLtZL2lsnGPo6XFjyDB0wx33JCC/8NBoavKQKBogB8noskH89jxs5dOw78MC7h5/VkUjiSQD+1fvPKDi8+/+ZhX0/lawzl5bv70jZ1dHTQTJ0xfr5gv+/HQ4vXr/smC/GC9Ixz6QL+T+aPo5ExrvT0E/BwX7I0RoR9TSajFebgmWc7TgINjk6OG/POKVnLctKzE06SECtNK2+67nKLOipdIEEOp7jI73QKg+lKWE3aDB56N5wPuUvCpInpCazEEM7yS86wQloh7tBVXFLEbpa8REL8fjkdl2Y158NItDOp/XnZimXM/ZW3lJY+WSH2dwttRt5o+6+3r+6C4A/6Tkq6EjNp4uz44pIS05wZi94V4164ZNYSN1cXKyz54hyowFnK+0X0GJGccXpneKuwQRcvJB3YvXPfAgSX6CPVeBK2avUb1huy79COLecuHp1Dx5fgU+wCId70zapnhNdZaGPwb9mq2SgBRx45uK87p1Xgjh3NjrV0FmHm92YtnirGggfYp09XV5PRFIBNIeDGohstke/9edtrCNmifC0l/YdXXxz3Cxy76dfPVz4DC4L/sYQvkhFh+HT1h62EEP+45+dFEGJ8xp6enXhSfUsWBRkEM45KubIDe5qE+DsE9XSlNM2lbMv0YP4OxaJIzsm+ePd6DivMb8vu6GKYviyJFRq7Se/d+hq4KMa104PZLBLgDXRiRkPhbU5h7s03PNgx4J9UCvBsGqDnBh/YoO07PDUefEtLyzK7tI9Yh80dQtTr1m7JPHL4+HLg6GxB9f2Hy0M1CNtg5wx4VUnWaO1bNn12YJBfizf69hr+5Zujpqx5PnLUp43rtZvVtFHHCBFAdHFxDlu28v1w8JEljf6FIaN/FseJ8DGe4I9wvYAj37Z113XZVnsaZxUyM8+nkYJJw5Gjn386/JFos3Tl+3NQ1nMpDB/aGbmpxkfL329Wu46fcqiD7je7U9u+n0M72jr5nhDt/ldzH7fgIJOJ+0+aNjaw34AeihI6ezph7YiX3zpGk3sjI/fsWfN7q1KQQUibvNIF51kECfMysmuNlFPUjy2sHchWvhzAyXNM9aWshDTsQOmD0vrShwWKkI704vZFddkXRDuXhJgsELKYS9n7CxKkF1b8KNFr8WQS3Gw6g74JztRNeefNDwXXyeNnzSIBI88gl40GpkRyhg4aeeD69RvKQ8aSHbNrfS+Exvy8yn9OQ7Q1z2kCd+D8BDZnGdcTTqTmJCTjRKgky3nQntezc0+JNl7etRT7WqM1XcOuX9ZoKnlvBB1yrdb6CmhwqU2cjNzEs/A2vPj82Nj0tMz9oLWzt/Pfd3DbYNjntJmr06x5Ywf6ZEIRbuBHvz5lWplOp7jrnvRxZPD/byZ8IE0u3IZ16wbaTpw8Zgn6pjBiQq9uQ2Po6/SyjJwEiy/qfQW5/AYkvviyNIEEcgIFqstweou07GgXA4sZ6cxrlNP89X9MDe7sILM9JK4v60CrYyUlejZy0Z/SrL+oHr8EB7w4q7hr78ZZcLMJritXL16jXr5FGZsoQdOqTfNRM2ZNrGvU81pVfXUGWnoZlN2seqOl8PgH/dFWtm4noF07te33KX0GmIv+GjdpOIzs4SCUN2xZ9Q5lyrPbuuW7uT/tPXjLykq6bMmzAfr/pVQs3WmG8W785rMRlCkr//w50eWrKWPx9zyHuzenvZs/MItOl1a85cGvajjbpJNYdYpd97C3YkfH2fGeK0qkdDCg3x4JoI3fXknH6hMNRnFLx9igZTnSwQd28IgExw9fpO9PTVbQVOR6CkFzslvP0pI/+36scLwRp+9A88a4Vxbt2bV3WHz8hUb0uzm3yn9i4H6tVbgHmCQqykcuptBX2/6uYXFk37d4+413pn62Jvo/YPLm+Nfmt+/QZouzs5PiL066dHnrhHEz4xB8QLDnkTv6hxuQtyWAPESKXV9VV5JReyM193QWBNTXlT4Y4boaeGF9fL26og3cbF9vjsmRtdqcq9nxVX6R9NCCDKYf50jfv+3EO5gYHYbjzItATZg1OzVG5t3IFrWmjeGPpL9cCQ8HXYpGw3rQB38XUX2SCd8ilOmMrouXzAmBpgJvsnUNg/u/shBlnMC2dD7Wzy24HTaAzVuFxtSrFxhBk6fd+u1X8+rXaT2Jlcmt6ZzVHQMYPKEk0SecYEVnd/WCpZNzjZoKjII28FrgvK9tDftjly//dkfQIL+WF5dF9nDyrl37WLeYZ+b3j+g5kzaX9s2aN3kV+OLC4iud2vXfiMMqdYJdfk2NBfT/jfTc0P49unXrVKXQiVEWFhUXvT12xgHaK+jpxf3doNH7IUjWf0DPZwXNvh8OHkFZMsiKshRw8/yRBBmNl+VLZ0fb8ZayzH4krdyEnpQnudbiKRxMAbry9Y5gJwnfOzpfUpZF804fp46dOwlxvY5dnnZ64aVIRbOC39ovN8/GAW9ZsrpoSYhBU82dnczPkbpiI5iUcrK1ra2Nl2M1x7oHf/lueOd2/TeYmEnxAID2iSSDdQbZVp6ff7J214IPZ3YnnnLdunUiyNSJuMvfSC/fi8eOnepAp6EOnss5Rydc/kp0EDORfuXOZeyoqSeDmzSIQVtg8Q3K4IGvzkSZW9vd87sdgP+3Ejw05n3hFxroMgffU6f7KBs4uM8fy5euTjFKRkf6ks4FRJ61PJojL7hTePH99z5Kwsuael3R2gBbTPcMwiKVBeBkxh0KtGw7mQ/dhbeUynihvrU2sKEr2JPb1Km7h238a+ylp4zc6IRNXsdObV3JTswqKCw0kUeCNmLxiWp68zLOBpTeLm5LGydt377dXJycnazhewUd/K/YLZPmk8aOf80/LSW96Ntvf8jFRGodXA5iyRf88Es5xQZda0GbkZZVtGP77ntocaKXlRW3wQOv5ugot+vUyqluUGB18CGT5hZ+jwuOfRx0FbzVOcLQaz7Z0Q6eCsDRHzayiodCI58URwXVbR6l/Lghavw6hYGZsDr/rYSNLSKQcfS7AwiOSGWF4eJewRAmRVAD59MPOjPytwUZncAN5yyzhVacDSFlbDJIbO1qkzQXuP9Gql+/bTXj7WLbUq1t4V3H+kN3q5zWOnq5Jn05Jdm6GvMTExPJnC9PCDgYC2/X1Mp6o38j1xv3m0Q1LT5wu985DghlzGcxdqUaKzvSRpLJXtaFhdUpND8mLsZhKQcPuhSTxRL+UWFCkM3bPexZC/N2/9b/nYF/Z+AxZuD/AA8zEhkTLyOGAAAAAElFTkSuQmCC');
+=======
+ background-image: url('../images/logo.png');
+>>>>>>> f40e44f... fix(fix): fix
}
@@ -731,12 +739,20 @@
border-radius: 2px;
}
.l7-control-layers-toggle {
+<<<<<<< HEAD
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAkCAYAAAGf7Ah0AAAABGdBTUEAALGPC/xhBQAABzdJREFUWAnVV3lslEUUn/l2F0tpwdAih1HEqCReDcphNCo1EkgFkXa5PNpuC0Fo2e7Wgko8KiaKWrvbK5672xYFpNtiRRuNiY0aURA14BGviBcVlaKltVa6+42/N9v5Mrtt05rwj/PHzjt+8743b+a9N8vYwKgMNlUQyemnMtAkaJajvb3dToQSGp8e6boopkr4VYgEMYwO0vhCTfMVzBcMf8bx086YyODcuM80zTqp9IWat+7evW8sMdIxIqqCLa6oiAaJpuEtcBqcc2HEWMZ0JclgZR/Nchf++ubrzKjJSguXS4tVjXvPjfb3/UAAacGTn/MOMb7QnjNpNqP/bKZ50Ai0tqYmCi0n4zbM+W+lBc7JBOa+QPhDwcTsxJXE2+32edKCL9h8hRDmRzpIOWydAylhrcMfDN+ugBRKSdP3KwPhsFJIPth02FISIYQwYsDYcVfWhy/Bon4JgumffMGmiGTwQ0B/sHml4q2ZFAD3WQIQVhx0IdFw8B189lolN+w8w5PnjPmlhJgtA8/vfn3iye7u3yGzDljDxZEG4097Cp3rSSjBtMHunp6vFR+HHoIxmbgTe1xHKssDHecLNFUjMzbqMs5ZlHF7ute17M84+TMHDzr+OvR9JwKdCms9yRkzJq6bPTsWXh05QOPUN+PUHyPWMPhm6UHd7vaUohWZPSRE8OqxpTyibQa/qcTlbEP0vwF7AWUAT3JM9dy69FfSNza+MU4awNE8iQtXSkJuGLleV852ov2h5jkwVof0mUs8aO4LhTuYYFOAjExId0wcFIPahpaLTkWiX9ECfHG/sLNi1i8+HODfgLFFRI96+INNi0cNTgTS1obKQh03aAuk9DeELzcj4pACYivvwvXrFK/PcQZiQWo+hmidpYMUjQC7EOB6xdNsGfAHwk/RDdOVw9Dm+NTUSWtWLDohDVQ37JkbiUT2DwMeVswZP+gtdM4x3HnLDhjcGM2XLWOISaenIGee9MCSgqgMht/H/q/SZYk0qviV3oKcj5XcioESyOoqIseFYDYloxnAGm/hcrcuk3JV2XBMl+pKqn6mENux11+w12m6jpqMMFn7rPPTHdwfCm8yTfG4tMaNu+GepPUFiqbM7T105ARSPQU+dY/LOC/N2gI65WEkyWUEtjmSppfkLvlRLaQ5VnZFDtGGzbheNRROKZmbu/AvUvh3tE4Wff2/0IUC+y2q+4VVoXBW1BSvkR7Rb8BW84lWJQBdlGozcs7GLy3Nd35OSqTxBqtfgkc1+sPjcqbDgEl6xK0dH5lv545LOCVL1/F+3CoY4eyY1+WcBiC2KYEHQBd5XDkyndE17xCm2Ug6BLcSwb3LigE1AlOYu6TS4HUwVEw0Df1osfBnLDwnpiFDCQPuvQ73Fkqxg8/hEVYLXt66MXbbzOK8bKre1hhkgDT0RDja3fEHytwZxCMLH0YWPkD0fxqjqUZDejDSV3z1LbexqPkEPJxKWLqtKOGbvPnZL460NlE/KgfkIZiRrfjShsQcG2QQDUwwXjcuZcID61Ys6ErUJ/LDOiCfLUzUjVQdEg0O4jn/ABEq0iuIjrEcwE0x/KGWNbjPj4BO00Gni0ZOoIPzLR5X9vMqqaQDqDzzENra4V5zp8sBZQcROYjsLvYUOPdbEVBKeiZ193QjCmwtZCM+ldS6EWYTH3wuNSV1i+pFCj/IAaWgGUfBq0N78qPM3DZcp9TxcTQeyzZm3ON2LatXpSlOP8BIB6qDLddHmHnFrBlpNZmZmdZbNXEB9XsRlZXFennqGHzoXW5DaId4iSoc/Q365EjnRjszPnYXZL9NDWUtGsqzCjAw7xprTypbn7fkaILcYqkInzzeX06C8emO8sKlS7stZQLxVMPes/+O9FVAvEpXob+utY6gZmfrtMjf/RUI+2odhF7wJbq+Gzf3zTj5CAwyaoEwozVoCzN1KKK00z7WUbZx9dIOklsO6CAZpu87i5gpHoJ8gtLh9vZixSO2KckV7qysf5Sc5uq2tjOix3rL0FW3IJuSNV0XM/iDs85LqxvqeKUD8n3LxUobt5WVuLJlS9IM4O9i09VRwWtxLWfpcix+hXjs8mZdjn19YuOiuKRgufzXqOuqQi2r8O+yAk/tl2Q/RMW7ETe8UdX1GJhHDM5qjDHJ5e7bs07qBp7ZsTe9t6/vUXykkLKEdLFbLgLJSUn3rrt1yXEdX/1C23jzVG+5Keg/B5r2wJD9g/NcaUAJq4MvXxxl/TWoATcoGc0Av4eUKnIXZlsvXpLHO0CS2KgOtGQgdeuwqWuUjGbUgrdszLHRXXDLF0oe54AS0kyPnc5Iz/2CmV7EeIzSwcjvsHQPXkUhld/kCP6Xu+DRNjg/SWHh+SnODF+aPeVh9XCydAPEsA4kAqsCzcuiTPiw7+maTj6SwGsVk/9gY9xbUpizR8MNS47aAd0C7s35CG8VdrxYyjl/FcdUgo73nY77X9D/Au9RDMh+aBoVAAAAAElFTkSuQmCC');
+=======
+ background-image: url(../images/layers.svg);
+>>>>>>> f40e44f... fix(fix): fix
width: 36px;
height: 36px;
}
.l7-retina .l7-control-layers-toggle {
+<<<<<<< HEAD
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAkCAYAAAGf7Ah0AAAABGdBTUEAALGPC/xhBQAABzdJREFUWAnVV3lslEUUn/l2F0tpwdAih1HEqCReDcphNCo1EkgFkXa5PNpuC0Fo2e7Wgko8KiaKWrvbK5672xYFpNtiRRuNiY0aURA14BGviBcVlaKltVa6+42/N9v5Mrtt05rwj/PHzjt+8743b+a9N8vYwKgMNlUQyemnMtAkaJajvb3dToQSGp8e6boopkr4VYgEMYwO0vhCTfMVzBcMf8bx086YyODcuM80zTqp9IWat+7evW8sMdIxIqqCLa6oiAaJpuEtcBqcc2HEWMZ0JclgZR/Nchf++ubrzKjJSguXS4tVjXvPjfb3/UAAacGTn/MOMb7QnjNpNqP/bKZ50Ai0tqYmCi0n4zbM+W+lBc7JBOa+QPhDwcTsxJXE2+32edKCL9h8hRDmRzpIOWydAylhrcMfDN+ugBRKSdP3KwPhsFJIPth02FISIYQwYsDYcVfWhy/Bon4JgumffMGmiGTwQ0B/sHml4q2ZFAD3WQIQVhx0IdFw8B189lolN+w8w5PnjPmlhJgtA8/vfn3iye7u3yGzDljDxZEG4097Cp3rSSjBtMHunp6vFR+HHoIxmbgTe1xHKssDHecLNFUjMzbqMs5ZlHF7ute17M84+TMHDzr+OvR9JwKdCms9yRkzJq6bPTsWXh05QOPUN+PUHyPWMPhm6UHd7vaUohWZPSRE8OqxpTyibQa/qcTlbEP0vwF7AWUAT3JM9dy69FfSNza+MU4awNE8iQtXSkJuGLleV852ov2h5jkwVof0mUs8aO4LhTuYYFOAjExId0wcFIPahpaLTkWiX9ECfHG/sLNi1i8+HODfgLFFRI96+INNi0cNTgTS1obKQh03aAuk9DeELzcj4pACYivvwvXrFK/PcQZiQWo+hmidpYMUjQC7EOB6xdNsGfAHwk/RDdOVw9Dm+NTUSWtWLDohDVQ37JkbiUT2DwMeVswZP+gtdM4x3HnLDhjcGM2XLWOISaenIGee9MCSgqgMht/H/q/SZYk0qviV3oKcj5XcioESyOoqIseFYDYloxnAGm/hcrcuk3JV2XBMl+pKqn6mENux11+w12m6jpqMMFn7rPPTHdwfCm8yTfG4tMaNu+GepPUFiqbM7T105ARSPQU+dY/LOC/N2gI65WEkyWUEtjmSppfkLvlRLaQ5VnZFDtGGzbheNRROKZmbu/AvUvh3tE4Wff2/0IUC+y2q+4VVoXBW1BSvkR7Rb8BW84lWJQBdlGozcs7GLy3Nd35OSqTxBqtfgkc1+sPjcqbDgEl6xK0dH5lv545LOCVL1/F+3CoY4eyY1+WcBiC2KYEHQBd5XDkyndE17xCm2Ug6BLcSwb3LigE1AlOYu6TS4HUwVEw0Df1osfBnLDwnpiFDCQPuvQ73Fkqxg8/hEVYLXt66MXbbzOK8bKre1hhkgDT0RDja3fEHytwZxCMLH0YWPkD0fxqjqUZDejDSV3z1LbexqPkEPJxKWLqtKOGbvPnZL460NlE/KgfkIZiRrfjShsQcG2QQDUwwXjcuZcID61Ys6ErUJ/LDOiCfLUzUjVQdEg0O4jn/ABEq0iuIjrEcwE0x/KGWNbjPj4BO00Gni0ZOoIPzLR5X9vMqqaQDqDzzENra4V5zp8sBZQcROYjsLvYUOPdbEVBKeiZ193QjCmwtZCM+ldS6EWYTH3wuNSV1i+pFCj/IAaWgGUfBq0N78qPM3DZcp9TxcTQeyzZm3ON2LatXpSlOP8BIB6qDLddHmHnFrBlpNZmZmdZbNXEB9XsRlZXFennqGHzoXW5DaId4iSoc/Q365EjnRjszPnYXZL9NDWUtGsqzCjAw7xprTypbn7fkaILcYqkInzzeX06C8emO8sKlS7stZQLxVMPes/+O9FVAvEpXob+utY6gZmfrtMjf/RUI+2odhF7wJbq+Gzf3zTj5CAwyaoEwozVoCzN1KKK00z7WUbZx9dIOklsO6CAZpu87i5gpHoJ8gtLh9vZixSO2KckV7qysf5Sc5uq2tjOix3rL0FW3IJuSNV0XM/iDs85LqxvqeKUD8n3LxUobt5WVuLJlS9IM4O9i09VRwWtxLWfpcix+hXjs8mZdjn19YuOiuKRgufzXqOuqQi2r8O+yAk/tl2Q/RMW7ETe8UdX1GJhHDM5qjDHJ5e7bs07qBp7ZsTe9t6/vUXykkLKEdLFbLgLJSUn3rrt1yXEdX/1C23jzVG+5Keg/B5r2wJD9g/NcaUAJq4MvXxxl/TWoATcoGc0Av4eUKnIXZlsvXpLHO0CS2KgOtGQgdeuwqWuUjGbUgrdszLHRXXDLF0oe54AS0kyPnc5Iz/2CmV7EeIzSwcjvsHQPXkUhld/kCP6Xu+DRNjg/SWHh+SnODF+aPeVh9XCydAPEsA4kAqsCzcuiTPiw7+maTj6SwGsVk/9gY9xbUpizR8MNS47aAd0C7s35CG8VdrxYyjl/FcdUgo73nY77X9D/Au9RDMh+aBoVAAAAAElFTkSuQmCC');
+=======
+ background-image: url(../images/layers.svg);
+>>>>>>> f40e44f... fix(fix): fix
background-size: 26px 26px;
}
.l7-touch .l7-control-layers-toggle {
@@ -786,4 +802,9 @@
margin-top: 2px;
position: relative;
top: 1px;
- }
\ No newline at end of file
+<<<<<<< HEAD
+ }
+=======
+ }
+
+>>>>>>> f40e44f... fix(fix): fix
diff --git a/packages/component/src/images/layers.png b/packages/component/src/images/layers.png
new file mode 100644
index 0000000000..4e9f67b6d2
Binary files /dev/null and b/packages/component/src/images/layers.png differ
diff --git a/packages/component/src/images/layers.svg b/packages/component/src/images/layers.svg
new file mode 100644
index 0000000000..615f4172d7
--- /dev/null
+++ b/packages/component/src/images/layers.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/packages/component/src/images/logo.png b/packages/component/src/images/logo.png
new file mode 100644
index 0000000000..7599f280a0
Binary files /dev/null and b/packages/component/src/images/logo.png differ
diff --git a/packages/component/src/index.ts b/packages/component/src/index.ts
new file mode 100644
index 0000000000..21eaa07aae
--- /dev/null
+++ b/packages/component/src/index.ts
@@ -0,0 +1,9 @@
+import Control from './control/BaseControl';
+import Layers from './control/layer';
+import Logo from './control/logo';
+import Scale from './control/scale';
+import Zoom from './control/zoom';
+import Marker from './marker';
+import Popup from './popup';
+
+export { Control, Logo, Scale, Zoom, Layers, Marker, Popup };
diff --git a/packages/component/src/marker.ts b/packages/component/src/marker.ts
new file mode 100644
index 0000000000..083471e94d
--- /dev/null
+++ b/packages/component/src/marker.ts
@@ -0,0 +1,186 @@
+import { ILngLat, IMapService, IMarkerScene, IPopup } from '@l7/core';
+import { bindAll, DOM } from '@l7/utils';
+import { anchorTranslate, anchorType, applyAnchorClass } from './utils/anchor';
+// marker 支持 dragger 未完成
+
+export interface IMarkerOption {
+ element: HTMLElement | undefined;
+ anchor: anchorType;
+ color: string;
+ offset: number[];
+ draggable: boolean;
+}
+export default class Marker {
+ private markerOption: IMarkerOption;
+ private defaultMarker: boolean;
+ private popup: IPopup; // TODO: POPup
+ private mapservice: IMapService;
+ private lngLat: ILngLat;
+ private scene: IMarkerScene;
+ constructor(option?: Partial) {
+ this.markerOption = {
+ ...this.getDefault(),
+ ...option,
+ };
+ bindAll(['update', 'onMove', 'onUp', 'addDragHandler', 'onMapClick'], this);
+ this.init();
+ }
+
+ public getDefault() {
+ return {
+ element: undefined, // DOM element
+ anchor: anchorType.BOTTOM,
+ offset: [0, 0],
+ color: '#5B8FF9',
+ draggable: false,
+ };
+ }
+
+ public addTo(scene: IMarkerScene) {
+ this.scene = scene;
+ const mapService = scene.getMapService();
+ const { element, draggable } = this.markerOption;
+ this.remove();
+ this.mapservice = mapService;
+ mapService.getMarkerContainer().appendChild(element as HTMLElement);
+ mapService.on('camerachange', this.update);
+ // this.setDraggable(draggable);
+ this.update();
+ return this;
+ }
+
+ public remove() {
+ if (this.mapservice) {
+ this.mapservice.off('click', this.onMapClick);
+ this.mapservice.off('move', this.update);
+ this.mapservice.off('moveend', this.update);
+ this.mapservice.off('mousedown', this.addDragHandler);
+ this.mapservice.off('touchstart', this.addDragHandler);
+ this.mapservice.off('mouseup', this.onUp);
+ this.mapservice.off('touchend', this.onUp);
+ delete this.mapservice;
+ }
+ const { element } = this.markerOption;
+ if (element) {
+ DOM.remove(element);
+ }
+ if (this.popup) {
+ this.popup.remove();
+ }
+ return this;
+ }
+
+ public setLnglat(lngLat: ILngLat) {
+ this.lngLat = lngLat;
+ if (this.popup) {
+ this.popup.setLnglat(this.lngLat);
+ }
+ return this;
+ }
+
+ public getLnglat(): ILngLat {
+ return this.lngLat;
+ }
+
+ public getElement(): HTMLElement {
+ return this.markerOption.element as HTMLElement;
+ }
+
+ public togglePopup() {
+ const popup = this.popup;
+ if (!popup) {
+ return this;
+ } else if (popup.isOpen()) {
+ popup.remove();
+ } else {
+ popup.addTo(this.scene);
+ }
+ return this;
+ }
+
+ public getPopup() {
+ return this.popup;
+ }
+
+ public getOffset(): number[] {
+ return this.markerOption.offset;
+ }
+
+ public setDraggable(draggable: boolean) {
+ throw new Error('Method not implemented.');
+ }
+
+ public isDraggable() {
+ return this.markerOption.draggable;
+ }
+
+ private update() {
+ if (!this.mapservice) {
+ return;
+ }
+ const { element, anchor } = this.markerOption;
+ this.updatePosition();
+ DOM.setTransform(element as HTMLElement, `${anchorTranslate[anchor]}`);
+ }
+
+ private onMapClick(e: MouseEvent) {
+ const { element } = this.markerOption;
+ if (this.popup && element) {
+ this.togglePopup();
+ }
+ }
+
+ private updatePosition() {
+ if (!this.mapservice) {
+ return;
+ }
+ const { element } = this.markerOption;
+ const { lng, lat } = this.lngLat;
+ const pos = this.mapservice.lngLatToContainer([lng, lat]);
+ if (element) {
+ element.style.left = pos.x + 'px';
+ element.style.top = pos.y + 'px';
+ }
+ }
+
+ private init() {
+ let { element } = this.markerOption;
+ const { color, anchor } = this.markerOption;
+ if (!element) {
+ this.defaultMarker = true;
+ element = DOM.create('div');
+ this.markerOption.element = element;
+ const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
+ svg.setAttributeNS(null, 'display', 'block');
+ svg.setAttributeNS(null, 'height', '48px');
+ svg.setAttributeNS(null, 'width', '48px');
+ svg.setAttributeNS(null, 'viewBox', '0 0 1024 1024');
+
+ const path = document.createElementNS(
+ 'http://www.w3.org/2000/svg',
+ 'path',
+ );
+ path.setAttributeNS(
+ null,
+ 'd',
+ 'M512 490.666667C453.12 490.666667 405.333333 442.88 405.333333 384 405.333333 325.12 453.12 277.333333 512 277.333333 570.88 277.333333 618.666667 325.12 618.666667 384 618.666667 442.88 570.88 490.666667 512 490.666667M512 85.333333C346.88 85.333333 213.333333 218.88 213.333333 384 213.333333 608 512 938.666667 512 938.666667 512 938.666667 810.666667 608 810.666667 384 810.666667 218.88 677.12 85.333333 512 85.333333Z',
+ );
+ path.setAttributeNS(null, 'fill', color);
+ svg.appendChild(path);
+ element.appendChild(svg);
+ }
+ DOM.addClass(element, 'l7-marker');
+ element.addEventListener('click', (e: MouseEvent) => {
+ this.onMapClick(e);
+ });
+ applyAnchorClass(element, anchor, 'marker');
+ }
+
+ private addDragHandler(e: MouseEvent) {
+ throw new Error('Method not implemented.');
+ }
+
+ private onUp(e: MouseEvent) {
+ throw new Error('Method not implemented.');
+ }
+}
diff --git a/packages/component/src/popup.ts b/packages/component/src/popup.ts
new file mode 100644
index 0000000000..8e0dd2ed35
--- /dev/null
+++ b/packages/component/src/popup.ts
@@ -0,0 +1,210 @@
+import { ILngLat, IMapService, IMarkerScene, IPopup } from '@l7/core';
+import { bindAll, DOM } from '@l7/utils';
+import { EventEmitter } from 'eventemitter3';
+import { anchorTranslate, anchorType, applyAnchorClass } from './utils/anchor';
+
+/** colse event */
+
+export interface IPopupOption {
+ closeButton: boolean;
+ closeOnClick: boolean;
+ maxWidth: string;
+ anchor: anchorType;
+ className: string;
+ offsets: number[];
+}
+export default class Popup extends EventEmitter implements IPopup {
+ private popupOption: IPopupOption;
+ private mapservice: IMapService;
+ private lngLat: ILngLat;
+ private content: HTMLElement;
+ private closeButton: HTMLElement;
+ private timeoutInstance: any;
+ private container: HTMLElement;
+ private tip: HTMLElement;
+
+ constructor(cfg?: Partial) {
+ super();
+ this.popupOption = {
+ ...this.getdefault(),
+ ...cfg,
+ };
+ bindAll(['update', 'onClickClose', 'remove'], this);
+ }
+
+ public addTo(scene: IMarkerScene) {
+ const mapService = scene.getMapService();
+ this.mapservice = mapService;
+ this.mapservice.on('camerachange', this.update);
+ this.update();
+ if (this.popupOption.closeOnClick) {
+ this.timeoutInstance = setTimeout(() => {
+ this.mapservice.on('click', this.onClickClose);
+ }, 30);
+ }
+ return this;
+ }
+
+ public setHTML(html: string) {
+ const frag = window.document.createDocumentFragment();
+ const temp = window.document.createElement('body');
+ let child: ChildNode | null;
+ temp.innerHTML = html;
+ while (true) {
+ child = temp.firstChild;
+ if (!child) {
+ break;
+ }
+ frag.appendChild(child);
+ }
+
+ return this.setDOMContent(frag);
+ }
+
+ public setLnglat(lngLat: ILngLat): this {
+ this.lngLat = lngLat;
+ if (this.mapservice) {
+ this.mapservice.on('camerachange', this.update);
+ }
+ this.update();
+ return this;
+ }
+ public getLnglat(): ILngLat {
+ return this.lngLat;
+ }
+ public setText(text: string) {
+ return this.setDOMContent(window.document.createTextNode(text));
+ }
+
+ public setMaxWidth(maxWidth: string): this {
+ this.popupOption.maxWidth = maxWidth;
+ this.update();
+ return this;
+ }
+
+ public setDOMContent(htmlNode: ChildNode | DocumentFragment) {
+ this.createContent();
+ this.content.appendChild(htmlNode);
+ this.update();
+ return this;
+ }
+
+ // 移除popup
+ public remove() {
+ if (this.content) {
+ this.removeDom(this.content);
+ }
+
+ if (this.container) {
+ this.removeDom(this.container);
+ delete this.container;
+ }
+ if (this.mapservice) {
+ // TODO: mapbox AMap 事件同步
+ this.mapservice.off('camerachange', this.update);
+ this.mapservice.off('click', this.onClickClose);
+ delete this.mapservice;
+ }
+ clearTimeout(this.timeoutInstance);
+ this.emit('close');
+ return this;
+ }
+ public isOpen() {
+ return !!this.mapservice;
+ }
+
+ private createContent() {
+ if (this.content) {
+ DOM.remove(this.content);
+ }
+ this.content = DOM.create('div', 'l7-popup-content', this.container);
+ if (this.popupOption.closeButton) {
+ this.closeButton = DOM.create(
+ 'button',
+ 'l7-popup-close-button',
+ this.content,
+ );
+ // this.closeButton.type = 'button';
+ this.closeButton.setAttribute('aria-label', 'Close popup');
+ this.closeButton.innerHTML = '×';
+ this.closeButton.addEventListener('click', this.onClickClose);
+ }
+ }
+
+ private creatDom(tagName: string, className: string, container: HTMLElement) {
+ const el = window.document.createElement(tagName);
+ if (className !== undefined) {
+ el.className = className;
+ }
+ if (container) {
+ container.appendChild(el);
+ }
+ return el;
+ }
+
+ private removeDom(node: ChildNode) {
+ if (node.parentNode) {
+ node.parentNode.removeChild(node);
+ }
+ }
+
+ private getdefault() {
+ return {
+ closeButton: true,
+ closeOnClick: true,
+ maxWidth: '240px',
+ offsets: [0, 0],
+ anchor: anchorType.BOTTOM,
+ className: '',
+ };
+ }
+
+ private onClickClose() {
+ this.remove();
+ }
+
+ private update() {
+ const hasPosition = this.lngLat;
+ const { className, maxWidth, anchor } = this.popupOption;
+ if (!this.mapservice || !hasPosition || !this.content) {
+ return;
+ }
+ const markerContainer = this.mapservice.getMarkerContainer();
+ if (!this.container && markerContainer) {
+ this.container = this.creatDom(
+ 'div',
+ 'l7-popup',
+ markerContainer.parentNode as HTMLElement,
+ );
+
+ this.tip = this.creatDom('div', 'l7-popup-tip', this.container);
+ this.container.appendChild(this.content);
+ if (className) {
+ className
+ .split(' ')
+ .forEach((name) => this.container.classList.add(name));
+ }
+ this.container.addEventListener('mousedown', (e) => {
+ e.stopPropagation();
+ });
+ }
+ if (maxWidth && this.container.style.maxWidth !== maxWidth) {
+ this.container.style.maxWidth = maxWidth;
+ }
+
+ this.updatePosition();
+ DOM.setTransform(this.container, `${anchorTranslate[anchor]}`);
+ applyAnchorClass(this.container, anchor, 'popup');
+ }
+
+ private updatePosition() {
+ if (!this.mapservice) {
+ return;
+ }
+ const { lng, lat } = this.lngLat;
+ const { offsets } = this.popupOption;
+ const pos = this.mapservice.lngLatToContainer([lng, lat]);
+ this.container.style.left = pos.x + offsets[0] + 'px';
+ this.container.style.top = pos.y - offsets[1] + 'px';
+ }
+}
diff --git a/packages/component/src/utils/anchor.ts b/packages/component/src/utils/anchor.ts
new file mode 100644
index 0000000000..2b1e301c51
--- /dev/null
+++ b/packages/component/src/utils/anchor.ts
@@ -0,0 +1,36 @@
+export enum anchorType {
+ 'CENTER' = 'center',
+ 'TOP' = 'top',
+ 'TOP-LEFT' = 'top-left',
+ 'TOP-RIGHT' = 'top-right',
+ 'BOTTOM' = 'bottom',
+ 'BOTTOM-LEFT' = 'bottom-left',
+ 'LEFT' = 'left',
+ 'RIGHT' = 'right',
+}
+
+export const anchorTranslate = {
+ center: 'translate(-50%,-50%)',
+ top: 'translate(-50%,0)',
+ 'top-left': 'translate(0,0)',
+ 'top-right': 'translate(-100%,0)',
+ bottom: 'translate(-50%,-100%)',
+ 'bottom-left': 'translate(0,-100%)',
+ 'bottom-right': 'translate(-100%,-100%)',
+ left: 'translate(0,-50%)',
+ right: 'translate(-100%,-50%)',
+};
+
+export function applyAnchorClass(
+ element: HTMLElement,
+ anchor: string,
+ prefix: string,
+) {
+ const classList = element.classList;
+ for (const key in anchorTranslate) {
+ if (anchorTranslate.hasOwnProperty(key)) {
+ classList.remove(`l7-${prefix}-anchor-${key}`);
+ }
+ }
+ classList.add(`l7-${prefix}-anchor-${anchor}`);
+}
diff --git a/packages/component/tsconfig.build.json b/packages/component/tsconfig.build.json
new file mode 100644
index 0000000000..99200a9677
--- /dev/null
+++ b/packages/component/tsconfig.build.json
@@ -0,0 +1,9 @@
+{
+ "extends": "../../tsconfig.build.json",
+ "compilerOptions": {
+ "declarationDir": "./es",
+ "rootDir": "./src",
+ "baseUrl": "./"
+ },
+ "include": ["./src"]
+}
diff --git a/packages/core/.gitignore b/packages/core/.gitignore
new file mode 100644
index 0000000000..49c199b6ab
--- /dev/null
+++ b/packages/core/.gitignore
@@ -0,0 +1,3 @@
+lib
+es
+dist
diff --git a/packages/core/package.json b/packages/core/package.json
new file mode 100644
index 0000000000..eb97425d06
--- /dev/null
+++ b/packages/core/package.json
@@ -0,0 +1,51 @@
+{
+ "name": "@l7/core",
+ "version": "0.0.1",
+ "description": "",
+ "main": "lib/index.js",
+ "module": "es/index.js",
+ "types": "es/index.d.ts",
+ "sideEffects": true,
+ "files": [
+ "lib",
+ "es",
+ "README.md"
+ ],
+ "scripts": {
+ "tsc": "tsc --project tsconfig.build.json",
+ "clean": "rimraf dist; rimraf es; rimraf lib;",
+ "build": "run-p build:*",
+ "build:cjs": "BABEL_ENV=cjs babel src --root-mode upward --out-dir lib --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
+ "build:esm": "BABEL_ENV=esm babel src --root-mode upward --out-dir es --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
+ "watch": "BABEL_ENV=cjs babel src --watch --root-mode upward --out-dir lib --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments"
+ },
+ "author": "xiaoiver",
+ "license": "ISC",
+ "dependencies": {
+ "@l7/utils": "0.0.1",
+ "@mapbox/tiny-sdf": "^1.1.1",
+ "ajv": "^6.10.2",
+ "eventemitter3": "^4.0.0",
+ "gl-matrix": "^3.1.0",
+ "hammerjs": "^2.0.8",
+ "inversify": "^5.0.1",
+ "inversify-inject-decorators": "^3.1.0",
+ "lodash": "^4.17.15",
+ "mapbox-gl": "^1.2.1",
+ "merge-json-schemas": "^1.0.0",
+ "probe.gl": "^3.1.1",
+ "reflect-metadata": "^0.1.13",
+ "tapable": "^2.0.0-beta.8",
+ "viewport-mercator-project": "^6.2.1"
+ },
+ "devDependencies": {
+ "@types/gl-matrix": "^2.4.5",
+ "@types/hammerjs": "^2.0.36",
+ "@types/lodash": "^4.14.138",
+ "@types/viewport-mercator-project": "^6.1.0"
+ },
+ "gitHead": "0563f357f3a07c099bf1ffa9350e6fa3c88353ae",
+ "publishConfig": {
+ "access": "public"
+ }
+}
diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts
new file mode 100644
index 0000000000..4dacd4ef46
--- /dev/null
+++ b/packages/core/src/index.ts
@@ -0,0 +1,62 @@
+import container, { lazyInject, lazyMultiInject } from './inversify.config';
+import ClearPass from './services/renderer/passes/ClearPass';
+import MultiPassRenderer from './services/renderer/passes/MultiPassRenderer';
+import PixelPickingPass from './services/renderer/passes/PixelPickingPass';
+import RenderPass from './services/renderer/passes/RenderPass';
+import TAAPass from './services/renderer/passes/TAAPass';
+import { TYPES } from './types';
+import { packCircleVertex } from './utils/vertex-compression';
+
+export {
+ /**
+ * IoC 容器
+ */
+ container,
+ /**
+ * lazy inject,供各个 Layer 使用
+ */
+ lazyInject,
+ lazyMultiInject,
+ /**
+ * 各个 Service 接口标识符
+ */
+ TYPES,
+ packCircleVertex,
+ /** pass */
+ MultiPassRenderer,
+ ClearPass,
+ RenderPass,
+ PixelPickingPass,
+ TAAPass,
+};
+
+/** 暴露服务接口供其他 packages 实现 */
+export * from './services/layer/ILayerService';
+export * from './services/layer/IStyleAttributeService';
+export * from './services/source/ISourceService';
+export * from './services/map/IMapService';
+export * from './services/coordinate/ICoordinateSystemService';
+export * from './services/renderer/IRendererService';
+export * from './services/camera/ICameraService';
+export * from './services/config/IConfigService';
+export * from './services/scene/ISceneService';
+export * from './services/shader/IShaderModuleService';
+export * from './services/asset/IIconService';
+export * from './services/asset/IFontService';
+export * from './services/component/IControlService';
+export * from './services/component/IMarkerService';
+export * from './services/component/IPopUpService';
+export * from './services/log/ILogService';
+export * from './services/interaction/IInteractionService';
+
+/** 全部渲染服务接口 */
+export * from './services/renderer/IAttribute';
+export * from './services/renderer/IBuffer';
+export * from './services/renderer/IElements';
+export * from './services/renderer/IFramebuffer';
+export * from './services/renderer/IModel';
+export * from './services/renderer/IMultiPassRenderer';
+export * from './services/renderer/IRenderbuffer';
+export * from './services/renderer/ITexture2D';
+export * from './services/renderer/IUniform';
+export * from './services/renderer/gl';
diff --git a/packages/core/src/inversify.config.ts b/packages/core/src/inversify.config.ts
new file mode 100644
index 0000000000..6249fa31f5
--- /dev/null
+++ b/packages/core/src/inversify.config.ts
@@ -0,0 +1,205 @@
+import 'reflect-metadata';
+
+import { EventEmitter } from 'eventemitter3';
+import { Container, decorate, injectable, interfaces } from 'inversify';
+import getDecorators from 'inversify-inject-decorators';
+import { TYPES } from './types';
+
+/** Service interfaces */
+import { IFontService } from './services/asset/IFontService';
+import { IIconService } from './services/asset/IIconService';
+import { ICameraService } from './services/camera/ICameraService';
+import { IControlService } from './services/component/IControlService';
+import { IGlobalConfigService } from './services/config/IConfigService';
+import { ICoordinateSystemService } from './services/coordinate/ICoordinateSystemService';
+import { IInteractionService } from './services/interaction/IInteractionService';
+import { ILayerService } from './services/layer/ILayerService';
+import { IStyleAttributeService } from './services/layer/IStyleAttributeService';
+import { ILogService } from './services/log/ILogService';
+import { ISceneService } from './services/scene/ISceneService';
+import { IShaderModuleService } from './services/shader/IShaderModuleService';
+
+/** Service implements */
+import FontService from './services/asset/FontService';
+import IconService from './services/asset/IconService';
+import CameraService from './services/camera/CameraService';
+import ControlService from './services/component/ControlService';
+import GlobalConfigService from './services/config/ConfigService';
+import CoordinateSystemService from './services/coordinate/CoordinateSystemService';
+import InteractionService from './services/interaction/InteractionService';
+import LayerService from './services/layer/LayerService';
+import StyleAttributeService from './services/layer/StyleAttributeService';
+import LogService from './services/log/LogService';
+import SceneService from './services/scene/SceneService';
+import ShaderModuleService from './services/shader/ShaderModuleService';
+
+/** PostProcessing passes */
+import { IPostProcessingPass } from './services/renderer/IMultiPassRenderer';
+import BlurHPass from './services/renderer/passes/post-processing/BlurHPass';
+import BlurVPass from './services/renderer/passes/post-processing/BlurVPass';
+import ColorHalfTonePass from './services/renderer/passes/post-processing/ColorHalfTonePass';
+import CopyPass from './services/renderer/passes/post-processing/CopyPass';
+import HexagonalPixelatePass from './services/renderer/passes/post-processing/HexagonalPixelatePass';
+import InkPass from './services/renderer/passes/post-processing/InkPass';
+import NoisePass from './services/renderer/passes/post-processing/NoisePass';
+import SepiaPass from './services/renderer/passes/post-processing/SepiaPass';
+
+// @see https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#defaultscope
+const container = new Container();
+
+/**
+ * bind services
+ */
+container
+ .bind(TYPES.ISceneService)
+ .to(SceneService)
+ .inTransientScope();
+container
+ .bind(TYPES.IGlobalConfigService)
+ .to(GlobalConfigService)
+ .inSingletonScope();
+container
+ .bind(TYPES.ILayerService)
+ .to(LayerService)
+ .inSingletonScope();
+container
+ .bind(TYPES.IStyleAttributeService)
+ .to(StyleAttributeService)
+ .inRequestScope();
+container
+ .bind(TYPES.ICameraService)
+ .to(CameraService)
+ .inSingletonScope();
+container
+ .bind(TYPES.ICoordinateSystemService)
+ .to(CoordinateSystemService)
+ .inSingletonScope();
+container
+ .bind(TYPES.IIconService)
+ .to(IconService)
+ .inSingletonScope();
+container
+ .bind(TYPES.IShaderModuleService)
+ .to(ShaderModuleService)
+ .inSingletonScope();
+container
+ .bind(TYPES.ILogService)
+ .to(LogService)
+ .inSingletonScope();
+container
+ .bind(TYPES.IInteractionService)
+ .to(InteractionService)
+ .inSingletonScope();
+container
+ .bind(TYPES.IFontService)
+ .to(FontService)
+ .inSingletonScope();
+container
+ .bind(TYPES.IControlService)
+ .to(ControlService)
+ .inSingletonScope();
+
+// @see https://github.com/inversify/InversifyJS/blob/master/wiki/inheritance.md#what-can-i-do-when-my-base-class-is-provided-by-a-third-party-module
+decorate(injectable(), EventEmitter);
+container.bind(TYPES.IEventEmitter).to(EventEmitter);
+// 支持 L7 使用 new 而非容器实例化的场景,同时禁止 lazyInject cache
+// @see https://github.com/inversify/inversify-inject-decorators#caching-vs-non-caching-behaviour
+const DECORATORS = getDecorators(container, false);
+
+interface IBabelPropertyDescriptor extends PropertyDescriptor {
+ initializer(): any;
+}
+// Add babel legacy decorators support
+// @see https://github.com/inversify/InversifyJS/issues/1050
+// @see https://github.com/inversify/InversifyJS/issues/1026#issuecomment-504936034
+export const lazyInject = (
+ serviceIdentifier: interfaces.ServiceIdentifier,
+) => {
+ const original = DECORATORS.lazyInject(serviceIdentifier);
+ // the 'descriptor' parameter is actually always defined for class fields for Babel, but is considered undefined for TSC
+ // so we just hack it with ?/! combination to avoid "TS1240: Unable to resolve signature of property decorator when called as an expression"
+ return function(
+ this: any,
+ proto: any,
+ key: string,
+ descriptor?: IBabelPropertyDescriptor,
+ ): void {
+ // make it work as usual
+ original.call(this, proto, key);
+ // return link to proto, so own value wont be 'undefined' after component's creation
+ if (descriptor) {
+ descriptor.initializer = () => {
+ return proto[key];
+ };
+ }
+ };
+};
+export const lazyMultiInject = (
+ serviceIdentifier: interfaces.ServiceIdentifier,
+) => {
+ const original = DECORATORS.lazyMultiInject(serviceIdentifier);
+ // the 'descriptor' parameter is actually always defined for class fields for Babel, but is considered undefined for TSC
+ // so we just hack it with ?/! combination to avoid "TS1240: Unable to resolve signature of property decorator when called as an expression"
+ return function(
+ this: any,
+ proto: any,
+ key: string,
+ descriptor?: IBabelPropertyDescriptor,
+ ): void {
+ // make it work as usual
+ original.call(this, proto, key);
+ if (descriptor) {
+ // return link to proto, so own value wont be 'undefined' after component's creation
+ descriptor!.initializer = () => {
+ return proto[key];
+ };
+ }
+ };
+};
+
+// 绑定 post processing passes
+container
+ .bind>(TYPES.IPostProcessingPass)
+ .to(CopyPass)
+ .whenTargetNamed('copy');
+container
+ .bind>(TYPES.IPostProcessingPass)
+ .to(BlurHPass)
+ .whenTargetNamed('blurH');
+container
+ .bind>(TYPES.IPostProcessingPass)
+ .to(BlurVPass)
+ .whenTargetNamed('blurV');
+container
+ .bind>(TYPES.IPostProcessingPass)
+ .to(NoisePass)
+ .whenTargetNamed('noise');
+container
+ .bind>(TYPES.IPostProcessingPass)
+ .to(SepiaPass)
+ .whenTargetNamed('sepia');
+container
+ .bind>(TYPES.IPostProcessingPass)
+ .to(ColorHalfTonePass)
+ .whenTargetNamed('colorHalftone');
+container
+ .bind>(TYPES.IPostProcessingPass)
+ .to(HexagonalPixelatePass)
+ .whenTargetNamed('hexagonalPixelate');
+container
+ .bind>(TYPES.IPostProcessingPass)
+ .to(InkPass)
+ .whenTargetNamed('ink');
+
+container
+ .bind>>(
+ TYPES.IFactoryPostProcessingPass,
+ )
+ .toFactory>((context) => (named: string) =>
+ context.container.getNamed>(
+ TYPES.IPostProcessingPass,
+ named,
+ ),
+ );
+
+export default container;
diff --git a/packages/core/src/services/asset/FontService.ts b/packages/core/src/services/asset/FontService.ts
new file mode 100644
index 0000000000..656fffc5e2
--- /dev/null
+++ b/packages/core/src/services/asset/FontService.ts
@@ -0,0 +1,244 @@
+import { LRUCache } from '@l7/utils';
+// @ts-ignore
+import TinySDF from '@mapbox/tiny-sdf';
+import { inject, injectable } from 'inversify';
+import { buildMapping } from '../../utils/font_util';
+import {
+ IFontAtlas,
+ IFontMapping,
+ IFontMappingItem,
+ IFontOptions,
+ IFontService,
+} from './IFontService';
+export const DEFAULT_CHAR_SET = getDefaultCharacterSet();
+export const DEFAULT_FONT_FAMILY = 'sans-serif';
+export const DEFAULT_FONT_WEIGHT = 'normal';
+export const DEFAULT_FONT_SIZE = 24;
+export const DEFAULT_BUFFER = 3;
+export const DEFAULT_CUTOFF = 0.25;
+export const DEFAULT_RADIUS = 8;
+const MAX_CANVAS_WIDTH = 1024;
+const BASELINE_SCALE = 1.0;
+const HEIGHT_SCALE = 1.0;
+const CACHE_LIMIT = 3;
+const VALID_PROPS = [
+ 'fontFamily',
+ 'fontWeight',
+ 'characterSet',
+ 'fontSize',
+ 'sdf',
+ 'buffer',
+ 'cutoff',
+ 'radius',
+];
+function getDefaultCharacterSet() {
+ const charSet = [];
+ for (let i = 32; i < 128; i++) {
+ charSet.push(String.fromCharCode(i));
+ }
+ return charSet;
+}
+
+function setTextStyle(
+ ctx: CanvasRenderingContext2D,
+ fontFamily: string,
+ fontSize: number,
+ fontWeight: string,
+) {
+ ctx.font = `${fontWeight} ${fontSize}px ${fontFamily}`;
+ ctx.fillStyle = 'black';
+ ctx.textBaseline = 'middle';
+ // ctx.textAlign = 'left';
+}
+function populateAlphaChannel(alphaChannel: number[], imageData: ImageData) {
+ // populate distance value from tinySDF to image alpha channel
+ for (let i = 0; i < alphaChannel.length; i++) {
+ imageData.data[4 * i + 3] = alphaChannel[i];
+ }
+}
+
+@injectable()
+export default class FontService implements IFontService {
+ public fontAtlas: IFontAtlas;
+ private fontOptions: IFontOptions;
+ private key: string;
+ private cache: LRUCache = new LRUCache(CACHE_LIMIT);
+ public init() {
+ this.cache.clear();
+ this.fontOptions = {
+ fontFamily: DEFAULT_FONT_FAMILY,
+ fontWeight: DEFAULT_FONT_WEIGHT,
+ characterSet: DEFAULT_CHAR_SET,
+ fontSize: DEFAULT_FONT_SIZE,
+ buffer: DEFAULT_BUFFER,
+ sdf: true,
+ cutoff: DEFAULT_CUTOFF,
+ radius: DEFAULT_RADIUS,
+ };
+ this.key = '';
+ }
+
+ public get scale() {
+ return HEIGHT_SCALE;
+ }
+
+ public get canvas(): HTMLCanvasElement {
+ const data = this.cache.get(this.key);
+ return data && data.data;
+ }
+
+ public get mapping(): IFontMapping {
+ const data = this.cache.get(this.key);
+ return data && data.mapping;
+ }
+
+ public setFontOptions(option: Partial) {
+ this.fontOptions = {
+ ...this.fontOptions,
+ ...option,
+ };
+
+ // const oldKey = this.key;
+ this.key = this.getKey();
+
+ const charSet = this.getNewChars(this.key, this.fontOptions.characterSet);
+ const cachedFontAtlas = this.cache.get(this.key);
+
+ if (cachedFontAtlas && charSet.length === 0) {
+ // update texture with cached fontAtlas
+ return;
+ }
+ // update fontAtlas with new settings
+ const fontAtlas = this.generateFontAtlas(
+ this.key,
+ charSet,
+ cachedFontAtlas,
+ );
+ this.fontAtlas = fontAtlas;
+
+ // update cache
+ this.cache.set(this.key, fontAtlas);
+ }
+
+ public destroy(): void {
+ this.cache.clear();
+ }
+
+ private generateFontAtlas(
+ key: string,
+ characterSet: string[],
+ cachedFontAtlas: IFontAtlas,
+ ): IFontAtlas {
+ const {
+ fontFamily,
+ fontWeight,
+ fontSize,
+ buffer,
+ sdf,
+ radius,
+ cutoff,
+ } = this.fontOptions;
+ let canvas = cachedFontAtlas && cachedFontAtlas.data;
+ if (!canvas) {
+ canvas = document.createElement('canvas');
+ canvas.width = MAX_CANVAS_WIDTH;
+ }
+ const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;
+ setTextStyle(ctx, fontFamily, fontSize, fontWeight);
+
+ // 1. build mapping
+ const { mapping, canvasHeight, xOffset, yOffset } = buildMapping({
+ getFontWidth: (char) => ctx.measureText(char).width,
+ fontHeight: fontSize * HEIGHT_SCALE,
+ buffer,
+ characterSet,
+ maxCanvasWidth: MAX_CANVAS_WIDTH,
+ ...(cachedFontAtlas && {
+ mapping: cachedFontAtlas.mapping,
+ xOffset: cachedFontAtlas.xOffset,
+ yOffset: cachedFontAtlas.yOffset,
+ }),
+ });
+
+ // 2. update canvas
+ // copy old canvas data to new canvas only when height changed
+ if (canvas.height !== canvasHeight) {
+ const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
+ canvas.height = canvasHeight;
+ ctx.putImageData(imageData, 0, 0);
+ }
+ setTextStyle(ctx, fontFamily, fontSize, fontWeight);
+
+ // 3. layout characters
+ if (sdf) {
+ const tinySDF = new TinySDF(
+ fontSize,
+ buffer,
+ radius,
+ cutoff,
+ fontFamily,
+ fontWeight,
+ );
+ // used to store distance values from tinySDF
+ // tinySDF.size equals `fontSize + buffer * 2`
+ const imageData = ctx.getImageData(0, 0, tinySDF.size, tinySDF.size);
+
+ for (const char of characterSet) {
+ populateAlphaChannel(tinySDF.draw(char), imageData);
+ // 考虑到描边,需要保留 sdf 的 buffer,不能像 deck.gl 一样直接减去
+ ctx.putImageData(imageData, mapping[char].x, mapping[char].y);
+ }
+ } else {
+ for (const char of characterSet) {
+ ctx.fillText(
+ char,
+ mapping[char].x,
+ mapping[char].y + fontSize * BASELINE_SCALE,
+ );
+ }
+ }
+ return {
+ xOffset,
+ yOffset,
+ mapping,
+ data: canvas,
+ width: canvas.width,
+ height: canvas.height,
+ };
+ }
+
+ private getKey() {
+ const {
+ fontFamily,
+ fontWeight,
+ fontSize,
+ buffer,
+ sdf,
+ radius,
+ cutoff,
+ } = this.fontOptions;
+ if (sdf) {
+ return `${fontFamily} ${fontWeight} ${fontSize} ${buffer} ${radius} ${cutoff}`;
+ }
+ return `${fontFamily} ${fontWeight} ${fontSize} ${buffer}`;
+ }
+
+ private getNewChars(key: string, characterSet: string[]): string[] {
+ const cachedFontAtlas = this.cache.get(key);
+ if (!cachedFontAtlas) {
+ return characterSet;
+ }
+
+ const newChars: string[] = [];
+ const cachedMapping = cachedFontAtlas.mapping;
+ const cachedCharSet = new Set(Object.keys(cachedMapping));
+ const charSet = new Set(characterSet);
+ charSet.forEach((char: string) => {
+ if (!cachedCharSet.has(char)) {
+ newChars.push(char);
+ }
+ });
+
+ return newChars;
+ }
+}
diff --git a/packages/core/src/services/asset/IFontService.ts b/packages/core/src/services/asset/IFontService.ts
new file mode 100644
index 0000000000..208988c535
--- /dev/null
+++ b/packages/core/src/services/asset/IFontService.ts
@@ -0,0 +1,48 @@
+export interface IFontOptions {
+ fontFamily: string;
+ fontWeight: string;
+ characterSet: string[];
+ fontSize: number;
+ buffer: number;
+ sdf: boolean;
+ cutoff: number;
+ radius: number;
+}
+export interface IFontMappingOption {
+ characterSet: string[];
+ getFontWidth: (char: string, i: number) => number;
+ fontHeight: number;
+ buffer: number;
+ maxCanvasWidth: number;
+ mapping: IFontMapping;
+ xOffset: number;
+ yOffset: number;
+}
+export interface IFontMappingItem {
+ x: number;
+ y: number;
+ width: number;
+ height: number;
+ advance: number;
+}
+export interface IFontMapping {
+ [key: string]: IFontMappingItem;
+ [key: number]: IFontMappingItem;
+}
+export interface IFontAtlas {
+ xOffset: number;
+ yOffset: number;
+ mapping: IFontMapping;
+ data: HTMLCanvasElement;
+ width: number;
+ height: number;
+}
+export interface IFontService {
+ mapping: IFontMapping;
+ fontAtlas: IFontAtlas;
+ canvas: HTMLCanvasElement;
+ scale: number;
+ init(): void;
+ setFontOptions(option: Partial): void;
+ destroy(): void;
+}
diff --git a/packages/core/src/services/asset/IIconService.ts b/packages/core/src/services/asset/IIconService.ts
new file mode 100644
index 0000000000..f71632015f
--- /dev/null
+++ b/packages/core/src/services/asset/IIconService.ts
@@ -0,0 +1,30 @@
+import EventEmitter from 'eventemitter3';
+import { ITexture2D } from '../renderer/ITexture2D';
+export type IImage = HTMLImageElement | File | string;
+export type Listener = (...args: any[]) => void;
+export interface IIconValue {
+ x: number;
+ y: number;
+ image?: HTMLImageElement;
+}
+export interface IIcon {
+ id: string;
+ image?: HTMLImageElement;
+ height: number;
+ width: number;
+}
+export interface IICONMap {
+ [key: string]: IIconValue;
+}
+export interface IIconService {
+ canvasHeight: number;
+ on(event: string, fn: EventEmitter.ListenerFn, context?: any): this;
+ init(): void;
+ addImage(id: string, image: IImage): void;
+ hasImage(id: string): boolean;
+ removeImage(id: string): void;
+ getTexture(): ITexture2D;
+ getIconMap(): IICONMap;
+ getCanvas(): HTMLCanvasElement;
+ destroy(): void;
+}
diff --git a/packages/core/src/services/asset/IconService.ts b/packages/core/src/services/asset/IconService.ts
new file mode 100644
index 0000000000..2b593388a8
--- /dev/null
+++ b/packages/core/src/services/asset/IconService.ts
@@ -0,0 +1,133 @@
+import { EventEmitter } from 'eventemitter3';
+import { inject, injectable } from 'inversify';
+import { TYPES } from '../../types';
+import { buildIconMaping } from '../../utils/font_util';
+import { ITexture2D } from '../renderer/ITexture2D';
+import {
+ IIcon,
+ IICONMap,
+ IIconService,
+ IIconValue,
+ IImage,
+} from './IIconService';
+const BUFFER = 3;
+const MAX_CANVAS_WIDTH = 1024;
+const imageSize = 64;
+@injectable()
+export default class IconService extends EventEmitter implements IIconService {
+ public canvasHeight: number;
+ private textrure: ITexture2D;
+ private canvas: HTMLCanvasElement;
+ private iconData: IIcon[];
+ private iconMap: IICONMap;
+ private ctx: CanvasRenderingContext2D;
+ public init() {
+ this.iconData = [];
+ this.iconMap = {};
+ this.canvas = document.createElement('canvas');
+ this.ctx = this.canvas.getContext('2d') as CanvasRenderingContext2D;
+ }
+
+ public addImage(id: string, image: IImage) {
+ let imagedata = new Image();
+ if (this.hasImage(id)) {
+ throw new Error('Image Id already exists');
+ }
+ this.iconData.push({
+ id,
+ width: imageSize,
+ height: imageSize,
+ });
+ this.updateIconMap();
+ this.loadImage(image).then((img) => {
+ imagedata = img as HTMLImageElement;
+ const iconImage = this.iconData.find((icon: IIcon) => {
+ return icon.id === id;
+ });
+ if (iconImage) {
+ iconImage.image = imagedata;
+ }
+ // this.iconData.push({
+ // id,
+ // image: imagedata,
+ // width: imageSize,
+ // height: imageSize,
+ // });
+ this.update();
+ });
+ }
+
+ public getTexture(): ITexture2D {
+ return this.textrure;
+ }
+
+ public getIconMap() {
+ return this.iconMap;
+ }
+
+ public getCanvas() {
+ return this.canvas;
+ }
+
+ public hasImage(id: string): boolean {
+ return this.iconMap.hasOwnProperty(id);
+ }
+
+ public removeImage(id: string): void {
+ if (this.hasImage(id)) {
+ this.iconData = this.iconData.filter((icon) => {
+ return icon.id !== id;
+ });
+ delete this.iconMap[id];
+ this.update();
+ }
+ }
+ public destroy(): void {
+ this.iconData = [];
+ this.iconMap = {};
+ }
+ private update() {
+ this.updateIconMap();
+ this.updateIconAtlas();
+ this.emit('imageUpdate');
+ }
+
+ private updateIconAtlas() {
+ this.canvas.width = MAX_CANVAS_WIDTH;
+ this.canvas.height = this.canvasHeight;
+ Object.keys(this.iconMap).forEach((item: string) => {
+ const { x, y, image } = this.iconMap[item];
+ if (image) {
+ this.ctx.drawImage(image, x, y, imageSize, imageSize);
+ }
+ });
+ }
+
+ private updateIconMap() {
+ const { mapping, canvasHeight } = buildIconMaping(
+ this.iconData,
+ BUFFER,
+ MAX_CANVAS_WIDTH,
+ );
+ this.iconMap = mapping;
+ this.canvasHeight = canvasHeight;
+ }
+
+ private loadImage(url: IImage) {
+ return new Promise((resolve, reject) => {
+ if (url instanceof HTMLImageElement) {
+ resolve(url);
+ return;
+ }
+ const image = new Image();
+ image.crossOrigin = 'anonymous';
+ image.onload = () => {
+ resolve(image);
+ };
+ image.onerror = () => {
+ reject(new Error('Could not load image at ' + url));
+ };
+ image.src = url instanceof File ? URL.createObjectURL(url) : url;
+ });
+ }
+}
diff --git a/packages/core/src/services/camera/Camera.ts b/packages/core/src/services/camera/Camera.ts
new file mode 100644
index 0000000000..baae21af70
--- /dev/null
+++ b/packages/core/src/services/camera/Camera.ts
@@ -0,0 +1,620 @@
+import { mat3, mat4, quat, vec3, vec4 } from 'gl-matrix';
+import { createVec3, getAngle } from '../../utils/math';
+// import Landmark from './Landmark';
+
+export enum CAMERA_TYPE {
+ ORBITING = 'ORBITING',
+ EXPLORING = 'EXPLORING',
+ TRACKING = 'TRACKING',
+}
+
+export enum CAMERA_TRACKING_MODE {
+ DEFAULT = 'DEFAULT',
+ ROTATIONAL = 'ROTATIONAL',
+ TRANSLATIONAL = 'TRANSLATIONAL',
+ CINEMATIC = 'CINEMATIC',
+}
+
+const DEG_2_RAD = Math.PI / 180;
+const RAD_2_DEG = 180 / Math.PI;
+
+/**
+ * 参考「WebGL Insights - 23.Designing Cameras for WebGL Applications」,基于 Responsible Camera 思路设计
+ * 保存相机参数,定义相机动作:
+ * 1. dolly 沿 n 轴移动
+ * 2. pan 沿 u v 轴移动
+ * 3. rotate 以方位角旋转
+ * 4. 移动到 Landmark,具有平滑的动画效果,其间禁止其他用户交互
+ */
+export default class Camera {
+ /**
+ * 相机矩阵
+ */
+ public matrix = mat4.create();
+
+ /**
+ * u 轴
+ * @see http://learnwebgl.brown37.net/07_cameras/camera_introduction.html#a-camera-definition
+ */
+ public right = vec3.fromValues(1, 0, 0);
+
+ /**
+ * v 轴
+ */
+ public up = vec3.fromValues(0, 1, 0);
+
+ /**
+ * n 轴
+ */
+ public forward = vec3.fromValues(0, 0, 1);
+
+ /**
+ * 相机位置
+ */
+ public position = vec3.fromValues(0, 0, 1);
+
+ /**
+ * 视点位置
+ */
+ public focalPoint = vec3.fromValues(0, 0, 0);
+
+ /**
+ * 相机位置到视点向量
+ * focalPoint - position
+ */
+ public distanceVector = vec3.fromValues(0, 0, 0);
+
+ /**
+ * 相机位置到视点距离
+ * length(focalPoint - position)
+ */
+ public distance = 1;
+
+ /**
+ * @see https://en.wikipedia.org/wiki/Azimuth
+ */
+ public azimuth = 0;
+ public elevation = 0;
+ public roll = 0;
+ public relAzimuth = 0;
+ public relElevation = 0;
+ public relRoll = 0;
+
+ /**
+ * 沿 n 轴移动时,保证移动速度从快到慢
+ */
+ public dollyingStep = 0;
+
+ /**
+ * invert the horizontal coordinate system HCS
+ */
+ public rotateWorld = false;
+
+ /**
+ * 投影矩阵参数
+ */
+
+ /**
+ * field of view [0-360]
+ * @see http://en.wikipedia.org/wiki/Angle_of_view
+ */
+ private fov = 30;
+ private near = 0.1;
+ private far = 10000;
+ private aspect = 1;
+
+ /**
+ * 投影矩阵
+ */
+ private perspective = mat4.create();
+
+ private following = undefined;
+
+ private type = CAMERA_TYPE.EXPLORING;
+ private trackingMode = CAMERA_TRACKING_MODE.DEFAULT;
+
+ constructor(type: CAMERA_TYPE) {
+ this.setType(type, undefined);
+ }
+
+ public setType(
+ type: CAMERA_TYPE,
+ trackingMode: CAMERA_TRACKING_MODE | undefined,
+ ) {
+ this.type = type;
+ if (this.type === CAMERA_TYPE.EXPLORING) {
+ this.setWorldRotation(true);
+ } else {
+ this.setWorldRotation(false);
+ }
+ this._getAngles();
+
+ if (this.type === CAMERA_TYPE.TRACKING && trackingMode !== undefined) {
+ this.setTrackingMode(trackingMode);
+ }
+ }
+
+ public setTrackingMode(trackingMode: CAMERA_TRACKING_MODE) {
+ if (this.type !== CAMERA_TYPE.TRACKING) {
+ throw new Error(
+ 'Impossible to set a tracking mode if the camera is not of tracking type',
+ );
+ }
+ this.trackingMode = trackingMode;
+ }
+
+ /**
+ * If flag is true, it reverses the azimuth and elevation angles.
+ * Subsequent calls to rotate, setAzimuth, setElevation,
+ * changeAzimuth or changeElevation will cause the inverted effect.
+ * setRoll or changeRoll is not affected by this method.
+ *
+ * This inversion is useful when one wants to simulate that the world
+ * is moving, instead of the camera.
+ *
+ * By default the camera angles are not reversed.
+ * @param {Boolean} flag the boolean flag to reverse the angles.
+ */
+ public setWorldRotation(flag: boolean) {
+ this.rotateWorld = flag;
+ this._getAngles();
+ }
+
+ /**
+ * 计算 MV 矩阵,为相机矩阵的逆矩阵
+ */
+ public getViewTransform(): mat4 | null {
+ return mat4.invert(mat4.create(), this.matrix);
+ }
+
+ /**
+ * 设置相机矩阵
+ */
+ public setMatrix(matrix: mat4) {
+ this.matrix = matrix;
+ this._update();
+ }
+
+ public setPerspective(
+ near: number,
+ far: number,
+ angle: number,
+ aspect: number,
+ ) {
+ this.fov = angle;
+ this.near = near;
+ this.far = far;
+ this.aspect = aspect;
+ this.updatePerspective();
+ }
+
+ public updatePerspective() {
+ mat4.perspective(
+ this.perspective,
+ this.fov * DEG_2_RAD,
+ this.aspect,
+ this.near,
+ this.far,
+ );
+ }
+
+ /**
+ * 设置相机位置
+ */
+ public setPosition(x: number, y: number, z: number) {
+ this._setPosition(x, y, z);
+ this.setFocalPoint(this.focalPoint);
+ return this;
+ }
+
+ /**
+ * 设置视点位置
+ */
+ public setFocalPoint(x: number | vec3, y?: number, z?: number) {
+ let up = vec3.fromValues(0, 1, 0);
+ this.focalPoint = createVec3(x, y, z);
+
+ if (this.trackingMode === CAMERA_TRACKING_MODE.CINEMATIC) {
+ const d = vec3.subtract(vec3.create(), this.focalPoint, this.position);
+ x = d[0];
+ y = d[1] as number;
+ z = d[2] as number;
+ const r = vec3.length(d);
+ const el = Math.asin(y / r) * RAD_2_DEG;
+ const az = 90 + Math.atan2(z, x) * RAD_2_DEG;
+ const m = mat4.create();
+ mat4.rotateY(m, m, az * DEG_2_RAD);
+ mat4.rotateX(m, m, el * DEG_2_RAD);
+ up = vec3.transformMat4(vec3.create(), [0, 1, 0], m);
+ }
+
+ mat4.invert(
+ this.matrix,
+ mat4.lookAt(mat4.create(), this.position, this.focalPoint, up),
+ );
+
+ this._getAxes();
+ this._getDistance();
+ this._getAngles();
+ return this;
+ }
+
+ /**
+ * 固定当前视点,按指定距离放置相机
+ */
+ public setDistance(d: number) {
+ if (this.distance === d || d < 0) {
+ return;
+ }
+
+ this.distance = d;
+ this.dollyingStep = this.distance / 100;
+
+ const pos = vec3.create();
+ const n = this.forward;
+ const f = this.focalPoint;
+
+ pos[0] = d * n[0] + f[0];
+ pos[1] = d * n[1] + f[1];
+ pos[2] = d * n[2] + f[2];
+
+ this._setPosition(pos);
+ return this;
+ }
+
+ /**
+ * Changes the initial azimuth of the camera
+ */
+ public changeAzimuth(az: number) {
+ this.setAzimuth(this.azimuth + az);
+ return this;
+ }
+
+ /**
+ * Changes the initial elevation of the camera
+ */
+ public changeElevation(el: number) {
+ this.setElevation(this.elevation + el);
+ return this;
+ }
+
+ /**
+ * Changes the initial roll of the camera
+ */
+ public changeRoll(rl: number) {
+ this.setRoll(this.roll + rl);
+ return this;
+ }
+
+ /**
+ * 设置相机方位角,不同相机模式下需要重新计算相机位置或者是视点位置
+ * @param {Number} el the azimuth in degrees
+ */
+ public setAzimuth(az: number) {
+ this.azimuth = getAngle(az);
+ this.computeMatrix();
+
+ this._getAxes();
+ if (
+ this.type === CAMERA_TYPE.ORBITING ||
+ this.type === CAMERA_TYPE.EXPLORING
+ ) {
+ this._getPosition();
+ } else if (this.type === CAMERA_TYPE.TRACKING) {
+ this._getFocalPoint();
+ }
+ return this;
+ }
+
+ public getAzimuth() {
+ return this.azimuth;
+ }
+
+ /**
+ * 设置相机方位角,不同相机模式下需要重新计算相机位置或者是视点位置
+ * @param {Number} el the elevation in degrees
+ */
+ public setElevation(el: number) {
+ this.elevation = getAngle(el);
+ this.computeMatrix();
+
+ this._getAxes();
+ if (
+ this.type === CAMERA_TYPE.ORBITING ||
+ this.type === CAMERA_TYPE.EXPLORING
+ ) {
+ this._getPosition();
+ } else if (this.type === CAMERA_TYPE.TRACKING) {
+ this._getFocalPoint();
+ }
+ return this;
+ }
+
+ /**
+ * 设置相机方位角,不同相机模式下需要重新计算相机位置或者是视点位置
+ * @param {Number} angle the roll angle
+ */
+ public setRoll(angle: number) {
+ this.roll = getAngle(angle);
+ this.computeMatrix();
+
+ this._getAxes();
+ if (
+ this.type === CAMERA_TYPE.ORBITING ||
+ this.type === CAMERA_TYPE.EXPLORING
+ ) {
+ this._getPosition();
+ } else if (this.type === CAMERA_TYPE.TRACKING) {
+ this._getFocalPoint();
+ }
+ return this;
+ }
+
+ /**
+ * Changes the azimuth and elevation with respect to the current camera axes
+ * @param {Number} azimuth the relative azimuth
+ * @param {Number} elevation the relative elevation
+ * @param {Number} roll the relative roll
+ */
+ public rotate(azimuth: number, elevation: number, roll: number) {
+ if (this.type === CAMERA_TYPE.EXPLORING) {
+ azimuth = getAngle(azimuth);
+ elevation = getAngle(elevation);
+ roll = getAngle(roll);
+
+ const rotX = quat.setAxisAngle(
+ quat.create(),
+ [1, 0, 0],
+ (this.rotateWorld ? 1 : -1) * elevation * DEG_2_RAD,
+ );
+ const rotY = quat.setAxisAngle(
+ quat.create(),
+ [0, 1, 0],
+ (this.rotateWorld ? 1 : -1) * azimuth * DEG_2_RAD,
+ );
+
+ const rotZ = quat.setAxisAngle(
+ quat.create(),
+ [0, 0, 1],
+ roll * DEG_2_RAD,
+ );
+ let rotQ = quat.multiply(quat.create(), rotY, rotX);
+ rotQ = quat.multiply(quat.create(), rotQ, rotZ);
+ const rotMatrix = mat4.fromQuat(mat4.create(), rotQ);
+ mat4.translate(this.matrix, this.matrix, [0, 0, -this.distance]);
+ mat4.multiply(this.matrix, this.matrix, rotMatrix);
+ mat4.translate(this.matrix, this.matrix, [0, 0, this.distance]);
+ } else {
+ if (Math.abs(this.elevation + elevation) > 90) {
+ return;
+ }
+ this.relElevation = getAngle(elevation);
+ this.relAzimuth = getAngle(azimuth);
+ this.relRoll = getAngle(roll);
+ this.elevation += this.relElevation;
+ this.azimuth += this.relAzimuth;
+ this.roll += this.relRoll;
+
+ this.computeMatrix();
+ }
+
+ this._getAxes();
+ if (
+ this.type === CAMERA_TYPE.ORBITING ||
+ this.type === CAMERA_TYPE.EXPLORING
+ ) {
+ this._getPosition();
+ } else if (this.type === CAMERA_TYPE.TRACKING) {
+ this._getFocalPoint();
+ }
+
+ this._update();
+ return this;
+ }
+
+ /**
+ * 沿水平(right) & 垂直(up)平移相机
+ */
+ public pan(tx: number, ty: number) {
+ const coords = createVec3(tx, ty, 0);
+ const pos = vec3.clone(this.position);
+
+ vec3.add(pos, pos, vec3.scale(vec3.create(), this.right, coords[0]));
+ vec3.add(pos, pos, vec3.scale(vec3.create(), this.up, coords[1]));
+
+ this._setPosition(pos);
+
+ return this;
+ }
+
+ /**
+ * 沿 n 轴移动,当距离视点远时移动速度较快,离视点越近速度越慢
+ */
+ public dolly(value: number) {
+ const n = this.forward;
+ const pos = vec3.clone(this.position);
+ const step = value * this.dollyingStep;
+ pos[0] += step * n[0];
+ pos[1] += step * n[1];
+ pos[2] += step * n[2];
+
+ this._setPosition(pos);
+ if (
+ this.type === CAMERA_TYPE.ORBITING ||
+ this.type === CAMERA_TYPE.EXPLORING
+ ) {
+ // 重新计算视点距离
+ this._getDistance();
+ } else if (this.type === CAMERA_TYPE.TRACKING) {
+ // 保持视距,移动视点位置
+ vec3.add(this.focalPoint, pos, this.distanceVector);
+ }
+ return this;
+ }
+
+ // public createLandmark(name: string): Landmark {
+ // return new Landmark(name, this);
+ // }
+
+ /**
+ * 根据相机矩阵重新计算各种相机参数
+ */
+ private _update() {
+ this._getAxes();
+ this._getPosition();
+ this._getDistance();
+ this._getAngles();
+ }
+
+ /**
+ * 计算相机矩阵
+ */
+ private computeMatrix() {
+ let rotX;
+ let rotY;
+ // 使用四元数描述 3D 旋转
+ // @see https://xiaoiver.github.io/coding/2018/12/28/Camera-%E8%AE%BE%E8%AE%A1-%E4%B8%80.html
+ const rotZ = quat.setAxisAngle(
+ quat.create(),
+ [0, 0, 1],
+ this.roll * DEG_2_RAD,
+ );
+
+ mat4.identity(this.matrix);
+
+ // only consider HCS for EXPLORING and ORBITING cameras
+ rotX = quat.setAxisAngle(
+ quat.create(),
+ [1, 0, 0],
+ (this.rotateWorld || this.type === CAMERA_TYPE.TRACKING ? 1 : -1) *
+ this.elevation *
+ DEG_2_RAD,
+ );
+ rotY = quat.setAxisAngle(
+ quat.create(),
+ [0, 1, 0],
+ (this.rotateWorld ? 1 : -1) * this.azimuth * DEG_2_RAD,
+ );
+
+ let rotQ = quat.multiply(quat.create(), rotY, rotX);
+ rotQ = quat.multiply(quat.create(), rotQ, rotZ);
+ const rotMatrix = mat4.fromQuat(mat4.create(), rotQ);
+
+ if (
+ this.type === CAMERA_TYPE.ORBITING ||
+ this.type === CAMERA_TYPE.EXPLORING
+ ) {
+ mat4.translate(this.matrix, this.matrix, this.focalPoint);
+ mat4.multiply(this.matrix, this.matrix, rotMatrix);
+ mat4.translate(this.matrix, this.matrix, [0, 0, this.distance]);
+ } else if (this.type === CAMERA_TYPE.TRACKING) {
+ mat4.translate(this.matrix, this.matrix, this.position);
+ mat4.multiply(this.matrix, this.matrix, rotMatrix);
+ }
+ }
+
+ /**
+ * Sets the camera position in the camera matrix
+ */
+ private _setPosition(x: number | vec3, y?: number, z?: number) {
+ this.position = createVec3(x, y, z);
+ const m = this.matrix;
+ m[12] = this.position[0];
+ m[13] = this.position[1];
+ m[14] = this.position[2];
+ m[15] = 1;
+ }
+
+ /**
+ * Recalculates axes based on the current matrix
+ */
+ private _getAxes() {
+ vec3.copy(
+ this.right,
+ createVec3(vec4.transformMat4(vec4.create(), [1, 0, 0, 0], this.matrix)),
+ );
+ vec3.copy(
+ this.up,
+ createVec3(vec4.transformMat4(vec4.create(), [0, 1, 0, 0], this.matrix)),
+ );
+ vec3.copy(
+ this.forward,
+ createVec3(vec4.transformMat4(vec4.create(), [0, 0, 1, 0], this.matrix)),
+ );
+ vec3.normalize(this.right, this.right);
+ vec3.normalize(this.up, this.up);
+ vec3.normalize(this.forward, this.forward);
+ }
+
+ /**
+ * Recalculates euler angles based on the current state
+ */
+ private _getAngles() {
+ // Recalculates angles
+ const x = this.distanceVector[0];
+ const y = this.distanceVector[1];
+ const z = this.distanceVector[2];
+ const r = vec3.length(this.distanceVector);
+
+ // FAST FAIL: If there is no distance we cannot compute angles
+ if (r === 0) {
+ this.elevation = 0;
+ this.azimuth = 0;
+ return;
+ }
+
+ if (this.type === CAMERA_TYPE.TRACKING) {
+ this.elevation = Math.asin(y / r) * RAD_2_DEG;
+ this.azimuth = Math.atan2(-x, -z) * RAD_2_DEG;
+ } else {
+ if (this.rotateWorld) {
+ this.elevation = Math.asin(y / r) * RAD_2_DEG;
+ this.azimuth = Math.atan2(-x, -z) * RAD_2_DEG;
+ } else {
+ this.elevation = -Math.asin(y / r) * RAD_2_DEG;
+ this.azimuth = -Math.atan2(-x, -z) * RAD_2_DEG;
+ }
+ }
+ }
+
+ /**
+ * 重新计算相机位置,只有 ORBITING 模式相机位置才会发生变化
+ */
+ private _getPosition() {
+ vec3.copy(
+ this.position,
+ createVec3(vec4.transformMat4(vec4.create(), [0, 0, 0, 1], this.matrix)),
+ );
+
+ // 相机位置变化,需要重新计算视距
+ this._getDistance();
+ }
+
+ /**
+ * 重新计算视点,只有 TRACKING 模式视点才会发生变化
+ */
+ private _getFocalPoint() {
+ vec3.transformMat3(
+ this.distanceVector,
+ [0, 0, -this.distance],
+ mat3.fromMat4(mat3.create(), this.matrix),
+ );
+ vec3.add(this.focalPoint, this.position, this.distanceVector);
+
+ // 视点变化,需要重新计算视距
+ this._getDistance();
+ }
+
+ /**
+ * 重新计算视距
+ */
+ private _getDistance() {
+ this.distanceVector = vec3.subtract(
+ vec3.create(),
+ this.focalPoint,
+ this.position,
+ );
+ this.distance = vec3.length(this.distanceVector);
+ this.dollyingStep = this.distance / 100;
+ }
+}
diff --git a/packages/core/src/services/camera/CameraService.ts b/packages/core/src/services/camera/CameraService.ts
new file mode 100644
index 0000000000..6c9febcb34
--- /dev/null
+++ b/packages/core/src/services/camera/CameraService.ts
@@ -0,0 +1,133 @@
+import { mat4 } from 'gl-matrix';
+import { inject, injectable } from 'inversify';
+import { ICameraService, IViewport } from './ICameraService';
+
+@injectable()
+export default class CameraService implements ICameraService {
+ private viewport: IViewport;
+
+ /**
+ * 不使用 Viewport 计算的 VP 矩阵,例如偏移坐标系场景
+ */
+ private overridedViewProjectionMatrix: number[] | undefined;
+
+ /**
+ * 抖动后的 VP 矩阵
+ */
+ private jitteredViewProjectionMatrix: number[] | undefined;
+
+ /**
+ * 抖动后的 Projection 矩阵
+ */
+ private jitteredProjectionMatrix: number[] | undefined;
+
+ /**
+ * ViewMatrix 逆矩阵,用于计算相机位置
+ */
+ private viewMatrixInverse: number[];
+
+ /**
+ * 相机位置
+ */
+ private cameraPosition: number[];
+
+ public init() {
+ //
+ }
+
+ /**
+ * 同步根据相机参数创建的视口
+ */
+ public update(viewport: IViewport) {
+ this.viewport = viewport;
+
+ // 计算逆矩阵
+ this.viewMatrixInverse = (mat4.invert(
+ mat4.create(),
+ (this.getViewMatrix() as unknown) as mat4,
+ ) as unknown) as number[];
+
+ this.cameraPosition = [
+ this.viewMatrixInverse[12],
+ this.viewMatrixInverse[13],
+ this.viewMatrixInverse[14],
+ ];
+ }
+
+ public getProjectionMatrix(): number[] {
+ // 优先返回抖动后的 ProjectionMatrix
+ return this.jitteredProjectionMatrix || this.viewport.getProjectionMatrix();
+ }
+
+ public getViewMatrix(): number[] {
+ return this.viewport.getViewMatrix();
+ }
+
+ public getViewMatrixUncentered(): number[] {
+ return this.viewport.getViewMatrixUncentered();
+ }
+
+ public getViewProjectionMatrix(): number[] {
+ return (
+ this.overridedViewProjectionMatrix ||
+ this.jitteredViewProjectionMatrix ||
+ this.viewport.getViewProjectionMatrix()
+ );
+ }
+
+ public getZoom(): number {
+ return this.viewport.getZoom();
+ }
+
+ public getZoomScale(): number {
+ return this.viewport.getZoomScale();
+ }
+
+ public getCenter(): [number, number] {
+ const [lng, lat] = this.viewport.getCenter();
+ return [lng, lat];
+ }
+
+ public getFocalDistance() {
+ return this.viewport.getFocalDistance();
+ }
+
+ public getCameraPosition() {
+ return this.cameraPosition;
+ }
+
+ public projectFlat(
+ lngLat: [number, number],
+ scale?: number | undefined,
+ ): [number, number] {
+ return this.viewport.projectFlat(lngLat, scale);
+ }
+
+ /**
+ * 支持外部计算 VP 矩阵的场景,例如:在偏移坐标系场景中,需要重新计算 VP 矩阵
+ */
+ public setViewProjectionMatrix(viewProjectionMatrix: number[] | undefined) {
+ this.overridedViewProjectionMatrix = viewProjectionMatrix;
+ }
+
+ public jitterProjectionMatrix(x: number, y: number) {
+ const translation = mat4.fromTranslation(mat4.create(), [x, y, 0]);
+
+ this.jitteredProjectionMatrix = (mat4.multiply(
+ mat4.create(),
+ translation,
+ (this.viewport.getProjectionMatrix() as unknown) as mat4,
+ ) as unknown) as number[];
+
+ this.jitteredViewProjectionMatrix = (mat4.multiply(
+ mat4.create(),
+ (this.jitteredProjectionMatrix as unknown) as mat4,
+ (this.viewport.getViewMatrix() as unknown) as mat4,
+ ) as unknown) as number[];
+ }
+
+ public clearJitterProjectionMatrix() {
+ this.jitteredProjectionMatrix = undefined;
+ this.jitteredViewProjectionMatrix = undefined;
+ }
+}
diff --git a/packages/core/src/services/camera/ICameraService.ts b/packages/core/src/services/camera/ICameraService.ts
new file mode 100644
index 0000000000..fab7a35f30
--- /dev/null
+++ b/packages/core/src/services/camera/ICameraService.ts
@@ -0,0 +1,37 @@
+import { IMapCamera } from '../map/IMapService';
+
+// 后续传入 Shader 的变量
+export const CameraUniform = {
+ ProjectionMatrix: 'u_ProjectionMatrix',
+ ViewMatrix: 'u_ViewMatrix',
+ ViewProjectionMatrix: 'u_ViewProjectionMatrix',
+ Zoom: 'u_Zoom',
+ ZoomScale: 'u_ZoomScale',
+ FocalDistance: 'u_FocalDistance',
+ CameraPosition: 'u_CameraPosition',
+};
+
+export interface IViewport {
+ syncWithMapCamera(mapCamera: Partial): void;
+ getProjectionMatrix(): number[];
+ getViewMatrix(): number[];
+ getViewMatrixUncentered(): number[];
+ getViewProjectionMatrix(): number[];
+ getZoom(): number;
+ getZoomScale(): number;
+ getFocalDistance(): number;
+ getCenter(): [number, number];
+ projectFlat(
+ lngLat: [number, number],
+ scale?: number | undefined,
+ ): [number, number];
+}
+
+export interface ICameraService extends Omit {
+ init(): void;
+ update(viewport: IViewport): void;
+ getCameraPosition(): number[];
+ setViewProjectionMatrix(viewProjectionMatrix: number[] | undefined): void;
+ jitterProjectionMatrix(x: number, y: number): void;
+ clearJitterProjectionMatrix(): void;
+}
diff --git a/packages/core/src/services/camera/Landmark.ts b/packages/core/src/services/camera/Landmark.ts
new file mode 100644
index 0000000000..0279aa3a7e
--- /dev/null
+++ b/packages/core/src/services/camera/Landmark.ts
@@ -0,0 +1,65 @@
+import { mat3, mat4, quat, vec3, vec4 } from 'gl-matrix';
+import Camera from './Camera';
+
+/**
+ * 保存相机状态,便于后续在多个 Landmark 间移动
+ */
+export default class Landmark {
+ public name: string;
+
+ private matrix: mat4;
+ private right: vec3;
+ private up: vec3;
+ private forward: vec3;
+ private position: vec3;
+ private focalPoint: vec3;
+ private distanceVector: vec3;
+ private distance: number;
+ private dollyingStep: number;
+ private azimuth = 0;
+ private elevation = 0;
+ private roll = 0;
+ private relAzimuth = 0;
+ private relElevation = 0;
+ private relRoll = 0;
+
+ constructor(name: string, c: Camera) {
+ this.name = name;
+
+ this.matrix = mat4.clone(c.matrix);
+ this.right = vec3.clone(c.right);
+ this.up = vec3.clone(c.up);
+ this.forward = vec3.clone(c.forward);
+ this.position = vec3.clone(c.position);
+ this.focalPoint = vec3.clone(c.focalPoint);
+ this.distanceVector = vec3.clone(c.distanceVector);
+
+ this.azimuth = c.azimuth;
+ this.elevation = c.elevation;
+ this.roll = c.roll;
+ this.relAzimuth = c.relAzimuth;
+ this.relElevation = c.relElevation;
+ this.relRoll = c.relRoll;
+ this.dollyingStep = c.dollyingStep;
+ this.distance = c.distance;
+ }
+
+ public retrieve(c: Camera) {
+ c.matrix = mat4.copy(c.matrix, this.matrix);
+ c.right = vec3.copy(c.right, this.right);
+ c.up = vec3.copy(c.up, this.up);
+ c.forward = vec3.copy(c.forward, this.forward);
+ c.position = vec3.copy(c.position, this.position);
+ c.focalPoint = vec3.copy(c.focalPoint, this.focalPoint);
+ c.distanceVector = vec3.copy(c.distanceVector, this.distanceVector);
+
+ c.azimuth = this.azimuth;
+ c.elevation = this.elevation;
+ c.roll = this.roll;
+ c.relAzimuth = this.relAzimuth;
+ c.relElevation = this.relElevation;
+ c.relRoll = this.relRoll;
+ c.dollyingStep = this.dollyingStep;
+ c.distance = this.distance;
+ }
+}
diff --git a/packages/core/src/services/component/ControlService.ts b/packages/core/src/services/component/ControlService.ts
new file mode 100644
index 0000000000..f2024d4fe4
--- /dev/null
+++ b/packages/core/src/services/component/ControlService.ts
@@ -0,0 +1,77 @@
+import { DOM } from '@l7/utils';
+import { inject, injectable } from 'inversify';
+import { IMapService } from '../map/IMapService';
+import {
+ IControl,
+ IControlCorners,
+ IControlService,
+ IControlServiceCfg,
+} from './IControlService';
+
+@injectable()
+export default class ControlService implements IControlService {
+ public container: HTMLElement;
+ public controlCorners: IControlCorners;
+ public controlContainer: HTMLElement;
+ private controls: IControl[] = [];
+ public init(cfg: IControlServiceCfg) {
+ this.destroy();
+ this.container = cfg.container;
+ this.initControlPos();
+ }
+
+ public addControl(ctr: IControl, mapService: IMapService): void {
+ ctr.addTo(mapService); // scene对象
+ this.controls.push(ctr);
+ }
+ public removeControl(ctr: IControl): this {
+ const index = this.controls.indexOf(ctr);
+ if (index > -1) {
+ this.controls.splice(index, 1);
+ }
+ ctr.remove();
+ return this;
+ }
+
+ public destroy(): void {
+ for (const ctr of this.controls) {
+ ctr.remove();
+ }
+ this.controls = [];
+ this.clearControlPos();
+ }
+
+ private initControlPos() {
+ const corners: IControlCorners = (this.controlCorners = {});
+ const l = 'l7-';
+ const container = (this.controlContainer = DOM.create(
+ 'div',
+ l + 'control-container',
+ this.container,
+ ));
+
+ function createCorner(vSide: string, hSide: string) {
+ const className = l + vSide + ' ' + l + hSide;
+
+ corners[vSide + hSide] = DOM.create('div', className, container);
+ }
+
+ createCorner('top', 'left');
+ createCorner('top', 'right');
+ createCorner('bottom', 'left');
+ createCorner('bottom', 'right');
+ }
+
+ private clearControlPos() {
+ for (const i in this.controlCorners) {
+ if (this.controlCorners[i]) {
+ DOM.remove(this.controlCorners[i]);
+ }
+ }
+ if (this.controlContainer) {
+ DOM.remove(this.controlContainer);
+ }
+ delete this.controlCorners;
+ delete this.controlContainer;
+ }
+}
diff --git a/packages/core/src/services/component/IControlService.ts b/packages/core/src/services/component/IControlService.ts
new file mode 100644
index 0000000000..2a86f66c41
--- /dev/null
+++ b/packages/core/src/services/component/IControlService.ts
@@ -0,0 +1,33 @@
+import { IMapService } from '../map/IMapService';
+export enum PositionType {
+ 'TOPRIGHT' = 'topright',
+ 'TOPLEFT' = 'topleft',
+ 'BOTTOMRIGHT' = 'bottomright',
+ 'BOTTOMLEFT' = 'bottomleft',
+}
+export interface IControlOption {
+ position: PositionType;
+}
+export interface IControlServiceCfg {
+ container: HTMLElement;
+}
+export interface IControlCorners {
+ [key: string]: HTMLElement;
+}
+export interface IControl {
+ setPosition(pos: PositionType): void;
+ addTo(map: IMapService): void;
+ onAdd(map: IMapService): HTMLElement;
+ hide(): void;
+ show(): void;
+ remove(): void;
+}
+export interface IControlService {
+ container: HTMLElement;
+ controlCorners: IControlCorners;
+ controlContainer: HTMLElement;
+ init(cfg: IControlServiceCfg): void;
+ addControl(ctr: IControl, map: IMapService): void;
+ removeControl(ctr: IControl): void;
+ destroy(): void;
+}
diff --git a/packages/core/src/services/component/IMarkerService.ts b/packages/core/src/services/component/IMarkerService.ts
new file mode 100644
index 0000000000..a20a190a2e
--- /dev/null
+++ b/packages/core/src/services/component/IMarkerService.ts
@@ -0,0 +1,13 @@
+import { ILngLat, IMapService } from '../map/IMapService';
+export interface IMarkerScene {
+ getMapService(): IMapService;
+ [key: string]: any;
+}
+export interface IMarker {
+ addTo(scene: IMarkerScene): void;
+ remove(): void;
+ setLnglat(lngLat: ILngLat): this;
+ getLnglat(): ILngLat;
+ getElement(): HTMLElement;
+ togglePopup(): this;
+}
diff --git a/packages/core/src/services/component/IPopUpService.ts b/packages/core/src/services/component/IPopUpService.ts
new file mode 100644
index 0000000000..af4d3a1c36
--- /dev/null
+++ b/packages/core/src/services/component/IPopUpService.ts
@@ -0,0 +1,12 @@
+import { ILngLat, IMapService } from '../map/IMapService';
+import { IMarkerScene } from './IMarkerService';
+export interface IPopup {
+ addTo(scene: IMarkerScene): this;
+ remove(): void;
+ setLnglat(lngLat: ILngLat): this;
+ getLnglat(): ILngLat;
+ setHTML(html: string): this;
+ setText(text: string): this;
+ setMaxWidth(maxWidth: string): this;
+ isOpen(): boolean;
+}
diff --git a/packages/core/src/services/config/ConfigService.ts b/packages/core/src/services/config/ConfigService.ts
new file mode 100644
index 0000000000..0cebe61a09
--- /dev/null
+++ b/packages/core/src/services/config/ConfigService.ts
@@ -0,0 +1,101 @@
+import Ajv from 'ajv';
+import { injectable } from 'inversify';
+import { IGlobalConfig, IGlobalConfigService } from './IConfigService';
+
+const defaultGlobalConfig: Partial = {
+ type: 'amap',
+ zoom: 5,
+ center: [107.622, 39.266],
+ pitch: 0,
+ // minZoom: 3,
+ // maxZoom: 18,
+ colors: [
+ 'rgb(103,0,31)',
+ 'rgb(178,24,43)',
+ 'rgb(214,96,77)',
+ 'rgb(244,165,130)',
+ 'rgb(253,219,199)',
+ 'rgb(247,247,247)',
+ 'rgb(209,229,240)',
+ 'rgb(146,197,222)',
+ 'rgb(67,147,195)',
+ 'rgb(33,102,172)',
+ 'rgb(5,48,97)',
+ ],
+ size: 10,
+ shape: 'circle',
+ scales: {},
+ shape2d: [
+ 'circle',
+ 'triangle',
+ 'square',
+ 'pentagon',
+ 'hexagon',
+ 'octogon',
+ 'hexagram',
+ 'rhombus',
+ 'vesica',
+ ],
+ shape3d: ['cylinder', 'triangleColumn', 'hexagonColumn', 'squareColumn'],
+};
+
+// @see https://github.com/epoberezkin/ajv#options
+const ajv = new Ajv({
+ allErrors: true,
+ verbose: true,
+});
+
+@injectable()
+export default class GlobalConfigService implements IGlobalConfigService {
+ private config: Partial = defaultGlobalConfig;
+
+ /**
+ * 保存每个 Layer 配置项的校验器
+ */
+ private layerConfigValidatorCache: {
+ [layerName: string]: Ajv.ValidateFunction;
+ } = {};
+
+ public getConfig() {
+ return this.config;
+ }
+
+ public setAndCheckConfig(config: Partial) {
+ this.config = {
+ ...this.config,
+ ...config,
+ };
+ // TODO: validate config with JSON schema
+ // @see https://github.com/webpack/schema-utils
+ return true;
+ }
+
+ public reset() {
+ this.config = defaultGlobalConfig;
+ }
+
+ public registerLayerConfigSchemaValidator(layerName: string, schema: object) {
+ if (!this.layerConfigValidatorCache[layerName]) {
+ this.layerConfigValidatorCache[layerName] = ajv.compile(schema);
+ }
+ }
+
+ public validateLayerConfig(layerName: string, data: object) {
+ const validate = this.layerConfigValidatorCache[layerName];
+ if (validate) {
+ const valid = validate(data);
+ if (!valid) {
+ return {
+ valid,
+ errors: validate.errors,
+ errorText: ajv.errorsText(validate.errors),
+ };
+ }
+ }
+ return {
+ valid: true,
+ errors: null,
+ errorText: null,
+ };
+ }
+}
diff --git a/packages/core/src/services/config/IConfigService.ts b/packages/core/src/services/config/IConfigService.ts
new file mode 100644
index 0000000000..f0ac68d7bf
--- /dev/null
+++ b/packages/core/src/services/config/IConfigService.ts
@@ -0,0 +1,21 @@
+import Ajv from 'ajv';
+import { ILayerGlobalConfig } from '../layer/ILayerService';
+import { IMapConfig } from '../map/IMapService';
+import { IRenderConfig } from '../renderer/IRendererService';
+
+export type IGlobalConfig = IMapConfig & IRenderConfig & ILayerGlobalConfig;
+
+export interface IGlobalConfigService {
+ getConfig(): Partial;
+ setAndCheckConfig(config: Partial): boolean;
+ reset(): void;
+ registerLayerConfigSchemaValidator(layerName: string, schema: object): void;
+ validateLayerConfig(
+ layerName: string,
+ data: object,
+ ): {
+ valid: boolean;
+ errors: Ajv.ErrorObject[] | null | undefined;
+ errorText: string | null;
+ };
+}
diff --git a/packages/core/src/services/config/__tests__/schema.spec.ts b/packages/core/src/services/config/__tests__/schema.spec.ts
new file mode 100644
index 0000000000..565bad951b
--- /dev/null
+++ b/packages/core/src/services/config/__tests__/schema.spec.ts
@@ -0,0 +1,57 @@
+import 'reflect-metadata';
+import ConfigService from '../ConfigService';
+import { IGlobalConfigService } from '../IConfigService';
+
+describe('ConfigService', () => {
+ let configService: IGlobalConfigService;
+
+ beforeEach(() => {
+ configService = new ConfigService();
+ });
+
+ it("should validate layer's options according to JSON schema", () => {
+ configService.registerLayerConfigSchemaValidator('testLayer', {
+ properties: {
+ opacity: {
+ type: 'number',
+ minimum: 0,
+ maximum: 1,
+ },
+ enablePicking: {
+ type: 'boolean',
+ },
+ },
+ });
+
+ const { valid, errorText } = configService.validateLayerConfig(
+ 'testLayer',
+ { opacity: 'invalid' },
+ );
+ expect(valid).toBeFalsy();
+ expect(errorText).toMatch('opacity should be number');
+
+ expect(
+ configService.validateLayerConfig('testLayer', {
+ opacity: 1.5,
+ }).valid,
+ ).toBeFalsy();
+
+ expect(
+ configService.validateLayerConfig('testLayer', {
+ enablePicking: 1.5,
+ }).valid,
+ ).toBeFalsy();
+
+ expect(
+ configService.validateLayerConfig('testLayer', {
+ opacity: 1.0,
+ }).valid,
+ ).toBeTruthy();
+
+ expect(
+ configService.validateLayerConfig('testLayer', {
+ opacity: 0.0,
+ }).valid,
+ ).toBeTruthy();
+ });
+});
diff --git a/packages/core/src/services/coordinate/CoordinateSystemService.ts b/packages/core/src/services/coordinate/CoordinateSystemService.ts
new file mode 100644
index 0000000000..227aa8c7ad
--- /dev/null
+++ b/packages/core/src/services/coordinate/CoordinateSystemService.ts
@@ -0,0 +1,186 @@
+import { mat4, vec4 } from 'gl-matrix';
+import { inject, injectable } from 'inversify';
+import { TYPES } from '../../types';
+import { getDistanceScales } from '../../utils/project';
+import { ICameraService } from '../camera/ICameraService';
+import {
+ CoordinateSystem,
+ ICoordinateSystemService,
+} from './ICoordinateSystemService';
+
+const VECTOR_TO_POINT_MATRIX = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0];
+
+@injectable()
+export default class CoordinateSystemService
+ implements ICoordinateSystemService {
+ @inject(TYPES.ICameraService)
+ private readonly cameraService: ICameraService;
+
+ /**
+ * 1. Web 墨卡托坐标系
+ * 2. 偏移经纬度,用于解决高精度抖动问题
+ * 3. 瓦片坐标,用于数据瓦片
+ * 4. 常规世界坐标系,用于常规 2D/3D 可视化场景
+ * 5. P20 坐标系,高德地图使用
+ * @see https://yuque.antfin-inc.com/yuqi.pyq/fgetpa/doml91
+ */
+ private coordinateSystem: CoordinateSystem;
+
+ /**
+ * 屏幕中心点 [lng, lat]
+ */
+ private viewportCenter: [number, number];
+
+ /**
+ * 屏幕中心点的最终投影结果,在 CPU 侧计算后传入 Shader
+ * @see https://zhuanlan.zhihu.com/p/57469121
+ */
+ private viewportCenterProjection: [number, number, number, number];
+
+ /**
+ * 像素单位 -> 经纬度 [x, y, z]
+ */
+ private pixelsPerDegree: [number, number, number];
+
+ /**
+ * 像素单位 -> 经纬度 [lng, lat] 使用泰勒级数展开
+ * 通过墨卡托坐标系下的差值估计世界坐标系下的差值
+ * @see https://zhuanlan.zhihu.com/p/57469121
+ */
+ private pixelsPerDegree2: [number, number, number];
+
+ /**
+ * 像素单位 -> 米
+ */
+ private pixelsPerMeter: [number, number, number];
+
+ /**
+ * 重新计算当前坐标系参数
+ * TODO: 使用 memoize 缓存参数以及计算结果
+ */
+ public refresh(): void {
+ const zoom = this.cameraService.getZoom();
+ const zoomScale = this.cameraService.getZoomScale();
+ const center = this.cameraService.getCenter();
+
+ // 计算像素到米以及经纬度之间的转换
+ const { pixelsPerMeter, pixelsPerDegree } = getDistanceScales({
+ // longitude: center[0],
+ latitude: center[1],
+ zoom,
+ });
+ this.viewportCenter = center;
+ this.viewportCenterProjection = [0, 0, 0, 0];
+ this.pixelsPerMeter = pixelsPerMeter;
+ this.pixelsPerDegree = pixelsPerDegree;
+ this.pixelsPerDegree2 = [0, 0, 0];
+
+ if (
+ this.coordinateSystem === CoordinateSystem.LNGLAT ||
+ this.coordinateSystem === CoordinateSystem.P20
+ ) {
+ // 继续使用相机服务计算的 VP 矩阵
+ this.cameraService.setViewProjectionMatrix(undefined);
+ } else if (this.coordinateSystem === CoordinateSystem.LNGLAT_OFFSET) {
+ this.calculateLnglatOffset(center, zoom);
+ } else if (this.coordinateSystem === CoordinateSystem.P20_OFFSET) {
+ this.calculateLnglatOffset(center, zoom, zoomScale, true);
+ }
+
+ // TODO: 判断是否应用瓦片 & 常规坐标系
+ }
+
+ public getCoordinateSystem(): CoordinateSystem {
+ return this.coordinateSystem;
+ }
+
+ public setCoordinateSystem(coordinateSystem: CoordinateSystem) {
+ this.coordinateSystem = coordinateSystem;
+ }
+
+ public getViewportCenter(): [number, number] {
+ return this.viewportCenter;
+ }
+
+ public getViewportCenterProjection(): [number, number, number, number] {
+ return this.viewportCenterProjection;
+ }
+
+ public getPixelsPerDegree(): [number, number, number] {
+ return this.pixelsPerDegree;
+ }
+
+ public getPixelsPerDegree2(): [number, number, number] {
+ return this.pixelsPerDegree2;
+ }
+
+ public getPixelsPerMeter(): [number, number, number] {
+ return this.pixelsPerMeter;
+ }
+
+ private calculateLnglatOffset(
+ center: [number, number],
+ zoom: number,
+ scale?: number,
+ flipY?: boolean,
+ ) {
+ // http://uber-common.github.io/viewport-mercator-project/docs/api-reference/web-mercator-utils#code-classlanguage-textgetdistancescalesviewportcode
+ const {
+ pixelsPerMeter: ppm,
+ pixelsPerDegree: ppd,
+ pixelsPerDegree2,
+ } = getDistanceScales({
+ // longitude: center[0],
+ latitude: center[1],
+ zoom,
+ scale,
+ flipY,
+ highPrecision: true,
+ });
+
+ let viewMatrix = this.cameraService.getViewMatrix();
+ const projectionMatrix = this.cameraService.getProjectionMatrix();
+ let viewProjectionMatrix = mat4.multiply(
+ ([] as unknown) as mat4,
+ (projectionMatrix as unknown) as mat4,
+ (viewMatrix as unknown) as mat4,
+ );
+
+ // 经纬度投影到 Web 墨卡托坐标系
+ const positionPixels = this.cameraService.projectFlat(
+ [Math.fround(center[0]), Math.fround(center[1])],
+ Math.pow(2, zoom),
+ );
+
+ // Web 墨卡托坐标系通过 VP 矩阵变换到世界坐标系
+ this.viewportCenterProjection = (vec4.transformMat4(
+ ([] as unknown) as vec4,
+ [positionPixels[0], positionPixels[1], 0.0, 1.0],
+ (viewProjectionMatrix as unknown) as mat4,
+ ) as unknown) as [number, number, number, number];
+
+ // Always apply uncentered projection matrix if available (shader adds center)
+ viewMatrix = this.cameraService.getViewMatrixUncentered() || viewMatrix;
+
+ // Zero out 4th coordinate ("after" model matrix) - avoids further translations
+ viewProjectionMatrix = mat4.multiply(
+ ([] as unknown) as mat4,
+ (projectionMatrix as unknown) as mat4,
+ (viewMatrix as unknown) as mat4,
+ );
+ viewProjectionMatrix = mat4.multiply(
+ ([] as unknown) as mat4,
+ viewProjectionMatrix,
+ (VECTOR_TO_POINT_MATRIX as unknown) as mat4,
+ );
+
+ // 重新计算相机 VP 矩阵
+ this.cameraService.setViewProjectionMatrix(
+ (viewProjectionMatrix as unknown) as number[],
+ );
+
+ this.pixelsPerMeter = ppm;
+ this.pixelsPerDegree = ppd;
+ this.pixelsPerDegree2 = pixelsPerDegree2;
+ }
+}
diff --git a/packages/core/src/services/coordinate/ICoordinateSystemService.ts b/packages/core/src/services/coordinate/ICoordinateSystemService.ts
new file mode 100644
index 0000000000..96b763777b
--- /dev/null
+++ b/packages/core/src/services/coordinate/ICoordinateSystemService.ts
@@ -0,0 +1,41 @@
+/**
+ * 支持以下坐标系:
+ * 1. 经纬度
+ * 2. 偏移经纬度,用于解决高精度抖动问题
+ * 3. 瓦片坐标,用于数据瓦片
+ * 4. 常规世界坐标系,用于常规 2D/3D 可视化场景
+ * 5. P20
+ * @see https://yuque.antfin-inc.com/yuqi.pyq/fgetpa/doml91
+ */
+
+// TODO:自动注入 Shader 中
+export enum CoordinateSystem {
+ LNGLAT = 1.0,
+ LNGLAT_OFFSET = 2.0,
+ VECTOR_TILE = 3.0,
+ IDENTITY = 4.0,
+ P20 = 5.0,
+ P20_OFFSET = 6.0,
+ METER_OFFSET = 7.0,
+}
+
+// 后续传入 Shader 的变量
+export const CoordinateUniform = {
+ CoordinateSystem: 'u_CoordinateSystem',
+ ViewportCenter: 'u_ViewportCenter',
+ ViewportCenterProjection: 'u_ViewportCenterProjection',
+ PixelsPerDegree: 'u_PixelsPerDegree',
+ PixelsPerDegree2: 'u_PixelsPerDegree2',
+ PixelsPerMeter: 'u_PixelsPerMeter',
+};
+
+export interface ICoordinateSystemService {
+ refresh(): void;
+ getCoordinateSystem(): CoordinateSystem;
+ setCoordinateSystem(coordinateSystem: CoordinateSystem): void;
+ getViewportCenter(): [number, number];
+ getViewportCenterProjection(): [number, number, number, number];
+ getPixelsPerDegree(): [number, number, number];
+ getPixelsPerDegree2(): [number, number, number];
+ getPixelsPerMeter(): [number, number, number];
+}
diff --git a/packages/core/src/services/interaction/IInteractionService.ts b/packages/core/src/services/interaction/IInteractionService.ts
new file mode 100644
index 0000000000..df77a1d265
--- /dev/null
+++ b/packages/core/src/services/interaction/IInteractionService.ts
@@ -0,0 +1,14 @@
+export enum InteractionEvent {
+ Hover = 'hover',
+ Click = 'click',
+}
+
+export interface IInteractionService {
+ init(): void;
+ destroy(): void;
+ on(
+ eventName: InteractionEvent,
+ callback: (params: { x: number; y: number }) => void,
+ ): void;
+ triggerHover({ x, y }: { x: number; y: number }): void;
+}
diff --git a/packages/core/src/services/interaction/InteractionService.ts b/packages/core/src/services/interaction/InteractionService.ts
new file mode 100644
index 0000000000..b4a8d064b2
--- /dev/null
+++ b/packages/core/src/services/interaction/InteractionService.ts
@@ -0,0 +1,79 @@
+import EventEmitter from 'eventemitter3';
+import Hammer from 'hammerjs';
+import { inject, injectable } from 'inversify';
+import { TYPES } from '../../types';
+import { ILogService } from '../log/ILogService';
+import { IMapService } from '../map/IMapService';
+import { IInteractionService, InteractionEvent } from './IInteractionService';
+
+/**
+ * 由于目前 L7 与地图结合的方案为双 canvas 而非共享 WebGL Context,事件监听注册在地图底图上。
+ * 除此之外,后续如果支持非地图场景,事件监听就需要注册在 L7 canvas 上。
+ */
+@injectable()
+export default class InteractionService extends EventEmitter
+ implements IInteractionService {
+ @inject(TYPES.IMapService)
+ private readonly mapService: IMapService;
+
+ @inject(TYPES.ILogService)
+ private readonly logger: ILogService;
+
+ private hammertime: HammerManager;
+
+ public init() {
+ // 注册事件在地图底图上
+ this.clear();
+ this.addEventListenerOnMap();
+ }
+
+ public destroy() {
+ if (this.hammertime) {
+ this.hammertime.destroy();
+ }
+ this.removeEventListenerOnMap();
+ this.off(InteractionEvent.Hover);
+ }
+
+ public triggerHover({ x, y }: { x: number; y: number }) {
+ this.emit(InteractionEvent.Hover, { x, y });
+ }
+
+ private addEventListenerOnMap() {
+ const $containter = this.mapService.getMapContainer();
+ if ($containter) {
+ const hammertime = new Hammer($containter);
+ hammertime.get('pan').set({ direction: Hammer.DIRECTION_ALL });
+ hammertime.get('pinch').set({ enable: true });
+
+ // hammertime.on('panstart', this.onPanstart);
+ // hammertime.on('panmove', this.onPanmove);
+ // hammertime.on('panend', this.onPanend);
+ // hammertime.on('pinch', this.onPinch);
+
+ $containter.addEventListener('mousemove', this.onHover);
+ this.hammertime = hammertime;
+
+ // TODO: 根据场景注册事件到 L7 canvas 上
+ this.logger.info('add event listeners on canvas');
+ }
+ }
+
+ private removeEventListenerOnMap() {
+ const $containter = this.mapService.getMapContainer();
+ if ($containter) {
+ $containter.removeEventListener('mousemove', this.onHover);
+ }
+ }
+
+ private onHover = ({ x, y }: MouseEvent) => {
+ this.emit(InteractionEvent.Hover, { x, y });
+ };
+ private clear() {
+ if (this.hammertime) {
+ this.hammertime.destroy();
+ }
+ this.removeEventListenerOnMap();
+ this.off(InteractionEvent.Hover);
+ }
+}
diff --git a/packages/core/src/services/layer/ILayerService.ts b/packages/core/src/services/layer/ILayerService.ts
new file mode 100644
index 0000000000..16959dcdc3
--- /dev/null
+++ b/packages/core/src/services/layer/ILayerService.ts
@@ -0,0 +1,183 @@
+import { SyncBailHook, SyncHook } from 'tapable';
+import Clock from '../../utils/clock';
+import { IGlobalConfigService } from '../config/IConfigService';
+import { IModel, IModelInitializationOptions } from '../renderer/IModel';
+import { IMultiPassRenderer } from '../renderer/IMultiPassRenderer';
+import { IUniform } from '../renderer/IUniform';
+import { ISource, ISourceCFG } from '../source/ISourceService';
+import {
+ IAnimateOption,
+ IEncodeFeature,
+ IScale,
+ IScaleOptions,
+ IStyleAttributeService,
+ StyleAttrField,
+ StyleAttributeOption,
+ Triangulation,
+} from './IStyleAttributeService';
+
+export interface ILayerGlobalConfig {
+ colors: string[];
+ size: number;
+ shape: string;
+ shape2d: string[];
+ shape3d: string[];
+ scales: {
+ [key: string]: IScale;
+ };
+}
+export interface ILayerModelInitializationOptions {
+ moduleName: string;
+ vertexShader: string;
+ fragmentShader: string;
+ triangulation: Triangulation;
+}
+export interface ILayerModel {
+ render(): void;
+ getUninforms(): IModelUniform;
+ buildModels(): IModel[];
+}
+export interface IModelUniform {
+ [key: string]: IUniform;
+}
+
+export interface IPickedFeature {
+ x: number;
+ y: number;
+ lnglat?: { lng: number; lat: number };
+ feature?: unknown;
+}
+
+export interface ILayer {
+ id: string; // 一个场景中同一类型 Layer 可能存在多个
+ name: string; // 代表 Layer 的类型
+ visible: boolean;
+ zIndex: number;
+ minZoom: number;
+ maxZoom: number;
+ configService: IGlobalConfigService;
+ plugins: ILayerPlugin[];
+ hooks: {
+ init: SyncBailHook;
+ beforeRender: SyncBailHook;
+ afterRender: SyncHook;
+ beforePickingEncode: SyncHook;
+ afterPickingEncode: SyncHook;
+ beforeHighlight: SyncHook<[number[]]>;
+ afterHighlight: SyncHook;
+ beforeDestroy: SyncHook;
+ afterDestroy: SyncHook;
+ };
+ models: IModel[];
+ sourceOption: {
+ data: any;
+ options?: ISourceCFG;
+ };
+ multiPassRenderer: IMultiPassRenderer;
+ styleAttributeService: IStyleAttributeService;
+ buildLayerModel(
+ options: ILayerModelInitializationOptions &
+ Partial,
+ ): IModel;
+ init(): ILayer;
+ size(field: StyleAttrField, value?: StyleAttributeOption): ILayer;
+ color(field: StyleAttrField, value?: StyleAttributeOption): ILayer;
+ shape(field: StyleAttrField, value?: StyleAttributeOption): ILayer;
+ label(field: StyleAttrField, value?: StyleAttributeOption): ILayer;
+ animate(option: IAnimateOption): ILayer;
+ // pattern(field: string, value: StyleAttributeOption): ILayer;
+ // filter(field: string, value: StyleAttributeOption): ILayer;
+ // active(option: ActiveOption): ILayer;
+ style(options: unknown): ILayer;
+ hide(): ILayer;
+ show(): ILayer;
+ setIndex(index: number): ILayer;
+ isVisible(): boolean;
+ setMaxZoom(min: number): ILayer;
+ setMinZoom(max: number): ILayer;
+ // animate(field: string, option: any): ILayer;
+ render(): ILayer;
+ destroy(): void;
+ source(data: any, option?: ISourceCFG): ILayer;
+ addPlugin(plugin: ILayerPlugin): ILayer;
+ getSource(): ISource;
+ setSource(source: ISource): void;
+ setEncodedData(encodedData: IEncodeFeature[]): void;
+ getEncodedData(): IEncodeFeature[];
+ getStyleOptions(): Partial;
+ getScaleOptions(): IScaleOptions;
+ /**
+ * 事件
+ */
+ on(type: string, hander: (...args: any[]) => void): void;
+ off(type: string, hander: (...args: any[]) => void): void;
+ once(type: string, hander: (...args: any[]) => void): void;
+ /**
+ * JSON Schema 用于校验配置项
+ */
+ getConfigSchemaForValidation(): object;
+ isDirty(): boolean;
+ /**
+ * 直接调用拾取方法,在非鼠标交互场景中使用
+ */
+ pick(query: { x: number; y: number }): void;
+}
+
+/**
+ * Layer 插件
+ */
+export interface ILayerPlugin {
+ apply(layer: ILayer): void;
+}
+
+/**
+ * Layer 初始化参数
+ */
+export interface ILayerInitializationOptions {
+ minZoom: number;
+ maxZoom: number;
+ visible: boolean;
+ zIndex: number;
+ enableMultiPassRenderer: boolean;
+ passes: Array;
+
+ /**
+ * 开启拾取
+ */
+ enablePicking: boolean;
+ /**
+ * 开启高亮
+ */
+ enableHighlight: boolean;
+ /**
+ * 高亮颜色
+ */
+ highlightColor: string | number[];
+ /**
+ * 开启 TAA
+ */
+ enableTAA: boolean;
+ /**
+ * 相机抖动程度
+ */
+ jitterScale: number;
+ onHover(pickedFeature: IPickedFeature): void;
+ onClick(pickedFeature: IPickedFeature): void;
+}
+
+/**
+ * 提供 Layer 管理服务
+ */
+export interface ILayerService {
+ clock: Clock;
+ add(layer: ILayer): void;
+ initLayers(): void;
+ startAnimate(): void;
+ stopAnimate(): void;
+ getLayers(): ILayer[];
+ getLayer(name: string): ILayer | undefined;
+ remove(layer: ILayer): void;
+ updateRenderOrder(): void;
+ renderLayers(): void;
+ destroy(): void;
+}
diff --git a/packages/core/src/services/layer/IStyleAttributeService.ts b/packages/core/src/services/layer/IStyleAttributeService.ts
new file mode 100644
index 0000000000..c6584232b9
--- /dev/null
+++ b/packages/core/src/services/layer/IStyleAttributeService.ts
@@ -0,0 +1,192 @@
+import {
+ IAttribute,
+ IAttributeInitializationOptions,
+} from '../renderer/IAttribute';
+import { IBufferInitializationOptions } from '../renderer/IBuffer';
+import { IElements } from '../renderer/IElements';
+import { IParseDataItem, IParserData } from '../source/ISourceService';
+import { ILayer } from './ILayerService';
+
+/**
+ * 1. 提供各个 Layer 样式属性初始值的注册服务
+ * 2. 当 Layer 通过 style() 改变某些样式属性时,需要感知并标记该属性已经失效,
+ * 随后当 Layer 重绘时通过 dirty 标记进行脏检查。重新传入 uniform 或者构建顶点数据(更新 Buffer 中的指定位置)。
+ * @see https://yuque.antfin-inc.com/yuqi.pyq/fgetpa/qfuzg8
+ */
+
+export enum ScaleTypes {
+ LINEAR = 'linear',
+ POWER = 'power',
+ LOG = 'log',
+ IDENTITY = 'identity',
+ TIME = 'time',
+ QUANTILE = 'quantile',
+ QUANTIZE = 'quantize',
+ THRESHOLD = 'threshold',
+ CAT = 'cat',
+}
+
+export interface IScale {
+ type: ScaleTypes;
+ ticks?: any[];
+ nice?: boolean;
+ format?: () => any;
+ domain?: any[];
+}
+
+export enum StyleScaleType {
+ CONSTANT = 'constant',
+ VARIABLE = 'variable',
+}
+export interface IScaleOption {
+ field?: string;
+ type: ScaleTypes;
+ ticks?: any[];
+ nice?: boolean;
+ format?: () => any;
+ domain?: any[];
+}
+export interface IScaleOptions {
+ [key: string]: IScale;
+}
+export interface IStyleScale {
+ scale: any;
+ field: string;
+ type: StyleScaleType;
+ option: IScaleOption | undefined;
+}
+export enum AttributeType {
+ Attribute,
+ InstancedAttribute,
+ Uniform,
+}
+
+export interface IAnimateOption {
+ enable: boolean;
+ interval?: number;
+ duration?: number;
+ trailLength?: number;
+}
+
+export interface IEncodeFeature {
+ color?: Color;
+ size?: number | number[];
+ shape?: string | number;
+ pattern?: string;
+ id?: number;
+ coordinates: Position | Position[] | Position[][];
+ [key: string]: any;
+}
+
+export interface IVertexAttributeDescriptor
+ extends Omit {
+ /**
+ * attribute name in vertex shader
+ */
+ name: string;
+ /**
+ * 创建 buffer 的参数
+ */
+ buffer: IBufferInitializationOptions;
+ update?: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ normal: number[],
+ ) => number[];
+}
+
+type Position = number[];
+type Color = [number, number, number, number];
+type CallBack = (...args: any[]) => any;
+export type StyleAttributeField = string | string[];
+export type StyleAttributeOption = string | number | boolean | any[] | CallBack;
+export type StyleAttrField = string | string[] | number | number[];
+
+export interface IStyleAttributeInitializationOptions {
+ name: string;
+ type: AttributeType;
+ scale?: {
+ field: StyleAttributeField;
+ values: unknown[];
+ names: string[];
+ type: StyleScaleType;
+ callback?: (...args: any[]) => [];
+ scalers?: Array<{
+ field: string;
+ func: unknown;
+ }>;
+ };
+ descriptor: IVertexAttributeDescriptor;
+}
+
+export interface IFeatureRange {
+ startIndex: number;
+ endIndex: number;
+}
+
+export interface IStyleAttribute extends IStyleAttributeInitializationOptions {
+ needRescale: boolean;
+ needRemapping: boolean;
+ needRegenerateVertices: boolean;
+ featureRange: IFeatureRange;
+ /**
+ * 保存渲染层 IAttribute 引用
+ */
+ vertexAttribute: IAttribute;
+ mapping?(...params: unknown[]): unknown[];
+ setProps(props: Partial): void;
+}
+
+export type Triangulation = (
+ feature: IEncodeFeature,
+) => {
+ vertices: number[];
+ indices: number[];
+ size: number;
+ normals?: number[];
+};
+
+export interface IStyleAttributeUpdateOptions {
+ featureRange: IFeatureRange;
+}
+
+export interface IStyleAttributeService {
+ // registerDefaultStyleOptions(
+ // layerName: string,
+ // options: ILayerStyleOptions,
+ // ): void;
+ registerStyleAttribute(
+ options: Partial,
+ ): IStyleAttribute;
+ updateStyleAttribute(
+ attributeName: string,
+ attributeOptions: Partial,
+ updateOptions: IStyleAttributeUpdateOptions,
+ ): void;
+ getLayerStyleAttributes(): IStyleAttribute[] | undefined;
+ getLayerStyleAttribute(attributeName: string): IStyleAttribute | undefined;
+ createAttributesAndIndices(
+ encodedFeatures: IEncodeFeature[],
+ triangulation: Triangulation,
+ ): {
+ attributes: {
+ [attributeName: string]: IAttribute;
+ };
+ elements: IElements;
+ };
+ /**
+ * 根据 feature range 更新指定属性
+ */
+ updateAttributeByFeatureRange(
+ attributeName: string,
+ features: IEncodeFeature[],
+ startFeatureIdx?: number,
+ endFeatureIdx?: number,
+ ): void;
+ /**
+ * 清除当前管理的所有属性
+ */
+ clearAllAttributes(): void;
+}
diff --git a/packages/core/src/services/layer/LayerService.ts b/packages/core/src/services/layer/LayerService.ts
new file mode 100644
index 0000000000..9dafcc1356
--- /dev/null
+++ b/packages/core/src/services/layer/LayerService.ts
@@ -0,0 +1,118 @@
+import { inject, injectable } from 'inversify';
+import { container, ILayer } from '../..';
+import { TYPES } from '../../types';
+import Clock from '../../utils/clock';
+import { IGlobalConfigService } from '../config/IConfigService';
+import { IRendererService } from '../renderer/IRendererService';
+import { ILayerService } from './ILayerService';
+
+@injectable()
+export default class LayerService implements ILayerService {
+ public clock = new Clock();
+
+ private layers: ILayer[] = [];
+
+ private layerRenderID: number;
+
+ private animateInstanceCount: number = 0;
+
+ @inject(TYPES.IRendererService)
+ private readonly renderService: IRendererService;
+
+ @inject(TYPES.IGlobalConfigService)
+ private readonly configService: IGlobalConfigService;
+
+ public add(layer: ILayer) {
+ this.layers.push(layer);
+ this.initPlugin(layer);
+ layer.init();
+ }
+
+ public initLayers() {
+ this.layers.forEach((layer) => {
+ // register plugins in every layer
+ for (const plugin of layer.plugins) {
+ plugin.apply(layer);
+ }
+ layer.init();
+ });
+ }
+
+ public getLayers(): ILayer[] {
+ return this.layers;
+ }
+
+ public getLayer(id: string): ILayer | undefined {
+ return this.layers.find((layer) => layer.id === id);
+ }
+
+ public remove(layer: ILayer): void {
+ const layerIndex = this.layers.indexOf(layer);
+ if (layerIndex > -1) {
+ this.layers.splice(layerIndex, 1);
+ }
+ layer.destroy();
+ this.renderLayers();
+ }
+
+ public renderLayers() {
+ // TODO:脏检查,只渲染发生改变的 Layer
+ //
+ this.clear();
+ this.layers
+ .filter((layer) => layer.isVisible())
+ .forEach((layer) => {
+ // trigger hooks
+ layer.hooks.beforeRender.call();
+ layer.render();
+ layer.hooks.afterRender.call();
+ });
+ }
+
+ public updateRenderOrder() {
+ this.layers.sort((pre: ILayer, next: ILayer) => {
+ return pre.zIndex - next.zIndex;
+ });
+ this.renderLayers();
+ }
+
+ public destroy() {
+ this.layers.forEach((layer) => layer.destroy());
+ this.layers = [];
+ }
+
+ public startAnimate() {
+ if (this.animateInstanceCount++ === 0) {
+ this.runRender();
+ }
+ }
+
+ public stopAnimate() {
+ if (--this.animateInstanceCount === 0) {
+ this.stopRender();
+ }
+ }
+
+ private initPlugin(layer: ILayer) {
+ for (const plugin of layer.plugins) {
+ plugin.apply(layer);
+ }
+ }
+
+ private clear() {
+ this.renderService.clear({
+ color: [0, 0, 0, 0],
+ depth: 1,
+ framebuffer: null,
+ });
+ }
+
+ private runRender() {
+ this.renderLayers();
+ this.layerRenderID = requestAnimationFrame(this.renderLayers.bind(this));
+ }
+
+ private stopRender() {
+ cancelAnimationFrame(this.layerRenderID);
+ }
+}
diff --git a/packages/core/src/services/layer/StyleAttribute.ts b/packages/core/src/services/layer/StyleAttribute.ts
new file mode 100644
index 0000000000..71b742d4da
--- /dev/null
+++ b/packages/core/src/services/layer/StyleAttribute.ts
@@ -0,0 +1,83 @@
+import { isNil } from 'lodash';
+import {
+ IStyleAttribute,
+ StyleScaleType,
+} from '../layer/IStyleAttributeService';
+import { IAttribute } from '../renderer/IAttribute';
+import {
+ AttributeType,
+ IEncodeFeature,
+ IFeatureRange,
+ IStyleAttributeInitializationOptions,
+ IStyleScale,
+ IVertexAttributeDescriptor,
+} from './IStyleAttributeService';
+
+export default class StyleAttribute implements IStyleAttribute {
+ public name: string;
+ public type: AttributeType;
+ public scale?: {
+ type: StyleScaleType.CONSTANT;
+ names: string[];
+ field: string | string[];
+ values: unknown[];
+ callback?: (...args: any[]) => [];
+ scalers?: Array<{
+ field: string;
+ func: unknown;
+ }>;
+ };
+ public descriptor: IVertexAttributeDescriptor;
+ public featureBufferLayout: Array<{
+ feature: IEncodeFeature;
+ featureIdx: number;
+ bufferOffset: number;
+ length: number;
+ }> = [];
+
+ public needRescale: boolean = false;
+ public needRemapping: boolean = false;
+ public needRegenerateVertices: boolean = false;
+ public featureRange: IFeatureRange = {
+ startIndex: 0,
+ endIndex: Infinity,
+ };
+ public vertexAttribute: IAttribute;
+
+ constructor(options: Partial) {
+ this.setProps(options);
+ }
+
+ public setProps(options: Partial) {
+ Object.assign(this, options);
+ }
+
+ public mapping(params: unknown[]): unknown[] {
+ /**
+ * 当用户设置的 callback 返回 null 时, 应该返回默认 callback 中的值
+ */
+ if (this.scale?.callback) {
+ // 使用用户返回的值处理
+ const ret = this.scale?.callback(params);
+ if (!isNil(ret)) {
+ return [ret];
+ }
+ }
+
+ // 没有 callback 或者用户 callback 返回值为空,则使用默认的逻辑处理
+ return this.defaultCallback(params);
+ }
+
+ private defaultCallback = (params: unknown[]): unknown[] => {
+ // 没有 params 的情况,是指没有指定 fields,直接返回配置的 values 常量
+ if (params.length === 0) {
+ return this.scale?.values || [];
+ }
+ return params.map((param, idx) => {
+ const scaleFunc = this.scale?.scalers![idx].func;
+ // @ts-ignore
+ const value = scaleFunc(param);
+ return value;
+ });
+ };
+}
diff --git a/packages/core/src/services/layer/StyleAttributeService.ts b/packages/core/src/services/layer/StyleAttributeService.ts
new file mode 100644
index 0000000000..94dbbe3ce4
--- /dev/null
+++ b/packages/core/src/services/layer/StyleAttributeService.ts
@@ -0,0 +1,292 @@
+import { inject, injectable } from 'inversify';
+import { TYPES } from '../../types';
+import { gl } from '../renderer/gl';
+import { IAttribute } from '../renderer/IAttribute';
+import { IElements } from '../renderer/IElements';
+import { IRendererService } from '../renderer/IRendererService';
+import { IParseDataItem } from '../source/ISourceService';
+import { ILayer } from './ILayerService';
+import {
+ IEncodeFeature,
+ IStyleAttribute,
+ IStyleAttributeInitializationOptions,
+ IStyleAttributeService,
+ IStyleAttributeUpdateOptions,
+ IVertexAttributeDescriptor,
+ Triangulation,
+} from './IStyleAttributeService';
+import StyleAttribute from './StyleAttribute';
+
+const bytesPerElementMap = {
+ [gl.FLOAT]: 4,
+ [gl.UNSIGNED_BYTE]: 1,
+ [gl.UNSIGNED_SHORT]: 2,
+};
+
+let counter = 0;
+
+/**
+ * 每个 Layer 都拥有一个,用于管理样式属性的注册和更新
+ */
+@injectable()
+export default class StyleAttributeService implements IStyleAttributeService {
+ @inject(TYPES.IRendererService)
+ private readonly rendererService: IRendererService;
+
+ private attributes: IStyleAttribute[] = [];
+
+ private c = counter++;
+
+ private featureLayout: {
+ sizePerElement: number;
+ elements: Array<{
+ featureIdx: number;
+ vertices: number[];
+ normals: number[];
+ offset: number;
+ }>;
+ } = {
+ sizePerElement: 0,
+ elements: [],
+ };
+
+ public registerStyleAttribute(
+ options: Partial,
+ ) {
+ let attributeToUpdate = this.getLayerStyleAttribute(options.name || '');
+ if (attributeToUpdate) {
+ attributeToUpdate.setProps(options);
+ } else {
+ attributeToUpdate = new StyleAttribute(options);
+ this.attributes.push(attributeToUpdate);
+ }
+ return attributeToUpdate;
+ }
+
+ public updateStyleAttribute(
+ attributeName: string,
+ options: Partial,
+ updateOptions?: Partial,
+ ) {
+ let attributeToUpdate = this.getLayerStyleAttribute(attributeName);
+ if (!attributeToUpdate) {
+ attributeToUpdate = this.registerStyleAttribute({
+ ...options,
+ name: attributeName,
+ });
+ }
+ const { scale } = options;
+ if (scale && attributeToUpdate) {
+ // TODO: 需要比较新旧值确定是否需要 rescale
+ // 需要重新 scale,肯定也需要重新进行数据映射
+ attributeToUpdate.scale = scale;
+ attributeToUpdate.needRescale = true;
+ attributeToUpdate.needRemapping = true;
+ attributeToUpdate.needRegenerateVertices = true;
+ if (updateOptions && updateOptions.featureRange) {
+ attributeToUpdate.featureRange = updateOptions.featureRange;
+ }
+ }
+ }
+
+ public getLayerStyleAttributes(): IStyleAttribute[] | undefined {
+ return this.attributes;
+ }
+
+ public getLayerStyleAttribute(
+ attributeName: string,
+ ): IStyleAttribute | undefined {
+ return this.attributes.find(
+ (attribute) => attribute.name === attributeName,
+ );
+ }
+
+ public updateAttributeByFeatureRange(
+ attributeName: string,
+ features: IEncodeFeature[],
+ startFeatureIdx: number = 0,
+ endFeatureIdx?: number,
+ ) {
+ const attributeToUpdate = this.attributes.find(
+ (attribute) => attribute.name === attributeName,
+ );
+ if (attributeToUpdate && attributeToUpdate.descriptor) {
+ const { descriptor } = attributeToUpdate;
+ const { update, buffer, size = 0 } = descriptor;
+ const bytesPerElement = bytesPerElementMap[buffer.type || gl.FLOAT];
+ if (update) {
+ const { elements, sizePerElement } = this.featureLayout;
+ // 截取待更新的 feature 范围
+ const featuresToUpdate = elements.slice(startFeatureIdx, endFeatureIdx);
+
+ // [n, n] 中断更新
+ if (!featuresToUpdate.length) {
+ return;
+ }
+ const { offset } = featuresToUpdate[0];
+ // 以 byte 为单位计算 buffer 中的偏移
+ const bufferOffsetInBytes = offset * size * bytesPerElement;
+ const updatedBufferData = featuresToUpdate
+ .map(({ featureIdx, vertices, normals }, attributeIdx) => {
+ const verticesNumForCurrentFeature =
+ vertices.length / sizePerElement;
+ const featureData: number[] = [];
+ for (
+ let vertexIdx = 0;
+ vertexIdx < verticesNumForCurrentFeature;
+ vertexIdx++
+ ) {
+ const normal = normals
+ ? normals!.slice(vertexIdx * 3, vertexIdx * 3 + 3)
+ : [];
+ featureData.push(
+ ...update(
+ features[featureIdx],
+ featureIdx,
+ vertices.slice(
+ vertexIdx * sizePerElement,
+ vertexIdx * sizePerElement + sizePerElement,
+ ),
+ attributeIdx,
+ normal,
+ ),
+ );
+ }
+ return featureData;
+ })
+ .reduce((prev, cur) => {
+ prev.push(...cur);
+ return prev;
+ }, []);
+
+ // 更新底层 IAttribute 中包含的 IBuffer,使用 subdata
+ attributeToUpdate.vertexAttribute.updateBuffer({
+ data: updatedBufferData,
+ offset: bufferOffsetInBytes,
+ });
+ }
+ }
+ }
+
+ public createAttributesAndIndices(
+ features: IEncodeFeature[],
+ triangulation: Triangulation,
+ ): {
+ attributes: {
+ [attributeName: string]: IAttribute;
+ };
+ elements: IElements;
+ } {
+ const descriptors = this.attributes.map((attr) => attr.descriptor);
+ let verticesNum = 0;
+ const vertices: number[] = [];
+ const indices: number[] = [];
+ const normals: number[] = [];
+ let size = 3;
+
+ features.forEach((feature, featureIdx) => {
+ // 逐 feature 进行三角化
+ const {
+ indices: indicesForCurrentFeature,
+ vertices: verticesForCurrentFeature,
+ normals: normalsForCurrentFeature,
+ size: vertexSize,
+ } = triangulation(feature);
+ indices.push(...indicesForCurrentFeature.map((i) => i + verticesNum));
+ vertices.push(...verticesForCurrentFeature);
+ if (normalsForCurrentFeature) {
+ normals.push(...normalsForCurrentFeature);
+ }
+ size = vertexSize;
+ const verticesNumForCurrentFeature =
+ verticesForCurrentFeature.length / vertexSize;
+
+ // 记录三角化结果,用于后续精确更新指定 feature
+ this.featureLayout.sizePerElement = size;
+ this.featureLayout.elements.push({
+ featureIdx,
+ vertices: verticesForCurrentFeature,
+ normals: normalsForCurrentFeature as number[],
+ offset: verticesNum,
+ });
+
+ verticesNum += verticesNumForCurrentFeature;
+
+ // 根据 position 顶点生成其他顶点数据
+ for (
+ let vertexIdx = 0;
+ vertexIdx < verticesNumForCurrentFeature;
+ vertexIdx++
+ ) {
+ descriptors.forEach((descriptor, attributeIdx) => {
+ if (descriptor && descriptor.update) {
+ const normal =
+ normalsForCurrentFeature?.slice(
+ vertexIdx * 3,
+ vertexIdx * 3 + 3,
+ ) || [];
+ (descriptor.buffer.data as number[]).push(
+ ...descriptor.update(
+ feature,
+ featureIdx,
+ verticesForCurrentFeature.slice(
+ vertexIdx * vertexSize,
+ vertexIdx * vertexSize + vertexSize,
+ ),
+ vertexIdx, // 当前顶点所在feature索引
+ normal,
+ // TODO: 传入顶点索引 vertexIdx
+ ),
+ );
+ } // end if
+ }); // end for each
+ } // end for
+ }); // end features for Each
+ const {
+ createAttribute,
+ createBuffer,
+ createElements,
+ } = this.rendererService;
+
+ const attributes: {
+ [attributeName: string]: IAttribute;
+ } = {};
+ descriptors.forEach((descriptor, attributeIdx) => {
+ if (descriptor) {
+ // IAttribute 参数透传
+ const { buffer, update, name, ...rest } = descriptor;
+
+ const vertexAttribute = createAttribute({
+ // IBuffer 参数透传
+ buffer: createBuffer(buffer),
+ ...rest,
+ });
+ attributes[descriptor.name || ''] = vertexAttribute;
+
+ // 在 StyleAttribute 上保存对 VertexAttribute 的引用
+ this.attributes[attributeIdx].vertexAttribute = vertexAttribute;
+ }
+ });
+
+ const elements = createElements({
+ data: indices,
+ type: gl.UNSIGNED_INT,
+ count: indices.length,
+ });
+
+ return {
+ attributes,
+ elements,
+ };
+ }
+
+ public clearAllAttributes() {
+ // 销毁关联的 vertex attribute buffer objects
+ this.attributes.forEach((attribute) => {
+ if (attribute.vertexAttribute) {
+ attribute.vertexAttribute.destroy();
+ }
+ });
+ this.attributes = [];
+ }
+}
diff --git a/packages/core/src/services/log/ILogService.ts b/packages/core/src/services/log/ILogService.ts
new file mode 100644
index 0000000000..6532d5a8e1
--- /dev/null
+++ b/packages/core/src/services/log/ILogService.ts
@@ -0,0 +1,5 @@
+export interface ILogService {
+ error(message: string): void;
+ warn(message: string): void;
+ info(message: string): void;
+}
diff --git a/packages/core/src/services/log/LogService.ts b/packages/core/src/services/log/LogService.ts
new file mode 100644
index 0000000000..92c739bc20
--- /dev/null
+++ b/packages/core/src/services/log/LogService.ts
@@ -0,0 +1,20 @@
+import { injectable } from 'inversify';
+import { Log } from 'probe.gl';
+import { ILogService } from './ILogService';
+
+const Logger = new Log({ id: 'L7' }).enable(false);
+
+@injectable()
+export default class LogService implements ILogService {
+ public error(message: string): void {
+ Logger.error(message)();
+ }
+
+ public warn(message: string): void {
+ Logger.warn(message)();
+ }
+
+ public info(message: string): void {
+ Logger.info(message)();
+ }
+}
diff --git a/packages/core/src/services/map/IMapService.ts b/packages/core/src/services/map/IMapService.ts
new file mode 100644
index 0000000000..2f97133edb
--- /dev/null
+++ b/packages/core/src/services/map/IMapService.ts
@@ -0,0 +1,143 @@
+import { Map } from 'mapbox-gl';
+import { IViewport } from '../camera/ICameraService';
+export type Point = [number, number];
+export type Bounds = [[number, number], [number, number]];
+export interface ILngLat {
+ lng: number;
+ lat: number;
+}
+export interface IPoint {
+ x: number;
+ y: number;
+}
+export interface IMapService {
+ map: AMap.Map | Map;
+ init(config: Partial): void;
+ destroy(): void;
+ onCameraChanged(callback: (viewport: IViewport) => void): void;
+ // init map
+ addMarkerContainer(): void;
+ getMarkerContainer(): HTMLElement;
+ // MapEvent // 定义事件类型
+
+ on(type: string, handler: (...args: any[]) => void): void;
+ off(type: string, handler: (...args: any[]) => void): void;
+ once(type: string, handler: (...args: any[]) => void): void;
+ // get dom
+ getContainer(): HTMLElement | null;
+ getSize(): [number, number];
+ // get map status method
+ getMinZoom(): number;
+ getMaxZoom(): number;
+ // get map params
+ getType(): MapType;
+ getZoom(): number;
+ getCenter(): ILngLat;
+ getPitch(): number;
+ getRotation(): number;
+ getBounds(): Bounds;
+ getMapContainer(): HTMLElement | null;
+
+ // control with raw map
+ setRotation(rotation: number): void;
+ zoomIn(): void;
+ zoomOut(): void;
+ panTo(p: Point): void;
+ panBy(pixel: Point): void;
+ fitBounds(bound: Bounds): void;
+ setZoomAndCenter(zoom: number, center: Point): void;
+ setMapStyle(style: string): void;
+
+ // coordinates methods
+ pixelToLngLat(pixel: Point): ILngLat;
+ lngLatToPixel(lnglat: Point): IPoint;
+ containerToLngLat(pixel: Point): ILngLat;
+ lngLatToContainer(lnglat: Point): IPoint;
+}
+
+export enum MapType {
+ amap = 'amap',
+ mapbox = 'mapbox',
+}
+
+export const MapServiceEvent = ['mapload'];
+
+/**
+ * 地图初始化配置项
+ */
+export interface IMapConfig {
+ type: MapType | keyof typeof MapType;
+
+ /**
+ * 容器 DOM id
+ */
+ id: string;
+
+ /**
+ * 地图
+ */
+ token?: string;
+
+ /**
+ * 中心点
+ */
+ center?: [number, number];
+
+ /**
+ * 地图倾角
+ */
+ pitch?: number;
+
+ /**
+ * 地图旋转角度
+ */
+ rotation?: number;
+
+ /**
+ * 缩放等级
+ */
+ zoom?: number;
+
+ /**
+ * 底图样式
+ */
+ style?: string;
+ /**
+ * 最小缩放等级
+ */
+ minZoom?: number;
+
+ /**
+ * 最大缩放等级
+ */
+ maxZoom?: number;
+
+ attributionControl?: boolean;
+}
+
+/**
+ * 地图相机参数
+ * @see
+ */
+export interface IMapCamera {
+ // Perspective 相机常规参数
+ // @see https://threejs.org/docs/#api/en/cameras/PerspectiveCamera
+ aspect: number;
+ fov: number;
+ near: number;
+ far: number;
+
+ viewportWidth: number;
+ viewportHeight: number;
+
+ // 地图相机特有参数
+ // @see https://docs.mapbox.com/mapbox-gl-js/api/#map
+ pitch: number;
+ bearing: number;
+ zoom: number;
+ center: [number, number];
+ // 相机高度
+ cameraHeight: number;
+ // 偏移原点,例如 P20 坐标系下
+ offsetOrigin: [number, number];
+}
diff --git a/packages/core/src/services/renderer/IAttribute.ts b/packages/core/src/services/renderer/IAttribute.ts
new file mode 100644
index 0000000000..ac99d6ba09
--- /dev/null
+++ b/packages/core/src/services/renderer/IAttribute.ts
@@ -0,0 +1,36 @@
+import { IBuffer } from './IBuffer';
+
+export interface IAttributeInitializationOptions {
+ buffer: IBuffer;
+
+ /**
+ * vertexAttribPointer 单位为 byte,默认值均为 0
+ */
+ offset?: number;
+ stride?: number;
+
+ /**
+ * 每个顶点数据块大小,取值范围为 [1..4]
+ */
+ size?: number;
+
+ /**
+ * 是否需要归一化 [-1,1] 或者 [0,1],默认值 false
+ */
+ normalized?: boolean;
+
+ /**
+ * gl.vertexAttribDivisorANGLE,自动开启 ANGLE_instanced_arrays 扩展
+ */
+ divisor?: number;
+}
+
+export interface IAttribute {
+ updateBuffer(options: {
+ // 用于替换的数据
+ data: number[] | number[][] | Uint8Array | Uint16Array | Uint32Array;
+ // 原 Buffer 替换位置,单位为 byte
+ offset: number;
+ }): void;
+ destroy(): void;
+}
diff --git a/packages/core/src/services/renderer/IBuffer.ts b/packages/core/src/services/renderer/IBuffer.ts
new file mode 100644
index 0000000000..60d47352c4
--- /dev/null
+++ b/packages/core/src/services/renderer/IBuffer.ts
@@ -0,0 +1,39 @@
+import { gl } from './gl';
+
+export interface IBufferInitializationOptions {
+ data:
+ | number[]
+ | number[][]
+ | Uint8Array
+ | Uint16Array
+ | Uint32Array
+ | Float32Array;
+
+ /**
+ * gl.DRAW_STATIC | gl.DYNAMIC_DRAW | gl.STREAM_DRAW
+ */
+ usage?: gl.STATIC_DRAW | gl.DYNAMIC_DRAW | gl.STREAM_DRAW;
+
+ /**
+ * gl.Float | gl.UNSIGNED_BYTE | ...
+ */
+ type?: gl.FLOAT | gl.UNSIGNED_BYTE;
+ length?: number;
+}
+
+export interface IBuffer {
+ /**
+ * gl.bufferSubData
+ */
+ subData(options: {
+ // 用于替换的数据
+ data: number[] | number[][] | Uint8Array | Uint16Array | Uint32Array;
+ // 原 Buffer 替换位置,单位为 byte
+ offset: number;
+ }): void;
+
+ /**
+ * gl.deleteBuffer
+ */
+ destroy(): void;
+}
diff --git a/packages/core/src/services/renderer/IElements.ts b/packages/core/src/services/renderer/IElements.ts
new file mode 100644
index 0000000000..a1b9402958
--- /dev/null
+++ b/packages/core/src/services/renderer/IElements.ts
@@ -0,0 +1,42 @@
+import { gl } from './gl';
+
+export interface IElementsInitializationOptions {
+ data: number[] | number[][] | Uint8Array | Uint16Array | Uint32Array;
+
+ /**
+ * gl.DRAW_STATIC | gl.DYNAMIC_DRAW | gl.STREAM_DRAW
+ */
+ usage?: gl;
+
+ /**
+ * gl.UNSIGNED_BYTE | gl.UNSIGNED_SHORT | gl.UNSIGNED_INT(开启 OES_element_index_uint 扩展)
+ */
+ type?: gl.UNSIGNED_BYTE | gl.UNSIGNED_SHORT | gl.UNSIGNED_INT;
+ length?: number;
+ primitive?:
+ | gl.POINTS
+ | gl.LINES
+ | gl.LINE_STRIP
+ | gl.LINE_LOOP
+ | gl.TRIANGLES
+ | gl.TRIANGLE_STRIP
+ | gl.TRIANGLE_FAN;
+ count?: number;
+}
+
+export interface IElements {
+ /**
+ * gl.bufferSubData
+ */
+ subData(options: {
+ // 用于替换的数据
+ data: number[] | number[][] | Uint8Array | Uint16Array | Uint32Array;
+ // 原 Buffer 替换位置,单位为 byte
+ offset: number;
+ }): void;
+
+ /**
+ * gl.deleteBuffer
+ */
+ destroy(): void;
+}
diff --git a/packages/core/src/services/renderer/IFramebuffer.ts b/packages/core/src/services/renderer/IFramebuffer.ts
new file mode 100644
index 0000000000..ef6b043750
--- /dev/null
+++ b/packages/core/src/services/renderer/IFramebuffer.ts
@@ -0,0 +1,35 @@
+import { IRenderbuffer } from './IRenderbuffer';
+import { ITexture2D } from './ITexture2D';
+
+export interface IFramebufferInitializationOptions {
+ width?: number;
+ height?: number;
+
+ /**
+ * 布尔值用于开关 depth attachment,
+ * 同时也支持 attach 一个 Texture2D 或者 RenderBuffer
+ */
+ depth?: boolean | ITexture2D | IRenderbuffer;
+
+ /**
+ * 布尔值用于开关 color attachment,
+ * 同时也支持 attach 一个/一组 Texture2D 或者 RenderBuffer
+ */
+ color?: boolean | ITexture2D | IRenderbuffer;
+ colors?: Array;
+
+ /**
+ * 布尔值用于开关 depth attachment,
+ * 同时也支持 attach 一个 RenderBuffer
+ */
+ stencil?: boolean | IRenderbuffer;
+}
+
+export interface IFramebuffer {
+ resize(options: { width: number; height: number }): void;
+
+ /**
+ * gl.deleteRenderbuffer
+ */
+ destroy(): void;
+}
diff --git a/packages/core/src/services/renderer/IModel.ts b/packages/core/src/services/renderer/IModel.ts
new file mode 100644
index 0000000000..280491fc2d
--- /dev/null
+++ b/packages/core/src/services/renderer/IModel.ts
@@ -0,0 +1,199 @@
+import { gl } from './gl';
+import { IAttribute } from './IAttribute';
+import { IElements } from './IElements';
+import { IUniform } from './IUniform';
+
+type stencilOp =
+ | gl.ZERO
+ | gl.KEEP
+ | gl.REPLACE
+ | gl.INVERT
+ | gl.INCR
+ | gl.DECR
+ | gl.INCR_WRAP
+ | gl.DECR_WRAP;
+
+export interface IModelInitializationOptions {
+ /**
+ * Shader 字符串,假设此时已经经过 ShaderLib 处理
+ */
+ vs: string;
+ fs: string;
+
+ uniforms?: {
+ [key: string]: IUniform;
+ };
+
+ attributes: {
+ [key: string]: IAttribute;
+ };
+
+ /**
+ * gl.POINTS | gl.TRIANGLES | ...
+ * 默认值 gl.TRIANGLES
+ */
+ primitive?:
+ | gl.POINTS
+ | gl.LINES
+ | gl.LINE_LOOP
+ | gl.LINE_STRIP
+ | gl.TRIANGLES
+ | gl.TRIANGLE_FAN
+ | gl.TRIANGLE_STRIP;
+ // 绘制的顶点数目
+ count?: number;
+ // 默认值为 0
+ offset?: number;
+
+ /**
+ * gl.drawElements
+ */
+ elements?: IElements;
+ /**
+ * 绘制实例数目
+ */
+ instances?: number;
+
+ colorMask?: [boolean, boolean, boolean, boolean];
+
+ /**
+ * depth buffer
+ */
+ depth?: Partial<{
+ // gl.enable(gl.DEPTH_TEST)
+ enable: boolean;
+ // gl.depthMask
+ mask: boolean;
+ // gl.depthFunc
+ func:
+ | gl.NEVER
+ | gl.ALWAYS
+ | gl.LESS
+ | gl.LEQUAL
+ | gl.GREATER
+ | gl.GEQUAL
+ | gl.EQUAL
+ | gl.NOTEQUAL;
+ // gl.depthRange
+ range: [0, 1];
+ }>;
+
+ /**
+ * blending
+ */
+ blend?: Partial<{
+ // gl.enable(gl.BLEND)
+ enable: boolean;
+ // gl.blendFunc
+ func: Partial<{
+ srcRGB:
+ | gl.ZERO
+ | gl.ONE
+ | gl.SRC_COLOR
+ | gl.ONE_MINUS_SRC_COLOR
+ | gl.SRC_ALPHA
+ | gl.ONE_MINUS_SRC_ALPHA
+ | gl.DST_COLOR
+ | gl.ONE_MINUS_DST_COLOR
+ | gl.DST_ALPHA
+ | gl.ONE_MINUS_DST_ALPHA
+ | gl.CONSTANT_COLOR
+ | gl.ONE_MINUS_CONSTANT_COLOR
+ | gl.CONSTANT_ALPHA
+ | gl.ONE_MINUS_CONSTANT_ALPHA
+ | gl.SRC_ALPHA_SATURATE;
+ srcAlpha: number;
+ dstRGB:
+ | gl.ZERO
+ | gl.ONE
+ | gl.SRC_COLOR
+ | gl.ONE_MINUS_SRC_COLOR
+ | gl.SRC_ALPHA
+ | gl.ONE_MINUS_SRC_ALPHA
+ | gl.DST_COLOR
+ | gl.ONE_MINUS_DST_COLOR
+ | gl.DST_ALPHA
+ | gl.ONE_MINUS_DST_ALPHA
+ | gl.CONSTANT_COLOR
+ | gl.ONE_MINUS_CONSTANT_COLOR
+ | gl.CONSTANT_ALPHA
+ | gl.ONE_MINUS_CONSTANT_ALPHA
+ | gl.SRC_ALPHA_SATURATE;
+ dstAlpha: number;
+ }>;
+ // gl.blendEquation
+ equation: {
+ // TODO: EXT_blend_minmax
+ rgb: gl.FUNC_ADD | gl.FUNC_SUBTRACT | gl.FUNC_REVERSE_SUBTRACT;
+ alpha: gl.FUNC_ADD | gl.FUNC_SUBTRACT | gl.FUNC_REVERSE_SUBTRACT;
+ };
+ // gl.blendColor
+ color: [number, number, number, number];
+ }>;
+
+ /**
+ * stencil
+ */
+ stencil?: {
+ // gl.enable(gl.STENCIL_TEST)
+ enable: boolean;
+ // gl.stencilMask
+ mask: number;
+ func: {
+ cmp:
+ | gl.NEVER
+ | gl.ALWAYS
+ | gl.LESS
+ | gl.LEQUAL
+ | gl.GREATER
+ | gl.GEQUAL
+ | gl.EQUAL
+ | gl.NOTEQUAL;
+ ref: number;
+ mask: number;
+ };
+ opFront: {
+ fail: stencilOp;
+ zfail: stencilOp;
+ zpass: stencilOp;
+ };
+ opBack: {
+ fail: stencilOp;
+ zfail: stencilOp;
+ zpass: stencilOp;
+ };
+ };
+
+ /**
+ * cull
+ */
+ cull?: {
+ // gl.enable(gl.CULL_FACE)
+ enable: boolean;
+ // gl.cullFace
+ face: gl.FRONT | gl.BACK;
+ };
+}
+
+export interface IModelDrawOptions {
+ uniforms?: {
+ [key: string]: IUniform;
+ };
+
+ attributes?: {
+ [key: string]: IAttribute;
+ };
+}
+
+/**
+ * 类似 THREE.Mesh,不同之处在于可以不依赖 THREE.Scene,单独执行封装的渲染命令。
+ * 这些命令包括:
+ * * 执行 Shader Program
+ * * 开启/控制 WebGL 状态(gl.enable)例如 depth/stencil buffer、blending、cull 等
+ * * 销毁资源,例如 buffer texture 等
+ */
+export interface IModel {
+ addUniforms(uniforms: { [key: string]: IUniform }): void;
+ draw(options: IModelDrawOptions): void;
+ destroy(): void;
+}
diff --git a/packages/core/src/services/renderer/IMultiPassRenderer.ts b/packages/core/src/services/renderer/IMultiPassRenderer.ts
new file mode 100644
index 0000000000..c934f0e717
--- /dev/null
+++ b/packages/core/src/services/renderer/IMultiPassRenderer.ts
@@ -0,0 +1,56 @@
+import { ILayer } from '../layer/ILayerService';
+import { IFramebuffer } from './IFramebuffer';
+
+export enum PassType {
+ Normal = 'normal',
+ PostProcessing = 'post-processing',
+}
+
+/**
+ * Pass 分两类:
+ * 1. 渲染相关 eg. ClearPass、RenderPass、PickingPass、ShadowPass
+ * 2. PostProcessing eg. CopyPass、BlurPass
+ * 另外考虑到 Pass 之间严格的执行顺序,render 方法必须是异步的
+ */
+export interface IPass {
+ getName(): string;
+ getType(): PassType;
+ init(layer: ILayer, config?: Partial): void;
+ render(layer: ILayer): void;
+}
+
+/**
+ * PostProcessing,自动切换 renderTarget
+ * 例如最后一个 PostProcessingPass 自动切换 renderTarget 为屏幕
+ */
+export interface IPostProcessingPass
+ extends IPass {
+ setRenderToScreen(renderToScreen: boolean): void;
+ isEnabled(): boolean;
+ setEnabled(enabled: boolean): void;
+ updateOptions(config: Partial): void;
+}
+
+export interface IPostProcessor {
+ getReadFBO(): IFramebuffer;
+ getWriteFBO(): IFramebuffer;
+ resize(viewportWidth: number, viewportHeight: number): void;
+ add(
+ pass: IPostProcessingPass,
+ layer: ILayer,
+ config?: Partial,
+ ): void;
+ render(layer: ILayer): Promise;
+ getPostProcessingPassByName(
+ name: string,
+ ): IPostProcessingPass | undefined;
+}
+
+export interface IMultiPassRenderer {
+ getPostProcessor(): IPostProcessor;
+ resize(viewportWidth: number, viewportHeight: number): void;
+ add(pass: IPass): void;
+ render(): void;
+ getRenderFlag(): boolean;
+ setRenderFlag(enabled: boolean): void;
+}
diff --git a/packages/core/src/services/renderer/IRenderbuffer.ts b/packages/core/src/services/renderer/IRenderbuffer.ts
new file mode 100644
index 0000000000..06cc32ff59
--- /dev/null
+++ b/packages/core/src/services/renderer/IRenderbuffer.ts
@@ -0,0 +1,26 @@
+import { gl } from './gl';
+
+export interface IRenderbufferInitializationOptions {
+ width: number;
+ height: number;
+
+ /**
+ * gl.RGBA4 | gl.DEPTH_COMPONENT16...
+ */
+ format:
+ | gl.RGBA4
+ | gl.RGB565
+ | gl.RGB5_A1
+ | gl.DEPTH_COMPONENT16
+ | gl.STENCIL_INDEX8
+ | gl.DEPTH_STENCIL;
+}
+
+export interface IRenderbuffer {
+ resize(options: { width: number; height: number }): void;
+
+ /**
+ * gl.deleteRenderbuffer
+ */
+ destroy(): void;
+}
diff --git a/packages/core/src/services/renderer/IRendererService.ts b/packages/core/src/services/renderer/IRendererService.ts
new file mode 100644
index 0000000000..d0f09b2d06
--- /dev/null
+++ b/packages/core/src/services/renderer/IRendererService.ts
@@ -0,0 +1,60 @@
+import { ILayer } from '../layer/ILayerService';
+import { IAttribute, IAttributeInitializationOptions } from './IAttribute';
+import { IBuffer, IBufferInitializationOptions } from './IBuffer';
+import { IElements, IElementsInitializationOptions } from './IElements';
+import {
+ IFramebuffer,
+ IFramebufferInitializationOptions,
+} from './IFramebuffer';
+import { IModel, IModelInitializationOptions } from './IModel';
+import { IMultiPassRenderer, IPass } from './IMultiPassRenderer';
+import { ITexture2D, ITexture2DInitializationOptions } from './ITexture2D';
+
+export interface IRenderConfig {
+ /**
+ * 是否开启 multi pass
+ */
+ enableMultiPassRenderer?: boolean;
+ passes?: Array>;
+}
+
+export interface IClearOptions {
+ // gl.clearColor
+ color?: [number, number, number, number];
+ // gl.clearDepth 默认值为 1
+ depth?: number;
+ // gl.clearStencil 默认值为 0
+ stencil?: number;
+ // gl.bindFrameBuffer
+ framebuffer?: IFramebuffer | null;
+}
+
+export interface IReadPixelsOptions {
+ x: number;
+ y: number;
+ width: number;
+ height: number;
+ // gl.bindFrameBuffer
+ framebuffer?: IFramebuffer;
+ data?: Uint8Array;
+}
+
+export interface IRendererService {
+ init($container: HTMLDivElement): Promise;
+ clear(options: IClearOptions): void;
+ createModel(options: IModelInitializationOptions): IModel;
+ createAttribute(options: IAttributeInitializationOptions): IAttribute;
+ createBuffer(options: IBufferInitializationOptions): IBuffer;
+ createElements(options: IElementsInitializationOptions): IElements;
+ createTexture2D(options: ITexture2DInitializationOptions): ITexture2D;
+ createFramebuffer(options: IFramebufferInitializationOptions): IFramebuffer;
+ useFramebuffer(
+ framebuffer: IFramebuffer | null,
+ drawCommands: () => void,
+ ): void;
+ getViewportSize(): { width: number; height: number };
+ getContainer(): HTMLElement | null;
+ viewport(size: { x: number; y: number; width: number; height: number }): void;
+ readPixels(options: IReadPixelsOptions): Uint8Array;
+ destroy(): void;
+}
diff --git a/packages/core/src/services/renderer/ITexture2D.ts b/packages/core/src/services/renderer/ITexture2D.ts
new file mode 100644
index 0000000000..a10da7566c
--- /dev/null
+++ b/packages/core/src/services/renderer/ITexture2D.ts
@@ -0,0 +1,103 @@
+import { gl } from './gl';
+
+export interface ITexture2DInitializationOptions {
+ /**
+ * 纹理尺寸
+ */
+ width: number;
+ height: number;
+
+ /**
+ * 纹理格式
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/texImage2D
+ */
+ format?:
+ | gl.ALPHA
+ | gl.LUMINANCE
+ | gl.LUMINANCE_ALPHA
+ | gl.RGB
+ | gl.RGBA
+ | gl.RGBA4
+ | gl.RGB5_A1
+ | gl.RGB565
+ | gl.DEPTH_COMPONENT
+ | gl.DEPTH_STENCIL;
+
+ /**
+ * 纹理数据类型,可能需要引入扩展,例如 ext.HALF_FLOAT_OES
+ */
+ type?: gl.UNSIGNED_BYTE | gl.UNSIGNED_SHORT | gl.UNSIGNED_INT | gl.FLOAT;
+
+ /**
+ * 纹理 pixel source
+ */
+ data?:
+ | undefined
+ | HTMLCanvasElement
+ | HTMLImageElement
+ | number[]
+ | number[][]
+ | Uint8Array
+ | Uint16Array
+ | Uint32Array
+ | Uint8ClampedArray;
+
+ /**
+ * 纹理参数
+ * @see https://developer.mozilla.org/zh-CN/docs/Web/API/WebGLRenderingContext/texParameter
+ */
+ /* Sets magnification filter. Default: 'nearest' */
+ mag?: gl.NEAREST | gl.LINEAR;
+ /* Sets minification filter. Default: 'nearest' */
+ min?:
+ | gl.NEAREST
+ | gl.LINEAR
+ | gl.LINEAR_MIPMAP_LINEAR
+ | gl.NEAREST_MIPMAP_LINEAR
+ | gl.LINEAR_MIPMAP_NEAREST
+ | gl.NEAREST_MIPMAP_NEAREST;
+ /* Sets wrap mode on S axis. Default: 'clamp' */
+ wrapS?: gl.REPEAT | gl.CLAMP_TO_EDGE | gl.MIRRORED_REPEAT;
+ /* Sets wrap mode on T axis. Default: 'clamp' */
+ wrapT?: gl.REPEAT | gl.CLAMP_TO_EDGE | gl.MIRRORED_REPEAT;
+ aniso?: number;
+
+ /**
+ * 以下为 gl.pixelStorei 参数
+ * @see https://developer.mozilla.org/zh-CN/docs/Web/API/WebGLRenderingContext/pixelStorei
+ */
+ /* Flips textures vertically when uploading. Default: false */
+ flipY?: boolean;
+ /* Sets unpack alignment per row. 1, 2, 4, 8 Default: 1 */
+ alignment?: 1 | 2 | 4 | 8;
+ /* Premultiply alpha when unpacking. Default: false */
+ premultiplyAlpha?: boolean;
+ /* color space flag for pixel unpacking. gl.BROWSER_DEFAULT_WEBGL | gl.NONE */
+ colorSpace?: gl.NONE | gl.BROWSER_DEFAULT_WEBGL;
+
+ mipmap?: boolean | gl.DONT_CARE | gl.NICEST | gl.FASTEST;
+}
+
+export interface ITexture2D {
+ resize(options: { width: number; height: number }): void;
+
+ /**
+ * 写入 subimage
+ * gl.texSubImage2D gl.copyTexSubImage2D
+ */
+ // subImageData(options: {
+ // pixels,
+ // x,
+ // y,
+ // width,
+ // height,
+ // level,
+ // type,
+ // format
+ // });
+
+ /**
+ * gl.deleteTexture
+ */
+ destroy(): void;
+}
diff --git a/packages/core/src/services/renderer/IUniform.ts b/packages/core/src/services/renderer/IUniform.ts
new file mode 100644
index 0000000000..965c740917
--- /dev/null
+++ b/packages/core/src/services/renderer/IUniform.ts
@@ -0,0 +1,4 @@
+import { IFramebuffer } from './IFramebuffer';
+import { ITexture2D } from './ITexture2D';
+
+export type IUniform = number | number[] | boolean | IFramebuffer | ITexture2D;
diff --git a/packages/core/src/services/renderer/gl.ts b/packages/core/src/services/renderer/gl.ts
new file mode 100644
index 0000000000..37bdcd96b4
--- /dev/null
+++ b/packages/core/src/services/renderer/gl.ts
@@ -0,0 +1,422 @@
+/**
+ * WebGL 枚举值
+ * @see http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.14
+ * 使用 babel 插件对常量进行内联,以减少最终打包产物大小
+ * @see https://github.com/uber/deck.gl/blob/7.1-release/dev-docs/roadmaps/dist-size-roadmap.md#inline-gl-constants
+ */
+export enum gl {
+ /* ClearBufferMask */
+ DEPTH_BUFFER_BIT = 0x00000100,
+ STENCIL_BUFFER_BIT = 0x00000400,
+ COLOR_BUFFER_BIT = 0x00004000,
+
+ /* BeginMode */
+ POINTS = 0x0000,
+ LINES = 0x0001,
+ LINE_LOOP = 0x0002,
+ LINE_STRIP = 0x0003,
+ TRIANGLES = 0x0004,
+ TRIANGLE_STRIP = 0x0005,
+ TRIANGLE_FAN = 0x0006,
+
+ /* AlphaFunction (not supported in ES20) */
+ /* NEVER */
+ /* LESS */
+ /* EQUAL */
+ /* LEQUAL */
+ /* GREATER */
+ /* NOTEQUAL */
+ /* GEQUAL */
+ /* ALWAYS */
+
+ /* BlendingFactorDest */
+ ZERO = 0,
+ ONE = 1,
+ SRC_COLOR = 0x0300,
+ ONE_MINUS_SRC_COLOR = 0x0301,
+ SRC_ALPHA = 0x0302,
+ ONE_MINUS_SRC_ALPHA = 0x0303,
+ DST_ALPHA = 0x0304,
+ ONE_MINUS_DST_ALPHA = 0x0305,
+
+ /* BlendingFactorSrc */
+ /* ZERO */
+ /* ONE */
+ DST_COLOR = 0x0306,
+ ONE_MINUS_DST_COLOR = 0x0307,
+ SRC_ALPHA_SATURATE = 0x0308,
+ /* SRC_ALPHA */
+ /* ONE_MINUS_SRC_ALPHA */
+ /* DST_ALPHA */
+ /* ONE_MINUS_DST_ALPHA */
+
+ /* BlendEquationSeparate */
+ FUNC_ADD = 0x8006,
+ BLEND_EQUATION = 0x8009,
+ BLEND_EQUATION_RGB = 0x8009 /* same as BLEND_EQUATION */,
+ BLEND_EQUATION_ALPHA = 0x883d,
+
+ /* BlendSubtract */
+ FUNC_SUBTRACT = 0x800a,
+ FUNC_REVERSE_SUBTRACT = 0x800b,
+
+ /* Separate Blend Functions */
+ BLEND_DST_RGB = 0x80c8,
+ BLEND_SRC_RGB = 0x80c9,
+ BLEND_DST_ALPHA = 0x80ca,
+ BLEND_SRC_ALPHA = 0x80cb,
+ CONSTANT_COLOR = 0x8001,
+ ONE_MINUS_CONSTANT_COLOR = 0x8002,
+ CONSTANT_ALPHA = 0x8003,
+ ONE_MINUS_CONSTANT_ALPHA = 0x8004,
+ BLEND_COLOR = 0x8005,
+
+ /* Buffer Objects */
+ ARRAY_BUFFER = 0x8892,
+ ELEMENT_ARRAY_BUFFER = 0x8893,
+ ARRAY_BUFFER_BINDING = 0x8894,
+ ELEMENT_ARRAY_BUFFER_BINDING = 0x8895,
+
+ STREAM_DRAW = 0x88e0,
+ STATIC_DRAW = 0x88e4,
+ DYNAMIC_DRAW = 0x88e8,
+
+ BUFFER_SIZE = 0x8764,
+ BUFFER_USAGE = 0x8765,
+
+ CURRENT_VERTEX_ATTRIB = 0x8626,
+
+ /* CullFaceMode */
+ FRONT = 0x0404,
+ BACK = 0x0405,
+ FRONT_AND_BACK = 0x0408,
+
+ /* DepthFunction */
+ /* NEVER */
+ /* LESS */
+ /* EQUAL */
+ /* LEQUAL */
+ /* GREATER */
+ /* NOTEQUAL */
+ /* GEQUAL */
+ /* ALWAYS */
+
+ /* EnableCap */
+ /* TEXTURE_2D */
+ CULL_FACE = 0x0b44,
+ BLEND = 0x0be2,
+ DITHER = 0x0bd0,
+ STENCIL_TEST = 0x0b90,
+ DEPTH_TEST = 0x0b71,
+ SCISSOR_TEST = 0x0c11,
+ POLYGON_OFFSET_FILL = 0x8037,
+ SAMPLE_ALPHA_TO_COVERAGE = 0x809e,
+ SAMPLE_COVERAGE = 0x80a0,
+
+ /* ErrorCode */
+ NO_ERROR = 0,
+ INVALID_ENUM = 0x0500,
+ INVALID_VALUE = 0x0501,
+ INVALID_OPERATION = 0x0502,
+ OUT_OF_MEMORY = 0x0505,
+
+ /* FrontFaceDirection */
+ CW = 0x0900,
+ CCW = 0x0901,
+
+ /* GetPName */
+ LINE_WIDTH = 0x0b21,
+ ALIASED_POINT_SIZE_RANGE = 0x846d,
+ ALIASED_LINE_WIDTH_RANGE = 0x846e,
+ CULL_FACE_MODE = 0x0b45,
+ FRONT_FACE = 0x0b46,
+ DEPTH_RANGE = 0x0b70,
+ DEPTH_WRITEMASK = 0x0b72,
+ DEPTH_CLEAR_VALUE = 0x0b73,
+ DEPTH_FUNC = 0x0b74,
+ STENCIL_CLEAR_VALUE = 0x0b91,
+ STENCIL_FUNC = 0x0b92,
+ STENCIL_FAIL = 0x0b94,
+ STENCIL_PASS_DEPTH_FAIL = 0x0b95,
+ STENCIL_PASS_DEPTH_PASS = 0x0b96,
+ STENCIL_REF = 0x0b97,
+ STENCIL_VALUE_MASK = 0x0b93,
+ STENCIL_WRITEMASK = 0x0b98,
+ STENCIL_BACK_FUNC = 0x8800,
+ STENCIL_BACK_FAIL = 0x8801,
+ STENCIL_BACK_PASS_DEPTH_FAIL = 0x8802,
+ STENCIL_BACK_PASS_DEPTH_PASS = 0x8803,
+ STENCIL_BACK_REF = 0x8ca3,
+ STENCIL_BACK_VALUE_MASK = 0x8ca4,
+ STENCIL_BACK_WRITEMASK = 0x8ca5,
+ VIEWPORT = 0x0ba2,
+ SCISSOR_BOX = 0x0c10,
+ /* SCISSOR_TEST */
+ COLOR_CLEAR_VALUE = 0x0c22,
+ COLOR_WRITEMASK = 0x0c23,
+ UNPACK_ALIGNMENT = 0x0cf5,
+ PACK_ALIGNMENT = 0x0d05,
+ MAX_TEXTURE_SIZE = 0x0d33,
+ MAX_VIEWPORT_DIMS = 0x0d3a,
+ SUBPIXEL_BITS = 0x0d50,
+ RED_BITS = 0x0d52,
+ GREEN_BITS = 0x0d53,
+ BLUE_BITS = 0x0d54,
+ ALPHA_BITS = 0x0d55,
+ DEPTH_BITS = 0x0d56,
+ STENCIL_BITS = 0x0d57,
+ POLYGON_OFFSET_UNITS = 0x2a00,
+ /* POLYGON_OFFSET_FILL */
+ POLYGON_OFFSET_FACTOR = 0x8038,
+ TEXTURE_BINDING_2D = 0x8069,
+ SAMPLE_BUFFERS = 0x80a8,
+ SAMPLES = 0x80a9,
+ SAMPLE_COVERAGE_VALUE = 0x80aa,
+ SAMPLE_COVERAGE_INVERT = 0x80ab,
+
+ /* GetTextureParameter */
+ /* TEXTURE_MAG_FILTER */
+ /* TEXTURE_MIN_FILTER */
+ /* TEXTURE_WRAP_S */
+ /* TEXTURE_WRAP_T */
+
+ COMPRESSED_TEXTURE_FORMATS = 0x86a3,
+
+ /* HintMode */
+ DONT_CARE = 0x1100,
+ FASTEST = 0x1101,
+ NICEST = 0x1102,
+
+ /* HintTarget */
+ GENERATE_MIPMAP_HINT = 0x8192,
+
+ /* DataType */
+ BYTE = 0x1400,
+ UNSIGNED_BYTE = 0x1401,
+ SHORT = 0x1402,
+ UNSIGNED_SHORT = 0x1403,
+ INT = 0x1404,
+ UNSIGNED_INT = 0x1405,
+ FLOAT = 0x1406,
+
+ /* PixelFormat */
+ DEPTH_COMPONENT = 0x1902,
+ ALPHA = 0x1906,
+ RGB = 0x1907,
+ RGBA = 0x1908,
+ LUMINANCE = 0x1909,
+ LUMINANCE_ALPHA = 0x190a,
+
+ /* PixelType */
+ /* UNSIGNED_BYTE */
+ UNSIGNED_SHORT_4_4_4_4 = 0x8033,
+ UNSIGNED_SHORT_5_5_5_1 = 0x8034,
+ UNSIGNED_SHORT_5_6_5 = 0x8363,
+
+ /* Shaders */
+ FRAGMENT_SHADER = 0x8b30,
+ VERTEX_SHADER = 0x8b31,
+ MAX_VERTEX_ATTRIBS = 0x8869,
+ MAX_VERTEX_UNIFORM_VECTORS = 0x8dfb,
+ MAX_VARYING_VECTORS = 0x8dfc,
+ MAX_COMBINED_TEXTURE_IMAGE_UNITS = 0x8b4d,
+ MAX_VERTEX_TEXTURE_IMAGE_UNITS = 0x8b4c,
+ MAX_TEXTURE_IMAGE_UNITS = 0x8872,
+ MAX_FRAGMENT_UNIFORM_VECTORS = 0x8dfd,
+ SHADER_TYPE = 0x8b4f,
+ DELETE_STATUS = 0x8b80,
+ LINK_STATUS = 0x8b82,
+ VALIDATE_STATUS = 0x8b83,
+ ATTACHED_SHADERS = 0x8b85,
+ ACTIVE_UNIFORMS = 0x8b86,
+ ACTIVE_ATTRIBUTES = 0x8b89,
+ SHADING_LANGUAGE_VERSION = 0x8b8c,
+ CURRENT_PROGRAM = 0x8b8d,
+
+ /* StencilFunction */
+ NEVER = 0x0200,
+ LESS = 0x0201,
+ EQUAL = 0x0202,
+ LEQUAL = 0x0203,
+ GREATER = 0x0204,
+ NOTEQUAL = 0x0205,
+ GEQUAL = 0x0206,
+ ALWAYS = 0x0207,
+
+ /* StencilOp */
+ /* ZERO */
+ KEEP = 0x1e00,
+ REPLACE = 0x1e01,
+ INCR = 0x1e02,
+ DECR = 0x1e03,
+ INVERT = 0x150a,
+ INCR_WRAP = 0x8507,
+ DECR_WRAP = 0x8508,
+
+ /* StringName */
+ VENDOR = 0x1f00,
+ RENDERER = 0x1f01,
+ VERSION = 0x1f02,
+
+ /* TextureMagFilter */
+ NEAREST = 0x2600,
+ LINEAR = 0x2601,
+
+ /* TextureMinFilter */
+ /* NEAREST */
+ /* LINEAR */
+ NEAREST_MIPMAP_NEAREST = 0x2700,
+ LINEAR_MIPMAP_NEAREST = 0x2701,
+ NEAREST_MIPMAP_LINEAR = 0x2702,
+ LINEAR_MIPMAP_LINEAR = 0x2703,
+
+ /* TextureParameterName */
+ TEXTURE_MAG_FILTER = 0x2800,
+ TEXTURE_MIN_FILTER = 0x2801,
+ TEXTURE_WRAP_S = 0x2802,
+ TEXTURE_WRAP_T = 0x2803,
+
+ /* TextureTarget */
+ TEXTURE_2D = 0x0de1,
+ TEXTURE = 0x1702,
+
+ TEXTURE_CUBE_MAP = 0x8513,
+ TEXTURE_BINDING_CUBE_MAP = 0x8514,
+ TEXTURE_CUBE_MAP_POSITIVE_X = 0x8515,
+ TEXTURE_CUBE_MAP_NEGATIVE_X = 0x8516,
+ TEXTURE_CUBE_MAP_POSITIVE_Y = 0x8517,
+ TEXTURE_CUBE_MAP_NEGATIVE_Y = 0x8518,
+ TEXTURE_CUBE_MAP_POSITIVE_Z = 0x8519,
+ TEXTURE_CUBE_MAP_NEGATIVE_Z = 0x851a,
+ MAX_CUBE_MAP_TEXTURE_SIZE = 0x851c,
+
+ /* TextureUnit */
+ TEXTURE0 = 0x84c0,
+ TEXTURE1 = 0x84c1,
+ TEXTURE2 = 0x84c2,
+ TEXTURE3 = 0x84c3,
+ TEXTURE4 = 0x84c4,
+ TEXTURE5 = 0x84c5,
+ TEXTURE6 = 0x84c6,
+ TEXTURE7 = 0x84c7,
+ TEXTURE8 = 0x84c8,
+ TEXTURE9 = 0x84c9,
+ TEXTURE10 = 0x84ca,
+ TEXTURE11 = 0x84cb,
+ TEXTURE12 = 0x84cc,
+ TEXTURE13 = 0x84cd,
+ TEXTURE14 = 0x84ce,
+ TEXTURE15 = 0x84cf,
+ TEXTURE16 = 0x84d0,
+ TEXTURE17 = 0x84d1,
+ TEXTURE18 = 0x84d2,
+ TEXTURE19 = 0x84d3,
+ TEXTURE20 = 0x84d4,
+ TEXTURE21 = 0x84d5,
+ TEXTURE22 = 0x84d6,
+ TEXTURE23 = 0x84d7,
+ TEXTURE24 = 0x84d8,
+ TEXTURE25 = 0x84d9,
+ TEXTURE26 = 0x84da,
+ TEXTURE27 = 0x84db,
+ TEXTURE28 = 0x84dc,
+ TEXTURE29 = 0x84dd,
+ TEXTURE30 = 0x84de,
+ TEXTURE31 = 0x84df,
+ ACTIVE_TEXTURE = 0x84e0,
+
+ /* TextureWrapMode */
+ REPEAT = 0x2901,
+ CLAMP_TO_EDGE = 0x812f,
+ MIRRORED_REPEAT = 0x8370,
+
+ /* Uniform Types */
+ FLOAT_VEC2 = 0x8b50,
+ FLOAT_VEC3 = 0x8b51,
+ FLOAT_VEC4 = 0x8b52,
+ INT_VEC2 = 0x8b53,
+ INT_VEC3 = 0x8b54,
+ INT_VEC4 = 0x8b55,
+ BOOL = 0x8b56,
+ BOOL_VEC2 = 0x8b57,
+ BOOL_VEC3 = 0x8b58,
+ BOOL_VEC4 = 0x8b59,
+ FLOAT_MAT2 = 0x8b5a,
+ FLOAT_MAT3 = 0x8b5b,
+ FLOAT_MAT4 = 0x8b5c,
+ SAMPLER_2D = 0x8b5e,
+ SAMPLER_CUBE = 0x8b60,
+
+ /* Vertex Arrays */
+ VERTEX_ATTRIB_ARRAY_ENABLED = 0x8622,
+ VERTEX_ATTRIB_ARRAY_SIZE = 0x8623,
+ VERTEX_ATTRIB_ARRAY_STRIDE = 0x8624,
+ VERTEX_ATTRIB_ARRAY_TYPE = 0x8625,
+ VERTEX_ATTRIB_ARRAY_NORMALIZED = 0x886a,
+ VERTEX_ATTRIB_ARRAY_POINTER = 0x8645,
+ VERTEX_ATTRIB_ARRAY_BUFFER_BINDING = 0x889f,
+
+ /* Shader Source */
+ COMPILE_STATUS = 0x8b81,
+
+ /* Shader Precision-Specified Types */
+ LOW_FLOAT = 0x8df0,
+ MEDIUM_FLOAT = 0x8df1,
+ HIGH_FLOAT = 0x8df2,
+ LOW_INT = 0x8df3,
+ MEDIUM_INT = 0x8df4,
+ HIGH_INT = 0x8df5,
+
+ /* Framebuffer Object. */
+ FRAMEBUFFER = 0x8d40,
+ RENDERBUFFER = 0x8d41,
+
+ RGBA4 = 0x8056,
+ RGB5_A1 = 0x8057,
+ RGB565 = 0x8d62,
+ DEPTH_COMPONENT16 = 0x81a5,
+ STENCIL_INDEX = 0x1901,
+ STENCIL_INDEX8 = 0x8d48,
+ DEPTH_STENCIL = 0x84f9,
+
+ RENDERBUFFER_WIDTH = 0x8d42,
+ RENDERBUFFER_HEIGHT = 0x8d43,
+ RENDERBUFFER_INTERNAL_FORMAT = 0x8d44,
+ RENDERBUFFER_RED_SIZE = 0x8d50,
+ RENDERBUFFER_GREEN_SIZE = 0x8d51,
+ RENDERBUFFER_BLUE_SIZE = 0x8d52,
+ RENDERBUFFER_ALPHA_SIZE = 0x8d53,
+ RENDERBUFFER_DEPTH_SIZE = 0x8d54,
+ RENDERBUFFER_STENCIL_SIZE = 0x8d55,
+
+ FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE = 0x8cd0,
+ FRAMEBUFFER_ATTACHMENT_OBJECT_NAME = 0x8cd1,
+ FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL = 0x8cd2,
+ FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE = 0x8cd3,
+
+ COLOR_ATTACHMENT0 = 0x8ce0,
+ DEPTH_ATTACHMENT = 0x8d00,
+ STENCIL_ATTACHMENT = 0x8d20,
+ DEPTH_STENCIL_ATTACHMENT = 0x821a,
+
+ NONE = 0,
+
+ FRAMEBUFFER_COMPLETE = 0x8cd5,
+ FRAMEBUFFER_INCOMPLETE_ATTACHMENT = 0x8cd6,
+ FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT = 0x8cd7,
+ FRAMEBUFFER_INCOMPLETE_DIMENSIONS = 0x8cd9,
+ FRAMEBUFFER_UNSUPPORTED = 0x8cdd,
+
+ FRAMEBUFFER_BINDING = 0x8ca6,
+ RENDERBUFFER_BINDING = 0x8ca7,
+ MAX_RENDERBUFFER_SIZE = 0x84e8,
+
+ INVALID_FRAMEBUFFER_OPERATION = 0x0506,
+
+ /* WebGL-specific enums */
+ UNPACK_FLIP_Y_WEBGL = 0x9240,
+ UNPACK_PREMULTIPLY_ALPHA_WEBGL = 0x9241,
+ CONTEXT_LOST_WEBGL = 0x9242,
+ UNPACK_COLORSPACE_CONVERSION_WEBGL = 0x9243,
+ BROWSER_DEFAULT_WEBGL = 0x9244,
+}
diff --git a/packages/core/src/services/renderer/passes/BasePostProcessingPass.ts b/packages/core/src/services/renderer/passes/BasePostProcessingPass.ts
new file mode 100644
index 0000000000..52bcb3eda8
--- /dev/null
+++ b/packages/core/src/services/renderer/passes/BasePostProcessingPass.ts
@@ -0,0 +1,138 @@
+import { inject, injectable } from 'inversify';
+import {
+ gl,
+ IModel,
+ IRendererService,
+ IShaderModuleService,
+} from '../../../index';
+import { TYPES } from '../../../types';
+import { ILayer } from '../../layer/ILayerService';
+import { IPostProcessingPass, PassType } from '../IMultiPassRenderer';
+import { IUniform } from '../IUniform';
+
+/**
+ * 后处理 Pass 基类,通过 PostProcessor 驱动。
+ *
+ * 约定使用 u_Texture 传递渲染纹理。
+ */
+@injectable()
+export default class BasePostProcessingPass
+ implements IPostProcessingPass {
+ @inject(TYPES.IShaderModuleService)
+ protected readonly shaderModule: IShaderModuleService;
+
+ @inject(TYPES.IRendererService)
+ protected readonly rendererService: IRendererService;
+
+ protected config: Partial | undefined;
+
+ /**
+ * 启用开关
+ */
+ private enabled: boolean = true;
+
+ /**
+ * 是否渲染到屏幕
+ */
+ private renderToScreen: boolean = false;
+
+ /**
+ * 渲染命令
+ */
+ private model: IModel;
+
+ private optionsToUpdate: Partial = {};
+
+ public getName() {
+ return '';
+ }
+
+ public getType() {
+ return PassType.PostProcessing;
+ }
+
+ public init(layer: ILayer, config?: Partial) {
+ this.config = config;
+
+ const { createAttribute, createBuffer, createModel } = this.rendererService;
+ const { vs, fs, uniforms } = this.setupShaders();
+
+ this.model = createModel({
+ vs,
+ fs,
+ attributes: {
+ // 使用一个全屏三角形,相比 Quad 顶点数目更少
+ a_Position: createAttribute({
+ buffer: createBuffer({
+ data: [-4, -4, 4, -4, 0, 4],
+ type: gl.FLOAT,
+ }),
+ size: 2,
+ }),
+ },
+ // @ts-ignore
+ uniforms: {
+ u_Texture: null,
+ ...uniforms,
+ ...(this.config && this.convertOptionsToUniforms(this.config)),
+ },
+ depth: {
+ enable: false,
+ },
+ count: 3,
+ });
+ }
+
+ public render(layer: ILayer) {
+ const postProcessor = layer.multiPassRenderer.getPostProcessor();
+ const { useFramebuffer, getViewportSize } = this.rendererService;
+ const { width, height } = getViewportSize();
+ useFramebuffer(
+ this.renderToScreen ? null : postProcessor.getWriteFBO(),
+ () => {
+ this.model.draw({
+ uniforms: {
+ u_Texture: postProcessor.getReadFBO(),
+ u_ViewportSize: [width, height],
+ ...this.convertOptionsToUniforms(this.optionsToUpdate),
+ },
+ });
+ },
+ );
+ }
+
+ public isEnabled() {
+ return this.enabled;
+ }
+
+ public setEnabled(enabled: boolean) {
+ this.enabled = enabled;
+ }
+
+ public setRenderToScreen(renderToScreen: boolean) {
+ this.renderToScreen = renderToScreen;
+ }
+
+ public updateOptions(config: Partial) {
+ this.optionsToUpdate = {
+ ...this.optionsToUpdate,
+ ...config,
+ };
+ }
+
+ protected setupShaders(): {
+ vs: string;
+ fs: string;
+ uniforms?: { [key: string]: IUniform };
+ } {
+ throw new Error('Method not implemented.');
+ }
+
+ protected convertOptionsToUniforms(
+ options: Partial,
+ ): {
+ [uniformName: string]: IUniform;
+ } | void {
+ throw new Error('Method not implemented.');
+ }
+}
diff --git a/packages/core/src/services/renderer/passes/ClearPass.ts b/packages/core/src/services/renderer/passes/ClearPass.ts
new file mode 100644
index 0000000000..ec0163c4f7
--- /dev/null
+++ b/packages/core/src/services/renderer/passes/ClearPass.ts
@@ -0,0 +1,35 @@
+import { inject, injectable } from 'inversify';
+import { lazyInject } from '../../../index';
+import { TYPES } from '../../../types';
+import { IPass, PassType } from '../IMultiPassRenderer';
+import { IRendererService } from '../IRendererService';
+
+/**
+ * ClearPass
+ */
+@injectable()
+export default class ClearPass
+ implements IPass {
+ @lazyInject(TYPES.IRendererService)
+ protected readonly rendererService: IRendererService;
+
+ public getType() {
+ return PassType.Normal;
+ }
+
+ public getName() {
+ return 'clear';
+ }
+
+ public init() {
+ //
+ }
+
+ public render() {
+ this.rendererService.clear({
+ color: [0, 0, 0, 0],
+ depth: 1,
+ framebuffer: null,
+ });
+ }
+}
diff --git a/packages/core/src/services/renderer/passes/MultiPassRenderer.ts b/packages/core/src/services/renderer/passes/MultiPassRenderer.ts
new file mode 100644
index 0000000000..587f3661d0
--- /dev/null
+++ b/packages/core/src/services/renderer/passes/MultiPassRenderer.ts
@@ -0,0 +1,84 @@
+import { injectable } from 'inversify';
+import { ILayer } from '../../layer/ILayerService';
+import {
+ IMultiPassRenderer,
+ IPass,
+ IPostProcessingPass,
+ IPostProcessor,
+ PassType,
+} from '../IMultiPassRenderer';
+import PostProcessor from './PostProcessor';
+
+/**
+ * ported from Three.js EffectComposer
+ * @example
+ * const renderer = new MultiPassRenderer([
+ * new ClearPass(),
+ * new RenderPass({
+ * models: [
+ * new Model(),
+ * new Model(),
+ * ],
+ * }),
+ * new CopyPass({
+ * renderToScreen: true,
+ * }),
+ * new TAAPass(),
+ * ]);
+ * renderer.render();
+ * @see https://yuque.antfin-inc.com/yuqi.pyq/fgetpa/apuvbf#dRM8W
+ */
+@injectable()
+export default class MultiPassRenderer implements IMultiPassRenderer {
+ private passes: Array> = [];
+ private postProcessor: IPostProcessor;
+
+ private layer: ILayer;
+ private renderFlag: boolean;
+
+ constructor(layer: ILayer) {
+ this.layer = layer;
+ this.postProcessor = new PostProcessor();
+ }
+
+ public setRenderFlag(renderFlag: boolean) {
+ this.renderFlag = renderFlag;
+ }
+
+ public getRenderFlag() {
+ return this.renderFlag;
+ }
+
+ public getPostProcessor() {
+ return this.postProcessor;
+ }
+
+ public async render() {
+ for (const pass of this.passes) {
+ await pass.render(this.layer);
+ }
+ await this.postProcessor.render(this.layer);
+ }
+
+ public resize(width: number, height: number) {
+ this.postProcessor.resize(width, height);
+ }
+
+ public add(pass: IPass, config?: Partial) {
+ if (pass.getType() === PassType.PostProcessing) {
+ this.postProcessor.add(
+ pass as IPostProcessingPass,
+ this.layer,
+ config,
+ );
+ } else {
+ pass.init(this.layer, config);
+ this.passes.push(pass);
+ }
+ }
+
+ public insert(pass: IPass, config: Partial, index: number) {
+ pass.init(this.layer, config);
+ this.passes.splice(index, 0, pass);
+ }
+}
diff --git a/packages/core/src/services/renderer/passes/PixelPickingPass.ts b/packages/core/src/services/renderer/passes/PixelPickingPass.ts
new file mode 100644
index 0000000000..08df995baf
--- /dev/null
+++ b/packages/core/src/services/renderer/passes/PixelPickingPass.ts
@@ -0,0 +1,246 @@
+import { injectable } from 'inversify';
+import { lazyInject } from '../../../index';
+import { TYPES } from '../../../types';
+import {
+ IInteractionService,
+ InteractionEvent,
+} from '../../interaction/IInteractionService';
+import { ILayer } from '../../layer/ILayerService';
+import { ILogService } from '../../log/ILogService';
+import { gl } from '../gl';
+import { IFramebuffer } from '../IFramebuffer';
+import { IPass, PassType } from '../IMultiPassRenderer';
+import { IRendererService } from '../IRendererService';
+
+function decodePickingColor(color: Uint8Array): number {
+ const [i1, i2, i3] = color;
+ // 1 was added to seperate from no selection
+ const index = i1 + i2 * 256 + i3 * 65536 - 1;
+ return index;
+}
+
+/**
+ * color-based PixelPickingPass
+ * @see https://github.com/antvis/L7/blob/next/dev-docs/PixelPickingEngine.md
+ */
+@injectable()
+export default class PixelPickingPass
+ implements IPass {
+ @lazyInject(TYPES.IRendererService)
+ protected readonly rendererService: IRendererService;
+
+ @lazyInject(TYPES.IInteractionService)
+ protected readonly interactionService: IInteractionService;
+
+ @lazyInject(TYPES.ILogService)
+ protected readonly logger: ILogService;
+
+ /**
+ * picking framebuffer,供 attributes 颜色编码后输出
+ */
+ private pickingFBO: IFramebuffer;
+
+ /**
+ * 保存 layer 引用
+ */
+ private layer: ILayer;
+
+ /**
+ * 简单的 throttle,防止连续触发 hover 时导致频繁渲染到 picking framebuffer
+ */
+ private alreadyInRendering: boolean = false;
+
+ public getType() {
+ return PassType.Normal;
+ }
+
+ public getName() {
+ return 'pixelPicking';
+ }
+
+ public init(layer: ILayer) {
+ this.layer = layer;
+ const { createTexture2D, createFramebuffer } = this.rendererService;
+
+ // 创建 picking framebuffer,后续实时 resize
+ this.pickingFBO = createFramebuffer({
+ color: createTexture2D({
+ width: 1,
+ height: 1,
+ wrapS: gl.CLAMP_TO_EDGE,
+ wrapT: gl.CLAMP_TO_EDGE,
+ }),
+ });
+
+ // 监听 hover 事件
+ this.interactionService.on(InteractionEvent.Hover, this.pickFromPickingFBO);
+ }
+
+ public render(layer: ILayer) {
+ if (this.alreadyInRendering) {
+ return;
+ }
+
+ const { getViewportSize, useFramebuffer, clear } = this.rendererService;
+ const { width, height } = getViewportSize();
+
+ // throttled
+ this.alreadyInRendering = true;
+
+ // resize first, fbo can't be resized in use
+ this.pickingFBO.resize({ width, height });
+
+ useFramebuffer(this.pickingFBO, () => {
+ clear({
+ framebuffer: this.pickingFBO,
+ color: [0, 0, 0, 0],
+ stencil: 0,
+ depth: 1,
+ });
+
+ // this.logger.info(`picking fbo cleared ${width} ${height}`);
+
+ /**
+ * picking pass 不需要 multipass,原因如下:
+ * 1. 已经 clear,无需 ClearPass
+ * 2. 只需要 RenderPass
+ * 3. 后处理 pass 需要跳过
+ */
+ const originRenderFlag = this.layer.multiPassRenderer.getRenderFlag();
+ this.layer.multiPassRenderer.setRenderFlag(false);
+ // trigger hooks
+ layer.hooks.beforePickingEncode.call();
+ layer.render();
+ layer.hooks.afterPickingEncode.call();
+ this.layer.multiPassRenderer.setRenderFlag(originRenderFlag);
+
+ this.alreadyInRendering = false;
+ });
+ }
+
+ /**
+ * 拾取视口指定坐标属于的要素
+ * TODO:支持区域拾取
+ */
+ private pickFromPickingFBO = ({ x, y }: { x: number; y: number }) => {
+ const {
+ getViewportSize,
+ readPixels,
+ useFramebuffer,
+ } = this.rendererService;
+ const { width, height } = getViewportSize();
+ const { enableHighlight } = this.layer.getStyleOptions();
+
+ const xInDevicePixel = x * window.devicePixelRatio;
+ const yInDevicePixel = y * window.devicePixelRatio;
+ if (
+ xInDevicePixel > width ||
+ xInDevicePixel < 0 ||
+ yInDevicePixel > height ||
+ yInDevicePixel < 0
+ ) {
+ return;
+ }
+
+ let pickedColors: Uint8Array | undefined;
+ useFramebuffer(this.pickingFBO, () => {
+ // avoid realloc
+ pickedColors = readPixels({
+ x: Math.round(xInDevicePixel),
+ // 视口坐标系原点在左上,而 WebGL 在左下,需要翻转 Y 轴
+ y: Math.round(height - (y + 1) * window.devicePixelRatio),
+ width: 1,
+ height: 1,
+ data: new Uint8Array(1 * 1 * 4),
+ framebuffer: this.pickingFBO,
+ });
+
+ if (
+ pickedColors[0] !== 0 ||
+ pickedColors[1] !== 0 ||
+ pickedColors[2] !== 0
+ ) {
+ this.logger.info('picked');
+ const pickedFeatureIdx = decodePickingColor(pickedColors);
+ const rawFeature = this.layer.getSource()?.data?.dataArray[
+ pickedFeatureIdx
+ ];
+
+ // trigger onHover/Click callback on layer
+ this.triggerHoverOnLayer({ x, y, feature: rawFeature });
+ }
+ });
+
+ if (enableHighlight) {
+ this.highlightPickedFeature(pickedColors);
+ }
+ };
+
+ private triggerHoverOnLayer({
+ x,
+ y,
+ feature,
+ }: {
+ x: number;
+ y: number;
+ feature: unknown;
+ }) {
+ const { onHover, onClick } = this.layer.getStyleOptions();
+ if (onHover) {
+ onHover({
+ x,
+ y,
+ feature,
+ });
+ }
+ if (onClick) {
+ onClick({
+ x,
+ y,
+ feature,
+ });
+ }
+ }
+
+ /**
+ * highlight 如果直接修改选中 feature 的 buffer,存在两个问题:
+ * 1. 鼠标移走时无法恢复
+ * 2. 无法实现高亮颜色与原始原色的 alpha 混合
+ * 因此高亮还是放在 shader 中做比较好
+ * @example
+ * this.layer.color('name', ['#000000'], {
+ * featureRange: {
+ * startIndex: pickedFeatureIdx,
+ * endIndex: pickedFeatureIdx + 1,
+ * },
+ * });
+ */
+ private highlightPickedFeature(pickedColors: Uint8Array | undefined) {
+ const [r, g, b] = pickedColors;
+ const { clear, useFramebuffer } = this.rendererService;
+
+ // 先输出到 PostProcessor
+ const readFBO = this.layer.multiPassRenderer
+ .getPostProcessor()
+ .getReadFBO();
+ this.layer.hooks.beforeRender.call();
+ useFramebuffer(readFBO, () => {
+ clear({
+ color: [0, 0, 0, 0],
+ depth: 1,
+ stencil: 0,
+ framebuffer: readFBO,
+ });
+
+ // TODO: highlight pass 需要 multipass
+ const originRenderFlag = this.layer.multiPassRenderer.getRenderFlag();
+ this.layer.multiPassRenderer.setRenderFlag(false);
+ this.layer.hooks.beforeHighlight.call([r, g, b]);
+ this.layer.render();
+ this.layer.hooks.afterHighlight.call();
+ this.layer.hooks.afterRender.call();
+ this.layer.multiPassRenderer.setRenderFlag(originRenderFlag);
+ });
+ this.layer.multiPassRenderer.getPostProcessor().render(this.layer);
+ }
+}
diff --git a/packages/core/src/services/renderer/passes/PostProcessor.ts b/packages/core/src/services/renderer/passes/PostProcessor.ts
new file mode 100644
index 0000000000..f76437f3e5
--- /dev/null
+++ b/packages/core/src/services/renderer/passes/PostProcessor.ts
@@ -0,0 +1,116 @@
+import { injectable } from 'inversify';
+import { lazyInject } from '../../../index';
+import { TYPES } from '../../../types';
+import { ILayer } from '../../layer/ILayerService';
+import { gl } from '../gl';
+import { IFramebuffer } from '../IFramebuffer';
+import { IPostProcessingPass, IPostProcessor } from '../IMultiPassRenderer';
+import { IRendererService } from '../IRendererService';
+
+/**
+ * ported from Three.js EffectComposer
+ * 后处理负责 pingpong read/write framebuffer,最后一个 pass 默认输出到屏幕
+ */
+@injectable()
+export default class PostProcessor implements IPostProcessor {
+ @lazyInject(TYPES.IRendererService)
+ protected readonly rendererService: IRendererService;
+
+ private passes: Array> = [];
+ private readFBO: IFramebuffer;
+ private writeFBO: IFramebuffer;
+
+ constructor() {
+ const { createFramebuffer, createTexture2D } = this.rendererService;
+ this.readFBO = createFramebuffer({
+ color: createTexture2D({
+ width: 1,
+ height: 1,
+ wrapS: gl.CLAMP_TO_EDGE,
+ wrapT: gl.CLAMP_TO_EDGE,
+ }),
+ });
+
+ this.writeFBO = createFramebuffer({
+ color: createTexture2D({
+ width: 1,
+ height: 1,
+ wrapS: gl.CLAMP_TO_EDGE,
+ wrapT: gl.CLAMP_TO_EDGE,
+ }),
+ });
+ }
+
+ public getReadFBO() {
+ return this.readFBO;
+ }
+
+ public getWriteFBO() {
+ return this.writeFBO;
+ }
+
+ public async render(layer: ILayer) {
+ for (let i = 0; i < this.passes.length; i++) {
+ const pass = this.passes[i];
+ // last pass should render to screen
+ pass.setRenderToScreen(this.isLastEnabledPass(i));
+ await pass.render(layer);
+
+ // pingpong
+ if (i !== this.passes.length - 1) {
+ this.swap();
+ }
+ }
+ }
+
+ public resize(width: number, height: number) {
+ this.readFBO.resize({
+ width,
+ height,
+ });
+ this.writeFBO.resize({
+ width,
+ height,
+ });
+ }
+
+ public add(
+ pass: IPostProcessingPass,
+ layer: ILayer,
+ config?: Partial,
+ ) {
+ pass.init(layer, config);
+ this.passes.push(pass);
+ }
+
+ public insert(
+ pass: IPostProcessingPass,
+ index: number,
+ layer: ILayer,
+ config?: Partial,
+ ) {
+ pass.init(layer, config);
+ this.passes.splice(index, 0, pass);
+ }
+
+ public getPostProcessingPassByName(
+ name: string,
+ ): IPostProcessingPass | undefined {
+ return this.passes.find((p) => p.getName() === name);
+ }
+
+ private isLastEnabledPass(index: number): boolean {
+ for (let i = index + 1; i < this.passes.length; i++) {
+ if (this.passes[i].isEnabled()) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private swap() {
+ const tmp = this.readFBO;
+ this.readFBO = this.writeFBO;
+ this.writeFBO = tmp;
+ }
+}
diff --git a/packages/core/src/services/renderer/passes/RenderPass.ts b/packages/core/src/services/renderer/passes/RenderPass.ts
new file mode 100644
index 0000000000..c5f7b19704
--- /dev/null
+++ b/packages/core/src/services/renderer/passes/RenderPass.ts
@@ -0,0 +1,46 @@
+import { injectable } from 'inversify';
+import { lazyInject } from '../../../index';
+import { TYPES } from '../../../types';
+import { ILayer } from '../../layer/ILayerService';
+import { IPass, PassType } from '../IMultiPassRenderer';
+import { IRendererService } from '../IRendererService';
+
+/**
+ * RenderPass,负责输出到后续 PostProcessor 的 readFBO 中
+ */
+@injectable()
+export default class RenderPass
+ implements IPass {
+ @lazyInject(TYPES.IRendererService)
+ protected readonly rendererService: IRendererService;
+
+ public getType() {
+ return PassType.Normal;
+ }
+
+ public getName() {
+ return 'render';
+ }
+
+ public init(layer: ILayer) {
+ //
+ }
+
+ public render(layer: ILayer) {
+ const { useFramebuffer, clear } = this.rendererService;
+ const readFBO = layer.multiPassRenderer.getPostProcessor().getReadFBO();
+ useFramebuffer(readFBO, () => {
+ clear({
+ color: [0, 0, 0, 0],
+ depth: 1,
+ stencil: 0,
+ framebuffer: readFBO,
+ });
+
+ // render to post processor
+ layer.multiPassRenderer.setRenderFlag(false);
+ layer.render();
+ layer.multiPassRenderer.setRenderFlag(true);
+ });
+ }
+}
diff --git a/packages/core/src/services/renderer/passes/TAAPass.ts b/packages/core/src/services/renderer/passes/TAAPass.ts
new file mode 100644
index 0000000000..0a33a02a49
--- /dev/null
+++ b/packages/core/src/services/renderer/passes/TAAPass.ts
@@ -0,0 +1,341 @@
+import { injectable } from 'inversify';
+import { lazyInject } from '../../../index';
+import blendFS from '../../../shaders/post-processing/blend.glsl';
+import copyFS from '../../../shaders/post-processing/copy.glsl';
+import quadVS from '../../../shaders/post-processing/quad.glsl';
+import { TYPES } from '../../../types';
+import { ICameraService } from '../../camera/ICameraService';
+import { ILayer } from '../../layer/ILayerService';
+import { ILogService } from '../../log/ILogService';
+import { IShaderModuleService } from '../../shader/IShaderModuleService';
+import { gl } from '../gl';
+import { IFramebuffer } from '../IFramebuffer';
+import { IModel, IModelInitializationOptions } from '../IModel';
+import { IPass, PassType } from '../IMultiPassRenderer';
+import { IRendererService } from '../IRendererService';
+
+// Generate halton sequence
+// https://en.wikipedia.org/wiki/Halton_sequence
+function halton(index: number, base: number) {
+ let result = 0;
+ let f = 1 / base;
+ let i = index;
+ while (i > 0) {
+ result = result + f * (i % base);
+ i = Math.floor(i / base);
+ f = f / base;
+ }
+ return result;
+}
+
+// 累加计数器
+let accumulatingId = 1;
+
+/**
+ * TAA(Temporal Anti-Aliasing)
+ * 在需要后处理的场景中(例如 L7 的热力图需要 blur pass、PBR 中的 SSAO 环境光遮蔽),无法使用浏览器内置的 MSAA,
+ * 只能使用 TAA
+ * @see https://yuque.antfin-inc.com/yuqi.pyq/fgetpa/ri52hv
+ */
+@injectable()
+export default class TAAPass
+ implements IPass {
+ @lazyInject(TYPES.IRendererService)
+ protected readonly rendererService: IRendererService;
+
+ @lazyInject(TYPES.IShaderModuleService)
+ protected readonly shaderModule: IShaderModuleService;
+
+ @lazyInject(TYPES.ICameraService)
+ protected readonly cameraService: ICameraService;
+
+ @lazyInject(TYPES.ILogService)
+ protected readonly logger: ILogService;
+
+ /**
+ * 低差异序列
+ */
+ private haltonSequence: Array<[number, number]> = [];
+
+ /**
+ * 当前累加任务 ID,例如用户连续拖拽时上一次累加很有可能没有结束,此时在开启新一轮累加之前需要结束掉之前未完成的
+ */
+ private accumulatingId: number = 0;
+
+ /**
+ * 每一轮累加中的 frameID
+ */
+ private frame: number = 0;
+
+ /**
+ * 每一轮累加中的 frame 定时器
+ */
+ private timer: number | undefined = undefined;
+
+ private sampleRenderTarget: IFramebuffer;
+ private prevRenderTarget: IFramebuffer;
+ private outputRenderTarget: IFramebuffer;
+ private copyRenderTarget: IFramebuffer;
+
+ private blendModel: IModel;
+ private outputModel: IModel;
+ private copyModel: IModel;
+
+ public getType() {
+ return PassType.Normal;
+ }
+
+ public getName() {
+ return 'taa';
+ }
+
+ public init(layer: ILayer) {
+ const { createFramebuffer, createTexture2D } = this.rendererService;
+ this.sampleRenderTarget = createFramebuffer({
+ color: createTexture2D({
+ width: 1,
+ height: 1,
+ wrapS: gl.CLAMP_TO_EDGE,
+ wrapT: gl.CLAMP_TO_EDGE,
+ }),
+ });
+ this.prevRenderTarget = createFramebuffer({
+ color: createTexture2D({
+ width: 1,
+ height: 1,
+ wrapS: gl.CLAMP_TO_EDGE,
+ wrapT: gl.CLAMP_TO_EDGE,
+ }),
+ });
+ this.outputRenderTarget = createFramebuffer({
+ color: createTexture2D({
+ width: 1,
+ height: 1,
+ wrapS: gl.CLAMP_TO_EDGE,
+ wrapT: gl.CLAMP_TO_EDGE,
+ }),
+ });
+ this.copyRenderTarget = createFramebuffer({
+ color: createTexture2D({
+ width: 1,
+ height: 1,
+ wrapS: gl.CLAMP_TO_EDGE,
+ wrapT: gl.CLAMP_TO_EDGE,
+ }),
+ });
+
+ for (let i = 0; i < 30; i++) {
+ this.haltonSequence.push([halton(i, 2), halton(i, 3)]);
+ }
+
+ this.blendModel = this.createTriangleModel('blend-pass', blendFS);
+ this.outputModel = this.createTriangleModel('copy-pass', copyFS, {
+ blend: {
+ enable: true,
+ func: {
+ srcRGB: gl.ONE,
+ dstRGB: gl.ONE_MINUS_SRC_ALPHA,
+ srcAlpha: gl.ONE,
+ dstAlpha: gl.ONE_MINUS_SRC_ALPHA,
+ },
+ equation: {
+ rgb: gl.FUNC_ADD,
+ alpha: gl.FUNC_ADD,
+ },
+ },
+ });
+ this.copyModel = this.createTriangleModel('copy-pass', copyFS);
+ }
+
+ public render(layer: ILayer) {
+ const { clear, getViewportSize, useFramebuffer } = this.rendererService;
+ const { width, height } = getViewportSize();
+ this.sampleRenderTarget.resize({ width, height });
+ this.prevRenderTarget.resize({ width, height });
+ this.outputRenderTarget.resize({ width, height });
+ this.copyRenderTarget.resize({ width, height });
+
+ this.resetFrame();
+ // 首先停止上一次的累加
+ this.stopAccumulating();
+
+ // 先输出到 PostProcessor
+ const readFBO = layer.multiPassRenderer.getPostProcessor().getReadFBO();
+ useFramebuffer(readFBO, () => {
+ clear({
+ color: [0, 0, 0, 0],
+ depth: 1,
+ stencil: 0,
+ framebuffer: readFBO,
+ });
+
+ // render to post processor
+ layer.multiPassRenderer.setRenderFlag(false);
+ layer.render();
+ layer.multiPassRenderer.setRenderFlag(true);
+ });
+
+ const accumulate = (id: number) => {
+ // 在开启新一轮累加之前,需要先结束掉之前的累加
+ if (!this.accumulatingId || id !== this.accumulatingId) {
+ return;
+ }
+
+ if (!this.isFinished()) {
+ this.doRender(layer);
+
+ requestAnimationFrame(() => {
+ accumulate(id);
+ });
+ }
+ };
+
+ this.accumulatingId = accumulatingId++;
+ this.timer = window.setTimeout(() => {
+ accumulate(this.accumulatingId);
+ }, 50);
+ }
+
+ private doRender(layer: ILayer) {
+ this.logger.info(`accumulatingId: ${this.accumulatingId}`);
+
+ const { clear, getViewportSize, useFramebuffer } = this.rendererService;
+ const { width, height } = getViewportSize();
+ const { jitterScale = 1 } = layer.getStyleOptions();
+
+ // 使用 Halton 序列抖动投影矩阵
+ const offset = this.haltonSequence[this.frame % this.haltonSequence.length];
+ this.cameraService.jitterProjectionMatrix(
+ ((offset[0] * 2.0 - 1.0) / width) * jitterScale,
+ ((offset[1] * 2.0 - 1.0) / height) * jitterScale,
+ );
+
+ // 按抖动后的投影矩阵渲染
+ layer.multiPassRenderer.setRenderFlag(false);
+ layer.hooks.beforeRender.call();
+ useFramebuffer(this.sampleRenderTarget, () => {
+ clear({
+ color: [0, 0, 0, 0],
+ depth: 1,
+ stencil: 0,
+ framebuffer: this.sampleRenderTarget,
+ });
+
+ layer.render();
+ });
+ layer.hooks.afterRender.call();
+ layer.multiPassRenderer.setRenderFlag(true);
+
+ // 混合
+ const layerStyleOptions = layer.getStyleOptions();
+ useFramebuffer(this.outputRenderTarget, () => {
+ this.blendModel.draw({
+ uniforms: {
+ // @ts-ignore
+ u_opacity: layerStyleOptions.opacity || 1,
+ u_MixRatio: this.frame === 0 ? 1 : 0.9,
+ u_Diffuse1: this.sampleRenderTarget,
+ u_Diffuse2:
+ this.frame === 0
+ ? layer.multiPassRenderer.getPostProcessor().getReadFBO()
+ : this.prevRenderTarget,
+ },
+ });
+ });
+
+ // 输出累加结果
+ if (this.frame === 0) {
+ clear({
+ color: [0, 0, 0, 0],
+ depth: 1,
+ stencil: 0,
+ framebuffer: this.copyRenderTarget,
+ });
+ }
+
+ if (this.frame >= 1) {
+ useFramebuffer(this.copyRenderTarget, () => {
+ this.outputModel.draw({
+ uniforms: {
+ u_Texture: this.outputRenderTarget,
+ },
+ });
+ });
+
+ useFramebuffer(
+ layer.multiPassRenderer.getPostProcessor().getReadFBO(),
+ () => {
+ this.copyModel.draw({
+ uniforms: {
+ u_Texture: this.copyRenderTarget,
+ },
+ });
+ },
+ );
+ layer.multiPassRenderer.getPostProcessor().render(layer);
+ }
+
+ // 保存前序帧结果
+ const tmp = this.prevRenderTarget;
+ this.prevRenderTarget = this.outputRenderTarget;
+ this.outputRenderTarget = tmp;
+
+ this.frame++;
+
+ // 恢复 jitter 后的相机
+ this.cameraService.clearJitterProjectionMatrix();
+ }
+
+ /**
+ * 是否已经完成累加
+ * @return {boolean} isFinished
+ */
+ private isFinished() {
+ return this.frame >= this.haltonSequence.length;
+ }
+
+ private resetFrame() {
+ this.frame = 0;
+ }
+
+ private stopAccumulating() {
+ this.accumulatingId = 0;
+ window.clearTimeout(this.timer);
+ }
+
+ private createTriangleModel(
+ shaderModuleName: string,
+ fragmentShader: string,
+ options?: Partial,
+ ) {
+ this.shaderModule.registerModule(shaderModuleName, {
+ vs: quadVS,
+ fs: fragmentShader,
+ });
+
+ const { vs, fs, uniforms } = this.shaderModule.getModule(shaderModuleName);
+ const { createAttribute, createBuffer, createModel } = this.rendererService;
+ return createModel({
+ vs,
+ fs,
+ attributes: {
+ // 使用一个全屏三角形,相比 Quad 顶点数目更少
+ a_Position: createAttribute({
+ buffer: createBuffer({
+ data: [-4, -4, 4, -4, 0, 4],
+ type: gl.FLOAT,
+ }),
+ size: 2,
+ }),
+ },
+ uniforms: {
+ ...uniforms,
+ },
+ depth: {
+ enable: false,
+ },
+ count: 3,
+ ...options,
+ });
+ }
+}
diff --git a/packages/core/src/services/renderer/passes/post-processing/BlurHPass.ts b/packages/core/src/services/renderer/passes/post-processing/BlurHPass.ts
new file mode 100644
index 0000000000..9188ba221d
--- /dev/null
+++ b/packages/core/src/services/renderer/passes/post-processing/BlurHPass.ts
@@ -0,0 +1,59 @@
+import { inject, injectable } from 'inversify';
+import { isNil } from 'lodash';
+import blur from '../../../../shaders/post-processing/blur.glsl';
+import quad from '../../../../shaders/post-processing/quad.glsl';
+import { TYPES } from '../../../../types';
+import { IRendererService } from '../../IRendererService';
+import { IUniform } from '../../IUniform';
+import BasePostProcessingPass from '../BasePostProcessingPass';
+
+export interface IBlurHPassConfig {
+ blurRadius: number;
+}
+
+@injectable()
+export default class BlurHPass extends BasePostProcessingPass<
+ IBlurHPassConfig
+> {
+ @inject(TYPES.IRendererService)
+ protected readonly rendererService: IRendererService;
+
+ public getName() {
+ return 'blurH';
+ }
+
+ protected setupShaders() {
+ this.shaderModule.registerModule('blur-pass', {
+ vs: quad,
+ fs: blur,
+ });
+
+ const { vs, fs, uniforms } = this.shaderModule.getModule('blur-pass');
+ const { width, height } = this.rendererService.getViewportSize();
+
+ return {
+ vs,
+ fs,
+ uniforms: {
+ ...uniforms,
+ u_ViewportSize: [width, height],
+ },
+ };
+ }
+
+ protected convertOptionsToUniforms(
+ options: Partial,
+ ): {
+ [uniformName: string]: IUniform;
+ } | void {
+ const uniforms: {
+ [key: string]: IUniform;
+ } = {};
+
+ if (!isNil(options.blurRadius)) {
+ uniforms.u_BlurDir = [options.blurRadius, 0];
+ }
+
+ return uniforms;
+ }
+}
diff --git a/packages/core/src/services/renderer/passes/post-processing/BlurVPass.ts b/packages/core/src/services/renderer/passes/post-processing/BlurVPass.ts
new file mode 100644
index 0000000000..906feafa73
--- /dev/null
+++ b/packages/core/src/services/renderer/passes/post-processing/BlurVPass.ts
@@ -0,0 +1,59 @@
+import { inject, injectable } from 'inversify';
+import { isNil } from 'lodash';
+import blur from '../../../../shaders/post-processing/blur.glsl';
+import quad from '../../../../shaders/post-processing/quad.glsl';
+import { TYPES } from '../../../../types';
+import { IRendererService } from '../../IRendererService';
+import { IUniform } from '../../IUniform';
+import BasePostProcessingPass from '../BasePostProcessingPass';
+
+export interface IBlurVPassConfig {
+ blurRadius: number;
+}
+
+@injectable()
+export default class BlurVPass extends BasePostProcessingPass<
+ IBlurVPassConfig
+> {
+ @inject(TYPES.IRendererService)
+ protected readonly rendererService: IRendererService;
+
+ public getName() {
+ return 'blurV';
+ }
+
+ public setupShaders() {
+ this.shaderModule.registerModule('blur-pass', {
+ vs: quad,
+ fs: blur,
+ });
+
+ const { vs, fs, uniforms } = this.shaderModule.getModule('blur-pass');
+ const { width, height } = this.rendererService.getViewportSize();
+
+ return {
+ vs,
+ fs,
+ uniforms: {
+ ...uniforms,
+ u_ViewportSize: [width, height],
+ },
+ };
+ }
+
+ protected convertOptionsToUniforms(
+ options: Partial,
+ ): {
+ [uniformName: string]: IUniform;
+ } | void {
+ const uniforms: {
+ [key: string]: IUniform;
+ } = {};
+
+ if (!isNil(options.blurRadius)) {
+ uniforms.u_BlurDir = [0, options.blurRadius];
+ }
+
+ return uniforms;
+ }
+}
diff --git a/packages/core/src/services/renderer/passes/post-processing/ColorHalfTonePass.ts b/packages/core/src/services/renderer/passes/post-processing/ColorHalfTonePass.ts
new file mode 100644
index 0000000000..80b322f467
--- /dev/null
+++ b/packages/core/src/services/renderer/passes/post-processing/ColorHalfTonePass.ts
@@ -0,0 +1,71 @@
+import { inject, injectable } from 'inversify';
+import { isNil } from 'lodash';
+import colorHalftone from '../../../../shaders/post-processing/colorhalftone.glsl';
+import quad from '../../../../shaders/post-processing/quad.glsl';
+import { TYPES } from '../../../../types';
+import { IRendererService } from '../../IRendererService';
+import { IUniform } from '../../IUniform';
+import BasePostProcessingPass from '../BasePostProcessingPass';
+
+export interface IColorHalftonePassConfig {
+ center: [number, number];
+ angle: number;
+ size: number;
+}
+
+@injectable()
+export default class ColorHalftonePass extends BasePostProcessingPass<
+ IColorHalftonePassConfig
+> {
+ @inject(TYPES.IRendererService)
+ protected readonly rendererService: IRendererService;
+
+ public getName() {
+ return 'colorHalftone';
+ }
+
+ protected setupShaders() {
+ this.shaderModule.registerModule('colorhalftone-pass', {
+ vs: quad,
+ fs: colorHalftone,
+ });
+
+ const { vs, fs, uniforms } = this.shaderModule.getModule(
+ 'colorhalftone-pass',
+ );
+ const { width, height } = this.rendererService.getViewportSize();
+
+ return {
+ vs,
+ fs,
+ uniforms: {
+ ...uniforms,
+ u_ViewportSize: [width, height],
+ },
+ };
+ }
+
+ protected convertOptionsToUniforms(
+ options: Partial,
+ ): {
+ [uniformName: string]: IUniform;
+ } | void {
+ const uniforms: {
+ [key: string]: IUniform;
+ } = {};
+
+ if (!isNil(options.center)) {
+ uniforms.u_Center = options.center;
+ }
+
+ if (!isNil(options.angle)) {
+ uniforms.u_Angle = options.angle;
+ }
+
+ if (!isNil(options.size)) {
+ uniforms.u_Size = options.size;
+ }
+
+ return uniforms;
+ }
+}
diff --git a/packages/core/src/services/renderer/passes/post-processing/CopyPass.ts b/packages/core/src/services/renderer/passes/post-processing/CopyPass.ts
new file mode 100644
index 0000000000..0b0e18a736
--- /dev/null
+++ b/packages/core/src/services/renderer/passes/post-processing/CopyPass.ts
@@ -0,0 +1,29 @@
+import { injectable } from 'inversify';
+import copy from '../../../../shaders/post-processing/copy.glsl';
+import quad from '../../../../shaders/post-processing/quad.glsl';
+import { IUniform } from '../../IUniform';
+import BasePostProcessingPass from '../BasePostProcessingPass';
+
+@injectable()
+export default class CopyPass extends BasePostProcessingPass {
+ public getName() {
+ return 'copy';
+ }
+
+ public setupShaders() {
+ this.shaderModule.registerModule('copy-pass', {
+ vs: quad,
+ fs: copy,
+ });
+
+ return this.shaderModule.getModule('copy-pass');
+ }
+
+ protected convertOptionsToUniforms(
+ options: Partial<{}>,
+ ): {
+ [uniformName: string]: IUniform;
+ } | void {
+ return {};
+ }
+}
diff --git a/packages/core/src/services/renderer/passes/post-processing/HexagonalPixelatePass.ts b/packages/core/src/services/renderer/passes/post-processing/HexagonalPixelatePass.ts
new file mode 100644
index 0000000000..16aa7d1b3e
--- /dev/null
+++ b/packages/core/src/services/renderer/passes/post-processing/HexagonalPixelatePass.ts
@@ -0,0 +1,66 @@
+import { inject, injectable } from 'inversify';
+import { isNil } from 'lodash';
+import hexagonalPixelate from '../../../../shaders/post-processing/hexagonalpixelate.glsl';
+import quad from '../../../../shaders/post-processing/quad.glsl';
+import { TYPES } from '../../../../types';
+import { IRendererService } from '../../IRendererService';
+import { IUniform } from '../../IUniform';
+import BasePostProcessingPass from '../BasePostProcessingPass';
+
+export interface IHexagonalPixelatePassConfig {
+ center: [number, number];
+ scale: number;
+}
+
+@injectable()
+export default class HexagonalPixelatePass extends BasePostProcessingPass<
+ IHexagonalPixelatePassConfig
+> {
+ @inject(TYPES.IRendererService)
+ protected readonly rendererService: IRendererService;
+
+ public getName() {
+ return 'hexagonalPixelate';
+ }
+
+ protected setupShaders() {
+ this.shaderModule.registerModule('hexagonalpixelate-pass', {
+ vs: quad,
+ fs: hexagonalPixelate,
+ });
+
+ const { vs, fs, uniforms } = this.shaderModule.getModule(
+ 'hexagonalpixelate-pass',
+ );
+ const { width, height } = this.rendererService.getViewportSize();
+
+ return {
+ vs,
+ fs,
+ uniforms: {
+ ...uniforms,
+ u_ViewportSize: [width, height],
+ },
+ };
+ }
+
+ protected convertOptionsToUniforms(
+ options: Partial,
+ ): {
+ [uniformName: string]: IUniform;
+ } | void {
+ const uniforms: {
+ [key: string]: IUniform;
+ } = {};
+
+ if (!isNil(options.center)) {
+ uniforms.u_Center = options.center;
+ }
+
+ if (!isNil(options.scale)) {
+ uniforms.u_Scale = options.scale;
+ }
+
+ return uniforms;
+ }
+}
diff --git a/packages/core/src/services/renderer/passes/post-processing/InkPass.ts b/packages/core/src/services/renderer/passes/post-processing/InkPass.ts
new file mode 100644
index 0000000000..d9032ffa33
--- /dev/null
+++ b/packages/core/src/services/renderer/passes/post-processing/InkPass.ts
@@ -0,0 +1,57 @@
+import { inject, injectable } from 'inversify';
+import { isNil } from 'lodash';
+import ink from '../../../../shaders/post-processing/ink.glsl';
+import quad from '../../../../shaders/post-processing/quad.glsl';
+import { TYPES } from '../../../../types';
+import { IRendererService } from '../../IRendererService';
+import { IUniform } from '../../IUniform';
+import BasePostProcessingPass from '../BasePostProcessingPass';
+
+export interface IInkPassConfig {
+ strength: number;
+}
+
+@injectable()
+export default class InkPass extends BasePostProcessingPass {
+ @inject(TYPES.IRendererService)
+ protected readonly rendererService: IRendererService;
+
+ public getName() {
+ return 'ink';
+ }
+
+ protected setupShaders() {
+ this.shaderModule.registerModule('ink-pass', {
+ vs: quad,
+ fs: ink,
+ });
+
+ const { vs, fs, uniforms } = this.shaderModule.getModule('ink-pass');
+ const { width, height } = this.rendererService.getViewportSize();
+
+ return {
+ vs,
+ fs,
+ uniforms: {
+ ...uniforms,
+ u_ViewportSize: [width, height],
+ },
+ };
+ }
+
+ protected convertOptionsToUniforms(
+ options: Partial,
+ ): {
+ [uniformName: string]: IUniform;
+ } | void {
+ const uniforms: {
+ [key: string]: IUniform;
+ } = {};
+
+ if (!isNil(options.strength)) {
+ uniforms.u_Strength = options.strength;
+ }
+
+ return uniforms;
+ }
+}
diff --git a/packages/core/src/services/renderer/passes/post-processing/NoisePass.ts b/packages/core/src/services/renderer/passes/post-processing/NoisePass.ts
new file mode 100644
index 0000000000..5c1eaaa9aa
--- /dev/null
+++ b/packages/core/src/services/renderer/passes/post-processing/NoisePass.ts
@@ -0,0 +1,44 @@
+import { injectable } from 'inversify';
+import { isNil } from 'lodash';
+import noise from '../../../../shaders/post-processing/noise.glsl';
+import quad from '../../../../shaders/post-processing/quad.glsl';
+import { IUniform } from '../../IUniform';
+import BasePostProcessingPass from '../BasePostProcessingPass';
+
+export interface INoisePassConfig {
+ amount: number;
+}
+
+@injectable()
+export default class NoisePass extends BasePostProcessingPass<
+ INoisePassConfig
+> {
+ public getName() {
+ return 'noise';
+ }
+
+ public setupShaders() {
+ this.shaderModule.registerModule('noise-pass', {
+ vs: quad,
+ fs: noise,
+ });
+
+ return this.shaderModule.getModule('noise-pass');
+ }
+
+ protected convertOptionsToUniforms(
+ options: Partial,
+ ): {
+ [uniformName: string]: IUniform;
+ } | void {
+ const uniforms: {
+ [key: string]: IUniform;
+ } = {};
+
+ if (!isNil(options.amount)) {
+ uniforms.u_Amount = options.amount;
+ }
+
+ return uniforms;
+ }
+}
diff --git a/packages/core/src/services/renderer/passes/post-processing/SepiaPass.ts b/packages/core/src/services/renderer/passes/post-processing/SepiaPass.ts
new file mode 100644
index 0000000000..7bcc318be9
--- /dev/null
+++ b/packages/core/src/services/renderer/passes/post-processing/SepiaPass.ts
@@ -0,0 +1,44 @@
+import { injectable } from 'inversify';
+import { isNil } from 'lodash';
+import quad from '../../../../shaders/post-processing/quad.glsl';
+import sepia from '../../../../shaders/post-processing/sepia.glsl';
+import { IUniform } from '../../IUniform';
+import BasePostProcessingPass from '../BasePostProcessingPass';
+
+export interface ISepiaPassConfig {
+ amount: number;
+}
+
+@injectable()
+export default class SepiaPass extends BasePostProcessingPass<
+ ISepiaPassConfig
+> {
+ public getName() {
+ return 'sepia';
+ }
+
+ public setupShaders() {
+ this.shaderModule.registerModule('sepia-pass', {
+ vs: quad,
+ fs: sepia,
+ });
+
+ return this.shaderModule.getModule('sepia-pass');
+ }
+
+ protected convertOptionsToUniforms(
+ options: Partial,
+ ): {
+ [uniformName: string]: IUniform;
+ } | void {
+ const uniforms: {
+ [key: string]: IUniform;
+ } = {};
+
+ if (!isNil(options.amount)) {
+ uniforms.u_Amount = options.amount;
+ }
+
+ return uniforms;
+ }
+}
diff --git a/packages/core/src/services/scene/ISceneService.ts b/packages/core/src/services/scene/ISceneService.ts
new file mode 100644
index 0000000000..373238cf55
--- /dev/null
+++ b/packages/core/src/services/scene/ISceneService.ts
@@ -0,0 +1,15 @@
+import { ILayer } from '../layer/ILayerService';
+import { IMapConfig } from '../map/IMapService';
+import { IRenderConfig } from '../renderer/IRendererService';
+
+export interface ISceneService {
+ on(type: string, hander: (...args: any[]) => void): void;
+ off(type: string, hander: (...args: any[]) => void): void;
+ removeAllListeners(event?: string): this;
+ init(config: IMapConfig & IRenderConfig): void;
+ addLayer(layer: ILayer): void;
+ render(): void;
+ destroy(): void;
+}
+// scene 事件
+export const SceneEventList = ['loaded', 'maploaded', 'resize', 'destroy'];
diff --git a/packages/core/src/services/scene/SceneService.ts b/packages/core/src/services/scene/SceneService.ts
new file mode 100644
index 0000000000..89d66acefa
--- /dev/null
+++ b/packages/core/src/services/scene/SceneService.ts
@@ -0,0 +1,225 @@
+import { EventEmitter } from 'eventemitter3';
+import { inject, injectable } from 'inversify';
+import { AsyncParallelHook, AsyncSeriesHook } from 'tapable';
+import { TYPES } from '../../types';
+import { createRendererContainer } from '../../utils/dom';
+import { IFontService } from '../asset/IFontService';
+import { IIconService, IImage } from '../asset/IIconService';
+import { ICameraService, IViewport } from '../camera/ICameraService';
+import { IControlService } from '../component/IControlService';
+import { IGlobalConfig, IGlobalConfigService } from '../config/IConfigService';
+import { IInteractionService } from '../interaction/IInteractionService';
+import { ILayer, ILayerService } from '../layer/ILayerService';
+import { ILogService } from '../log/ILogService';
+import { IMapCamera, IMapService } from '../map/IMapService';
+import { IRendererService } from '../renderer/IRendererService';
+import { IShaderModuleService } from '../shader/IShaderModuleService';
+import { ISceneService } from './ISceneService';
+/**
+ * will emit `loaded` `resize` `destroy` event
+ */
+@injectable()
+export default class Scene extends EventEmitter implements ISceneService {
+ /**
+ * 使用各种 Service
+ */
+ @inject(TYPES.IIconService)
+ private readonly iconService: IIconService;
+
+ @inject(TYPES.IFontService)
+ private readonly fontService: IFontService;
+
+ @inject(TYPES.IControlService)
+ private readonly controlService: IControlService;
+
+ @inject(TYPES.ILogService)
+ private readonly logger: ILogService;
+
+ @inject(TYPES.IGlobalConfigService)
+ private readonly configService: IGlobalConfigService;
+
+ @inject(TYPES.IMapService)
+ private readonly map: IMapService;
+
+ @inject(TYPES.IRendererService)
+ private readonly rendererService: IRendererService;
+
+ @inject(TYPES.ILayerService)
+ private readonly layerService: ILayerService;
+
+ @inject(TYPES.ICameraService)
+ private readonly cameraService: ICameraService;
+
+ @inject(TYPES.IInteractionService)
+ private readonly interactionService: IInteractionService;
+
+ @inject(TYPES.IShaderModuleService)
+ private readonly shaderModule: IShaderModuleService;
+
+ /**
+ * 是否首次渲染
+ */
+ private inited: boolean = false;
+ private initPromise: Promise;
+
+ /**
+ * canvas 容器
+ */
+ private $container: HTMLDivElement | null;
+
+ private hooks: {
+ init: AsyncParallelHook;
+ };
+
+ public constructor() {
+ super();
+ // @see https://github.com/webpack/tapable#usage
+ this.hooks = {
+ /**
+ * 初始化异步任务,可并行:
+ * 1. initMap:初始化地图底图、相机
+ * 2. initRenderer:初始化渲染引擎
+ * 3. initWorker:初始化 Worker
+ */
+ init: new AsyncParallelHook(['config']),
+ };
+ }
+
+ public init(globalConfig: IGlobalConfig) {
+ this.initClear();
+ this.configService.setAndCheckConfig(globalConfig);
+ // 初始化 ShaderModule
+ this.shaderModule.registerBuiltinModules();
+
+ // 初始化资源管理 图片
+ this.iconService.init();
+ // 字体资源
+ this.fontService.init();
+
+ this.controlService.init({
+ container: document.getElementById(
+ this.configService.getConfig().id || 'map',
+ ) as HTMLElement,
+ });
+
+ /**
+ * 初始化底图
+ */
+ this.hooks.init.tapPromise('initMap', async (config: unknown) => {
+ // 等待首次相机同步
+ await new Promise((resolve) => {
+ this.map.onCameraChanged((viewport: IViewport) => {
+ this.cameraService.init();
+ this.cameraService.update(viewport);
+ resolve();
+ });
+ this.map.init(config as Partial);
+ });
+
+ // 重新绑定非首次相机更新事件
+ this.map.onCameraChanged(this.handleMapCameraChanged);
+ this.logger.info('map loaded');
+
+ // scene 创建完成自动调用render 方法
+ this.render();
+ });
+
+ /**
+ * 初始化渲染引擎
+ */
+ this.hooks.init.tapPromise('initRenderer', async () => {
+ // 创建底图之上的 container
+ const $container = createRendererContainer(
+ this.configService.getConfig().id || '',
+ );
+ this.$container = $container;
+ if ($container) {
+ await this.rendererService.init($container);
+ window.addEventListener('resize', this.handleWindowResized, false);
+ } else {
+ this.logger.error('容器 id 不存在');
+ }
+
+ // 初始化 container 上的交互
+ this.interactionService.init();
+
+ this.logger.info('renderer loaded');
+ });
+
+ // TODO:init worker, fontAtlas...
+
+ // 执行异步并行初始化任务
+ this.initPromise = this.hooks.init.promise(this.configService.getConfig());
+ }
+
+ public addLayer(layer: ILayer) {
+ this.logger.info(`add layer ${layer.name}`);
+ this.layerService.add(layer);
+ }
+
+ public async render() {
+ // 首次初始化,或者地图的容器被强制销毁的需要重新初始化
+ if (!this.inited) {
+ // 还未初始化完成需要等待
+ await this.initPromise;
+ // 初始化 marker 容器 TODO: 可以放到 map 初始化方法中?
+ this.map.addMarkerContainer();
+ this.logger.info(' render inited');
+ this.inited = true;
+ this.emit('loaded');
+ }
+
+ this.layerService.renderLayers();
+ this.logger.info('render');
+ }
+
+ public destroy() {
+ this.emit('destroy');
+ this.inited = false;
+ this.layerService.destroy();
+ this.configService.reset();
+ this.interactionService.destroy();
+ this.controlService.destroy();
+ this.removeAllListeners();
+ this.rendererService.destroy();
+ this.map.destroy();
+ window.removeEventListener('resize', this.handleWindowResized, false);
+ }
+ private handleWindowResized = () => {
+ this.emit('resize');
+ if (this.$container) {
+ // recalculate the viewport's size and call gl.viewport
+ // @see https://github.com/regl-project/regl/blob/master/lib/webgl.js#L24-L38
+ const pixelRatio = window.devicePixelRatio;
+ let w = window.innerWidth;
+ let h = window.innerHeight;
+ if (this.$container !== document.body) {
+ const bounds = this.$container.getBoundingClientRect();
+ w = bounds.right - bounds.left;
+ h = bounds.bottom - bounds.top;
+ }
+ this.rendererService.viewport({
+ x: 0,
+ y: 0,
+ width: pixelRatio * w,
+ height: pixelRatio * h,
+ });
+ // repaint layers
+ this.render();
+ }
+ };
+ private handleMapCameraChanged = (viewport: IViewport) => {
+ this.cameraService.update(viewport);
+ this.render();
+ };
+ private initClear() {
+ this.inited = false;
+ this.layerService.destroy();
+ this.configService.reset();
+ this.interactionService.destroy();
+ this.controlService.destroy();
+ this.removeAllListeners();
+ this.map.destroy();
+ window.removeEventListener('resize', this.handleWindowResized, false);
+ }
+}
diff --git a/packages/core/src/services/shader/IShaderModuleService.ts b/packages/core/src/services/shader/IShaderModuleService.ts
new file mode 100644
index 0000000000..7a0a4089ed
--- /dev/null
+++ b/packages/core/src/services/shader/IShaderModuleService.ts
@@ -0,0 +1,24 @@
+import { IUniform } from '../renderer/IUniform';
+
+/**
+ * 提供 ShaderModule 管理服务
+ */
+
+export interface IModuleParams {
+ vs: string;
+ fs: string;
+ uniforms?: {
+ [key: string]: IUniform;
+ };
+}
+
+export interface IShaderModuleService {
+ registerModule(moduleName: string, moduleParams: IModuleParams): void;
+ getModule(moduleName: string): IModuleParams;
+
+ /**
+ * 注册 L7 内置 shader module
+ */
+ registerBuiltinModules(): void;
+ destroy(): void;
+}
diff --git a/packages/core/src/services/shader/ShaderModuleService.ts b/packages/core/src/services/shader/ShaderModuleService.ts
new file mode 100644
index 0000000000..f35163ab03
--- /dev/null
+++ b/packages/core/src/services/shader/ShaderModuleService.ts
@@ -0,0 +1,138 @@
+import { inject, injectable } from 'inversify';
+import { uniq } from 'lodash';
+import { extractUniforms } from '../../utils/shader-module';
+import { IModuleParams, IShaderModuleService } from './IShaderModuleService';
+
+import common from '../../shaders/common.glsl';
+import decode from '../../shaders/decode.glsl';
+import light from '../../shaders/light2.glsl';
+import lighting from '../../shaders/lighting.glsl';
+import pickingFrag from '../../shaders/picking.frag.glsl';
+import pickingVert from '../../shaders/picking.vert.glsl';
+import project from '../../shaders/project.glsl';
+import projection from '../../shaders/projection.glsl';
+import sdf2d from '../../shaders/sdf_2d.glsl';
+
+const precisionRegExp = /precision\s+(high|low|medium)p\s+float/;
+const globalDefaultprecision =
+ '#ifdef GL_FRAGMENT_PRECISION_HIGH\n precision highp float;\n #else\n precision mediump float;\n#endif\n';
+const includeRegExp = /#pragma include (["^+"]?["\ "[a-zA-Z_0-9](.*)"]*?)/g;
+
+@injectable()
+export default class ShaderModuleService implements IShaderModuleService {
+ private moduleCache: { [key: string]: IModuleParams } = {};
+ private rawContentCache: { [key: string]: IModuleParams } = {};
+
+ public registerBuiltinModules() {
+ this.destroy();
+ this.registerModule('common', { vs: common, fs: common });
+ this.registerModule('decode', { vs: decode, fs: '' });
+ this.registerModule('projection', { vs: projection, fs: '' });
+ this.registerModule('project', { vs: project, fs: '' });
+ this.registerModule('sdf_2d', { vs: '', fs: sdf2d });
+ this.registerModule('lighting', { vs: lighting, fs: '' });
+ this.registerModule('light', { vs: light, fs: '' });
+ this.registerModule('picking', { vs: pickingVert, fs: pickingFrag });
+ }
+
+ public registerModule(moduleName: string, moduleParams: IModuleParams) {
+ // prevent registering the same module multiple times
+ if (this.rawContentCache[moduleName]) {
+ return;
+ }
+
+ const { vs, fs, uniforms: declaredUniforms } = moduleParams;
+ const { content: extractedVS, uniforms: vsUniforms } = extractUniforms(vs);
+ const { content: extractedFS, uniforms: fsUniforms } = extractUniforms(fs);
+
+ this.rawContentCache[moduleName] = {
+ fs: extractedFS,
+ uniforms: {
+ ...vsUniforms,
+ ...fsUniforms,
+ ...declaredUniforms,
+ },
+ vs: extractedVS,
+ };
+ }
+ public destroy() {
+ this.moduleCache = {};
+ this.rawContentCache = {};
+ }
+ public getModule(moduleName: string): IModuleParams {
+ if (this.moduleCache[moduleName]) {
+ return this.moduleCache[moduleName];
+ }
+
+ const rawVS = this.rawContentCache[moduleName].vs;
+ const rawFS = this.rawContentCache[moduleName].fs;
+
+ const { content: vs, includeList: vsIncludeList } = this.processModule(
+ rawVS,
+ [],
+ 'vs',
+ );
+ const { content: fs, includeList: fsIncludeList } = this.processModule(
+ rawFS,
+ [],
+ 'fs',
+ );
+ let compiledFs = fs;
+ // TODO: extract uniforms and their default values from GLSL
+ const uniforms: {
+ [key: string]: any;
+ } = uniq(vsIncludeList.concat(fsIncludeList).concat(moduleName)).reduce(
+ (prev, cur: string) => {
+ return {
+ ...prev,
+ ...this.rawContentCache[cur].uniforms,
+ };
+ },
+ {},
+ );
+
+ /**
+ * set default precision for fragment shader
+ * https://stackoverflow.com/questions/28540290/why-it-is-necessary-to-set-precision-for-the-fragment-shader
+ */
+ if (!precisionRegExp.test(fs)) {
+ compiledFs = globalDefaultprecision + fs;
+ }
+
+ this.moduleCache[moduleName] = {
+ fs: compiledFs.trim(),
+ uniforms,
+ vs: vs.trim(),
+ };
+ return this.moduleCache[moduleName];
+ }
+
+ private processModule(
+ rawContent: string,
+ includeList: string[],
+ type: 'vs' | 'fs',
+ ): {
+ content: string;
+ includeList: string[];
+ } {
+ const compiled = rawContent.replace(includeRegExp, (_, strMatch) => {
+ const includeOpt = strMatch.split(' ');
+ const includeName = includeOpt[0].replace(/"/g, '');
+
+ if (includeList.indexOf(includeName) > -1) {
+ return '';
+ }
+
+ const txt = this.rawContentCache[includeName][type];
+ includeList.push(includeName);
+
+ const { content } = this.processModule(txt, includeList, type);
+ return content;
+ });
+
+ return {
+ content: compiled,
+ includeList,
+ };
+ }
+}
diff --git a/packages/core/src/services/shader/__tests__/shader.spec.ts b/packages/core/src/services/shader/__tests__/shader.spec.ts
new file mode 100644
index 0000000000..b81fdf9eec
--- /dev/null
+++ b/packages/core/src/services/shader/__tests__/shader.spec.ts
@@ -0,0 +1,30 @@
+import 'reflect-metadata';
+import { IShaderModuleService } from '../IShaderModuleService';
+import ShaderModuleService from '../ShaderModuleService';
+
+describe('ShaderService', () => {
+ let shaderService: IShaderModuleService;
+
+ beforeEach(() => {
+ shaderService = new ShaderModuleService();
+ });
+
+ it('should register common module correctly and generate proper fragment/vertex shader code', () => {
+ const rawShaderCode = `
+ #define PI 3.14
+ `;
+
+ const commonModule = {
+ fs: rawShaderCode,
+ vs: rawShaderCode,
+ };
+ shaderService.registerModule('common', commonModule);
+
+ const { vs, fs } = shaderService.getModule('common');
+
+ expect(vs).toMatch(/3\.14/);
+ expect(fs).toMatch(/3\.14/);
+
+ expect(fs).toMatch(/precision mediump float;/);
+ });
+});
diff --git a/packages/core/src/services/shader/glsl.d.ts b/packages/core/src/services/shader/glsl.d.ts
new file mode 100644
index 0000000000..88eb5a0d56
--- /dev/null
+++ b/packages/core/src/services/shader/glsl.d.ts
@@ -0,0 +1,4 @@
+declare module '*.glsl' {
+ const value: string;
+ export default value;
+}
\ No newline at end of file
diff --git a/packages/core/src/services/source/ISourceService.ts b/packages/core/src/services/source/ISourceService.ts
new file mode 100644
index 0000000000..c04b21a931
--- /dev/null
+++ b/packages/core/src/services/source/ISourceService.ts
@@ -0,0 +1,63 @@
+export type DataType = string | object[] | object;
+export interface IParserCfg {
+ type: string;
+ x?: string;
+ y?: string;
+ x1?: string;
+ y1?: string;
+ coordinates?: string;
+ [key: string]: any;
+}
+type CallBack = (...args: any[]) => any;
+export interface ITransform {
+ type: string;
+ [key: string]: any;
+ callback?: CallBack;
+}
+
+export interface ISourceCFG {
+ parser?: IParserCfg;
+ transforms?: ITransform[];
+}
+export interface IDictionary {
+ [key: string]: TValue;
+}
+export interface IFeatureKey {
+ [key: string]: {
+ index: number;
+ idField: any;
+ };
+}
+// 解析后返回数据类型
+export interface IParseDataItem {
+ coordinates: any[];
+ _id: number;
+ [key: string]: any;
+}
+export interface IParserData {
+ [key: string]: any;
+ dataArray: IParseDataItem[];
+ // 瓦片地图数据字典
+ featureKeys?: IFeatureKey;
+}
+export interface IJsonItem {
+ [key: string]: any;
+}
+export type IJsonData = IJsonItem[];
+
+export interface ISource {
+ data: IParserData;
+}
+export interface IRasterCfg {
+ extent: [number, number, number, number];
+ width: number;
+ height: number;
+ max: number;
+ min: number;
+}
+
+export interface IRasterParserDataItem extends IParseDataItem {
+ data: number[];
+ width: number;
+ height: number;
+}
diff --git a/packages/core/src/shaders/common.glsl b/packages/core/src/shaders/common.glsl
new file mode 100644
index 0000000000..d4b6e8dbaf
--- /dev/null
+++ b/packages/core/src/shaders/common.glsl
@@ -0,0 +1 @@
+#define PI 3.14159265359
\ No newline at end of file
diff --git a/packages/core/src/shaders/decode.glsl b/packages/core/src/shaders/decode.glsl
new file mode 100644
index 0000000000..07818873f9
--- /dev/null
+++ b/packages/core/src/shaders/decode.glsl
@@ -0,0 +1,30 @@
+#define SHIFT_RIGHT17 1.0 / 131072.0
+#define SHIFT_RIGHT18 1.0 / 262144.0
+#define SHIFT_RIGHT19 1.0 / 524288.0
+#define SHIFT_RIGHT20 1.0 / 1048576.0
+#define SHIFT_RIGHT21 1.0 / 2097152.0
+#define SHIFT_RIGHT22 1.0 / 4194304.0
+#define SHIFT_RIGHT23 1.0 / 8388608.0
+#define SHIFT_RIGHT24 1.0 / 16777216.0
+
+#define SHIFT_LEFT17 131072.0
+#define SHIFT_LEFT18 262144.0
+#define SHIFT_LEFT19 524288.0
+#define SHIFT_LEFT20 1048576.0
+#define SHIFT_LEFT21 2097152.0
+#define SHIFT_LEFT22 4194304.0
+#define SHIFT_LEFT23 8388608.0
+#define SHIFT_LEFT24 16777216.0
+
+vec2 unpack_float(const float packedValue) {
+ int packedIntValue = int(packedValue);
+ int v0 = packedIntValue / 256;
+ return vec2(v0, packedIntValue - v0 * 256);
+}
+
+vec4 decode_color(const vec2 encodedColor) {
+ return vec4(
+ unpack_float(encodedColor[0]) / 255.0,
+ unpack_float(encodedColor[1]) / 255.0
+ );
+}
\ No newline at end of file
diff --git a/packages/core/src/shaders/light2.glsl b/packages/core/src/shaders/light2.glsl
new file mode 100644
index 0000000000..a22101d161
--- /dev/null
+++ b/packages/core/src/shaders/light2.glsl
@@ -0,0 +1,25 @@
+#define ambientRatio 0.5
+#define diffuseRatio 0.3
+#define specularRatio 0.2
+
+
+float calc_lighting(vec4 pos) {
+
+ vec3 worldPos = vec3(pos * u_ModelMatrix);
+
+ vec3 worldNormal = a_Normal;
+ // //cal light weight
+ vec3 viewDir = normalize(u_CameraPosition - worldPos);
+
+ vec3 lightDir = normalize(reverse_offset_normal(vec3(1, 10.5, 12)));
+
+ vec3 halfDir = normalize(viewDir+lightDir);
+ // //lambert
+ float lambert = dot(worldNormal, lightDir);
+ //specular
+ float specular = pow(max(0.0, dot(worldNormal, halfDir)), 32.0);
+ //sum to light weight
+ float lightWeight = ambientRatio + diffuseRatio * lambert + specularRatio * specular;
+
+ return lightWeight;
+}
diff --git a/packages/core/src/shaders/lighting.glsl b/packages/core/src/shaders/lighting.glsl
new file mode 100644
index 0000000000..fa4d2911e5
--- /dev/null
+++ b/packages/core/src/shaders/lighting.glsl
@@ -0,0 +1,97 @@
+// Blinn-Phong model
+// apply lighting in vertex shader instead of fragment shader
+// @see https://learnopengl.com/Advanced-Lighting/Advanced-Lighting
+uniform float u_Ambient : 1.0;
+uniform float u_Diffuse : 1.0;
+uniform float u_Specular : 1.0;
+uniform int u_NumOfDirectionalLights : 1;
+uniform int u_NumOfSpotLights : 0;
+
+#define SHININESS 32.0
+#define MAX_NUM_OF_DIRECTIONAL_LIGHTS 3
+#define MAX_NUM_OF_SPOT_LIGHTS 3
+
+struct DirectionalLight {
+ vec3 direction;
+ vec3 ambient;
+ vec3 diffuse;
+ vec3 specular;
+};
+
+struct SpotLight {
+ vec3 position;
+ vec3 direction;
+ vec3 ambient;
+ vec3 diffuse;
+ vec3 specular;
+ float constant;
+ float linear;
+ float quadratic;
+ float angle;
+ float blur;
+ float exponent;
+};
+
+uniform DirectionalLight u_DirectionalLights[MAX_NUM_OF_DIRECTIONAL_LIGHTS];
+uniform SpotLight u_SpotLights[MAX_NUM_OF_SPOT_LIGHTS];
+
+vec3 calc_directional_light(DirectionalLight light, vec3 normal, vec3 viewDir) {
+ vec3 lightDir = normalize(light.direction);
+ // diffuse shading
+ float diff = max(dot(normal, lightDir), 0.0);
+ // Blinn-Phong specular shading
+ vec3 halfwayDir = normalize(lightDir + viewDir);
+ float spec = pow(max(dot(normal, halfwayDir), 0.0), SHININESS);
+
+ vec3 ambient = light.ambient * u_Ambient;
+ vec3 diffuse = light.diffuse * diff * u_Diffuse;
+ vec3 specular = light.specular * spec * u_Specular;
+
+ return ambient + diffuse + specular;
+}
+
+// vec3 calc_spot_light(SpotLight light, vec3 normal, vec3 fragPos, vec3 viewDir) {
+// vec3 lightDir = normalize(light.position - fragPos);
+// // diffuse shading
+// float diff = max(dot(normal, lightDir), 0.0);
+// // specular shading
+// vec3 reflectDir = reflect(-lightDir, normal);
+// float spec = pow(max(dot(viewDir, reflectDir), 0.0), SHININESS);
+// // attenuation
+// float distance = length(light.position - fragPos);
+// float attenuation = 1.0 / (light.constant + light.linear * distance +
+// light.quadratic * (distance * distance));
+
+// vec3 ambient = light.ambient * u_Ambient;
+// vec3 diffuse = light.diffuse * diff * u_Diffuse;
+// vec3 specular = light.specular * spec * u_Specular;
+
+// float spotEffect = dot(normalize(light.direction), -lightDir);
+// float spotCosCutoff = cos(light.angle / 180.0 * PI);
+// float spotCosOuterCutoff = cos((light.angle + light.blur) / 180.0 * PI);
+// float spotCosInnerCutoff = cos((light.angle - light.blur) / 180.0 * PI);
+// if (spotEffect > spotCosCutoff) {
+// spotEffect = pow(smoothstep(spotCosOuterCutoff, spotCosInnerCutoff, spotEffect), light.exponent);
+// } else {
+// spotEffect = 0.0;
+// }
+
+// return ambient + attenuation * (spotEffect * diffuse + specular);
+// }
+
+vec3 calc_lighting(vec3 position, vec3 normal, vec3 viewDir) {
+ vec3 weight = vec3(0.0);
+ for (int i = 0; i < MAX_NUM_OF_DIRECTIONAL_LIGHTS; i++) {
+ if (i >= u_NumOfDirectionalLights) {
+ break;
+ }
+ weight += calc_directional_light(u_DirectionalLights[i], normal, viewDir);
+ }
+ // for (int i = 0; i < MAX_NUM_OF_SPOT_LIGHTS; i++) {
+ // if (i >= u_NumOfSpotLights) {
+ // break;
+ // }
+ // weight += calc_spot_light(u_SpotLights[i], normal, position, viewDir);
+ // }
+ return weight;
+}
\ No newline at end of file
diff --git a/packages/core/src/shaders/picking.frag.glsl b/packages/core/src/shaders/picking.frag.glsl
new file mode 100644
index 0000000000..66e78052ac
--- /dev/null
+++ b/packages/core/src/shaders/picking.frag.glsl
@@ -0,0 +1,46 @@
+varying vec4 v_PickingResult;
+uniform vec4 u_HighlightColor : [0, 0, 0, 0];
+uniform float u_PickingStage : 0.0;
+
+#define PICKING_NONE 0.0
+#define PICKING_ENCODE 1.0
+#define PICKING_HIGHLIGHT 2.0
+#define COLOR_SCALE 1. / 255.
+
+/*
+ * Returns highlight color if this item is selected.
+ */
+vec4 filterHighlightColor(vec4 color) {
+ bool selected = bool(v_PickingResult.a);
+
+ if (selected) {
+ vec4 highLightColor = u_HighlightColor * COLOR_SCALE;
+
+ float highLightAlpha = highLightColor.a;
+ float highLightRatio = highLightAlpha / (highLightAlpha + color.a * (1.0 - highLightAlpha));
+
+ vec3 resultRGB = mix(color.rgb, highLightColor.rgb, highLightRatio);
+ return vec4(resultRGB, color.a);
+ } else {
+ return color;
+ }
+}
+
+/*
+ * Returns picking color if picking enabled else unmodified argument.
+ */
+vec4 filterPickingColor(vec4 color) {
+ vec3 pickingColor = v_PickingResult.rgb;
+ if (u_PickingStage == PICKING_ENCODE && length(pickingColor) < 0.001) {
+ discard;
+ }
+ return u_PickingStage == PICKING_ENCODE ? vec4(pickingColor, 1.0) : color;
+}
+
+/*
+ * Returns picking color if picking is enabled if not
+ * highlight color if this item is selected, otherwise unmodified argument.
+ */
+vec4 filterColor(vec4 color) {
+ return filterPickingColor(filterHighlightColor(color));
+}
\ No newline at end of file
diff --git a/packages/core/src/shaders/picking.vert.glsl b/packages/core/src/shaders/picking.vert.glsl
new file mode 100644
index 0000000000..7b1f2c8b5a
--- /dev/null
+++ b/packages/core/src/shaders/picking.vert.glsl
@@ -0,0 +1,27 @@
+attribute vec3 a_PickingColor;
+varying vec4 v_PickingResult;
+
+uniform vec3 u_PickingColor : [0, 0, 0];
+uniform vec4 u_HighlightColor : [0, 0, 0, 0];
+uniform float u_PickingStage : 0.0;
+uniform float u_PickingThreshold : 1.0;
+
+#define PICKING_NONE 0.0
+#define PICKING_ENCODE 1.0
+#define PICKING_HIGHLIGHT 2.0
+#define COLOR_SCALE 1. / 255.
+
+bool isVertexPicked(vec3 vertexColor) {
+ return
+ abs(vertexColor.r - u_PickingColor.r) < u_PickingThreshold &&
+ abs(vertexColor.g - u_PickingColor.g) < u_PickingThreshold &&
+ abs(vertexColor.b - u_PickingColor.b) < u_PickingThreshold;
+}
+
+void setPickingColor(vec3 pickingColor) {
+ // compares only in highlight stage
+ v_PickingResult.a = float((u_PickingStage == PICKING_HIGHLIGHT) && isVertexPicked(pickingColor));
+
+ // Stores the picking color so that the fragment shader can render it during picking
+ v_PickingResult.rgb = pickingColor * COLOR_SCALE;
+}
diff --git a/packages/core/src/shaders/post-processing/blend.glsl b/packages/core/src/shaders/post-processing/blend.glsl
new file mode 100644
index 0000000000..2a8cbf98dd
--- /dev/null
+++ b/packages/core/src/shaders/post-processing/blend.glsl
@@ -0,0 +1,13 @@
+uniform float u_opacity : 1.0;
+uniform float u_MixRatio : 0.5;
+
+uniform sampler2D u_Diffuse1;
+uniform sampler2D u_Diffuse2;
+
+varying vec2 v_UV;
+
+void main() {
+ vec4 texel1 = texture2D(u_Diffuse1, v_UV);
+ vec4 texel2 = texture2D(u_Diffuse2, v_UV);
+ gl_FragColor = u_opacity * mix(texel1, texel2, u_MixRatio);
+}
diff --git a/packages/core/src/shaders/post-processing/blur.glsl b/packages/core/src/shaders/post-processing/blur.glsl
new file mode 100644
index 0000000000..988f625841
--- /dev/null
+++ b/packages/core/src/shaders/post-processing/blur.glsl
@@ -0,0 +1,23 @@
+varying vec2 v_UV;
+
+uniform sampler2D u_Texture;
+
+uniform vec2 u_ViewportSize: [1.0, 1.0];
+uniform vec2 u_BlurDir: [1.0, 0.0];
+
+// https://github.com/Jam3/glsl-fast-gaussian-blur/blob/master/9.glsl
+vec4 blur9(sampler2D image, vec2 uv, vec2 resolution, vec2 direction) {
+ vec4 color = vec4(0.0);
+ vec2 off1 = vec2(1.3846153846) * direction;
+ vec2 off2 = vec2(3.2307692308) * direction;
+ color += texture2D(image, uv) * 0.2270270270;
+ color += texture2D(image, uv + (off1 / resolution)) * 0.3162162162;
+ color += texture2D(image, uv - (off1 / resolution)) * 0.3162162162;
+ color += texture2D(image, uv + (off2 / resolution)) * 0.0702702703;
+ color += texture2D(image, uv - (off2 / resolution)) * 0.0702702703;
+ return color;
+}
+
+void main() {
+ gl_FragColor = blur9(u_Texture, v_UV, u_ViewportSize, u_BlurDir);
+}
\ No newline at end of file
diff --git a/packages/core/src/shaders/post-processing/colorhalftone.glsl b/packages/core/src/shaders/post-processing/colorhalftone.glsl
new file mode 100644
index 0000000000..dd43c37d90
--- /dev/null
+++ b/packages/core/src/shaders/post-processing/colorhalftone.glsl
@@ -0,0 +1,44 @@
+varying vec2 v_UV;
+
+uniform sampler2D u_Texture;
+uniform vec2 u_ViewportSize: [1.0, 1.0];
+uniform vec2 u_Center : [0.5, 0.5];
+uniform float u_Angle : 0;
+uniform float u_Size : 8;
+
+#pragma include "common"
+
+float scale = PI / u_Size;
+
+float pattern(float u_Angle, vec2 texSize, vec2 texCoord) {
+ float s = sin(u_Angle), c = cos(u_Angle);
+ vec2 tex = texCoord * texSize - u_Center * texSize;
+ vec2 point = vec2(
+ c * tex.x - s * tex.y,
+ s * tex.x + c * tex.y
+ ) * scale;
+ return (sin(point.x) * sin(point.y)) * 4.0;
+}
+
+// https://github.com/evanw/glfx.js/blob/master/src/filters/fun/colorhalftone.js
+vec4 colorHalftone_filterColor(vec4 color, vec2 texSize, vec2 texCoord) {
+ vec3 cmy = 1.0 - color.rgb;
+ float k = min(cmy.x, min(cmy.y, cmy.z));
+ cmy = (cmy - k) / (1.0 - k);
+ cmy = clamp(
+ cmy * 10.0 - 3.0 + vec3(
+ pattern(u_Angle + 0.26179, texSize, texCoord),
+ pattern(u_Angle + 1.30899, texSize, texCoord),
+ pattern(u_Angle, texSize, texCoord)
+ ),
+ 0.0,
+ 1.0
+ );
+ k = clamp(k * 10.0 - 5.0 + pattern(u_Angle + 0.78539, texSize, texCoord), 0.0, 1.0);
+ return vec4(1.0 - cmy - k, color.a);
+}
+
+void main() {
+ gl_FragColor = vec4(texture2D(u_Texture, v_UV));
+ gl_FragColor = colorHalftone_filterColor(gl_FragColor, u_ViewportSize, v_UV);
+}
\ No newline at end of file
diff --git a/packages/core/src/shaders/post-processing/copy.glsl b/packages/core/src/shaders/post-processing/copy.glsl
new file mode 100644
index 0000000000..6f5eeab786
--- /dev/null
+++ b/packages/core/src/shaders/post-processing/copy.glsl
@@ -0,0 +1,7 @@
+varying vec2 v_UV;
+
+uniform sampler2D u_Texture;
+
+void main() {
+ gl_FragColor = vec4(texture2D(u_Texture, v_UV));
+}
\ No newline at end of file
diff --git a/packages/core/src/shaders/post-processing/hexagonalpixelate.glsl b/packages/core/src/shaders/post-processing/hexagonalpixelate.glsl
new file mode 100644
index 0000000000..1892e29991
--- /dev/null
+++ b/packages/core/src/shaders/post-processing/hexagonalpixelate.glsl
@@ -0,0 +1,44 @@
+varying vec2 v_UV;
+
+uniform sampler2D u_Texture;
+uniform vec2 u_ViewportSize: [1.0, 1.0];
+uniform vec2 u_Center : [0.5, 0.5];
+uniform float u_Scale : 10;
+
+// https://github.com/evanw/glfx.js/blob/master/src/filters/fun/hexagonalpixelate.js
+vec4 hexagonalPixelate_sampleColor(sampler2D texture, vec2 texSize, vec2 texCoord) {
+ vec2 tex = (texCoord * texSize - u_Center * texSize) / u_Scale;
+ tex.y /= 0.866025404;
+ tex.x -= tex.y * 0.5;
+ vec2 a;
+ if (tex.x + tex.y - floor(tex.x) - floor(tex.y) < 1.0) {
+ a = vec2(floor(tex.x), floor(tex.y));
+ }
+ else a = vec2(ceil(tex.x), ceil(tex.y));
+ vec2 b = vec2(ceil(tex.x), floor(tex.y));
+ vec2 c = vec2(floor(tex.x), ceil(tex.y));
+ vec3 TEX = vec3(tex.x, tex.y, 1.0 - tex.x - tex.y);
+ vec3 A = vec3(a.x, a.y, 1.0 - a.x - a.y);
+ vec3 B = vec3(b.x, b.y, 1.0 - b.x - b.y);
+ vec3 C = vec3(c.x, c.y, 1.0 - c.x - c.y);
+ float alen = length(TEX - A);
+ float blen = length(TEX - B);
+ float clen = length(TEX - C);
+ vec2 choice;
+ if (alen < blen) {
+ if (alen < clen) choice = a;
+ else choice = c;
+ } else {
+ if (blen < clen) choice = b;
+ else choice = c;
+ }
+ choice.x += choice.y * 0.5;
+ choice.y *= 0.866025404;
+ choice *= u_Scale / texSize;
+ return texture2D(texture, choice + u_Center);
+}
+
+void main() {
+ gl_FragColor = vec4(texture2D(u_Texture, v_UV));
+ gl_FragColor = hexagonalPixelate_sampleColor(u_Texture, u_ViewportSize, v_UV);
+}
\ No newline at end of file
diff --git a/packages/core/src/shaders/post-processing/ink.glsl b/packages/core/src/shaders/post-processing/ink.glsl
new file mode 100644
index 0000000000..3d5e76777b
--- /dev/null
+++ b/packages/core/src/shaders/post-processing/ink.glsl
@@ -0,0 +1,34 @@
+varying vec2 v_UV;
+
+uniform sampler2D u_Texture;
+uniform vec2 u_ViewportSize: [1.0, 1.0];
+uniform float u_Strength : 0.6;
+
+vec4 ink_sampleColor(sampler2D texture, vec2 texSize, vec2 texCoord) {
+ vec2 dx = vec2(1.0 / texSize.x, 0.0);
+ vec2 dy = vec2(0.0, 1.0 / texSize.y);
+ vec4 color = texture2D(texture, texCoord);
+ float bigTotal = 0.0;
+ float smallTotal = 0.0;
+ vec3 bigAverage = vec3(0.0);
+ vec3 smallAverage = vec3(0.0);
+ for (float x = -2.0; x <= 2.0; x += 1.0) {
+ for (float y = -2.0; y <= 2.0; y += 1.0) {
+ vec3 sample = texture2D(texture, texCoord + dx * x + dy * y).rgb;
+ bigAverage += sample;
+ bigTotal += 1.0;
+ if (abs(x) + abs(y) < 2.0) {
+ smallAverage += sample;
+ smallTotal += 1.0;
+ }
+ }
+ }
+ vec3 edge = max(vec3(0.0), bigAverage / bigTotal - smallAverage / smallTotal);
+ float power = u_Strength * u_Strength * u_Strength * u_Strength * u_Strength;
+ return vec4(color.rgb - dot(edge, edge) * power * 100000.0, color.a);
+}
+
+void main() {
+ gl_FragColor = vec4(texture2D(u_Texture, v_UV));
+ gl_FragColor = ink_sampleColor(u_Texture, u_ViewportSize, v_UV);
+}
\ No newline at end of file
diff --git a/packages/core/src/shaders/post-processing/noise.glsl b/packages/core/src/shaders/post-processing/noise.glsl
new file mode 100644
index 0000000000..e66109f029
--- /dev/null
+++ b/packages/core/src/shaders/post-processing/noise.glsl
@@ -0,0 +1,22 @@
+varying vec2 v_UV;
+
+uniform sampler2D u_Texture;
+uniform float u_Amount : 0.5;
+
+float rand(vec2 co) {
+ return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
+}
+
+// https://github.com/evanw/glfx.js/blob/master/src/filters/adjust/noise.js
+vec4 noise_filterColor(vec4 color, vec2 texCoord) {
+ float diff = (rand(texCoord) - 0.5) * u_Amount;
+ color.r += diff;
+ color.g += diff;
+ color.b += diff;
+ return color;
+}
+
+void main() {
+ gl_FragColor = vec4(texture2D(u_Texture, v_UV));
+ gl_FragColor = noise_filterColor(gl_FragColor, v_UV);
+}
\ No newline at end of file
diff --git a/packages/core/src/shaders/post-processing/quad.glsl b/packages/core/src/shaders/post-processing/quad.glsl
new file mode 100644
index 0000000000..040e54efe1
--- /dev/null
+++ b/packages/core/src/shaders/post-processing/quad.glsl
@@ -0,0 +1,8 @@
+attribute vec2 a_Position;
+
+varying vec2 v_UV;
+
+void main() {
+ v_UV = 0.5 * (a_Position + 1.0);
+ gl_Position = vec4(a_Position, 0., 1.);
+}
\ No newline at end of file
diff --git a/packages/core/src/shaders/post-processing/sepia.glsl b/packages/core/src/shaders/post-processing/sepia.glsl
new file mode 100644
index 0000000000..204ede6ec7
--- /dev/null
+++ b/packages/core/src/shaders/post-processing/sepia.glsl
@@ -0,0 +1,22 @@
+varying vec2 v_UV;
+
+uniform sampler2D u_Texture;
+
+uniform float u_Amount : 0.5;
+
+// https://github.com/evanw/glfx.js/blob/master/src/filters/adjust/sepia.js
+vec4 sepia_filterColor(vec4 color) {
+ float r = color.r;
+ float g = color.g;
+ float b = color.b;
+ color.r =
+ min(1.0, (r * (1.0 - (0.607 * u_Amount))) + (g * (0.769 * u_Amount)) + (b * (0.189 * u_Amount)));
+ color.g = min(1.0, (r * 0.349 * u_Amount) + (g * (1.0 - (0.314 * u_Amount))) + (b * 0.168 * u_Amount));
+ color.b = min(1.0, (r * 0.272 * u_Amount) + (g * 0.534 * u_Amount) + (b * (1.0 - (0.869 * u_Amount))));
+ return color;
+}
+
+void main() {
+ gl_FragColor = vec4(texture2D(u_Texture, v_UV));
+ gl_FragColor = sepia_filterColor(gl_FragColor);
+}
\ No newline at end of file
diff --git a/packages/core/src/shaders/project.glsl b/packages/core/src/shaders/project.glsl
new file mode 100644
index 0000000000..df6ee0bc43
--- /dev/null
+++ b/packages/core/src/shaders/project.glsl
@@ -0,0 +1,34 @@
+
+#define E 2.718281828459045
+vec2 ProjectFlat(vec2 lnglat){
+ float maxs=85.0511287798;
+ float lat=max(min(maxs,lnglat.y),-maxs);
+ float scale= 268435456.;
+ float d=PI/180.;
+ float x=lnglat.x*d;
+ float y=lat*d;
+ y=log(tan((PI/4.)+(y/2.)));
+
+ float a=.5/PI,
+ b=.5,
+ c=-.5/PI;
+ d=.5;
+ x=scale*(a*x+b);
+ y=scale*(c*y+d);
+ return vec2(x,y);
+}
+
+vec2 unProjectFlat(vec2 px){
+ float a=.5/PI;
+ float b=.5;
+ float c=-.5/PI;
+ float d=.5;
+ float scale = 268435456.;
+ float x=(px.x/scale-b)/a;
+ float y=(px.y/scale-d)/c;
+ y=(atan(pow(E,y))-(PI/4.))*2.;
+ d=PI/180.;
+ float lat=y/d;
+ float lng=x/d;
+ return vec2(lng,lat);
+}
diff --git a/packages/core/src/shaders/projection.glsl b/packages/core/src/shaders/projection.glsl
new file mode 100644
index 0000000000..4f792e549e
--- /dev/null
+++ b/packages/core/src/shaders/projection.glsl
@@ -0,0 +1,151 @@
+#define TILE_SIZE 512.0
+#define PI 3.1415926536
+#define WORLD_SCALE TILE_SIZE / (PI * 2.0)
+
+#define COORDINATE_SYSTEM_LNGLAT 1.0
+#define COORDINATE_SYSTEM_LNGLAT_OFFSET 2.0
+#define COORDINATE_SYSTEM_VECTOR_TILE 3.0
+#define COORDINATE_SYSTEM_IDENTITY 4.0
+#define COORDINATE_SYSTEM_P20 5.0
+#define COORDINATE_SYSTEM_P20_OFFSET 6.0
+#define COORDINATE_SYSTEM_METER_OFFSET 7.0
+
+uniform mat4 u_ViewMatrix;
+uniform mat4 u_ProjectionMatrix;
+uniform mat4 u_ViewProjectionMatrix;
+uniform float u_Zoom : 1;
+uniform float u_ZoomScale : 1;
+
+uniform float u_CoordinateSystem;
+uniform vec2 u_ViewportCenter;
+uniform vec4 u_ViewportCenterProjection;
+uniform vec3 u_PixelsPerDegree;
+uniform vec3 u_PixelsPerDegree2;
+uniform vec3 u_PixelsPerMeter;
+
+uniform vec2 u_ViewportSize;
+uniform float u_DevicePixelRatio;
+uniform float u_FocalDistance;
+uniform vec3 u_CameraPosition;
+
+// web mercator coords -> world coords
+vec2 project_mercator(vec2 lnglat) {
+ float x = lnglat.x;
+ return vec2(
+ radians(x) + PI,
+ PI - log(tan(PI * 0.25 + radians(lnglat.y) * 0.5))
+ );
+}
+
+float project_scale(float meters) {
+ return meters * u_PixelsPerMeter.z;
+}
+
+
+// offset coords -> world coords
+vec4 project_offset(vec4 offset) {
+ float dy = offset.y;
+ dy = clamp(dy, -1., 1.);
+ vec3 pixels_per_unit = u_PixelsPerDegree + u_PixelsPerDegree2 * dy;
+ return vec4(offset.xyz * pixels_per_unit, offset.w);
+}
+
+vec3 project_normal(vec3 normal) {
+ vec4 normal_modelspace = u_ModelMatrix * vec4(normal, 0.0);
+ return normalize(normal_modelspace.xyz * u_PixelsPerMeter);
+}
+
+vec3 project_offset_normal(vec3 vector) {
+ if (u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT
+ || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {
+ // normals generated by the polygon tesselator are in lnglat offsets instead of meters
+ return normalize(vector * u_PixelsPerDegree);
+ }
+ return project_normal(vector);
+}
+
+// reverse Y
+vec3 reverse_offset_normal(vec3 vector) {
+ if (u_CoordinateSystem == COORDINATE_SYSTEM_P20) {
+ return vector * vec3(1.0, -1.0, 1.0);
+ }
+ return vector;
+}
+
+vec4 project_position(vec4 position) {
+ if (u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET
+ || u_CoordinateSystem == COORDINATE_SYSTEM_P20_OFFSET) {
+ float X = position.x - u_ViewportCenter.x;
+ float Y = position.y - u_ViewportCenter.y;
+ return project_offset(vec4(X, Y, position.z, position.w));
+ }
+
+ if (u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT) {
+ return vec4(
+ project_mercator(position.xy) * WORLD_SCALE * u_ZoomScale,
+ project_scale(position.z),
+ position.w
+ );
+ }
+
+ if (u_CoordinateSystem == COORDINATE_SYSTEM_P20) {
+ return vec4(
+ (project_mercator(position.xy) * WORLD_SCALE * u_ZoomScale - vec2(215440491., 106744817.)) * vec2(1., -1.),
+ project_scale(position.z),
+ position.w
+ );
+ }
+
+ // TODO: 瓦片坐标系 & 常规世界坐标系
+}
+
+vec2 project_pixel_size_to_clipspace(vec2 pixels) {
+ vec2 offset = pixels / u_ViewportSize * u_DevicePixelRatio * 2.0;
+ return offset * u_FocalDistance;
+}
+
+float project_pixel(float pixel) {
+ if (u_CoordinateSystem == COORDINATE_SYSTEM_P20
+ || u_CoordinateSystem == COORDINATE_SYSTEM_P20_OFFSET) {
+ // P20 坐标系下,为了和 Web 墨卡托坐标系统一,zoom 默认减1
+ return pixel * pow(2.0, (19.0 - u_Zoom));
+ }
+ return pixel;
+}
+vec2 project_pixel(vec2 pixel) {
+ if (u_CoordinateSystem == COORDINATE_SYSTEM_P20
+ || u_CoordinateSystem == COORDINATE_SYSTEM_P20_OFFSET) {
+ // P20 坐标系下,为了和 Web 墨卡托坐标系统一,zoom 默认减1
+ return pixel * pow(2.0, (19.0 - u_Zoom));
+ }
+ return pixel;
+}
+
+vec4 project_common_position_to_clipspace(vec4 position, mat4 viewProjectionMatrix, vec4 center) {
+ if (u_CoordinateSystem == COORDINATE_SYSTEM_METER_OFFSET ||
+ u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {
+ // Needs to be divided with project_uCommonUnitsPerMeter
+ position.w *= u_PixelsPerMeter.z;
+ }
+ return viewProjectionMatrix * position + center;
+}
+
+// Projects from common space coordinates to clip space
+vec4 project_common_position_to_clipspace(vec4 position) {
+ return project_common_position_to_clipspace(
+ position,
+ u_ViewProjectionMatrix,
+ u_ViewportCenterProjection
+ );
+}
+
+vec4 unproject_clipspace_to_position(vec4 clipspacePos, mat4 u_InverseViewProjectionMatrix) {
+ vec4 pos = u_InverseViewProjectionMatrix * (clipspacePos - u_ViewportCenterProjection);
+
+ if (u_CoordinateSystem == COORDINATE_SYSTEM_METER_OFFSET ||
+ u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {
+ // Needs to be divided with project_uCommonUnitsPerMeter
+ pos.w = pos.w / u_PixelsPerMeter.z;
+ }
+ return pos;
+}
diff --git a/packages/core/src/shaders/sdf_2d.glsl b/packages/core/src/shaders/sdf_2d.glsl
new file mode 100644
index 0000000000..4498415879
--- /dev/null
+++ b/packages/core/src/shaders/sdf_2d.glsl
@@ -0,0 +1,74 @@
+/**
+ * 2D signed distance field functions
+ * @see http://www.iquilezles.org/www/articles/distfunctions2d/distfunctions2d.htm
+ */
+
+float ndot(vec2 a, vec2 b ) { return a.x*b.x - a.y*b.y; }
+
+float sdCircle(vec2 p, float r) {
+ return length(p) - r;
+}
+
+float sdEquilateralTriangle(vec2 p) {
+ const float k = sqrt(3.0);
+ p.x = abs(p.x) - 1.0;
+ p.y = p.y + 1.0/k;
+ if( p.x + k*p.y > 0.0 ) p = vec2(p.x-k*p.y,-k*p.x-p.y)/2.0;
+ p.x -= clamp( p.x, -2.0, 0.0 );
+ return -length(p)*sign(p.y);
+}
+
+float sdBox(vec2 p, vec2 b) {
+ vec2 d = abs(p)-b;
+ return length(max(d,vec2(0))) + min(max(d.x,d.y),0.0);
+}
+
+float sdPentagon(vec2 p, float r) {
+ const vec3 k = vec3(0.809016994,0.587785252,0.726542528);
+ p.x = abs(p.x);
+ p -= 2.0*min(dot(vec2(-k.x,k.y),p),0.0)*vec2(-k.x,k.y);
+ p -= 2.0*min(dot(vec2( k.x,k.y),p),0.0)*vec2( k.x,k.y);
+ p -= vec2(clamp(p.x,-r*k.z,r*k.z),r);
+ return length(p)*sign(p.y);
+}
+
+float sdHexagon(vec2 p, float r) {
+ const vec3 k = vec3(-0.866025404,0.5,0.577350269);
+ p = abs(p);
+ p -= 2.0*min(dot(k.xy,p),0.0)*k.xy;
+ p -= vec2(clamp(p.x, -k.z*r, k.z*r), r);
+ return length(p)*sign(p.y);
+}
+
+float sdOctogon(vec2 p, float r) {
+ const vec3 k = vec3(-0.9238795325, 0.3826834323, 0.4142135623 );
+ p = abs(p);
+ p -= 2.0*min(dot(vec2( k.x,k.y),p),0.0)*vec2( k.x,k.y);
+ p -= 2.0*min(dot(vec2(-k.x,k.y),p),0.0)*vec2(-k.x,k.y);
+ p -= vec2(clamp(p.x, -k.z*r, k.z*r), r);
+ return length(p)*sign(p.y);
+}
+
+float sdHexagram(vec2 p, float r) {
+ const vec4 k=vec4(-0.5,0.8660254038,0.5773502692,1.7320508076);
+ p = abs(p);
+ p -= 2.0*min(dot(k.xy,p),0.0)*k.xy;
+ p -= 2.0*min(dot(k.yx,p),0.0)*k.yx;
+ p -= vec2(clamp(p.x,r*k.z,r*k.w),r);
+ return length(p)*sign(p.y);
+}
+
+float sdRhombus(vec2 p, vec2 b) {
+ vec2 q = abs(p);
+ float h = clamp((-2.0*ndot(q,b)+ndot(b,b))/dot(b,b),-1.0,1.0);
+ float d = length( q - 0.5*b*vec2(1.0-h,1.0+h) );
+ return d * sign( q.x*b.y + q.y*b.x - b.x*b.y );
+}
+
+float sdVesica(vec2 p, float r, float d) {
+ p = abs(p);
+ float b = sqrt(r*r-d*d); // can delay this sqrt
+ return ((p.y-b)*d>p.x*b)
+ ? length(p-vec2(0.0,b))
+ : length(p-vec2(-d,0.0))-r;
+}
\ No newline at end of file
diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts
new file mode 100644
index 0000000000..388c2fdf5d
--- /dev/null
+++ b/packages/core/src/types.ts
@@ -0,0 +1,25 @@
+const TYPES = {
+ IEventEmitter: Symbol.for('IEventEmitter'),
+ ISceneService: Symbol.for('ISceneService'),
+ IGlobalConfigService: Symbol.for('IGlobalConfigService'),
+ ICameraService: Symbol.for('ICameraService'),
+ ICoordinateSystemService: Symbol.for('ICoordinateSystemService'),
+ ILayerService: Symbol.for('ILayerService'),
+ ILayerMappingService: Symbol.for('ILayerMappingService'),
+ ILayerStyleService: Symbol.for('ILayerStyleService'),
+ ILogService: Symbol.for('ILogService'),
+ IMapService: Symbol.for('IMapService'),
+ IFactoryMapService: Symbol.for('Factory'),
+ IRendererService: Symbol.for('IRendererService'),
+ IShaderModuleService: Symbol.for('IShaderModuleService'),
+ IIconService: Symbol.for('IIconService'),
+ IFontService: Symbol.for('IFontService'),
+ IInteractionService: Symbol.for('IInteractionService'),
+ IControlService: Symbol.for('IControlService'),
+ IStyleAttributeService: Symbol.for('IStyleAttributeService'),
+ ILayerPlugin: Symbol.for('ILayerPlugin'),
+ IPostProcessingPass: Symbol.for('IPostProcessingPass'),
+ IFactoryPostProcessingPass: Symbol.for('Factory'),
+};
+
+export { TYPES };
diff --git a/packages/core/src/utils/__tests__/math.spec.ts b/packages/core/src/utils/__tests__/math.spec.ts
new file mode 100644
index 0000000000..a6e0fe3322
--- /dev/null
+++ b/packages/core/src/utils/__tests__/math.spec.ts
@@ -0,0 +1,10 @@
+import { createVec3, getAngle } from '../math';
+
+describe('util.math', () => {
+ it('should clamp angle with `getAngle()`', () => {
+ expect(getAngle(30)).toBe(30);
+ expect(getAngle(361)).toBe(1);
+ expect(getAngle(-361)).toBe(-1);
+ expect(getAngle(undefined)).toBe(0);
+ });
+});
diff --git a/packages/core/src/utils/clock.ts b/packages/core/src/utils/clock.ts
new file mode 100644
index 0000000000..a51f946242
--- /dev/null
+++ b/packages/core/src/utils/clock.ts
@@ -0,0 +1,50 @@
+// https://github.com/mrdoob/three.js/blob/master/src/core/Clock.js
+export default class Clock {
+ private autoStart: boolean;
+ private startTime: number = 0;
+ private oldTime: number = 0;
+ private running: boolean = false;
+ private elapsedTime: number = 0;
+ constructor(autoStart = true) {
+ this.autoStart = autoStart;
+ }
+ public start() {
+ this.startTime = (typeof performance === 'undefined'
+ ? Date
+ : performance
+ ).now();
+
+ this.oldTime = this.startTime;
+ this.elapsedTime = 0;
+ this.running = true;
+ }
+ public stop() {
+ this.getElapsedTime();
+ this.running = false;
+ this.autoStart = false;
+ }
+
+ public getElapsedTime() {
+ this.getDelta();
+ return this.elapsedTime;
+ }
+ public getDelta() {
+ let diff = 0;
+
+ if (this.autoStart && !this.running) {
+ this.start();
+ return 0;
+ }
+
+ if (this.running) {
+ const newTime = (typeof performance === 'undefined'
+ ? Date
+ : performance
+ ).now();
+ diff = (newTime - this.oldTime) / 1000;
+ this.oldTime = newTime;
+ this.elapsedTime += diff;
+ }
+ return diff;
+ }
+}
diff --git a/packages/core/src/utils/dom.ts b/packages/core/src/utils/dom.ts
new file mode 100644
index 0000000000..35b543e7ce
--- /dev/null
+++ b/packages/core/src/utils/dom.ts
@@ -0,0 +1,22 @@
+const docStyle = window.document.documentElement.style;
+type ELType = HTMLElement | SVGElement;
+export function createRendererContainer(domId: string): HTMLDivElement | null {
+ const $wrapper = document.getElementById(domId);
+
+ if ($wrapper) {
+ const $container = document.createElement('div');
+ $container.style.cssText += `
+ position: absolute;
+ top: 0;
+ z-index:2;
+ height: 100%;
+ width: 100%;
+ pointer-events: none;
+ `;
+ $container.id = 'l7_canvaslayer';
+ $wrapper.appendChild($container);
+ return $container;
+ }
+
+ return null;
+}
diff --git a/packages/core/src/utils/font_util.ts b/packages/core/src/utils/font_util.ts
new file mode 100644
index 0000000000..e53d327d83
--- /dev/null
+++ b/packages/core/src/utils/font_util.ts
@@ -0,0 +1,107 @@
+import { IFontMappingOption } from '../services/asset/IFontService';
+import { IIcon, IICONMap } from '../services/asset/IIconService';
+/**
+ * tiny-sdf 中每个 glyph 的宽度(加上 buffer 24 + 3 + 3 = 30)
+ */
+const glyphSizeInSDF = 30;
+export function buildMapping({
+ characterSet,
+ getFontWidth,
+ fontHeight,
+ buffer,
+ maxCanvasWidth,
+ mapping = {},
+ xOffset = 0,
+ yOffset = 0,
+}: IFontMappingOption) {
+ let row = 0;
+ let x = xOffset;
+ Array.from(characterSet).forEach((char: string, i: number) => {
+ if (!mapping[char]) {
+ const width = getFontWidth(char, i);
+ if (x + glyphSizeInSDF > maxCanvasWidth) {
+ x = 0;
+ row++;
+ }
+ mapping[char] = {
+ x,
+ y: yOffset + row * glyphSizeInSDF,
+ width: glyphSizeInSDF,
+ height: glyphSizeInSDF,
+ advance: width,
+ };
+ x += glyphSizeInSDF;
+ }
+ });
+
+ const rowHeight = fontHeight + buffer * 2;
+
+ return {
+ mapping,
+ xOffset: x,
+ yOffset: yOffset + row * rowHeight,
+ canvasHeight: nextPowOfTwo(yOffset + (row + 1) * rowHeight),
+ };
+}
+
+export function buildIconMaping(
+ icons: IIcon[],
+ buffer: number,
+ maxCanvasWidth: number,
+) {
+ let xOffset = 0;
+ let yOffset = 0;
+ let rowHeight = 0;
+ let columns = [];
+ const mapping: IICONMap = {};
+ for (const icon of icons) {
+ if (!mapping[icon.id]) {
+ const { height, width } = icon;
+
+ // fill one row
+ if (xOffset + width + buffer > maxCanvasWidth) {
+ buildRowMapping(mapping, columns, yOffset);
+
+ xOffset = 0;
+ yOffset = rowHeight + yOffset + buffer;
+ rowHeight = 0;
+ columns = [];
+ }
+
+ columns.push({
+ icon,
+ xOffset,
+ });
+
+ xOffset = xOffset + width + buffer;
+ rowHeight = Math.max(rowHeight, height);
+ }
+ }
+
+ if (columns.length > 0) {
+ buildRowMapping(mapping, columns, yOffset);
+ }
+
+ const canvasHeight = nextPowOfTwo(rowHeight + yOffset + buffer);
+
+ return {
+ mapping,
+ canvasHeight,
+ };
+}
+function buildRowMapping(
+ mapping: IICONMap,
+ columns: Array<{
+ icon: IIcon;
+ xOffset: number;
+ }>,
+ yOffset: number,
+) {
+ for (const column of columns) {
+ const { icon, xOffset } = column;
+ mapping[icon.id] = { ...icon, x: xOffset, y: yOffset, image: icon.image };
+ }
+}
+export function nextPowOfTwo(num: number) {
+ return Math.pow(2, Math.ceil(Math.log2(num)));
+}
diff --git a/packages/core/src/utils/math.ts b/packages/core/src/utils/math.ts
new file mode 100644
index 0000000000..ec194b21a4
--- /dev/null
+++ b/packages/core/src/utils/math.ts
@@ -0,0 +1,18 @@
+import { mat3, mat4, vec3, vec4 } from 'gl-matrix';
+
+export function getAngle(angle: number | undefined) {
+ if (angle === undefined) {
+ return 0;
+ } else if (angle > 360 || angle < -360) {
+ return angle % 360;
+ }
+ return angle;
+}
+
+export function createVec3(x: number | vec3 | vec4, y?: number, z?: number) {
+ return x instanceof vec3
+ ? vec3.clone(x)
+ : x instanceof vec4
+ ? vec3.fromValues(x[0], x[1], x[2])
+ : vec3.fromValues(x, y as number, z as number);
+}
diff --git a/packages/core/src/utils/project.ts b/packages/core/src/utils/project.ts
new file mode 100644
index 0000000000..7811299748
--- /dev/null
+++ b/packages/core/src/utils/project.ts
@@ -0,0 +1,120 @@
+const DEGREES_TO_RADIANS = Math.PI / 180;
+const TILE_SIZE = 512;
+// Average circumference (40075 km equatorial, 40007 km meridional)
+const EARTH_CIRCUMFERENCE = 40.03e6;
+
+interface IDistanceScales {
+ pixelsPerMeter: [number, number, number];
+ metersPerPixel: [number, number, number];
+ pixelsPerDegree: [number, number, number];
+ degreesPerPixel: [number, number, number];
+ pixelsPerDegree2: [number, number, number];
+ pixelsPerMeter2: [number, number, number];
+}
+
+/**
+ * Calculate distance scales in meters around current lat/lon, both for
+ * degrees and pixels.
+ * In mercator projection mode, the distance scales vary significantly
+ * with latitude.
+ */
+export function getDistanceScales({
+ latitude = 0,
+ zoom = 0,
+ scale,
+ highPrecision = false,
+ flipY = false,
+}: Partial<{
+ latitude: number;
+ zoom: number;
+ scale: number | undefined;
+ highPrecision: boolean;
+ flipY: boolean;
+}>): IDistanceScales {
+ // Calculate scale from zoom if not provided
+ scale = scale !== undefined ? scale : Math.pow(2, zoom);
+
+ // @ts-ignore
+ const result: IDistanceScales = {};
+ const worldSize = TILE_SIZE * scale;
+ const latCosine = Math.cos(latitude * DEGREES_TO_RADIANS);
+
+ /**
+ * Number of pixels occupied by one degree longitude around current lat/lon:
+ * pixelsPerDegreeX = d(lngLatToWorld([lng, lat])[0])/d(lng)
+ * = scale * TILE_SIZE * DEGREES_TO_RADIANS / (2 * PI)
+ * pixelsPerDegreeY = d(lngLatToWorld([lng, lat])[1])/d(lat)
+ * = -scale * TILE_SIZE * DEGREES_TO_RADIANS / cos(lat * DEGREES_TO_RADIANS) / (2 * PI)
+ */
+ const pixelsPerDegreeX = worldSize / 360;
+ const pixelsPerDegreeY = pixelsPerDegreeX / latCosine;
+
+ /**
+ * Number of pixels occupied by one meter around current lat/lon:
+ */
+ const altPixelsPerMeter = worldSize / EARTH_CIRCUMFERENCE / latCosine;
+
+ /**
+ * LngLat: longitude -> east and latitude -> north (bottom left)
+ * UTM meter offset: x -> east and y -> north (bottom left)
+ * World space: x -> east and y -> south (top left)
+ *
+ * Y needs to be flipped when converting delta degree/meter to delta pixels
+ */
+ result.pixelsPerMeter = [
+ altPixelsPerMeter,
+ -altPixelsPerMeter,
+ altPixelsPerMeter,
+ ];
+ result.metersPerPixel = [
+ 1 / altPixelsPerMeter,
+ -1 / altPixelsPerMeter,
+ 1 / altPixelsPerMeter,
+ ];
+
+ result.pixelsPerDegree = [
+ pixelsPerDegreeX,
+ -pixelsPerDegreeY,
+ altPixelsPerMeter,
+ ];
+ result.degreesPerPixel = [
+ 1 / pixelsPerDegreeX,
+ -1 / pixelsPerDegreeY,
+ 1 / altPixelsPerMeter,
+ ];
+
+ /**
+ * Taylor series 2nd order for 1/latCosine
+ * f'(a) * (x - a)
+ * = d(1/cos(lat * DEGREES_TO_RADIANS))/d(lat) * dLat
+ * = DEGREES_TO_RADIANS * tan(lat * DEGREES_TO_RADIANS) / cos(lat * DEGREES_TO_RADIANS) * dLat
+ */
+ if (highPrecision) {
+ const latCosine2 =
+ (DEGREES_TO_RADIANS * Math.tan(latitude * DEGREES_TO_RADIANS)) /
+ latCosine;
+ const pixelsPerDegreeY2 = (pixelsPerDegreeX * latCosine2) / 2;
+
+ const altPixelsPerDegree2 = (worldSize / EARTH_CIRCUMFERENCE) * latCosine2;
+ const altPixelsPerMeter2 =
+ (altPixelsPerDegree2 / pixelsPerDegreeY) * altPixelsPerMeter;
+
+ result.pixelsPerDegree2 = [0, -pixelsPerDegreeY2, altPixelsPerDegree2];
+ result.pixelsPerMeter2 = [altPixelsPerMeter2, 0, altPixelsPerMeter2];
+
+ if (flipY) {
+ result.pixelsPerDegree2[1] = -result.pixelsPerDegree2[1];
+ result.pixelsPerMeter2[1] = -result.pixelsPerMeter2[1];
+ }
+ }
+
+ if (flipY) {
+ result.pixelsPerMeter[1] = -result.pixelsPerMeter[1];
+ result.metersPerPixel[1] = -result.metersPerPixel[1];
+ result.pixelsPerDegree[1] = -result.pixelsPerDegree[1];
+ result.degreesPerPixel[1] = -result.degreesPerPixel[1];
+ }
+
+ // Main results, used for converting meters to latlng deltas and scaling offsets
+ return result;
+}
diff --git a/packages/core/src/utils/sdf-2d.ts b/packages/core/src/utils/sdf-2d.ts
new file mode 100644
index 0000000000..8660c8a008
--- /dev/null
+++ b/packages/core/src/utils/sdf-2d.ts
@@ -0,0 +1,15 @@
+export const sdf2DFunctions = [
+ 'circle',
+ 'triangle',
+ 'square',
+ 'pentagon',
+ 'hexagon',
+ 'octogon',
+ 'hexagram',
+ 'rhombus',
+ 'vesica',
+];
+
+export function getShapeIndex(shape: string): number {
+ return sdf2DFunctions.indexOf(shape);
+}
diff --git a/packages/core/src/utils/shader-module.ts b/packages/core/src/utils/shader-module.ts
new file mode 100644
index 0000000000..6bf16c612f
--- /dev/null
+++ b/packages/core/src/utils/shader-module.ts
@@ -0,0 +1,89 @@
+export function getUniformLengthByType(type: string): number {
+ let arrayLength = 0;
+ switch (type) {
+ case 'vec2':
+ case 'ivec2':
+ arrayLength = 2;
+ break;
+ case 'vec3':
+ case 'ivec3':
+ arrayLength = 3;
+ break;
+ case 'vec4':
+ case 'ivec4':
+ case 'mat2':
+ arrayLength = 4;
+ break;
+ case 'mat3':
+ arrayLength = 9;
+ break;
+ case 'mat4':
+ arrayLength = 16;
+ break;
+ default:
+ }
+ return arrayLength;
+}
+
+const uniformRegExp = /uniform\s+(bool|float|int|vec2|vec3|vec4|ivec2|ivec3|ivec4|mat2|mat3|mat4|sampler2D|samplerCube)\s+([\s\S]*?);/g;
+export function extractUniforms(
+ content: string,
+): {
+ content: string;
+ uniforms: {
+ [key: string]: any;
+ };
+} {
+ const uniforms = {};
+ content = content.replace(uniformRegExp, (_, type, c) => {
+ const defaultValues = c.split(':');
+ const uniformName = defaultValues[0].trim();
+ let defaultValue: any = '';
+ if (defaultValues.length > 1) {
+ defaultValue = defaultValues[1].trim();
+ }
+
+ // set default value for uniform according to its type
+ // eg. vec2 u -> [0.0, 0.0]
+ switch (type) {
+ case 'bool':
+ defaultValue = defaultValue === 'true';
+ break;
+ case 'float':
+ case 'int':
+ defaultValue = Number(defaultValue);
+ break;
+ case 'vec2':
+ case 'vec3':
+ case 'vec4':
+ case 'ivec2':
+ case 'ivec3':
+ case 'ivec4':
+ case 'mat2':
+ case 'mat3':
+ case 'mat4':
+ if (defaultValue) {
+ defaultValue = defaultValue
+ .replace('[', '')
+ .replace(']', '')
+ .split(',')
+ .reduce((prev: number[], cur: string) => {
+ prev.push(Number(cur.trim()));
+ return prev;
+ }, []);
+ } else {
+ defaultValue = new Array(getUniformLengthByType(type)).fill(0);
+ }
+ break;
+ default:
+ }
+
+ // @ts-ignore
+ uniforms[uniformName] = defaultValue;
+ return `uniform ${type} ${uniformName};\n`;
+ });
+ return {
+ content,
+ uniforms,
+ };
+}
diff --git a/packages/core/src/utils/vertex-compression.ts b/packages/core/src/utils/vertex-compression.ts
new file mode 100644
index 0000000000..1930d4531b
--- /dev/null
+++ b/packages/core/src/utils/vertex-compression.ts
@@ -0,0 +1,145 @@
+/**
+ * WebGL 中的顶点数据压缩
+ * 使用 float-pack 技术,在 shader 中解压
+ * @see https://zhuanlan.zhihu.com/p/67484498
+ */
+
+import { clamp } from 'lodash';
+import { getShapeIndex } from './sdf-2d';
+
+export interface ICircleVertex {
+ tileX: number;
+ tileY: number;
+ shape: string;
+ color: number[];
+ radius: number;
+ opacity: number;
+ strokeColor: number[];
+ strokeWidth: number;
+ strokeOpacity: number;
+}
+
+export const LEFT_SHIFT1 = 2;
+export const LEFT_SHIFT2 = 4;
+export const LEFT_SHIFT6 = 64;
+export const LEFT_SHIFT7 = 128;
+export const LEFT_SHIFT8 = 256;
+export const LEFT_SHIFT9 = 512;
+export const LEFT_SHIFT13 = 8192;
+export const LEFT_SHIFT14 = 16384;
+export const LEFT_SHIFT15 = 32768;
+export const LEFT_SHIFT16 = 32768 * 2;
+export const LEFT_SHIFT17 = 131072.0;
+export const LEFT_SHIFT18 = 262144.0;
+export const LEFT_SHIFT19 = 524288.0;
+export const LEFT_SHIFT20 = 1048576.0;
+export const LEFT_SHIFT21 = 2097152.0;
+export const LEFT_SHIFT22 = 4194304.0;
+export const LEFT_SHIFT23 = 8388608.0;
+export const LEFT_SHIFT24 = 16777216.0;
+export const LEFT_SHIFT25 = 16777216.0 * 2;
+
+/**
+ * encode 2 8-bit unsigned int into a 16-bit float
+ * @param {number} a 8-bit int
+ * @param {number} b 8-bit int
+ * @return {number} float
+ */
+export function packUint8ToFloat(a: number, b: number): number {
+ a = clamp(Math.floor(a), 0, 255);
+ b = clamp(Math.floor(b), 0, 255);
+ return 256 * a + b;
+}
+
+/**
+ * 为 SDF circle 压缩顶点数据
+ */
+export function packCircleVertex(
+ props: ICircleVertex,
+): {
+ packedBuffer: number[][];
+ packedBuffer2: number[][];
+ packedBuffer3: number[][];
+} {
+ const {
+ color,
+ radius,
+ tileX,
+ tileY,
+ shape,
+ opacity, // packed buffer1
+ strokeColor,
+ strokeWidth,
+ strokeOpacity, // packed buffer2
+ } = props;
+ const packedBuffer: number[][] = [];
+ const packedBuffer2: number[][] = [];
+ const packedBuffer3: number[][] = [];
+
+ const packedColor: [number, number] = [
+ packUint8ToFloat(color[0], color[1]),
+ packUint8ToFloat(color[2], color[3]),
+ ];
+ const packedStrokeColor: [number, number] = [
+ packUint8ToFloat(strokeColor[0], strokeColor[1]),
+ packUint8ToFloat(strokeColor[2], strokeColor[3]),
+ ];
+
+ [
+ [-1, -1],
+ [1, -1],
+ [1, 1],
+ [-1, 1],
+ ].forEach(([extrudeX, extrudeY]) => {
+ // vec4(
+ // color,
+ // color,
+ // (4-bit extrude, 4-bit shape, 16-bit radius),
+ // tileCoords
+ // )
+ packedBuffer.push([
+ ...packedColor,
+ (extrudeX + 1) * LEFT_SHIFT23 +
+ (extrudeY + 1) * LEFT_SHIFT21 +
+ getShapeIndex(shape) * LEFT_SHIFT17 +
+ radius,
+ (tileX + 512) * LEFT_SHIFT19 + (tileY + 512) * LEFT_SHIFT6,
+ ]);
+
+ // vec4(
+ // strokeColor,
+ // strokeColor,
+ // strokeWidth,
+ // strokeOpacity
+ // )
+ packedBuffer2.push([...packedStrokeColor, strokeWidth, strokeOpacity]);
+
+ packedBuffer3.push([opacity, 0, 0, 0]);
+ });
+
+ return {
+ packedBuffer,
+ packedBuffer2,
+ packedBuffer3,
+ };
+}
+
+export function packOpacity(opacity: number, placed: boolean): number {
+ if (opacity === 0 && !placed) {
+ return 0;
+ } else if (opacity === 1 && placed) {
+ return 4294967295;
+ }
+ const targetBit = placed ? 1 : 0;
+ const opacityBits = Math.floor(opacity * 127);
+ return (
+ opacityBits * LEFT_SHIFT25 +
+ targetBit * LEFT_SHIFT24 +
+ opacityBits * LEFT_SHIFT17 +
+ targetBit * LEFT_SHIFT16 +
+ opacityBits * LEFT_SHIFT9 +
+ targetBit * LEFT_SHIFT8 +
+ opacityBits * LEFT_SHIFT1 +
+ targetBit
+ );
+}
diff --git a/packages/core/tsconfig.build.json b/packages/core/tsconfig.build.json
new file mode 100644
index 0000000000..17f6c4525a
--- /dev/null
+++ b/packages/core/tsconfig.build.json
@@ -0,0 +1,9 @@
+{
+ "extends": "../../tsconfig.build.json",
+ "compilerOptions": {
+ "declarationDir": "./es",
+ "rootDir": "./src",
+ "baseUrl": "./"
+ },
+ "include": ["./src"]
+}
\ No newline at end of file
diff --git a/packages/core/typings/index.d.ts b/packages/core/typings/index.d.ts
new file mode 100644
index 0000000000..790cf4872b
--- /dev/null
+++ b/packages/core/typings/index.d.ts
@@ -0,0 +1,13 @@
+
+declare module 'probe.gl' {
+ class Log {
+ constructor(options: { id: string });
+
+ enable(enabled?: boolean): Log;
+
+ warn(message: string): () => any;
+ info(message: string): () => any;
+ error(message: string): () => any;
+ }
+}
+///
diff --git a/packages/layers/.gitignore b/packages/layers/.gitignore
new file mode 100644
index 0000000000..49c199b6ab
--- /dev/null
+++ b/packages/layers/.gitignore
@@ -0,0 +1,3 @@
+lib
+es
+dist
diff --git a/packages/layers/package.json b/packages/layers/package.json
new file mode 100644
index 0000000000..06eb9bb952
--- /dev/null
+++ b/packages/layers/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "@l7/layers",
+ "version": "0.0.1",
+ "description": "",
+ "main": "lib/index.js",
+ "module": "es/index.js",
+ "types": "es/index.d.ts",
+ "sideEffects": false,
+ "files": [
+ "lib",
+ "es",
+ "README.md"
+ ],
+ "scripts": {
+ "tsc": "tsc --project tsconfig.build.json",
+ "clean": "rimraf dist; rimraf es; rimraf lib;",
+ "build": "run-p build:*",
+ "build:cjs": "BABEL_ENV=cjs babel src --root-mode upward --out-dir lib --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
+ "build:esm": "BABEL_ENV=esm babel src --root-mode upward --out-dir es --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
+ "watch": "BABEL_ENV=cjs babel src --watch --root-mode upward --out-dir lib --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments"
+ },
+ "author": "xiaoiver",
+ "license": "ISC",
+ "dependencies": {
+ "@l7/core": "^0.0.1",
+ "@l7/source": "^0.0.1",
+ "@l7/utils": "^0.0.1",
+ "@mapbox/martini": "^0.1.0",
+ "@turf/meta": "^6.0.2",
+ "@types/d3-color": "^1.2.2",
+ "d3-array": "^2.3.1",
+ "d3-color": "^1.4.0",
+ "d3-scale": "^3.1.0",
+ "earcut": "^2.2.1",
+ "eventemitter3": "^4.0.0",
+ "gl-matrix": "^3.1.0",
+ "gl-vec2": "^1.3.0",
+ "inversify": "^5.0.1",
+ "lodash": "^4.17.15",
+ "merge-json-schemas": "1.0.0",
+ "polyline-miter-util": "^1.0.1",
+ "reflect-metadata": "^0.1.13",
+ "tapable": "^2.0.0-beta.8"
+ },
+ "devDependencies": {
+ "@types/d3-array": "^2.0.0",
+ "@types/d3-scale": "^2.1.1",
+ "@types/earcut": "^2.1.0",
+ "@types/gl-matrix": "^2.4.5",
+ "@types/lodash": "^4.14.138"
+ },
+ "gitHead": "0563f357f3a07c099bf1ffa9350e6fa3c88353ae",
+ "publishConfig": {
+ "access": "public"
+ }
+}
diff --git a/packages/layers/src/core/BaseLayer.ts b/packages/layers/src/core/BaseLayer.ts
new file mode 100644
index 0000000000..d429712f89
--- /dev/null
+++ b/packages/layers/src/core/BaseLayer.ts
@@ -0,0 +1,508 @@
+import {
+ gl,
+ IAnimateOption,
+ ICameraService,
+ IEncodeFeature,
+ IFontService,
+ IGlobalConfigService,
+ IIconService,
+ IInteractionService,
+ ILayer,
+ ILayerInitializationOptions,
+ ILayerModel,
+ ILayerModelInitializationOptions,
+ ILayerPlugin,
+ ILayerService,
+ IMapService,
+ IModel,
+ IModelInitializationOptions,
+ IMultiPassRenderer,
+ IRendererService,
+ IScale,
+ IScaleOptions,
+ IShaderModuleService,
+ ISourceCFG,
+ IStyleAttributeService,
+ IStyleAttributeUpdateOptions,
+ lazyInject,
+ lazyMultiInject,
+ StyleAttributeField,
+ StyleAttributeOption,
+ Triangulation,
+ TYPES,
+} from '@l7/core';
+import Source from '@l7/source';
+import { EventEmitter } from 'eventemitter3';
+import { isFunction, isObject } from 'lodash';
+// @ts-ignore
+import mergeJsonSchemas from 'merge-json-schemas';
+import { SyncBailHook, SyncHook } from 'tapable';
+import { normalizePasses } from '../plugins/MultiPassRendererPlugin';
+import baseLayerSchema from './schema';
+
+/**
+ * 分配 layer id
+ */
+let layerIdCounter = 0;
+
+/**
+ * Layer 基类默认样式属性
+ */
+const defaultLayerInitializationOptions: Partial = {
+ minZoom: 0,
+ maxZoom: 20,
+ visible: true,
+ zIndex: 0,
+ enableMultiPassRenderer: false,
+ enablePicking: false,
+ enableHighlight: false,
+ highlightColor: 'red',
+ enableTAA: false,
+ jitterScale: 1,
+};
+
+export default class BaseLayer extends EventEmitter
+ implements ILayer {
+ public id: string = `${layerIdCounter++}`;
+ public name: string;
+ public visible: boolean = true;
+ public zIndex: number = 0;
+ public minZoom: number;
+ public maxZoom: number;
+
+ // 生命周期钩子
+ public hooks = {
+ init: new SyncBailHook(),
+ beforeRender: new SyncBailHook(),
+ afterRender: new SyncHook(),
+ beforePickingEncode: new SyncHook(),
+ afterPickingEncode: new SyncHook(),
+ beforeHighlight: new SyncHook<[number[]]>(['pickedColor']),
+ afterHighlight: new SyncHook(),
+ beforeDestroy: new SyncHook(),
+ afterDestroy: new SyncHook(),
+ };
+
+ // 待渲染 model 列表
+ public models: IModel[] = [];
+
+ // 每个 Layer 都有一个
+ public multiPassRenderer: IMultiPassRenderer;
+
+ // 注入插件集
+ @lazyMultiInject(TYPES.ILayerPlugin)
+ public plugins: ILayerPlugin[];
+
+ public sourceOption: {
+ data: any;
+ options?: ISourceCFG;
+ };
+
+ @lazyInject(TYPES.IStyleAttributeService)
+ public styleAttributeService: IStyleAttributeService;
+
+ @lazyInject(TYPES.IGlobalConfigService)
+ public readonly configService: IGlobalConfigService;
+
+ @lazyInject(TYPES.IIconService)
+ public readonly iconService: IIconService;
+
+ @lazyInject(TYPES.IFontService)
+ public readonly fontService: IFontService;
+
+ @lazyInject(TYPES.IRendererService)
+ public readonly rendererService: IRendererService;
+
+ protected layerSource: Source;
+
+ @lazyInject(TYPES.IShaderModuleService)
+ protected readonly shaderModuleService: IShaderModuleService;
+
+ @lazyInject(TYPES.IMapService)
+ protected readonly map: IMapService;
+
+ @lazyInject(TYPES.ILayerService)
+ protected readonly layerService: ILayerService;
+
+ protected layerModel: ILayerModel;
+
+ protected enodeOptions: {
+ [type: string]: {
+ field: StyleAttributeField;
+ values?: StyleAttributeOption;
+ };
+ } = {};
+
+ protected animateOptions: IAnimateOption = { enable: false };
+
+ private encodedData: IEncodeFeature[];
+
+ private configSchema: object;
+
+ /**
+ * 保存样式属性
+ */
+ private styleOptions: Partial<
+ ILayerInitializationOptions & ChildLayerStyleOptions
+ >;
+ private scaleOptions: IScaleOptions = {};
+
+ @lazyInject(TYPES.IInteractionService)
+ private readonly interactionService: IInteractionService;
+
+ constructor(
+ styleOptions: Partial,
+ ) {
+ super();
+ this.styleOptions = {
+ ...defaultLayerInitializationOptions,
+ ...styleOptions,
+ };
+ const { minZoom, maxZoom, zIndex, visible } = this
+ .styleOptions as ILayerInitializationOptions;
+ this.visible = visible;
+ this.zIndex = zIndex;
+ this.minZoom = minZoom;
+ this.maxZoom = maxZoom;
+ }
+
+ public addPlugin(plugin: ILayerPlugin) {
+ // TODO: 控制插件注册顺序
+ // @example:
+ // pointLayer.addPlugin(new MyCustomPlugin(), {
+ // before: 'L7BuiltinPlugin'
+ // });
+ this.plugins.push(plugin);
+ return this;
+ }
+
+ public init() {
+ this.hooks.init.call();
+ this.buildModels();
+ return this;
+ }
+
+ public color(
+ field: StyleAttributeField,
+ values?: StyleAttributeOption,
+ updateOptions?: Partial,
+ ) {
+ this.styleAttributeService.updateStyleAttribute(
+ 'color',
+ {
+ // @ts-ignore
+ scale: {
+ field,
+ ...this.splitValuesAndCallbackInAttribute(
+ // @ts-ignore
+ values,
+ this.configService.getConfig().colors,
+ ),
+ },
+ },
+ // @ts-ignore
+ updateOptions,
+ );
+ return this;
+ }
+
+ public size(
+ field: StyleAttributeField,
+ values?: StyleAttributeOption,
+ updateOptions?: Partial,
+ ) {
+ this.styleAttributeService.updateStyleAttribute(
+ 'size',
+ {
+ // @ts-ignore
+ scale: {
+ field,
+ ...this.splitValuesAndCallbackInAttribute(
+ // @ts-ignore
+ values,
+ this.configService.getConfig().size,
+ ),
+ },
+ },
+ // @ts-ignore
+ updateOptions,
+ );
+ return this;
+ }
+
+ public shape(
+ field: StyleAttributeField,
+ values?: StyleAttributeOption,
+ updateOptions?: Partial,
+ ) {
+ this.enodeOptions.shape = {
+ field,
+ values,
+ };
+ this.styleAttributeService.updateStyleAttribute(
+ 'shape',
+ {
+ // @ts-ignore
+ scale: {
+ field,
+ ...this.splitValuesAndCallbackInAttribute(
+ // @ts-ignore
+ values,
+ this.configService.getConfig().shape,
+ ),
+ },
+ },
+ // @ts-ignore
+ updateOptions,
+ );
+ return this;
+ }
+ public label(
+ field: StyleAttributeField,
+ values?: StyleAttributeOption,
+ updateOptions?: Partial,
+ ) {
+ this.styleAttributeService.updateStyleAttribute(
+ 'label',
+ {
+ // @ts-ignore
+ scale: {
+ field,
+ ...this.splitValuesAndCallbackInAttribute(
+ // @ts-ignore
+ values,
+ null,
+ ),
+ },
+ },
+ // @ts-ignore
+ updateOptions,
+ );
+ return this;
+ }
+ public animate(options: IAnimateOption) {
+ this.animateOptions = options;
+ return this;
+ }
+
+ public source(data: any, options?: ISourceCFG): ILayer {
+ this.sourceOption = {
+ data,
+ options,
+ };
+ return this;
+ }
+ public style(options: object & Partial): ILayer {
+ const { passes, ...rest } = options;
+
+ // passes 特殊处理
+ if (passes) {
+ normalizePasses(passes).forEach(
+ (pass: [string, { [key: string]: unknown }]) => {
+ const postProcessingPass = this.multiPassRenderer
+ .getPostProcessor()
+ .getPostProcessingPassByName(pass[0]);
+ if (postProcessingPass) {
+ postProcessingPass.updateOptions(pass[1]);
+ }
+ },
+ );
+ }
+
+ this.styleOptions = {
+ ...this.styleOptions,
+ ...rest,
+ };
+ return this;
+ }
+ public scale(field: string | IScaleOptions, cfg: IScale) {
+ if (isObject(field)) {
+ this.scaleOptions = {
+ ...this.scaleOptions,
+ ...field,
+ };
+ } else {
+ this.scaleOptions[field] = cfg;
+ }
+ return this;
+ }
+ public render(): ILayer {
+ if (this.multiPassRenderer && this.multiPassRenderer.getRenderFlag()) {
+ this.multiPassRenderer.render();
+ } else {
+ this.renderModels();
+ }
+ return this;
+ }
+
+ public show(): ILayer {
+ this.visible = true;
+ this.layerService.renderLayers();
+ return this;
+ }
+
+ public hide(): ILayer {
+ this.visible = false;
+ this.layerService.renderLayers();
+ return this;
+ }
+
+ public setIndex(index: number): ILayer {
+ this.zIndex = index;
+ this.layerService.updateRenderOrder();
+ return this;
+ }
+
+ public isVisible(): boolean {
+ const zoom = this.map.getZoom();
+ return this.visible && zoom >= this.minZoom && zoom <= this.maxZoom;
+ }
+
+ public setMinZoom(min: number): ILayer {
+ this.minZoom = min;
+ return this;
+ }
+
+ public setMaxZoom(max: number): ILayer {
+ this.maxZoom = max;
+ return this;
+ }
+ /**
+ * zoom to layer Bounds
+ */
+ public fitBounds(): void {
+ const source = this.getSource();
+ const extent = source.extent;
+ this.map.fitBounds([
+ [extent[0], extent[1]],
+ [extent[2], extent[3]],
+ ]);
+ }
+
+ public destroy() {
+ this.hooks.beforeDestroy.call();
+
+ // 清除所有属性以及关联的 vao
+ this.styleAttributeService.clearAllAttributes();
+ // 销毁所有 model
+ this.models.forEach((model) => model.destroy());
+
+ this.hooks.afterDestroy.call();
+ }
+
+ public isDirty() {
+ return !!(
+ this.styleAttributeService.getLayerStyleAttributes() || []
+ ).filter(
+ (attribute) =>
+ attribute.needRescale ||
+ attribute.needRemapping ||
+ attribute.needRegenerateVertices,
+ ).length;
+ }
+
+ public setSource(source: Source) {
+ this.layerSource = source;
+ }
+ public getSource() {
+ return this.layerSource;
+ }
+
+ public getStyleOptions() {
+ return this.styleOptions;
+ }
+ public getScaleOptions() {
+ return this.scaleOptions;
+ }
+
+ public setEncodedData(encodedData: IEncodeFeature[]) {
+ this.encodedData = encodedData;
+ }
+ public getEncodedData() {
+ return this.encodedData;
+ }
+
+ public getConfigSchemaForValidation() {
+ if (!this.configSchema) {
+ // 相比 allOf, merge 有一些优势
+ // @see https://github.com/goodeggs/merge-json-schemas
+ this.configSchema = mergeJsonSchemas([
+ baseLayerSchema,
+ this.getConfigSchema(),
+ ]);
+ }
+ return this.configSchema;
+ }
+
+ public pick({ x, y }: { x: number; y: number }) {
+ this.interactionService.triggerHover({ x, y });
+ }
+
+ public buildLayerModel(
+ options: ILayerModelInitializationOptions &
+ Partial,
+ ): IModel {
+ const {
+ moduleName,
+ vertexShader,
+ fragmentShader,
+ triangulation,
+ ...rest
+ } = options;
+ this.shaderModuleService.registerModule(moduleName, {
+ vs: vertexShader,
+ fs: fragmentShader,
+ });
+ const { vs, fs, uniforms } = this.shaderModuleService.getModule(moduleName);
+ const { createModel } = this.rendererService;
+ const parserData = this.getSource().data.dataArray;
+ const {
+ attributes,
+ elements,
+ } = this.styleAttributeService.createAttributesAndIndices(
+ this.encodedData,
+ triangulation,
+ );
+ return createModel({
+ attributes,
+ uniforms,
+ fs,
+ vs,
+ elements,
+ blend: {
+ enable: true,
+ func: {
+ srcRGB: gl.SRC_ALPHA,
+ srcAlpha: 1,
+ dstRGB: gl.ONE_MINUS_SRC_ALPHA,
+ dstAlpha: 1,
+ },
+ },
+ ...rest,
+ });
+ }
+
+ protected getConfigSchema() {
+ throw new Error('Method not implemented.');
+ }
+
+ protected buildModels() {
+ throw new Error('Method not implemented.');
+ }
+
+ protected renderModels() {
+ throw new Error('Method not implemented.');
+ }
+
+ private splitValuesAndCallbackInAttribute(
+ valuesOrCallback?: unknown[],
+ defaultValues?: unknown[],
+ ) {
+ return {
+ values: isFunction(valuesOrCallback)
+ ? undefined
+ : valuesOrCallback || defaultValues,
+ callback: isFunction(valuesOrCallback) ? valuesOrCallback : undefined,
+ };
+ }
+}
diff --git a/packages/layers/src/core/baseModel.ts b/packages/layers/src/core/baseModel.ts
new file mode 100644
index 0000000000..ffc238dee5
--- /dev/null
+++ b/packages/layers/src/core/baseModel.ts
@@ -0,0 +1,68 @@
+import {
+ AttributeType,
+ gl,
+ ICameraService,
+ IEncodeFeature,
+ IFontService,
+ IGlobalConfigService,
+ IIconService,
+ ILayer,
+ ILayerModel,
+ ILayerPlugin,
+ ILogService,
+ IMapService,
+ IModel,
+ IModelUniform,
+ IRendererService,
+ IShaderModuleService,
+ IStyleAttributeService,
+ lazyInject,
+ TYPES,
+} from '@l7/core';
+
+export default class BaseModel implements ILayerModel {
+ @lazyInject(TYPES.IStyleAttributeService)
+ public styleAttributeService: IStyleAttributeService;
+ protected layer: ILayer;
+
+ @lazyInject(TYPES.IGlobalConfigService)
+ protected readonly configService: IGlobalConfigService;
+
+ @lazyInject(TYPES.IIconService)
+ protected readonly iconService: IIconService;
+
+ @lazyInject(TYPES.IFontService)
+ protected readonly fontService: IFontService;
+
+ @lazyInject(TYPES.IRendererService)
+ protected readonly rendererService: IRendererService;
+
+ @lazyInject(TYPES.IShaderModuleService)
+ protected readonly shaderModuleService: IShaderModuleService;
+
+ @lazyInject(TYPES.IMapService)
+ protected readonly map: IMapService;
+
+ @lazyInject(TYPES.ICameraService)
+ protected readonly camera: ICameraService;
+
+ constructor(layer: ILayer) {
+ this.layer = layer;
+ this.registerBuiltinAttributes();
+ }
+
+ public getUninforms(): IModelUniform {
+ throw new Error('Method not implemented.');
+ }
+
+ public buildModels(): IModel[] {
+ throw new Error('Method not implemented.');
+ }
+
+ public render() {
+ throw new Error('Method not implemented.');
+ }
+ protected registerBuiltinAttributes() {
+ throw new Error('Method not implemented.');
+ }
+}
diff --git a/packages/layers/src/core/schema.ts b/packages/layers/src/core/schema.ts
new file mode 100644
index 0000000000..cdb88ea1be
--- /dev/null
+++ b/packages/layers/src/core/schema.ts
@@ -0,0 +1,28 @@
+/**
+ * BaseLayer Schema
+ */
+export default {
+ properties: {
+ enablePicking: {
+ type: 'boolean',
+ },
+ enableHighlight: {
+ type: 'boolean',
+ },
+ highlightColor: {
+ oneOf: [
+ {
+ type: 'array',
+ items: {
+ type: 'number',
+ minimum: 0,
+ maximum: 1,
+ },
+ },
+ {
+ type: 'string',
+ },
+ ],
+ },
+ },
+};
diff --git a/packages/layers/src/core/shape/Path.ts b/packages/layers/src/core/shape/Path.ts
new file mode 100644
index 0000000000..d256eba7c9
--- /dev/null
+++ b/packages/layers/src/core/shape/Path.ts
@@ -0,0 +1,65 @@
+export type IPosition = [number, number, number] | [number, number];
+export type IPath = IPosition[];
+export enum ShapeType3D {
+ CYLINDER = 'cylinder',
+ SQUARECOLUMN = 'squareColumn',
+ TRIANGLECOLUMN = 'triangleColumn',
+ HEXAGONCOLUMN = 'hexagonColumn',
+ PENTAGONCOLUMN = 'pentagonColumn',
+}
+export enum ShapeType2D {
+ CIRCLE = 'circle',
+ SQUARE = 'square',
+ TRIANGLE = 'triangle',
+ HEXAGON = 'hexagon',
+ PENTAGON = 'pentagon',
+}
+
+/**
+ * 生成规则多边形顶点个数
+ * @param pointCount 顶点个数 3 => 三角形
+ * @param start 顶点起始角度 调整图形的方向
+ */
+export function polygonPath(pointCount: number, start: number = 0): IPath {
+ const step = (Math.PI * 2) / pointCount;
+ const line = [];
+ for (let i = 0; i < pointCount; i++) {
+ line.push(step * i + (start * Math.PI) / 12);
+ }
+ const path: IPath = line.map((t) => {
+ const x = Math.sin(t + Math.PI / 4);
+ const y = Math.cos(t + Math.PI / 4);
+ return [x, y, 0];
+ });
+ // path.push(path[0]);
+ return path;
+}
+
+export function circle(): IPath {
+ return polygonPath(30);
+}
+export function square(): IPath {
+ return polygonPath(4);
+}
+export function triangle(): IPath {
+ return polygonPath(3);
+}
+export function hexagon(): IPath {
+ return polygonPath(6, 1);
+}
+export function pentagon(): IPath {
+ return polygonPath(5);
+}
+
+export const geometryShape = {
+ [ShapeType2D.CIRCLE]: circle,
+ [ShapeType2D.HEXAGON]: hexagon,
+ [ShapeType2D.TRIANGLE]: triangle,
+ [ShapeType2D.SQUARE]: square,
+ [ShapeType2D.PENTAGON]: pentagon,
+ [ShapeType3D.CYLINDER]: circle,
+ [ShapeType3D.HEXAGONCOLUMN]: hexagon,
+ [ShapeType3D.TRIANGLECOLUMN]: triangle,
+ [ShapeType3D.SQUARECOLUMN]: square,
+ [ShapeType3D.PENTAGONCOLUMN]: pentagon,
+};
diff --git a/packages/layers/src/core/shape/extrude.ts b/packages/layers/src/core/shape/extrude.ts
new file mode 100644
index 0000000000..a8e5ead887
--- /dev/null
+++ b/packages/layers/src/core/shape/extrude.ts
@@ -0,0 +1,185 @@
+import { lngLatToMeters } from '@l7/utils';
+import earcut from 'earcut';
+import { vec3 } from 'gl-matrix';
+import { IPath } from './Path';
+export interface IExtrudeGeomety {
+ positions: number[];
+ index: number[];
+ normals?: number[];
+}
+/**
+ * 拉伸多边形顶点,返回拉伸后的顶点信息
+ * @param paths 路径数据组
+ * @param extrude 是否拉伸
+ */
+export default function extrudePolygon(path: IPath[]): IExtrudeGeomety {
+ const p1 = path[0][0];
+ const p2 = path[0][path[0].length - 1];
+ if (p1[0] === p2[0] && p1[1] === p2[1]) {
+ path[0] = path[0].slice(0, path[0].length - 1);
+ }
+
+ const n = path[0].length;
+ const flattengeo = earcut.flatten(path);
+ const { vertices, dimensions } = flattengeo;
+ const positions = [];
+ const indexArray = [];
+ // 设置顶部z值
+ for (let j = 0; j < vertices.length / dimensions; j++) {
+ if (dimensions === 2) {
+ positions.push(vertices[j * 2], vertices[j * 2 + 1], 1);
+ } else {
+ positions.push(vertices[j * 3], vertices[j * 3 + 1], 1);
+ }
+ }
+ const triangles = earcut(
+ flattengeo.vertices,
+ flattengeo.holes,
+ flattengeo.dimensions,
+ );
+ indexArray.push(...triangles);
+ for (let i = 0; i < n; i++) {
+ const prePoint = flattengeo.vertices.slice(
+ i * dimensions,
+ (i + 1) * dimensions,
+ );
+ let nextPoint = flattengeo.vertices.slice(
+ (i + 1) * dimensions,
+ (i + 2) * dimensions,
+ );
+ if (nextPoint.length === 0) {
+ nextPoint = flattengeo.vertices.slice(0, dimensions);
+ }
+ const indexOffset = positions.length / 3;
+ positions.push(
+ prePoint[0],
+ prePoint[1],
+ 1,
+ nextPoint[0],
+ nextPoint[1],
+ 1,
+ prePoint[0],
+ prePoint[1],
+ 0,
+ nextPoint[0],
+ nextPoint[1],
+ 0,
+ );
+ indexArray.push(...[0, 2, 1, 2, 3, 1].map((v) => v + indexOffset));
+ }
+ return {
+ positions,
+ index: indexArray,
+ };
+}
+export function fillPolygon(points: IPath[]) {
+ const flattengeo = earcut.flatten(points);
+ const triangles = earcut(
+ flattengeo.vertices,
+ flattengeo.holes,
+ flattengeo.dimensions,
+ );
+ return {
+ positions: flattengeo.vertices,
+ index: triangles,
+ };
+}
+
+export function extrude_PolygonNormal(
+ path: IPath[],
+ needFlat = false,
+): IExtrudeGeomety {
+ const p1 = path[0][0];
+ const p2 = path[0][path[0].length - 1];
+ if (p1[0] === p2[0] && p1[1] === p2[1]) {
+ path[0] = path[0].slice(0, path[0].length - 1);
+ }
+ const n = path[0].length;
+ const flattengeo = earcut.flatten(path);
+ const { vertices, dimensions } = flattengeo;
+ const positions = [];
+ const indexArray = [];
+ const normals = [];
+ // 设置顶部z值
+ for (let j = 0; j < vertices.length / dimensions; j++) {
+ if (dimensions === 2) {
+ positions.push(vertices[j * 2], vertices[j * 2 + 1], 1);
+ } else {
+ positions.push(vertices[j * 3], vertices[j * 3 + 1], 1);
+ }
+ normals.push(0, 0, 1);
+ }
+ const triangles = earcut(
+ flattengeo.vertices,
+ flattengeo.holes,
+ flattengeo.dimensions,
+ );
+ indexArray.push(...triangles);
+ for (let i = 0; i < n; i++) {
+ const prePoint = flattengeo.vertices.slice(
+ i * dimensions,
+ (i + 1) * dimensions,
+ );
+ let nextPoint = flattengeo.vertices.slice(
+ (i + 1) * dimensions,
+ (i + 2) * dimensions,
+ );
+ if (nextPoint.length === 0) {
+ nextPoint = flattengeo.vertices.slice(0, dimensions);
+ }
+ const indexOffset = positions.length / 3;
+ positions.push(
+ prePoint[0],
+ prePoint[1],
+ 1,
+ nextPoint[0],
+ nextPoint[1],
+ 1,
+ prePoint[0],
+ prePoint[1],
+ 0,
+ nextPoint[0],
+ nextPoint[1],
+ 0,
+ );
+ const normal = computeVertexNormals(
+ [nextPoint[0], nextPoint[1], 1],
+ [prePoint[0], prePoint[1], 0],
+ [prePoint[0], prePoint[1], 1],
+ needFlat,
+ );
+ normals.push(...normal, ...normal, ...normal, ...normal);
+ indexArray.push(...[1, 2, 0, 3, 2, 1].map((v) => v + indexOffset));
+ }
+ return {
+ positions,
+ index: indexArray,
+ normals,
+ };
+}
+function computeVertexNormals(
+ p1: [number, number, number],
+ p2: [number, number, number],
+ p3: [number, number, number],
+ needFlat: boolean = false,
+) {
+ const cb = vec3.create();
+ const ab = vec3.create();
+ const normal = vec3.create();
+
+ if (needFlat) {
+ p1 = lngLatToMeters(p1) as [number, number, number];
+ p2 = lngLatToMeters(p2) as [number, number, number];
+ p3 = lngLatToMeters(p3) as [number, number, number];
+ }
+ const pA = vec3.fromValues(...p1);
+ const pB = vec3.fromValues(...p2);
+ const pC = vec3.fromValues(...p3);
+ vec3.sub(cb, pC, pB);
+ vec3.sub(ab, pA, pB);
+ vec3.cross(normal, cb, ab);
+ const newNormal = vec3.create();
+ vec3.normalize(newNormal, normal);
+
+ return newNormal;
+}
diff --git a/packages/layers/src/core/triangulation.ts b/packages/layers/src/core/triangulation.ts
new file mode 100644
index 0000000000..66d027c759
--- /dev/null
+++ b/packages/layers/src/core/triangulation.ts
@@ -0,0 +1,339 @@
+import { IEncodeFeature } from '@l7/core';
+import { aProjectFlat, lngLatToMeters } from '@l7/utils';
+import earcut from 'earcut';
+import { vec3 } from 'gl-matrix';
+import getNormals from '../utils/polylineNormal';
+import extrudePolygon, {
+ extrude_PolygonNormal,
+ fillPolygon,
+ IExtrudeGeomety,
+} from './shape/extrude';
+import {
+ geometryShape,
+ IPosition,
+ ShapeType2D,
+ ShapeType3D,
+} from './shape/Path';
+type IShape = ShapeType2D & ShapeType3D;
+interface IGeometryCache {
+ [key: string]: IExtrudeGeomety;
+}
+const GeometryCache: IGeometryCache = {};
+/**
+ * 计算2D 填充点图顶点
+ * @param feature 映射feature
+ */
+export function PointFillTriangulation(feature: IEncodeFeature) {
+ const coordinates = feature.coordinates as number[];
+ return {
+ vertices: [...coordinates, ...coordinates, ...coordinates, ...coordinates],
+ indices: [0, 1, 2, 2, 3, 0],
+ size: coordinates.length,
+ };
+}
+
+/**
+ * 计算3D 拉伸点图
+ * @param feature 映射feature
+ */
+export function PointExtrudeTriangulation(feature: IEncodeFeature) {
+ const { shape } = feature;
+ const { positions, index, normals } = getGeometry(
+ shape as ShapeType3D,
+ false,
+ );
+ return {
+ vertices: positions,
+ indices: index,
+ normals,
+ // normals: Array.from(computeVertexNormals(positions, index, 3, false)),
+ size: 3,
+ };
+}
+
+/**
+ * 计算图片标注
+ * @param feature 映射feature
+ */
+export function PointImageTriangulation(feature: IEncodeFeature) {
+ const coordinates = feature.coordinates as number[];
+ return {
+ vertices: [...coordinates],
+ indices: [0],
+ size: coordinates.length,
+ };
+}
+
+/**
+ * 线三角化
+ * @param feature 映射feature
+ */
+export function LineTriangulation(feature: IEncodeFeature) {
+ const { coordinates } = feature;
+ let path = coordinates;
+ if (Array.isArray(path[0][0])) {
+ path = coordinates[0];
+ }
+ const line = getNormals(path as number[][], false, 0);
+ return {
+ vertices: line.attrPos, // [ x,y,z, distance, miter,total ]
+ indices: line.attrIndex,
+ normals: line.normals,
+ size: 6,
+ };
+}
+
+export function polygonTriangulation(feature: IEncodeFeature) {
+ const { coordinates } = feature;
+ const flattengeo = earcut.flatten(coordinates as number[][][]);
+ const { vertices, dimensions, holes } = flattengeo;
+
+ return {
+ indices: earcut(vertices, holes, dimensions),
+ vertices,
+ size: dimensions,
+ };
+}
+
+export function PolygonExtrudeTriangulation(feature: IEncodeFeature) {
+ const coordinates = feature.coordinates as IPosition[][];
+ const { positions, index, normals } = extrude_PolygonNormal(
+ coordinates,
+ true,
+ );
+
+ return {
+ vertices: positions, // [ x, y, z ]
+ indices: index,
+ normals,
+ size: 3,
+ };
+}
+
+export function HeatmapGridTriangulation(feature: IEncodeFeature) {
+ const { shape } = feature;
+ const { positions, index } = getHeatmapGeometry(shape as IShape);
+ return {
+ vertices: positions, // [ x, y, z ] 多边形顶点
+ indices: index,
+ size: 3,
+ };
+}
+
+/**
+ * 图片图层顶点构造
+ * @param feature 数据
+ */
+export function RasterImageTriangulation(feature: IEncodeFeature) {
+ const coordinates = feature.coordinates as IPosition[];
+ // [ x, y, z. uv.x, uv.y]
+ const positions: number[] = [
+ ...coordinates[0],
+ 0,
+ 0,
+ 1,
+ coordinates[1][0],
+ coordinates[0][1],
+ 0,
+ 1,
+ 1,
+ ...coordinates[1],
+ 0,
+ 1,
+ 0,
+ ...coordinates[0],
+ 0,
+ 0,
+ 1,
+ ...coordinates[1],
+ 0,
+ 1,
+ 0,
+ coordinates[0][0],
+ coordinates[1][1],
+ 0,
+ 0,
+ 0,
+ ];
+ const indexs = [0, 1, 2, 3, 4, 5];
+ return {
+ vertices: positions,
+ indices: indexs,
+ size: 5,
+ };
+}
+/**
+ * 计算3D弧线顶点
+ * @param feature 映射数据
+ * @param segNum 弧线线段数
+ */
+export function LineArcTriangulation(feature: IEncodeFeature) {
+ const segNum = 30;
+ const coordinates = feature.coordinates as IPosition[];
+ const positions = [];
+ const indexArray = [];
+ for (let i = 0; i < segNum; i++) {
+ // 上线两个顶点
+ // [ x, y, z, sx,sy, tx,ty]
+ positions.push(
+ i,
+ 1,
+ i,
+ coordinates[0][0],
+ coordinates[0][1],
+ coordinates[1][0],
+ coordinates[1][1],
+ i,
+ -1,
+ i,
+ coordinates[0][0],
+ coordinates[0][1],
+ coordinates[1][0],
+ coordinates[1][1],
+ );
+ if (i !== segNum - 1) {
+ indexArray.push(
+ ...[0, 1, 2, 1, 3, 2].map((v) => {
+ return i * 2 + v;
+ }),
+ );
+ }
+ }
+ return {
+ vertices: positions,
+ indices: indexArray,
+ size: 7,
+ };
+}
+
+export function HeatmapTriangulation(feature: IEncodeFeature) {
+ const coordinates = feature.coordinates as number[];
+ if (coordinates.length === 2) {
+ coordinates.push(0);
+ }
+ const size = feature.size as number;
+ const dir = addDir(-1, 1);
+ const dir1 = addDir(1, 1);
+ const dir2 = addDir(-1, -1);
+ const dir3 = addDir(1, -1);
+ // [x,y,z, dirx ,diry, weight]
+ const positions = [
+ ...coordinates,
+ ...dir,
+ ...coordinates,
+ ...dir2,
+ ...coordinates,
+ ...dir3,
+ ...coordinates,
+ ...dir1,
+ ];
+ const indexArray = [0, 1, 2, 3, 0, 2];
+ return {
+ vertices: positions,
+ indices: indexArray,
+ size: 5,
+ };
+}
+
+/**
+ * 点图层3d geomerty
+ * @param shape 3D形状
+ */
+function getGeometry(shape: ShapeType3D, needFlat = false): IExtrudeGeomety {
+ if (GeometryCache && GeometryCache[shape]) {
+ return GeometryCache[shape];
+ }
+ const path = geometryShape[shape]
+ ? geometryShape[shape]()
+ : geometryShape.cylinder();
+ const geometry = extrude_PolygonNormal([path], needFlat);
+ GeometryCache[shape] = geometry;
+ return geometry;
+}
+
+function computeVertexNormals(
+ positions: number[],
+ indexArray: number[],
+ dim: number = 3,
+ needFlat: boolean = false,
+) {
+ const normals = new Float32Array((positions.length / dim) * 3);
+ let vA: number;
+ let vB: number;
+ let vC: number;
+ const cb = vec3.create();
+ const ab = vec3.create();
+ const normal = vec3.create();
+ for (let i = 0, li = indexArray.length; i < li; i += 3) {
+ vA = indexArray[i + 0] * 3;
+ vB = indexArray[i + 1] * 3;
+ vC = indexArray[i + 2] * 3;
+ let p1 = [positions[vA], positions[vA + 1]];
+ let p2 = [positions[vB], positions[vB + 1]];
+ let p3 = [positions[vC], positions[vC + 1]];
+ if (needFlat) {
+ p1 = lngLatToMeters(p1);
+ p2 = lngLatToMeters(p2);
+ p3 = lngLatToMeters(p3);
+ }
+ const [ax, ay] = p1;
+ const pA = vec3.fromValues(ax, ay, positions[vA + 2]);
+ const [bx, by] = p2;
+ const pB = vec3.fromValues(bx, by, positions[vB + 2]);
+ const [cx, cy] = p3;
+ const pC = vec3.fromValues(cx, cy, positions[vC + 2]);
+ vec3.sub(cb, pC, pB);
+ vec3.sub(ab, pA, pB);
+ vec3.cross(normal, cb, ab);
+ normals[vA] += cb[0];
+ normals[vA + 1] += cb[1];
+ normals[vA + 2] += cb[2];
+ normals[vB] += cb[0];
+ normals[vB + 1] += cb[1];
+ normals[vB + 2] += cb[2];
+ normals[vC] += cb[0];
+ normals[vC + 1] += cb[1];
+ normals[vC + 2] += cb[2];
+ }
+ normalizeNormals(normals);
+ return normals;
+}
+
+function normalizeNormals(normals: Float32Array) {
+ for (let i = 0, li = normals.length; i < li; i += 3) {
+ const normal = vec3.fromValues(normals[i], normals[i + 1], normals[i + 2]);
+ const newNormal = vec3.create();
+ vec3.normalize(newNormal, normal);
+ normals.set(newNormal, i);
+ }
+}
+
+function checkIsClosed(points: number[][][]) {
+ const p1 = points[0][0];
+ const p2 = points[0][points[0].length - 1];
+ return p1[0] === p2[0] && p1[1] === p2[1];
+}
+
+function getHeatmapGeometry(shape: ShapeType2D | ShapeType3D): IExtrudeGeomety {
+ const shape3d = [
+ 'cylinder',
+ 'triangleColumn',
+ 'hexagonColumn',
+ 'squareColumn',
+ ];
+ const path = geometryShape[shape]
+ ? geometryShape[shape]()
+ : geometryShape.circle();
+ const geometry =
+ shape3d.indexOf(shape) === -1
+ ? fillPolygon([path])
+ : extrudePolygon([path]);
+ // const geometry = fillPolygon([path]);
+ return geometry;
+}
+// 热力图计算范围
+function addDir(dirX: number, dirY: number) {
+ const x = (dirX + 1) / 2;
+ const y = (dirY + 1) / 2;
+ return [x, y];
+}
diff --git a/packages/layers/src/heatmap/index.ts b/packages/layers/src/heatmap/index.ts
new file mode 100644
index 0000000000..0e0de961e1
--- /dev/null
+++ b/packages/layers/src/heatmap/index.ts
@@ -0,0 +1,60 @@
+import { AttributeType, gl, IEncodeFeature, ILayer } from '@l7/core';
+import BaseLayer from '../core/BaseLayer';
+import HeatMapModels, { HeatMapModelType } from './models';
+interface IPointLayerStyleOptions {
+ opacity: number;
+}
+export default class HeatMapLayer extends BaseLayer {
+ public name: string = 'HeatMapLayer';
+ protected getConfigSchema() {
+ return {
+ properties: {
+ opacity: {
+ type: 'number',
+ minimum: 0,
+ maximum: 1,
+ },
+ },
+ };
+ }
+
+ protected renderModels() {
+ const shape = this.getModelType();
+ if (shape === 'heatmap') {
+ this.layerModel.render();
+ return;
+ }
+ this.models.forEach((model) =>
+ model.draw({
+ uniforms: this.layerModel.getUninforms(),
+ }),
+ );
+ return this;
+ }
+
+ protected buildModels() {
+ const shape = this.getModelType();
+ this.layerModel = new HeatMapModels[shape](this);
+ this.models = this.layerModel.buildModels();
+ }
+ private getModelType(): HeatMapModelType {
+ const shapeAttribute = this.styleAttributeService.getLayerStyleAttribute(
+ 'shape',
+ );
+ const { shape3d } = this.configService.getConfig();
+ const source = this.getSource();
+ const sourceType = source.data.type;
+ const shape =
+ (shapeAttribute?.scale?.field as HeatMapModelType) || 'heatmap';
+ if (shape === 'heatmap' || shape === 'heatmap3d') {
+ return 'heatmap';
+ }
+ if (sourceType === 'hexagon') {
+ return shape3d?.indexOf(shape) === -1 ? 'hexagon' : 'grid3d';
+ }
+ if (sourceType === 'grid') {
+ return shape3d?.indexOf(shape) === -1 ? 'grid' : 'grid3d';
+ }
+ return 'heatmap';
+ }
+}
diff --git a/packages/layers/src/heatmap/models/grid.ts b/packages/layers/src/heatmap/models/grid.ts
new file mode 100644
index 0000000000..96dbed19a6
--- /dev/null
+++ b/packages/layers/src/heatmap/models/grid.ts
@@ -0,0 +1,92 @@
+import {
+ AttributeType,
+ gl,
+ IEncodeFeature,
+ ILayer,
+ ILayerModel,
+ IModel,
+ IModelUniform,
+} from '@l7/core';
+import BaseModel from '../../core/baseModel';
+import { HeatmapGridTriangulation } from '../../core/triangulation';
+import heatmapGridVert from '../shaders/grid_vert.glsl';
+import heatmapGridFrag from '../shaders/hexagon_frag.glsl';
+interface IHeatMapLayerStyleOptions {
+ opacity: number;
+ coverage: number;
+}
+export default class GridModel extends BaseModel {
+ public getUninforms(): IModelUniform {
+ const {
+ opacity,
+ coverage,
+ } = this.layer.getStyleOptions() as IHeatMapLayerStyleOptions;
+ return {
+ u_opacity: opacity || 1.0,
+ u_coverage: coverage || 0.9,
+ u_radius: [
+ this.layer.getSource().data.xOffset,
+ this.layer.getSource().data.yOffset,
+ ],
+ };
+ }
+
+ public buildModels(): IModel[] {
+ return [
+ this.layer.buildLayerModel({
+ moduleName: 'gridheatmap',
+ vertexShader: heatmapGridVert,
+ fragmentShader: heatmapGridFrag,
+ triangulation: HeatmapGridTriangulation,
+ depth: { enable: false },
+ primitive: gl.TRIANGLES,
+ }),
+ ];
+ }
+ protected registerBuiltinAttributes() {
+ // point layer size;
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'size',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Size',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 1,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ const { size } = feature;
+ return Array.isArray(size) ? [size[0]] : [size as number];
+ },
+ },
+ });
+
+ // point layer size;
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'pos', // 顶点经纬度位置
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Pos',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 3,
+ update: (feature: IEncodeFeature, featureIdx: number) => {
+ const coordinates = feature.coordinates as number[];
+ return [coordinates[0], coordinates[1], 0];
+ },
+ },
+ });
+ }
+}
diff --git a/packages/layers/src/heatmap/models/grid3d.ts b/packages/layers/src/heatmap/models/grid3d.ts
new file mode 100644
index 0000000000..6433facdcd
--- /dev/null
+++ b/packages/layers/src/heatmap/models/grid3d.ts
@@ -0,0 +1,115 @@
+import {
+ AttributeType,
+ gl,
+ IEncodeFeature,
+ ILayer,
+ ILayerModel,
+ IModel,
+ IModelUniform,
+} from '@l7/core';
+import BaseModel from '../../core/baseModel';
+import { PointExtrudeTriangulation } from '../../core/triangulation';
+import heatmapGrid3dVert from '../shaders/hexagon_3d_vert.glsl';
+import heatmapGridFrag from '../shaders/hexagon_frag.glsl';
+
+interface IHeatMapLayerStyleOptions {
+ opacity: number;
+ coverage: number;
+}
+export default class Grid3DModel extends BaseModel {
+ public getUninforms(): IModelUniform {
+ const {
+ opacity,
+ coverage,
+ } = this.layer.getStyleOptions() as IHeatMapLayerStyleOptions;
+ return {
+ u_opacity: opacity || 1.0,
+ u_coverage: coverage || 1.0,
+ u_radius: [
+ this.layer.getSource().data.xOffset,
+ this.layer.getSource().data.yOffset,
+ ],
+ };
+ }
+
+ public buildModels(): IModel[] {
+ return [
+ this.layer.buildLayerModel({
+ moduleName: 'grid3dheatmap',
+ vertexShader: heatmapGrid3dVert,
+ fragmentShader: heatmapGridFrag,
+ triangulation: PointExtrudeTriangulation,
+ depth: { enable: true },
+ }),
+ ];
+ }
+ protected registerBuiltinAttributes() {
+ // point layer size;
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'size',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Size',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 1,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ const { size } = feature;
+ return Array.isArray(size) ? [size[0]] : [size as number];
+ },
+ },
+ });
+
+ // point layer size;
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'normal',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Normal',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.STATIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 3,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ normal: number[],
+ ) => {
+ return normal;
+ },
+ },
+ });
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'pos', // 顶点经纬度位置
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Pos',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 3,
+ update: (feature: IEncodeFeature, featureIdx: number) => {
+ const coordinates = feature.coordinates as number[];
+ return [coordinates[0], coordinates[1], 0];
+ },
+ },
+ });
+ }
+}
diff --git a/packages/layers/src/heatmap/models/heatmap.ts b/packages/layers/src/heatmap/models/heatmap.ts
new file mode 100644
index 0000000000..47aad15ca2
--- /dev/null
+++ b/packages/layers/src/heatmap/models/heatmap.ts
@@ -0,0 +1,347 @@
+import {
+ AttributeType,
+ gl,
+ ICameraService,
+ IEncodeFeature,
+ IFramebuffer,
+ ILayer,
+ ILayerModel,
+ IModel,
+ IModelUniform,
+ ITexture2D,
+ lazyInject,
+ TYPES,
+} from '@l7/core';
+import { mat4 } from 'gl-matrix';
+import BaseModel from '../../core/baseModel';
+import { HeatmapTriangulation } from '../../core/triangulation';
+import { generateColorRamp, IColorRamp } from '../../utils/color';
+import heatmap3DFrag from '../shaders/heatmap_3d_frag.glsl';
+import heatmap3DVert from '../shaders/heatmap_3d_vert.glsl';
+import heatmapColorFrag from '../shaders/heatmap_frag.glsl';
+import heatmapFrag from '../shaders/heatmap_framebuffer_frag.glsl';
+import heatmapVert from '../shaders/heatmap_framebuffer_vert.glsl';
+import heatmapColorVert from '../shaders/heatmap_vert.glsl';
+import { heatMap3DTriangulation } from '../triangulation';
+interface IHeatMapLayerStyleOptions {
+ opacity: number;
+ intensity: number;
+ radius: number;
+ rampColors: IColorRamp;
+}
+
+export default class HeatMapModel extends BaseModel {
+ protected texture: ITexture2D;
+ protected colorTexture: ITexture2D;
+ protected heatmapFramerBuffer: IFramebuffer;
+ private intensityModel: IModel;
+ private colorModel: IModel;
+ private shapeType: string;
+
+ public render() {
+ const { clear, useFramebuffer } = this.rendererService;
+ useFramebuffer(this.heatmapFramerBuffer, () => {
+ clear({
+ color: [0, 0, 0, 0],
+ depth: 1,
+ stencil: 0,
+ framebuffer: this.heatmapFramerBuffer,
+ });
+ this.drawIntensityMode();
+ });
+ this.shapeType === 'heatmap' ? this.drawColorMode() : this.draw3DHeatMap();
+ }
+
+ public getUninforms(): IModelUniform {
+ throw new Error('Method not implemented.');
+ }
+
+ public buildModels(): IModel[] {
+ const {
+ createFramebuffer,
+ clear,
+ getViewportSize,
+ createTexture2D,
+ useFramebuffer,
+ } = this.rendererService;
+ const shapeAttr = this.layer.styleAttributeService.getLayerStyleAttribute(
+ 'shape',
+ );
+ const shapeType = shapeAttr?.scale?.field || 'heatmap';
+ this.shapeType = shapeType as string;
+ // 生成热力图密度图
+ this.intensityModel = this.buildHeatMapIntensity();
+ // 渲染到屏幕
+ this.colorModel =
+ shapeType === 'heatmap'
+ ? this.buildHeatmapColor() // 2D
+ : this.build3dHeatMap(); // 3D
+
+ const {
+ rampColors,
+ } = this.layer.getStyleOptions() as IHeatMapLayerStyleOptions;
+ const imageData = generateColorRamp(rampColors as IColorRamp);
+ const { width, height } = getViewportSize();
+
+ // 初始化密度图纹理
+ this.heatmapFramerBuffer = createFramebuffer({
+ color: createTexture2D({
+ width,
+ height,
+ wrapS: gl.CLAMP_TO_EDGE,
+ wrapT: gl.CLAMP_TO_EDGE,
+ min: gl.LINEAR,
+ mag: gl.LINEAR,
+ }),
+ });
+
+ // 初始化颜色纹理
+
+ this.colorTexture = createTexture2D({
+ data: imageData.data,
+ width: imageData.width,
+ height: imageData.height,
+ wrapS: gl.CLAMP_TO_EDGE,
+ wrapT: gl.CLAMP_TO_EDGE,
+ min: gl.LINEAR,
+ mag: gl.LINEAR,
+ flipY: true,
+ });
+
+ return [this.intensityModel, this.colorModel];
+ }
+ protected registerBuiltinAttributes() {
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'dir',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Dir',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 2,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ return [vertex[3], vertex[4]];
+ },
+ },
+ });
+
+ // point layer size;
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'size',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Size',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 1,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ const { size = 2 } = feature;
+ return [size as number];
+ },
+ },
+ });
+ }
+ private buildHeatMapIntensity(): IModel {
+ return this.layer.buildLayerModel({
+ moduleName: 'heatmapintensity',
+ vertexShader: heatmapVert,
+ fragmentShader: heatmapFrag,
+ triangulation: HeatmapTriangulation,
+ depth: {
+ enable: false,
+ },
+ blend: {
+ enable: true,
+ func: {
+ srcRGB: gl.ONE,
+ srcAlpha: gl.ONE_MINUS_SRC_ALPHA,
+ dstRGB: gl.ONE,
+ dstAlpha: gl.ONE_MINUS_SRC_ALPHA,
+ },
+ },
+ });
+ }
+
+ private buildHeatmapColor(): IModel {
+ this.shaderModuleService.registerModule('heatmapColor', {
+ vs: heatmapColorVert,
+ fs: heatmapColorFrag,
+ });
+
+ const { vs, fs, uniforms } = this.shaderModuleService.getModule(
+ 'heatmapColor',
+ );
+ const {
+ createAttribute,
+ createElements,
+ createBuffer,
+ createModel,
+ } = this.rendererService;
+ return createModel({
+ vs,
+ fs,
+ attributes: {
+ a_Position: createAttribute({
+ buffer: createBuffer({
+ data: [-1, 1, 0, 1, 1, 0, -1, -1, 0, 1, -1, 0],
+ type: gl.FLOAT,
+ }),
+ size: 3,
+ }),
+ a_Uv: createAttribute({
+ buffer: createBuffer({
+ data: [0, 1, 1, 1, 0, 0, 1, 0],
+ type: gl.FLOAT,
+ }),
+ size: 2,
+ }),
+ },
+ uniforms: {
+ ...uniforms,
+ },
+ depth: {
+ enable: false,
+ },
+ blend: {
+ enable: true,
+ func: {
+ srcRGB: gl.SRC_ALPHA,
+ srcAlpha: 1,
+ dstRGB: gl.ONE_MINUS_SRC_ALPHA,
+ dstAlpha: 1,
+ },
+ },
+ count: 6,
+ elements: createElements({
+ data: [0, 2, 1, 2, 3, 1],
+ type: gl.UNSIGNED_INT,
+ count: 6,
+ }),
+ });
+ }
+
+ private drawIntensityMode() {
+ const {
+ opacity,
+ intensity = 10,
+ radius = 5,
+ } = this.layer.getStyleOptions() as IHeatMapLayerStyleOptions;
+ this.intensityModel.draw({
+ uniforms: {
+ u_opacity: opacity || 1.0,
+ u_radius: radius,
+ u_intensity: intensity,
+ },
+ });
+ }
+
+ private drawColorMode() {
+ const {
+ opacity,
+ } = this.layer.getStyleOptions() as IHeatMapLayerStyleOptions;
+ this.colorModel.draw({
+ uniforms: {
+ u_opacity: opacity || 1.0,
+ u_colorTexture: this.colorTexture,
+ u_texture: this.heatmapFramerBuffer,
+ },
+ });
+ }
+
+ private draw3DHeatMap() {
+ const {
+ opacity,
+ } = this.layer.getStyleOptions() as IHeatMapLayerStyleOptions;
+ const invert = mat4.invert(
+ mat4.create(),
+ // @ts-ignore
+ mat4.fromValues(...this.camera.getViewProjectionMatrix()),
+ ) as mat4;
+ this.colorModel.draw({
+ uniforms: {
+ u_opacity: opacity || 1.0,
+ u_colorTexture: this.colorTexture,
+ u_texture: this.heatmapFramerBuffer,
+ u_InverseViewProjectionMatrix: [...invert],
+ },
+ });
+ }
+ private build3dHeatMap() {
+ const { getViewportSize } = this.rendererService;
+ const { width, height } = getViewportSize();
+ const triangulation = heatMap3DTriangulation(width / 2.0, height / 2.0);
+ this.shaderModuleService.registerModule('heatmap3dColor', {
+ vs: heatmap3DVert,
+ fs: heatmap3DFrag,
+ });
+
+ const { vs, fs, uniforms } = this.shaderModuleService.getModule(
+ 'heatmap3dColor',
+ );
+ const {
+ createAttribute,
+ createElements,
+ createBuffer,
+ createModel,
+ } = this.rendererService;
+ return createModel({
+ vs,
+ fs,
+ attributes: {
+ a_Position: createAttribute({
+ buffer: createBuffer({
+ data: triangulation.vertices,
+ type: gl.FLOAT,
+ }),
+ size: 3,
+ }),
+ a_Uv: createAttribute({
+ buffer: createBuffer({
+ data: triangulation.uvs,
+ type: gl.FLOAT,
+ }),
+ size: 2,
+ }),
+ },
+ primitive: gl.TRIANGLES,
+ uniforms: {
+ ...uniforms,
+ },
+ depth: {
+ enable: true,
+ },
+ blend: {
+ enable: true,
+ func: {
+ srcRGB: gl.SRC_ALPHA,
+ srcAlpha: 1,
+ dstRGB: gl.ONE_MINUS_SRC_ALPHA,
+ dstAlpha: 1,
+ },
+ },
+ elements: createElements({
+ data: triangulation.indices,
+ type: gl.UNSIGNED_INT,
+ count: triangulation.indices.length,
+ }),
+ });
+ }
+}
diff --git a/packages/layers/src/heatmap/models/hexagon.ts b/packages/layers/src/heatmap/models/hexagon.ts
new file mode 100644
index 0000000000..f26a081afd
--- /dev/null
+++ b/packages/layers/src/heatmap/models/hexagon.ts
@@ -0,0 +1,92 @@
+import {
+ AttributeType,
+ gl,
+ IEncodeFeature,
+ IModel,
+ IModelUniform,
+} from '@l7/core';
+import BaseModel from '../../core/baseModel';
+import { HeatmapGridTriangulation } from '../../core/triangulation';
+import heatmapGridFrag from '../shaders/hexagon_frag.glsl';
+import heatmapGridVert from '../shaders/hexagon_vert.glsl';
+
+interface IHeatMapLayerStyleOptions {
+ opacity: number;
+ coverage: number;
+}
+
+export default class HexagonModel extends BaseModel {
+ public getUninforms(): IModelUniform {
+ const {
+ opacity,
+ coverage,
+ } = this.layer.getStyleOptions() as IHeatMapLayerStyleOptions;
+ return {
+ u_opacity: opacity || 1.0,
+ u_coverage: coverage || 0.9,
+ u_radius: [
+ this.layer.getSource().data.xOffset,
+ this.layer.getSource().data.yOffset,
+ ],
+ };
+ }
+
+ public buildModels(): IModel[] {
+ return [
+ this.layer.buildLayerModel({
+ moduleName: 'hexagonheatmap',
+ vertexShader: heatmapGridVert,
+ fragmentShader: heatmapGridFrag,
+ triangulation: HeatmapGridTriangulation,
+ depth: { enable: false },
+ primitive: gl.TRIANGLES,
+ }),
+ ];
+ }
+ protected registerBuiltinAttributes() {
+ // point layer size;
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'size',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Size',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 1,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ const { size } = feature;
+ return Array.isArray(size) ? [size[0]] : [size as number];
+ },
+ },
+ });
+
+ // point layer size;
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'pos', // 顶点经纬度位置
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Pos',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 3,
+ update: (feature: IEncodeFeature, featureIdx: number) => {
+ const coordinates = feature.coordinates as number[];
+ return [coordinates[0], coordinates[1], 0];
+ },
+ },
+ });
+ }
+}
diff --git a/packages/layers/src/heatmap/models/index.ts b/packages/layers/src/heatmap/models/index.ts
new file mode 100644
index 0000000000..1bcd1cf6af
--- /dev/null
+++ b/packages/layers/src/heatmap/models/index.ts
@@ -0,0 +1,20 @@
+import GridModel from './grid';
+import Grid3DModel from './grid3d';
+import HeatMapModel from './heatmap';
+import HexagonModel from './hexagon';
+
+export type HeatMapModelType =
+ | 'heatmap'
+ | 'heatmap3d'
+ | 'hexagon'
+ | 'grid'
+ | 'grid3d';
+
+const HeatMapModels: { [key in HeatMapModelType]: any } = {
+ heatmap: HeatMapModel,
+ heatmap3d: HeatMapModel,
+ grid: GridModel,
+ grid3d: Grid3DModel,
+ hexagon: HexagonModel,
+};
+export default HeatMapModels;
diff --git a/packages/layers/src/heatmap/shaders/grid_vert.glsl b/packages/layers/src/heatmap/shaders/grid_vert.glsl
new file mode 100644
index 0000000000..5cc66a19b6
--- /dev/null
+++ b/packages/layers/src/heatmap/shaders/grid_vert.glsl
@@ -0,0 +1,24 @@
+precision highp float;
+// 多边形顶点坐标
+attribute vec3 a_Position;
+// 多边形经纬度坐标
+attribute vec3 a_Pos;
+attribute float a_Size;
+attribute vec4 a_Color;
+uniform vec2 u_radius;
+uniform float u_coverage: 0.9;
+uniform float u_angle: 0;
+uniform mat4 u_ModelMatrix;
+varying vec4 v_color;
+
+#pragma include "projection"
+#pragma include "project"
+void main() {
+ v_color = a_Color;
+
+ mat2 rotationMatrix = mat2(cos(u_angle), sin(u_angle), -sin(u_angle), cos(u_angle));
+ vec2 offset = a_Position.xy * u_radius * rotationMatrix * u_coverage ;
+ // vec2 lnglat = unProjectFlat(a_Pos.xy);
+ vec4 project_pos = project_position(vec4(a_Pos.xy + offset, 0, 1.0));
+ gl_Position = project_common_position_to_clipspace(project_pos);
+}
diff --git a/packages/layers/src/heatmap/shaders/heatmap_3d_frag.glsl b/packages/layers/src/heatmap/shaders/heatmap_3d_frag.glsl
new file mode 100644
index 0000000000..48b48907ea
--- /dev/null
+++ b/packages/layers/src/heatmap/shaders/heatmap_3d_frag.glsl
@@ -0,0 +1,17 @@
+uniform sampler2D u_texture;
+uniform sampler2D u_colorTexture;
+uniform float u_opacity;
+varying vec2 v_texCoord;
+varying float v_intensity;
+
+void main(){
+
+ float intensity = texture2D(u_texture, v_texCoord).r;
+ vec2 ramp_pos = vec2(
+ fract(16.0 * (1.0 - v_intensity)),
+ floor(16.0 * (1.0 - v_intensity)) / 16.0);
+ // vec4 color = texture2D(u_colorTexture,vec2(0.5,1.0-intensity));
+ vec4 color = texture2D(u_colorTexture,ramp_pos);
+ gl_FragColor = color;
+ gl_FragColor.a = color.a * smoothstep(0.1,0.2,intensity)* u_opacity;
+}
diff --git a/packages/layers/src/heatmap/shaders/heatmap_3d_vert.glsl b/packages/layers/src/heatmap/shaders/heatmap_3d_vert.glsl
new file mode 100644
index 0000000000..972323b636
--- /dev/null
+++ b/packages/layers/src/heatmap/shaders/heatmap_3d_vert.glsl
@@ -0,0 +1,45 @@
+precision highp float;
+attribute vec3 a_Position;
+attribute vec2 a_Uv;
+uniform sampler2D u_texture;
+varying vec2 v_texCoord;
+uniform mat4 u_ModelMatrix;
+uniform mat4 u_InverseViewProjectionMatrix;
+varying float v_intensity;
+
+vec2 toBezier(float t, vec2 P0, vec2 P1, vec2 P2, vec2 P3) {
+ float t2 = t * t;
+ float one_minus_t = 1.0 - t;
+ float one_minus_t2 = one_minus_t * one_minus_t;
+ return (P0 * one_minus_t2 * one_minus_t + P1 * 3.0 * t * one_minus_t2 + P2 * 3.0 * t2 * one_minus_t + P3 * t2 * t);
+}
+vec2 toBezier(float t, vec4 p){
+ return toBezier(t, vec2(0.0, 0.0), vec2(p.x, p.y), vec2(p.z, p.w), vec2(1.0, 1.0));
+}
+#pragma include "projection"
+void main() {
+ v_texCoord = a_Uv;
+
+ vec2 pos = 1.8 * (a_Uv * vec2(2.0) - vec2(1.0));
+
+
+ vec4 p1 = vec4(pos, 0.0, 1.0);
+ vec4 p2 = vec4(pos, 1.0, 1.0);
+
+ vec4 inverseP1 = unproject_clipspace_to_position(p1, u_InverseViewProjectionMatrix);
+ vec4 inverseP2 = unproject_clipspace_to_position(p2, u_InverseViewProjectionMatrix) ;
+
+ inverseP1 = inverseP1 / inverseP1.w;
+ inverseP2 = inverseP2 / inverseP2.w;
+
+ float zPos = (0.0 - inverseP1.z) / (inverseP2.z - inverseP1.z);
+ vec4 position = inverseP1 + zPos * (inverseP2 - inverseP1);
+
+ vec4 b= vec4(0.5000, 0, 1, 0.5000);
+ float fh;
+
+ v_intensity = texture2D(u_texture, v_texCoord).r;
+ fh = toBezier(v_intensity, b).y;
+ gl_Position = project_common_position_to_clipspace(vec4(position.xy, fh * 50., 1.0));
+
+}
diff --git a/packages/layers/src/heatmap/shaders/heatmap_frag.glsl b/packages/layers/src/heatmap/shaders/heatmap_frag.glsl
new file mode 100644
index 0000000000..a20d904c3b
--- /dev/null
+++ b/packages/layers/src/heatmap/shaders/heatmap_frag.glsl
@@ -0,0 +1,17 @@
+uniform sampler2D u_texture;
+uniform sampler2D u_colorTexture;
+uniform float u_opacity;
+varying vec2 v_texCoord;
+varying float v_intensity;
+
+void main(){
+ float intensity = texture2D(u_texture, v_texCoord).r;
+ vec2 ramp_pos = vec2(
+ fract(16.0 * (1.0 - intensity)),
+ floor(16.0 * (1.0 - intensity)) / 16.0);
+ // vec4 color = texture2D(u_colorTexture,vec2(0.5,1.0-intensity));
+ vec4 color = texture2D(u_colorTexture,ramp_pos);
+ gl_FragColor = color;
+ gl_FragColor.a = color.a * smoothstep(0.,0.05,intensity) * u_opacity;
+
+}
diff --git a/packages/layers/src/heatmap/shaders/heatmap_framebuffer_frag.glsl b/packages/layers/src/heatmap/shaders/heatmap_framebuffer_frag.glsl
new file mode 100644
index 0000000000..1e234110e7
--- /dev/null
+++ b/packages/layers/src/heatmap/shaders/heatmap_framebuffer_frag.glsl
@@ -0,0 +1,12 @@
+precision highp float;
+uniform float u_intensity;
+varying float v_weight;
+varying vec2 v_extrude;
+
+
+void main(){
+ float GAUSS_COEF = 0.3989422804014327;
+ float d = -0.5 * 3.0 * 3.0 * dot(v_extrude, v_extrude);
+ float val = v_weight * u_intensity * GAUSS_COEF * exp(d);
+ gl_FragColor = vec4(val, val, val, val);
+}
diff --git a/packages/layers/src/heatmap/shaders/heatmap_framebuffer_vert.glsl b/packages/layers/src/heatmap/shaders/heatmap_framebuffer_vert.glsl
new file mode 100644
index 0000000000..ad8a2507e6
--- /dev/null
+++ b/packages/layers/src/heatmap/shaders/heatmap_framebuffer_vert.glsl
@@ -0,0 +1,27 @@
+precision highp float;
+attribute vec3 a_Position;
+attribute float a_Size;
+attribute vec2 a_Dir;
+uniform float u_intensity;
+uniform float u_radius;
+varying vec2 v_extrude;
+varying float v_weight;
+uniform mat4 u_ModelMatrix;
+
+#pragma include "projection"
+
+void main(){
+ v_weight = a_Size;
+ float GAUSS_COEF = 0.3989422804014327;
+ float ZERO = 1.0 / 255.0 / 16.0;
+ float extrude_x = a_Dir.x * 2.0 -1.0;
+ float extrude_y = a_Dir.y * 2.0 -1.0;
+ vec2 extrude_dir = normalize(vec2(extrude_x,extrude_y));
+ float S = sqrt(-2.0 * log(ZERO / a_Size / u_intensity / GAUSS_COEF)) / 3.0;
+ v_extrude = extrude_dir * S;
+
+ vec2 offset = project_pixel(v_extrude * u_radius);
+ vec4 project_pos = project_position(vec4(a_Position.xy, 0.0, 1.0));
+
+ gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, 0.0, 1.0));
+}
diff --git a/packages/layers/src/heatmap/shaders/heatmap_vert.glsl b/packages/layers/src/heatmap/shaders/heatmap_vert.glsl
new file mode 100644
index 0000000000..cfa03fe386
--- /dev/null
+++ b/packages/layers/src/heatmap/shaders/heatmap_vert.glsl
@@ -0,0 +1,11 @@
+precision highp float;
+attribute vec3 a_Position;
+attribute vec2 a_Uv;
+uniform sampler2D u_texture;
+varying vec2 v_texCoord;
+varying float v_intensity;
+void main() {
+ v_texCoord = a_Uv;
+ v_intensity = texture2D(u_texture, v_texCoord).r;
+ gl_Position = vec4(a_Position.xy, 0, 1.);
+}
diff --git a/packages/layers/src/heatmap/shaders/hexagon_3d_frag.glsl b/packages/layers/src/heatmap/shaders/hexagon_3d_frag.glsl
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/packages/layers/src/heatmap/shaders/hexagon_3d_vert.glsl b/packages/layers/src/heatmap/shaders/hexagon_3d_vert.glsl
new file mode 100644
index 0000000000..a2f1f722f1
--- /dev/null
+++ b/packages/layers/src/heatmap/shaders/hexagon_3d_vert.glsl
@@ -0,0 +1,29 @@
+precision highp float;
+// 多边形顶点坐标
+attribute vec3 a_Position;
+// 多边形经纬度坐标
+attribute vec3 a_Pos;
+
+attribute vec3 a_Normal;
+attribute float a_Size;
+attribute vec4 a_Color;
+uniform vec2 u_radius;
+uniform float u_coverage: 0.9;
+uniform float u_angle: 0;
+uniform mat4 u_ModelMatrix;
+varying vec4 v_color;
+
+#pragma include "projection"
+#pragma include "project"
+#pragma include "light"
+void main() {
+
+ mat2 rotationMatrix = mat2(cos(u_angle), sin(u_angle), -sin(u_angle), cos(u_angle));
+ vec2 offset =(vec2(a_Position.xy * u_radius * rotationMatrix * u_coverage));
+ vec2 lnglat = unProjectFlat(a_Pos.xy + offset);
+ vec4 project_pos = project_position(vec4(lnglat, a_Position.z * project_pixel(a_Size), 1.0));
+ float lightWeight = calc_lighting(project_pos);
+ v_color =vec4(a_Color.rgb*lightWeight, a_Color.w);
+
+ gl_Position = project_common_position_to_clipspace(project_pos);
+}
diff --git a/packages/layers/src/heatmap/shaders/hexagon_frag.glsl b/packages/layers/src/heatmap/shaders/hexagon_frag.glsl
new file mode 100644
index 0000000000..2a1dfa7f88
--- /dev/null
+++ b/packages/layers/src/heatmap/shaders/hexagon_frag.glsl
@@ -0,0 +1,7 @@
+precision highp float;
+varying vec4 v_color;
+uniform float u_opacity: 1;
+void main() {
+ gl_FragColor = v_color;
+ gl_FragColor.a *= u_opacity;
+}
diff --git a/packages/layers/src/heatmap/shaders/hexagon_vert.glsl b/packages/layers/src/heatmap/shaders/hexagon_vert.glsl
new file mode 100644
index 0000000000..ec08c1b99a
--- /dev/null
+++ b/packages/layers/src/heatmap/shaders/hexagon_vert.glsl
@@ -0,0 +1,24 @@
+precision highp float;
+// 多边形顶点坐标
+attribute vec3 a_Position;
+// 多边形经纬度坐标
+attribute vec3 a_Pos;
+attribute float a_Size;
+attribute vec4 a_Color;
+uniform vec2 u_radius;
+uniform float u_coverage: 0.9;
+uniform float u_angle: 0;
+uniform mat4 u_ModelMatrix;
+varying vec4 v_color;
+
+#pragma include "projection"
+#pragma include "project"
+void main() {
+ v_color = a_Color;
+
+ mat2 rotationMatrix = mat2(cos(u_angle), sin(u_angle), -sin(u_angle), cos(u_angle));
+ vec2 offset =(vec2(a_Position.xy * u_radius * rotationMatrix * u_coverage));
+ vec2 lnglat = unProjectFlat(a_Pos.xy + offset);
+ vec4 project_pos = project_position(vec4(lnglat, 0, 1.0));
+ gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy, 0., 1.0));
+}
diff --git a/packages/layers/src/heatmap/triangulation.ts b/packages/layers/src/heatmap/triangulation.ts
new file mode 100644
index 0000000000..46c94bc268
--- /dev/null
+++ b/packages/layers/src/heatmap/triangulation.ts
@@ -0,0 +1,36 @@
+import { IEncodeFeature, IParseDataItem } from '@l7/core';
+// @ts-ignore
+
+export function heatMap3DTriangulation(width: number, height: number) {
+ const indices = [];
+ const vertices = [];
+ const uvs = [];
+ const gridX1 = width + 1;
+ const gridY1 = height + 1;
+ const widthHalf = width / 2;
+ const heightHalf = height / 2;
+ for (let iy = 0; iy < gridY1; iy++) {
+ const y = iy - heightHalf;
+ for (let ix = 0; ix < gridX1; ix++) {
+ const x = ix - widthHalf;
+ vertices.push(x / widthHalf, -y / heightHalf, 0);
+ uvs.push(ix / width);
+ uvs.push(1 - iy / height);
+ }
+ }
+ for (let iy = 0; iy < height; iy++) {
+ for (let ix = 0; ix < width; ix++) {
+ const a = ix + gridX1 * iy;
+ const b = ix + gridX1 * (iy + 1);
+ const c = ix + 1 + gridX1 * (iy + 1);
+ const d = ix + 1 + gridX1 * iy;
+ indices.push(a, b, d);
+ indices.push(b, c, d);
+ }
+ }
+ return {
+ vertices,
+ indices,
+ uvs,
+ };
+}
diff --git a/packages/layers/src/index.ts b/packages/layers/src/index.ts
new file mode 100644
index 0000000000..ad87701059
--- /dev/null
+++ b/packages/layers/src/index.ts
@@ -0,0 +1,77 @@
+import { container, ILayerPlugin, TYPES } from '@l7/core';
+import BaseLayer from './core/BaseLayer';
+import HeatmapLayer from './heatmap';
+import DashLineLayer from './line/dash';
+import LineLayer from './line/index';
+import PointLayer from './point';
+import PolygonLayer from './polygon';
+import ImageLayer from './raster/image';
+import RasterLayer from './raster/raster';
+
+import ConfigSchemaValidationPlugin from './plugins/ConfigSchemaValidationPlugin';
+import DataMappingPlugin from './plugins/DataMappingPlugin';
+import DataSourcePlugin from './plugins/DataSourcePlugin';
+import FeatureScalePlugin from './plugins/FeatureScalePlugin';
+import LightingPlugin from './plugins/LightingPlugin';
+import MultiPassRendererPlugin from './plugins/MultiPassRendererPlugin';
+import PixelPickingPlugin from './plugins/PixelPickingPlugin';
+import RegisterStyleAttributePlugin from './plugins/RegisterStyleAttributePlugin';
+import ShaderUniformPlugin from './plugins/ShaderUniformPlugin';
+import UpdateStyleAttributePlugin from './plugins/UpdateStyleAttributePlugin';
+
+/**
+ * 校验传入参数配置项的正确性
+ * @see /dev-docs/ConfigSchemaValidation.md
+ */
+container
+ .bind(TYPES.ILayerPlugin)
+ .to(ConfigSchemaValidationPlugin);
+/**
+ * 获取 Source
+ */
+container.bind(TYPES.ILayerPlugin).to(DataSourcePlugin);
+/**
+ * 根据 StyleAttribute 创建 VertexAttribute
+ */
+container
+ .bind(TYPES.ILayerPlugin)
+ .to(RegisterStyleAttributePlugin);
+/**
+ * 根据 Source 创建 Scale
+ */
+container.bind(TYPES.ILayerPlugin).to(FeatureScalePlugin);
+/**
+ * 使用 Scale 进行数据映射
+ */
+container.bind(TYPES.ILayerPlugin).to(DataMappingPlugin);
+/**
+ * 负责属性更新
+ */
+container.bind(TYPES.ILayerPlugin).to(UpdateStyleAttributePlugin);
+/**
+ * Multi Pass 自定义渲染管线
+ */
+container.bind(TYPES.ILayerPlugin).to(MultiPassRendererPlugin);
+/**
+ * 传入相机坐标系参数
+ */
+container.bind(TYPES.ILayerPlugin).to(ShaderUniformPlugin);
+/**
+ * 传入光照相关参数
+ */
+container.bind(TYPES.ILayerPlugin).to(LightingPlugin);
+/**
+ * 负责拾取过程中 Encode 以及 Highlight 阶段及结束后恢复
+ */
+container.bind(TYPES.ILayerPlugin).to(PixelPickingPlugin);
+
+export {
+ BaseLayer,
+ PointLayer,
+ PolygonLayer,
+ LineLayer,
+ DashLineLayer,
+ ImageLayer,
+ RasterLayer,
+ HeatmapLayer,
+};
diff --git a/packages/layers/src/line/dash.ts b/packages/layers/src/line/dash.ts
new file mode 100644
index 0000000000..56c9a47e12
--- /dev/null
+++ b/packages/layers/src/line/dash.ts
@@ -0,0 +1,206 @@
+import { AttributeType, gl, IEncodeFeature, ILayer } from '@l7/core';
+import BaseLayer from '../core/BaseLayer';
+import { LineTriangulation } from '../core/triangulation';
+import line_dash_frag from './shaders/line_dash_frag.glsl';
+import line_dash_vert from './shaders/line_dash_vert.glsl';
+interface IDashLineLayerStyleOptions {
+ opacity: number;
+ dashArray: [number, number];
+}
+export default class DashLineLayer extends BaseLayer<
+ IDashLineLayerStyleOptions
+> {
+ public name: string = 'LineLayer';
+
+ protected getConfigSchema() {
+ return {
+ properties: {
+ opacity: {
+ type: 'number',
+ minimum: 0,
+ maximum: 1,
+ },
+ },
+ };
+ }
+
+ protected renderModels() {
+ const { opacity, dashArray = [10, 5] } = this.getStyleOptions();
+ this.models.forEach((model) =>
+ model.draw({
+ uniforms: {
+ u_opacity: opacity || 1.0,
+ u_dash_array: dashArray,
+ },
+ }),
+ );
+ return this;
+ }
+
+ protected buildModels() {
+ this.registerBuiltinAttributes(this);
+ this.models = [
+ this.buildLayerModel({
+ moduleName: 'line_dash',
+ vertexShader: line_dash_vert,
+ fragmentShader: line_dash_frag,
+ triangulation: LineTriangulation,
+ blend: {
+ enable: true,
+ func: {
+ srcRGB: gl.SRC_ALPHA,
+ srcAlpha: 1,
+ dstRGB: gl.ONE_MINUS_SRC_ALPHA,
+ dstAlpha: 1,
+ },
+ },
+ }),
+ ];
+ }
+
+ private registerBuiltinAttributes(layer: ILayer) {
+ // point layer size;
+ layer.styleAttributeService.registerStyleAttribute({
+ name: 'size',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Size',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 1,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ const { size } = feature;
+ return Array.isArray(size) ? [size[0]] : [size as number];
+ },
+ },
+ });
+
+ // point layer size;
+ layer.styleAttributeService.registerStyleAttribute({
+ name: 'normal',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Normal',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.STATIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 3,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ normal: number[],
+ ) => {
+ return normal;
+ },
+ },
+ });
+
+ layer.styleAttributeService.registerStyleAttribute({
+ name: 'miter',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Miter',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 1,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ return [vertex[4]];
+ },
+ },
+ });
+
+ layer.styleAttributeService.registerStyleAttribute({
+ name: 'startPos',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_StartPos',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 3,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ const coordinates = feature.coordinates as number[][];
+ const coord = coordinates[0];
+ return coord.length === 3 ? coord : [...coord, 0.0];
+ },
+ },
+ });
+
+ layer.styleAttributeService.registerStyleAttribute({
+ name: 'distance',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Distance',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 1,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ return [vertex[3]];
+ },
+ },
+ });
+
+ layer.styleAttributeService.registerStyleAttribute({
+ name: 'total_distance',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Total_Distance',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 1,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ return [vertex[5]];
+ },
+ },
+ });
+ }
+}
diff --git a/packages/layers/src/line/index.ts b/packages/layers/src/line/index.ts
new file mode 100644
index 0000000000..f7cee5bc06
--- /dev/null
+++ b/packages/layers/src/line/index.ts
@@ -0,0 +1,53 @@
+import { AttributeType, gl, IEncodeFeature, ILayer } from '@l7/core';
+import BaseLayer from '../core/BaseLayer';
+import LineModels, { LineModelType } from './models';
+interface IPointLayerStyleOptions {
+ opacity: number;
+}
+export default class LineLayer extends BaseLayer {
+ public name: string = 'LineLayer';
+
+ private animateStartTime: number = 0;
+
+ protected getConfigSchema() {
+ return {
+ properties: {
+ opacity: {
+ type: 'number',
+ minimum: 0,
+ maximum: 1,
+ },
+ },
+ };
+ }
+
+ protected renderModels() {
+ this.models.forEach((model) =>
+ model.draw({
+ uniforms: this.layerModel.getUninforms(),
+ }),
+ );
+ return this;
+ }
+
+ protected buildModels() {
+ const shape = this.getModelType();
+ this.layerModel = new LineModels[shape](this);
+ this.models = this.layerModel.buildModels();
+ }
+ private getModelType(): LineModelType {
+ const shapeAttribute = this.styleAttributeService.getLayerStyleAttribute(
+ 'shape',
+ );
+ const shape = shapeAttribute?.scale?.field as LineModelType;
+ return shape || 'line';
+ }
+ // 拆分的动画插件
+ private initAnimate() {
+ const { enable } = this.animateOptions;
+ if (enable) {
+ this.layerService.startAnimate();
+ this.animateStartTime = this.layerService.clock.getElapsedTime();
+ }
+ }
+}
diff --git a/packages/layers/src/line/models/arc.ts b/packages/layers/src/line/models/arc.ts
new file mode 100644
index 0000000000..ef8a5816f7
--- /dev/null
+++ b/packages/layers/src/line/models/arc.ts
@@ -0,0 +1,103 @@
+import {
+ AttributeType,
+ gl,
+ IEncodeFeature,
+ ILayer,
+ ILayerModel,
+ IModel,
+ IModelUniform,
+} from '@l7/core';
+
+import BaseModel from '../../core/baseModel';
+import { LineArcTriangulation } from '../../core/triangulation';
+import line_arc_frag from '../shaders/line_arc_frag.glsl';
+import line_arc2d_vert from '../shaders/line_bezier_vert.glsl';
+
+interface IArcLayerStyleOptions {
+ opacity: number;
+ segmentNumber: number;
+ blur: number;
+}
+export default class ArcModel extends BaseModel {
+ public getUninforms(): IModelUniform {
+ const {
+ opacity,
+ blur = 0.99,
+ } = this.layer.getStyleOptions() as IArcLayerStyleOptions;
+ return {
+ u_opacity: opacity || 1,
+ segmentNumber: 30,
+ u_blur: blur,
+ };
+ }
+
+ public buildModels(): IModel[] {
+ return [
+ this.layer.buildLayerModel({
+ moduleName: 'arc2dline',
+ vertexShader: line_arc2d_vert,
+ fragmentShader: line_arc_frag,
+ triangulation: LineArcTriangulation,
+ depth: { enable: false },
+ blend: {
+ enable: true,
+ func: {
+ srcRGB: gl.ONE,
+ srcAlpha: 1,
+ dstRGB: gl.ONE,
+ dstAlpha: 1,
+ },
+ },
+ }),
+ ];
+ }
+
+ protected registerBuiltinAttributes() {
+ // point layer size;
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'size',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Size',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 1,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ const { size } = feature;
+ return Array.isArray(size) ? [size[0]] : [size as number];
+ },
+ },
+ });
+
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'instance', // 弧线起始点信息
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Instance',
+ buffer: {
+ usage: gl.STATIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 4,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ return [vertex[3], vertex[4], vertex[5], vertex[6]];
+ },
+ },
+ });
+ }
+}
diff --git a/packages/layers/src/line/models/arc_3d.ts b/packages/layers/src/line/models/arc_3d.ts
new file mode 100644
index 0000000000..5c3ff2bd72
--- /dev/null
+++ b/packages/layers/src/line/models/arc_3d.ts
@@ -0,0 +1,95 @@
+import {
+ AttributeType,
+ gl,
+ IEncodeFeature,
+ ILayer,
+ ILayerModel,
+ IModel,
+ IModelUniform,
+} from '@l7/core';
+import BaseModel from '../../core/baseModel';
+import { LineArcTriangulation } from '../../core/triangulation';
+import line_arc_frag from '../shaders/line_arc_frag.glsl';
+import line_arc_vert from '../shaders/line_arc_vert.glsl';
+
+interface IArcLayerStyleOptions {
+ opacity: number;
+ segmentNumber: number;
+}
+export default class Arc3DModel extends BaseModel {
+ public getUninforms(): IModelUniform {
+ const { opacity } = this.layer.getStyleOptions() as IArcLayerStyleOptions;
+ return {
+ u_opacity: opacity || 1,
+ segmentNumber: 30,
+ };
+ }
+
+ public buildModels(): IModel[] {
+ return [
+ this.layer.buildLayerModel({
+ moduleName: 'arcline',
+ vertexShader: line_arc_vert,
+ fragmentShader: line_arc_frag,
+ triangulation: LineArcTriangulation,
+ blend: {
+ enable: true,
+ func: {
+ srcRGB: gl.ONE,
+ srcAlpha: 1,
+ dstRGB: gl.ONE,
+ dstAlpha: 1,
+ },
+ },
+ }),
+ ];
+ }
+ protected registerBuiltinAttributes() {
+ // point layer size;
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'size',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Size',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 1,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ const { size } = feature;
+ return Array.isArray(size) ? [size[0]] : [size as number];
+ },
+ },
+ });
+
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'instance', // 弧线起始点信息
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Instance',
+ buffer: {
+ usage: gl.STATIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 4,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ return [vertex[3], vertex[4], vertex[5], vertex[6]];
+ },
+ },
+ });
+ }
+}
diff --git a/packages/layers/src/line/models/dash.ts b/packages/layers/src/line/models/dash.ts
new file mode 100644
index 0000000000..7aa44a4dbc
--- /dev/null
+++ b/packages/layers/src/line/models/dash.ts
@@ -0,0 +1,22 @@
+import {
+ AttributeType,
+ gl,
+ IEncodeFeature,
+ ILayer,
+ ILayerModel,
+ IModel,
+} from '@l7/core';
+
+import BaseModel from '../../core/baseModel';
+export default class ArcModel extends BaseModel {
+ public getUninforms() {
+ throw new Error('Method not implemented.');
+ }
+
+ public buildModels(): IModel[] {
+ throw new Error('Method not implemented.');
+ }
+ private registerBuiltinAttributes() {
+ throw new Error('Method not implemented.');
+ }
+}
diff --git a/packages/layers/src/line/models/great_circle.ts b/packages/layers/src/line/models/great_circle.ts
new file mode 100644
index 0000000000..5a990694e5
--- /dev/null
+++ b/packages/layers/src/line/models/great_circle.ts
@@ -0,0 +1,102 @@
+import {
+ AttributeType,
+ gl,
+ IEncodeFeature,
+ ILayer,
+ ILayerModel,
+ IModel,
+ IModelUniform,
+} from '@l7/core';
+
+import BaseModel from '../../core/baseModel';
+import { LineArcTriangulation } from '../../core/triangulation';
+import line_arc2d_vert from '../shaders/line_arc2d_vert.glsl';
+import line_arc_frag from '../shaders/line_arc_frag.glsl';
+
+interface IArcLayerStyleOptions {
+ opacity: number;
+ segmentNumber: number;
+ blur: number;
+}
+export default class GreatCircleModel extends BaseModel {
+ public getUninforms(): IModelUniform {
+ const {
+ opacity,
+ blur = 0.99,
+ } = this.layer.getStyleOptions() as IArcLayerStyleOptions;
+ return {
+ u_opacity: opacity || 1,
+ segmentNumber: 30,
+ u_blur: blur,
+ };
+ }
+
+ public buildModels(): IModel[] {
+ return [
+ this.layer.buildLayerModel({
+ moduleName: 'arc2dline',
+ vertexShader: line_arc2d_vert,
+ fragmentShader: line_arc_frag,
+ triangulation: LineArcTriangulation,
+ depth: { enable: false },
+ blend: {
+ enable: true,
+ func: {
+ srcRGB: gl.ONE,
+ srcAlpha: 1,
+ dstRGB: gl.ONE,
+ dstAlpha: 1,
+ },
+ },
+ }),
+ ];
+ }
+ protected registerBuiltinAttributes() {
+ // point layer size;
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'size',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Size',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 1,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ const { size } = feature;
+ return Array.isArray(size) ? [size[0]] : [size as number];
+ },
+ },
+ });
+
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'instance', // 弧线起始点信息
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Instance',
+ buffer: {
+ usage: gl.STATIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 4,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ return [vertex[3], vertex[4], vertex[5], vertex[6]];
+ },
+ },
+ });
+ }
+}
diff --git a/packages/layers/src/line/models/index.ts b/packages/layers/src/line/models/index.ts
new file mode 100644
index 0000000000..54a3a124e8
--- /dev/null
+++ b/packages/layers/src/line/models/index.ts
@@ -0,0 +1,15 @@
+import ArcModel from './arc';
+import Arc3DModel from './arc_3d';
+import GreatCircleModel from './great_circle';
+import LineModel from './line';
+
+export type LineModelType = 'arc' | 'arc3d' | 'greatcircle' | 'line';
+
+const LineModels: { [key in LineModelType]: any } = {
+ arc: ArcModel,
+ arc3d: Arc3DModel,
+ greatcircle: GreatCircleModel,
+ line: LineModel,
+};
+
+export default LineModels;
diff --git a/packages/layers/src/line/models/line.ts b/packages/layers/src/line/models/line.ts
new file mode 100644
index 0000000000..24cee5dff2
--- /dev/null
+++ b/packages/layers/src/line/models/line.ts
@@ -0,0 +1,120 @@
+import {
+ AttributeType,
+ gl,
+ IEncodeFeature,
+ ILayer,
+ ILayerModel,
+ IModel,
+ IModelUniform,
+} from '@l7/core';
+
+import BaseModel from '../../core/baseModel';
+import { LineTriangulation } from '../../core/triangulation';
+import line_frag from '../shaders/line_frag.glsl';
+import line_vert from '../shaders/line_vert.glsl';
+
+interface ILineLayerStyleOptions {
+ opacity: number;
+}
+export default class LineModel extends BaseModel {
+ public getUninforms(): IModelUniform {
+ const { opacity } = this.layer.getStyleOptions() as ILineLayerStyleOptions;
+ return {
+ u_opacity: opacity || 1.0,
+ };
+ }
+
+ public buildModels(): IModel[] {
+ return [
+ this.layer.buildLayerModel({
+ moduleName: 'line',
+ vertexShader: line_vert,
+ fragmentShader: line_frag,
+ triangulation: LineTriangulation,
+ blend: {
+ enable: true,
+ func: {
+ srcRGB: gl.SRC_ALPHA,
+ srcAlpha: 1,
+ dstRGB: gl.ONE_MINUS_SRC_ALPHA,
+ dstAlpha: 1,
+ },
+ },
+ }),
+ ];
+ }
+ protected registerBuiltinAttributes() {
+ // point layer size;
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'size',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Size',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 2,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ const { size = 1 } = feature;
+ return Array.isArray(size) ? [size[0], size[1]] : [size as number, 0];
+ },
+ },
+ });
+
+ // point layer size;
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'normal',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Normal',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.STATIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 3,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ normal: number[],
+ ) => {
+ return normal;
+ },
+ },
+ });
+
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'miter',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Miter',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 1,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ return [vertex[4]];
+ },
+ },
+ });
+ }
+}
diff --git a/packages/layers/src/line/shaders/arc_chunks.vert.glsl b/packages/layers/src/line/shaders/arc_chunks.vert.glsl
new file mode 100644
index 0000000000..f0d2689c4c
--- /dev/null
+++ b/packages/layers/src/line/shaders/arc_chunks.vert.glsl
@@ -0,0 +1,21 @@
+vec2 interpolate (vec2 source, vec2 target, float t) {
+ // if the angularDist is PI, linear interpolation is applied. otherwise, use spherical interpolation
+ vec2 mid = midPoint(source, target);
+ vec3 x = vec3(source.x, mid.x, target.x);
+ vec3 y = vec3(source.y, mid.y, target.y)
+ return vec2(bezier3(x ,t), bezier3(y,t));
+}
+float bezier3(vec3 arr, float t) {
+ float ut = 1 - t
+ return (arr.x * ut + arr.y * t) * ut + (arr.y * ut + arr.z * t) * t
+}
+vec2 midPoint(vec2 source, vec2 target) {
+ vec2 center = target - source;
+ float r = length(center);
+ float theta = atan(center.y, center.x);
+ float thetaOffset = 0.314;
+ float r2 = r / 2.0 / cos(thetaOffset);
+ float theta2 = theta + thetaOffset;
+ vec2 mid = vec2(r2*cos(theta2) + source.x, r2*sin(theta2) + source.y);
+ return mid;
+}
diff --git a/packages/layers/src/line/shaders/line_arc2d_vert.glsl b/packages/layers/src/line/shaders/line_arc2d_vert.glsl
new file mode 100644
index 0000000000..6bb16a07f9
--- /dev/null
+++ b/packages/layers/src/line/shaders/line_arc2d_vert.glsl
@@ -0,0 +1,95 @@
+precision mediump float;
+attribute vec4 a_Color;
+attribute vec3 a_Position;
+attribute vec4 a_Instance;
+attribute float a_Size;
+uniform mat4 u_ModelMatrix;
+uniform float segmentNumber;
+varying vec4 v_color;
+varying vec2 v_normal;
+
+#pragma include "projection"
+
+float maps (float value, float start1, float stop1, float start2, float stop2) {
+ return start2 + (stop2 - start2) * ((value - start1) / (stop1 - start1));
+}
+
+float getSegmentRatio(float index) {
+ return smoothstep(0.0, 1.0, index / (segmentNumber - 1.));
+}
+
+float paraboloid(vec2 source, vec2 target, float ratio) {
+ vec2 x = mix(source, target, ratio);
+ vec2 center = mix(source, target, 0.5);
+ float dSourceCenter = distance(source, center);
+ float dXCenter = distance(x, center);
+ return (dSourceCenter + dXCenter) * (dSourceCenter - dXCenter);
+}
+
+vec3 getPos(vec2 source, vec2 target, float segmentRatio) {
+ float vertex_height = paraboloid(source, target, segmentRatio);
+
+ return vec3(
+ mix(source, target, segmentRatio),
+ sqrt(max(0.0, vertex_height))
+ );
+}
+vec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction) {
+ // normalized direction of the line
+ vec2 dir_screenspace = normalize(line_clipspace);
+ // rotate by 90 degrees
+ dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);
+ vec2 offset = dir_screenspace * offset_direction * a_Size / 2.0;
+ return offset * vec2(1.0, -1.0);
+}
+vec2 getNormal(vec2 line_clipspace, float offset_direction) {
+ // normalized direction of the line
+ vec2 dir_screenspace = normalize(line_clipspace);
+ // rotate by 90 degrees
+ dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);
+ return reverse_offset_normal(vec3(dir_screenspace,1.0)).xy * sign(offset_direction);
+}
+float getAngularDist (vec2 source, vec2 target) {
+ vec2 delta = source - target;
+ vec2 sin_half_delta = sin(delta / 2.0);
+ float a =
+ sin_half_delta.y * sin_half_delta.y +
+ cos(source.y) * cos(target.y) *
+ sin_half_delta.x * sin_half_delta.x;
+ return 2.0 * atan(sqrt(a), sqrt(1.0 - a));
+}
+vec2 interpolate (vec2 source, vec2 target, float angularDist, float t) {
+ // if the angularDist is PI, linear interpolation is applied. otherwise, use spherical interpolation
+ if(abs(angularDist - PI) < 0.001) {
+ return (1.0 - t) * source + t * target;
+ }
+ float a = sin((1.0 - t) * angularDist) / sin(angularDist);
+ float b = sin(t * angularDist) / sin(angularDist);
+ vec2 sin_source = sin(source);
+ vec2 cos_source = cos(source);
+ vec2 sin_target = sin(target);
+ vec2 cos_target = cos(target);
+ float x = a * cos_source.y * cos_source.x + b * cos_target.y * cos_target.x;
+ float y = a * cos_source.y * sin_source.x + b * cos_target.y * sin_target.x;
+ float z = a * sin_source.y + b * sin_target.y;
+ return vec2(atan(y, x), atan(z, sqrt(x * x + y * y)));
+}
+
+
+void main() {
+ v_color = a_Color;
+ vec2 source = radians(a_Instance.rg);
+ vec2 target = radians(a_Instance.ba);
+ float angularDist = getAngularDist(source, target);
+ float segmentIndex = a_Position.x;
+ float segmentRatio = getSegmentRatio(segmentIndex);
+ float indexDir = mix(-1.0, 1.0, step(segmentIndex, 0.0));
+ float nextSegmentRatio = getSegmentRatio(segmentIndex + indexDir);
+ vec4 curr = project_position(vec4(degrees(interpolate(source, target, angularDist, segmentRatio)), 0.0, 1.0));
+ vec4 next = project_position(vec4(degrees(interpolate(source, target, angularDist, nextSegmentRatio)), 0.0, 1.0));
+ v_normal = getNormal((next.xy - curr.xy) * indexDir, a_Position.y);
+ vec2 offset = project_pixel(getExtrusionOffset((next.xy - curr.xy) * indexDir, a_Position.y));
+ // vec4 project_pos = project_position(vec4(curr.xy, 0, 1.0));
+ gl_Position = project_common_position_to_clipspace(vec4(curr.xy + offset, 0, 1.0));
+}
+
diff --git a/packages/layers/src/line/shaders/line_arc_frag.glsl b/packages/layers/src/line/shaders/line_arc_frag.glsl
new file mode 100644
index 0000000000..e60a9710cd
--- /dev/null
+++ b/packages/layers/src/line/shaders/line_arc_frag.glsl
@@ -0,0 +1,13 @@
+ precision mediump float;
+ uniform float u_opacity;
+ varying vec4 v_color;
+ uniform float u_blur : 0.90;
+ varying vec2 v_normal;
+
+ void main() {
+
+ gl_FragColor = v_color;
+ float blur = 1.- smoothstep(u_blur, 1., length(v_normal.xy));
+ gl_FragColor.a *= (blur * u_opacity);
+
+ }
diff --git a/packages/layers/src/line/shaders/line_arc_vert.glsl b/packages/layers/src/line/shaders/line_arc_vert.glsl
new file mode 100644
index 0000000000..5a548d510d
--- /dev/null
+++ b/packages/layers/src/line/shaders/line_arc_vert.glsl
@@ -0,0 +1,72 @@
+precision mediump float;
+attribute vec3 a_Position;
+attribute vec4 a_Instance;
+attribute vec4 a_Color;
+attribute float a_Size;
+
+
+uniform mat4 u_ModelMatrix;
+uniform float segmentNumber;
+varying vec4 v_color;
+varying vec2 v_normal;
+#pragma include "projection"
+
+float maps (float value, float start1, float stop1, float start2, float stop2) {
+ return start2 + (stop2 - start2) * ((value - start1) / (stop1 - start1));
+}
+
+float getSegmentRatio(float index) {
+ return smoothstep(0.0, 1.0, index / (segmentNumber - 1.0));
+}
+
+float paraboloid(vec2 source, vec2 target, float ratio) {
+ vec2 x = mix(source, target, ratio);
+ vec2 center = mix(source, target, 0.5);
+ float dSourceCenter = distance(source, center);
+ float dXCenter = distance(x, center);
+ return (dSourceCenter + dXCenter) * (dSourceCenter - dXCenter);
+}
+
+vec3 getPos(vec2 source, vec2 target, float segmentRatio) {
+ float vertex_height = paraboloid(source, target, segmentRatio);
+
+ return vec3(
+ mix(source, target, segmentRatio),
+ sqrt(max(0.0, vertex_height))
+ );
+}
+vec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction) {
+ // normalized direction of the line
+ vec2 dir_screenspace = normalize(line_clipspace);
+ // rotate by 90 degrees
+ dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);
+
+ vec2 offset = dir_screenspace * offset_direction * a_Size / 2.0;
+
+ return offset;
+}
+vec2 getNormal(vec2 line_clipspace, float offset_direction) {
+ // normalized direction of the line
+ vec2 dir_screenspace = normalize(line_clipspace);
+ // rotate by 90 degrees
+ dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);
+ return reverse_offset_normal(vec3(dir_screenspace,1.0)).xy * sign(offset_direction);
+}
+
+void main() {
+ v_color = a_Color;
+ vec2 source = project_position(vec4(a_Instance.rg, 0, 0)).xy;
+ vec2 target = project_position(vec4(a_Instance.ba, 0, 0)).xy;
+ float segmentIndex = a_Position.x;
+ float segmentRatio = getSegmentRatio(segmentIndex);
+ float indexDir = mix(-1.0, 1.0, step(segmentIndex, 0.0));
+
+ float nextSegmentRatio = getSegmentRatio(segmentIndex + indexDir);
+ vec3 curr = getPos(source, target, segmentRatio);
+ vec3 next = getPos(source, target, nextSegmentRatio);
+ vec2 offset = getExtrusionOffset((next.xy - curr.xy) * indexDir, a_Position.y);
+ v_normal = getNormal((next.xy - curr.xy) * indexDir, a_Position.y);
+
+ gl_Position = project_common_position_to_clipspace(vec4(curr.xy + project_pixel(offset), curr.z, 1.0));
+
+}
diff --git a/packages/layers/src/line/shaders/line_bezier_vert.glsl b/packages/layers/src/line/shaders/line_bezier_vert.glsl
new file mode 100644
index 0000000000..c20ad08621
--- /dev/null
+++ b/packages/layers/src/line/shaders/line_bezier_vert.glsl
@@ -0,0 +1,67 @@
+precision mediump float;
+attribute vec4 a_Color;
+attribute vec3 a_Position;
+attribute vec4 a_Instance;
+attribute float a_Size;
+uniform mat4 u_ModelMatrix;
+uniform float segmentNumber;
+varying vec4 v_color;
+varying vec2 v_normal;
+#pragma include "projection"
+
+float bezier3(vec3 arr, float t) {
+ float ut = 1. - t;
+ return (arr.x * ut + arr.y * t) * ut + (arr.y * ut + arr.z * t) * t;
+}
+vec2 midPoint(vec2 source, vec2 target) {
+ vec2 center = target - source;
+ float r = length(center);
+ float theta = atan(center.y, center.x);
+ float thetaOffset = 0.314;
+ float r2 = r / 2.0 / cos(thetaOffset);
+ float theta2 = theta + thetaOffset;
+ vec2 mid = vec2(r2*cos(theta2) + source.x, r2*sin(theta2) + source.y);
+ return mid;
+}
+float getSegmentRatio(float index) {
+ return smoothstep(0.0, 1.0, index / (segmentNumber - 1.));
+}
+vec2 interpolate (vec2 source, vec2 target, float t) {
+ // if the angularDist is PI, linear interpolation is applied. otherwise, use spherical interpolation
+ vec2 mid = midPoint(source, target);
+ vec3 x = vec3(source.x, mid.x, target.x);
+ vec3 y = vec3(source.y, mid.y, target.y);
+ return vec2(bezier3(x ,t), bezier3(y,t));
+}
+vec2 getExtrusionOffset(vec2 line_clipspace, float offset_direction) {
+ // normalized direction of the line
+ vec2 dir_screenspace = normalize(line_clipspace);
+ // rotate by 90 degrees
+ dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);
+ vec2 offset = dir_screenspace * offset_direction * a_Size / 2.0;
+ return offset * vec2(1.0, -1.0);
+}
+vec2 getNormal(vec2 line_clipspace, float offset_direction) {
+ // normalized direction of the line
+ vec2 dir_screenspace = normalize(line_clipspace);
+ // rotate by 90 degrees
+ dir_screenspace = vec2(-dir_screenspace.y, dir_screenspace.x);
+ return reverse_offset_normal(vec3(dir_screenspace,1.0)).xy * sign(offset_direction);
+}
+
+void main() {
+ v_color = a_Color;
+ vec2 source = a_Instance.rg;
+ vec2 target = a_Instance.ba;
+ float segmentIndex = a_Position.x;
+ float segmentRatio = getSegmentRatio(segmentIndex);
+ float indexDir = mix(-1.0, 1.0, step(segmentIndex, 0.0));
+ float nextSegmentRatio = getSegmentRatio(segmentIndex + indexDir);
+
+ vec4 curr = project_position(vec4(interpolate(source, target, segmentRatio), 0.0, 1.0));
+ vec4 next = project_position(vec4(interpolate(source, target, nextSegmentRatio), 0.0, 1.0));
+ v_normal = getNormal((next.xy - curr.xy) * indexDir, a_Position.y);
+ vec2 offset = project_pixel(getExtrusionOffset((next.xy - curr.xy) * indexDir, a_Position.y));
+
+ gl_Position = project_common_position_to_clipspace(vec4(curr.xy + offset, 0, 1.0));
+}
diff --git a/packages/layers/src/line/shaders/line_dash_frag.glsl b/packages/layers/src/line/shaders/line_dash_frag.glsl
new file mode 100644
index 0000000000..698c72179f
--- /dev/null
+++ b/packages/layers/src/line/shaders/line_dash_frag.glsl
@@ -0,0 +1,22 @@
+uniform float u_blur : 0.9;
+uniform float u_opacity : 1.0;
+uniform float u_dash_offset : 0.0;
+uniform float u_dash_ratio : 0.1;
+varying vec4 v_color;
+varying vec2 v_normal;
+
+uniform float u_time;
+uniform vec3 u_aimate: [ 0, 2., 1.0, 0.2 ];
+
+varying float v_distance_ratio;
+varying vec2 v_dash_array;
+void main() {
+ gl_FragColor = v_color;
+ // gl_FragColor.a = v_distance_ratio;
+ // anti-alias
+ float blur = 1.- smoothstep(u_blur, 1., length(v_normal.xy)) * u_opacity;
+ // gl_FragColor.a *= blur * ceil(mod(v_distance_ratio, v_dash_array.x) - v_dash_array.y);
+ gl_FragColor.a *= blur * (1.0- step(v_dash_array.x, mod(v_distance_ratio, v_dash_array.x +v_dash_array.y)));
+
+
+}
diff --git a/packages/layers/src/line/shaders/line_dash_vert.glsl b/packages/layers/src/line/shaders/line_dash_vert.glsl
new file mode 100644
index 0000000000..43f0332b00
--- /dev/null
+++ b/packages/layers/src/line/shaders/line_dash_vert.glsl
@@ -0,0 +1,34 @@
+
+attribute float a_Miter;
+attribute vec4 a_Color;
+attribute float a_Size;
+attribute vec3 a_Normal;
+attribute float a_Total_Distance;
+attribute vec3 a_Position;
+attribute float a_Distance;
+uniform mat4 u_ModelMatrix;
+uniform vec2 u_dash_array: [10.0, 5.];
+uniform float u_dash_offset: 0;
+
+varying vec4 v_color;
+varying vec2 v_dash_array;
+varying vec2 v_normal;
+
+varying float v_distance_ratio;
+
+
+
+#pragma include "projection"
+void main() {
+
+ v_distance_ratio = a_Distance / a_Total_Distance;
+
+ v_dash_array = pow(2.0, 20.0 - u_Zoom) * u_dash_array / a_Total_Distance;
+
+ v_normal = vec2(reverse_offset_normal(a_Normal) * sign(a_Miter));
+ v_color = a_Color;
+ vec3 size = a_Miter * a_Size * reverse_offset_normal(a_Normal); //v_normal * vec3(1., -1., 1.0);
+ vec2 offset = project_pixel(size.xy);
+ vec4 project_pos = project_position(vec4(a_Position.xy, 0, 1.0));
+ gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, 0, 1.0));
+}
diff --git a/packages/layers/src/line/shaders/line_frag.glsl b/packages/layers/src/line/shaders/line_frag.glsl
new file mode 100644
index 0000000000..817c97e4cf
--- /dev/null
+++ b/packages/layers/src/line/shaders/line_frag.glsl
@@ -0,0 +1,27 @@
+uniform float u_blur : 0.9;
+uniform float u_opacity : 1.0;
+uniform float u_dash_offset : 0.0;
+uniform float u_dash_ratio : 0.0;
+varying vec4 v_color;
+varying vec2 v_normal;
+
+uniform float u_time;
+uniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ];
+// [animate, duration, interval, trailLength],
+varying float v_distance_ratio;
+varying float v_dash_array;
+void main() {
+ gl_FragColor = v_color;
+ // anti-alias
+ float blur = 1.- smoothstep(u_blur, 1., length(v_normal.xy)) * u_opacity;
+ // gl_FragColor.a *= blur;
+
+ #ifdef ANIMATE
+
+ float alpha =1.0 - fract( mod(1.0- v_distance_ratio,u_aimate.z)* (1.0/ u_aimate.z) + u_time / u_aimate.y);
+ alpha = (alpha + u_aimate.w -1.0) / u_aimate.w;
+ alpha = smoothstep(0., 1., alpha);
+ gl_FragColor.a *= alpha * blur;
+ #endif
+
+}
diff --git a/packages/layers/src/line/shaders/line_vert.glsl b/packages/layers/src/line/shaders/line_vert.glsl
new file mode 100644
index 0000000000..7b4c674f4c
--- /dev/null
+++ b/packages/layers/src/line/shaders/line_vert.glsl
@@ -0,0 +1,21 @@
+
+attribute float a_Miter;
+attribute vec4 a_Color;
+attribute vec2 a_Size;
+attribute vec3 a_Normal;
+attribute vec3 a_Position;
+uniform mat4 u_ModelMatrix;
+
+#pragma include "projection"
+varying vec4 v_color;
+varying float v_dash_array;
+varying vec2 v_normal;
+
+void main() {
+ v_normal = vec2(reverse_offset_normal(a_Normal) * sign(a_Miter));
+ v_color = a_Color;
+ vec3 size = a_Miter * a_Size.x * reverse_offset_normal(a_Normal); //v_normal * vec3(1., -1., 1.0);
+ vec2 offset = project_pixel(size.xy);
+ vec4 project_pos = project_position(vec4(a_Position.xy, 0, 1.0));
+ gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, a_Size.y, 1.0));
+}
diff --git a/packages/layers/src/plugins/ConfigSchemaValidationPlugin.ts b/packages/layers/src/plugins/ConfigSchemaValidationPlugin.ts
new file mode 100644
index 0000000000..8674daef49
--- /dev/null
+++ b/packages/layers/src/plugins/ConfigSchemaValidationPlugin.ts
@@ -0,0 +1,43 @@
+import {
+ IGlobalConfigService,
+ ILayer,
+ ILayerPlugin,
+ ILogService,
+ TYPES,
+} from '@l7/core';
+import { inject, injectable } from 'inversify';
+
+/**
+ * Layer 初始化阶段以及重绘阶段首先校验传入参数,如果校验失败则中断后续插件处理。
+ */
+@injectable()
+export default class ConfigSchemaValidationPlugin implements ILayerPlugin {
+ @inject(TYPES.IGlobalConfigService)
+ private readonly configService: IGlobalConfigService;
+
+ @inject(TYPES.ILogService)
+ private readonly logger: ILogService;
+
+ public apply(layer: ILayer) {
+ layer.hooks.init.tap('ConfigSchemaValidationPlugin', () => {
+ this.configService.registerLayerConfigSchemaValidator(
+ layer.name,
+ layer.getConfigSchemaForValidation(),
+ );
+
+ const { valid, errorText } = this.configService.validateLayerConfig(
+ layer.name,
+ layer.getStyleOptions(),
+ );
+
+ if (!valid) {
+ this.logger.error(errorText || '');
+ // 中断 init 过程
+ return false;
+ }
+ });
+ layer.hooks.beforeRender.tap('ConfigSchemaValidationPlugin', () => {
+ // TODO: 配置项发生变化,需要重新校验
+ });
+ }
+}
diff --git a/packages/layers/src/plugins/DataMappingPlugin.ts b/packages/layers/src/plugins/DataMappingPlugin.ts
new file mode 100644
index 0000000000..35370a9ff6
--- /dev/null
+++ b/packages/layers/src/plugins/DataMappingPlugin.ts
@@ -0,0 +1,101 @@
+import {
+ IEncodeFeature,
+ IGlobalConfigService,
+ ILayer,
+ ILayerPlugin,
+ ILogService,
+ IParseDataItem,
+ IStyleAttribute,
+ lazyInject,
+ TYPES,
+} from '@l7/core';
+import { inject, injectable } from 'inversify';
+import { rgb2arr } from '../utils/color';
+
+@injectable()
+export default class DataMappingPlugin implements ILayerPlugin {
+ @inject(TYPES.IGlobalConfigService)
+ private readonly configService: IGlobalConfigService;
+
+ @inject(TYPES.ILogService)
+ private readonly logger: ILogService;
+
+ public apply(layer: ILayer) {
+ layer.hooks.init.tap('DataMappingPlugin', () => {
+ const attributes =
+ layer.styleAttributeService.getLayerStyleAttributes() || [];
+ const { dataArray } = layer.getSource().data;
+
+ // TODO: FIXME
+ if (!dataArray) {
+ return;
+ }
+
+ // mapping with source data
+ layer.setEncodedData(this.mapping(attributes, dataArray));
+ });
+
+ // remapping before render
+ layer.hooks.beforeRender.tap('DataMappingPlugin', () => {
+ const attributes =
+ layer.styleAttributeService.getLayerStyleAttributes() || [];
+ const { dataArray } = layer.getSource().data;
+ const attributesToRemapping = attributes.filter(
+ (attribute) => attribute.needRemapping,
+ );
+ if (attributesToRemapping.length) {
+ layer.setEncodedData(this.mapping(attributesToRemapping, dataArray));
+ this.logger.info('remapping finished');
+ }
+ });
+ }
+
+ private mapping(
+ attributes: IStyleAttribute[],
+ data: IParseDataItem[],
+ ): IEncodeFeature[] {
+ return data.map((record: IParseDataItem) => {
+ const encodeRecord: IEncodeFeature = {
+ id: record._id,
+ coordinates: record.coordinates,
+ };
+ // TODO 数据过滤
+ attributes.forEach((attribute: IStyleAttribute) => {
+ let values = this.applyAttributeMapping(attribute, record);
+ attribute.needRemapping = false;
+
+ // TODO: 支持每个属性配置 postprocess
+ if (attribute.name === 'color') {
+ values = values.map((c: unknown) => {
+ return rgb2arr(c as string);
+ });
+ }
+ // @ts-ignore
+ encodeRecord[attribute.name] =
+ Array.isArray(values) && values.length === 1 ? values[0] : values;
+ });
+ return encodeRecord;
+ }) as IEncodeFeature[];
+ }
+
+ private applyAttributeMapping(
+ attribute: IStyleAttribute,
+ record: { [key: string]: unknown },
+ ) {
+ if (!attribute.scale) {
+ return [];
+ }
+ const scalers = attribute?.scale?.scalers || [];
+ const params: unknown[] = [];
+
+ scalers.forEach(({ field }) => {
+ if (
+ record.hasOwnProperty(field) ||
+ attribute.scale?.type === 'variable'
+ ) {
+ params.push(record[field]);
+ }
+ });
+ return attribute.mapping ? attribute.mapping(params) : [];
+ }
+}
diff --git a/packages/layers/src/plugins/DataSourcePlugin.ts b/packages/layers/src/plugins/DataSourcePlugin.ts
new file mode 100644
index 0000000000..df7cfb0c9a
--- /dev/null
+++ b/packages/layers/src/plugins/DataSourcePlugin.ts
@@ -0,0 +1,13 @@
+import { ILayer, ILayerPlugin } from '@l7/core';
+import Source from '@l7/source';
+import { injectable } from 'inversify';
+
+@injectable()
+export default class DataSourcePlugin implements ILayerPlugin {
+ public apply(layer: ILayer) {
+ layer.hooks.init.tap('DataSourcePlugin', () => {
+ const { data, options } = layer.sourceOption;
+ layer.setSource(new Source(data, options));
+ });
+ }
+}
diff --git a/packages/layers/src/plugins/FeatureScalePlugin.ts b/packages/layers/src/plugins/FeatureScalePlugin.ts
new file mode 100644
index 0000000000..f3acd03b60
--- /dev/null
+++ b/packages/layers/src/plugins/FeatureScalePlugin.ts
@@ -0,0 +1,249 @@
+import {
+ IGlobalConfigService,
+ ILayer,
+ ILayerPlugin,
+ ILogService,
+ IScale,
+ IScaleOptions,
+ IStyleAttribute,
+ IStyleScale,
+ lazyInject,
+ ScaleTypes,
+ StyleScaleType,
+ TYPES,
+} from '@l7/core';
+import { IParseDataItem } from '@l7/source';
+import { extent, ticks } from 'd3-array';
+import * as d3 from 'd3-scale';
+import { inject, injectable } from 'inversify';
+import { isNil, isString, uniq } from 'lodash';
+
+const dateRegex = /^(?:(?!0000)[0-9]{4}([-/.]+)(?:(?:0?[1-9]|1[0-2])\1(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\1(?:29|30)|(?:0?[13578]|1[02])\1(?:31))|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)([-/.]?)0?2\2(?:29))(\s+([01]|([01][0-9]|2[0-3])):([0-9]|[0-5][0-9]):([0-9]|[0-5][0-9]))?$/;
+
+const scaleMap = {
+ [ScaleTypes.LINEAR]: d3.scaleLinear,
+ [ScaleTypes.POWER]: d3.scalePow,
+ [ScaleTypes.LOG]: d3.scaleLog,
+ [ScaleTypes.IDENTITY]: d3.scaleIdentity,
+ [ScaleTypes.TIME]: d3.scaleTime,
+ [ScaleTypes.QUANTILE]: d3.scaleQuantile,
+ [ScaleTypes.QUANTIZE]: d3.scaleQuantize,
+ [ScaleTypes.THRESHOLD]: d3.scaleThreshold,
+ [ScaleTypes.CAT]: d3.scaleOrdinal,
+};
+
+/**
+ * 根据 Source 原始数据为指定字段创建 Scale,保存在 StyleAttribute 上,供下游插件使用
+ */
+@injectable()
+export default class FeatureScalePlugin implements ILayerPlugin {
+ @inject(TYPES.IGlobalConfigService)
+ private readonly configService: IGlobalConfigService;
+
+ @inject(TYPES.ILogService)
+ private readonly logger: ILogService;
+
+ // key = field_attribute name
+ private scaleCache: {
+ [field: string]: IStyleScale;
+ } = {};
+
+ private scaleOptions: IScaleOptions = {};
+
+ public apply(layer: ILayer) {
+ layer.hooks.init.tap('FeatureScalePlugin', () => {
+ this.scaleOptions = layer.getScaleOptions();
+ const attributes = layer.styleAttributeService.getLayerStyleAttributes();
+ const { dataArray } = layer.getSource().data;
+ this.caculateScalesForAttributes(attributes || [], dataArray);
+ });
+
+ layer.hooks.beforeRender.tap('FeatureScalePlugin', () => {
+ this.scaleOptions = layer.getScaleOptions();
+ const attributes = layer.styleAttributeService.getLayerStyleAttributes();
+ if (attributes) {
+ const { dataArray } = layer.getSource().data;
+ const attributesToRescale = attributes.filter(
+ (attribute) => attribute.needRescale,
+ );
+ if (attributesToRescale.length) {
+ this.caculateScalesForAttributes(attributesToRescale, dataArray);
+ this.logger.info('rescale finished');
+ }
+ }
+ });
+ }
+ private isNumber(n: any) {
+ return !isNaN(parseFloat(n)) && isFinite(n);
+ }
+
+ private caculateScalesForAttributes(
+ attributes: IStyleAttribute[],
+ dataArray: IParseDataItem[],
+ ) {
+ this.scaleCache = {};
+ attributes.forEach((attribute) => {
+ if (attribute.scale) {
+ // 创建Scale
+ const attributeScale = attribute.scale;
+ const type = attribute.name;
+ attributeScale.names = this.parseFields(attribute!.scale!.field || []);
+ const scales: IStyleScale[] = attributeScale.names.map(
+ (field: string) => {
+ return this.getOrCreateScale(field, attribute, dataArray);
+ },
+ );
+
+ // 为scales 设置值区间
+ if (scales.some((scale) => scale.type === StyleScaleType.VARIABLE)) {
+ attributeScale.type = StyleScaleType.VARIABLE;
+ scales.forEach((scale) => {
+ // 如果设置了回调, 这不需要设置让range
+ if (!attributeScale.callback) {
+ if (attributeScale.values) {
+ if (
+ scale.option?.type === 'linear' &&
+ attributeScale.values.length > 2
+ ) {
+ const tick = scale.scale.ticks(attributeScale.values.length);
+ if (type === 'color') {
+ scale.scale.domain(tick);
+ }
+ }
+ scale.scale.range(attributeScale.values);
+ } else if (scale.option?.type === 'cat') {
+ // 如果没有设置初值且 类型为cat,range ==domain;
+ scale.scale.range(scale.option.domain);
+ }
+ }
+ });
+ } else {
+ // 设置attribute 常量值 常量直接在value取值
+ attributeScale.type = StyleScaleType.CONSTANT;
+ attributeScale.values = scales.map((scale, index) => {
+ return scale.scale(attributeScale.names[index]);
+ });
+ }
+ attributeScale.scalers = scales.map((scale: IStyleScale) => {
+ return {
+ field: scale.field,
+ func: scale.scale,
+ };
+ });
+
+ attribute.needRescale = false;
+ }
+ });
+ }
+ private getOrCreateScale(
+ field: string,
+ attribute: IStyleAttribute,
+ dataArray: IParseDataItem[],
+ ) {
+ const scalekey = [field, attribute.name].join('_');
+ if (this.scaleCache[scalekey]) {
+ return this.scaleCache[scalekey];
+ }
+ const styleScale = this.createScale(field, dataArray);
+ this.scaleCache[scalekey] = styleScale;
+
+ // if (
+ // styleScale.type === StyleScaleType.VARIABLE &&
+ // attribute.scale?.values &&
+ // attribute.scale?.values.length > 0
+ // ) { // 只有变量初始化range
+ // styleScale.scale.range(attribute.scale?.values);
+ // }
+
+ return this.scaleCache[scalekey];
+ }
+
+ /**
+ * @example
+ * 'w*h' => ['w', 'h']
+ * 'w' => ['w']
+ */
+ private parseFields(field: string[] | string): string[] {
+ if (Array.isArray(field)) {
+ return field;
+ }
+ if (isString(field)) {
+ return field.split('*');
+ }
+ return [field];
+ }
+
+ private createScale(field: string, data?: IParseDataItem[]): IStyleScale {
+ // 首先查找全局默认配置例如 color
+ const scaleOption: IScale | undefined = this.scaleOptions[field];
+ const styleScale: IStyleScale = {
+ field,
+ scale: undefined,
+ type: StyleScaleType.VARIABLE,
+ option: scaleOption,
+ };
+ if (!data || !data.length) {
+ if (scaleOption && scaleOption.type) {
+ styleScale.scale = this.createDefaultScale(scaleOption);
+ } else {
+ styleScale.scale = d3.scaleOrdinal([field]);
+ styleScale.type = StyleScaleType.CONSTANT;
+ }
+ return styleScale;
+ }
+ const firstValue = data!.find((d) => !isNil(d[field]))?.[field];
+ // 常量 Scale
+ if (this.isNumber(field) || (isNil(firstValue) && !scaleOption)) {
+ styleScale.scale = d3.scaleOrdinal([field]);
+ styleScale.type = StyleScaleType.CONSTANT;
+ } else {
+ // 根据数据类型判断 默认等分位,时间,和枚举类型
+ const type =
+ (scaleOption && scaleOption.type) || this.getDefaultType(firstValue);
+
+ const cfg = this.createDefaultScaleConfig(type, field, data);
+ Object.assign(cfg, scaleOption);
+ styleScale.scale = this.createDefaultScale(cfg);
+ styleScale.option = cfg;
+ }
+ return styleScale;
+ }
+
+ private getDefaultType(firstValue: unknown) {
+ let type = ScaleTypes.LINEAR;
+ if (typeof firstValue === 'string') {
+ type = dateRegex.test(firstValue) ? ScaleTypes.TIME : ScaleTypes.CAT;
+ }
+ return type;
+ }
+
+ private createDefaultScaleConfig(
+ type: ScaleTypes,
+ field: string,
+ data?: IParseDataItem[],
+ ) {
+ const cfg: IScale = {
+ type,
+ };
+ const values = data?.map((item) => item[field]) || [];
+ // 默认类型为 Quantile Scales https://github.com/d3/d3-scale#quantile-scales
+ if (type !== ScaleTypes.CAT && type !== ScaleTypes.QUANTILE) {
+ cfg.domain = extent(values);
+ } else if (type === ScaleTypes.CAT) {
+ cfg.domain = uniq(values);
+ } else if (type === ScaleTypes.QUANTILE) {
+ cfg.domain = values;
+ }
+ return cfg;
+ }
+
+ private createDefaultScale({ type, domain }: IScale) {
+ // @ts-ignore
+ const scale = scaleMap[type]();
+ if (domain) {
+ scale.domain(domain);
+ }
+ // TODO 其他属性支持
+ return scale;
+ }
+}
diff --git a/packages/layers/src/plugins/LightingPlugin.ts b/packages/layers/src/plugins/LightingPlugin.ts
new file mode 100644
index 0000000000..3908c45aa2
--- /dev/null
+++ b/packages/layers/src/plugins/LightingPlugin.ts
@@ -0,0 +1,133 @@
+import {
+ CameraUniform,
+ CoordinateUniform,
+ ICameraService,
+ ICoordinateSystemService,
+ ILayer,
+ ILayerPlugin,
+ IRendererService,
+ TYPES,
+} from '@l7/core';
+import { inject, injectable } from 'inversify';
+
+const lightTypeUniformMap = {
+ directional: {
+ lights: 'u_DirectionalLights',
+ num: 'u_NumOfDirectionalLights',
+ },
+ spot: {
+ lights: 'u_SpotLights',
+ num: 'u_NumOfSpotLights',
+ },
+};
+
+interface IDirectionalLight {
+ type: 'directional';
+ direction: [number, number, number];
+ ambient: [number, number, number];
+ diffuse: [number, number, number];
+ specular: [number, number, number];
+}
+
+interface ISpotLight {
+ type: 'spot';
+ position: [number, number, number];
+ direction: [number, number, number];
+ ambient: [number, number, number];
+ diffuse: [number, number, number];
+ specular: [number, number, number];
+ constant: number;
+ linear: number;
+ quadratic: number;
+ angle: number;
+ exponent: number;
+ blur: number;
+}
+
+const DEFAULT_LIGHT: IDirectionalLight = {
+ type: 'directional',
+ direction: [1, 10.5, 12],
+ ambient: [0.2, 0.2, 0.2],
+ diffuse: [0.6, 0.6, 0.6],
+ specular: [0.1, 0.1, 0.1],
+};
+
+const DEFAULT_DIRECTIONAL_LIGHT = {
+ direction: [0, 0, 0],
+ ambient: [0, 0, 0],
+ diffuse: [0, 0, 0],
+ specular: [0, 0, 0],
+};
+
+const DEFAULT_SPOT_LIGHT = {
+ position: [0, 0, 0],
+ direction: [0, 0, 0],
+ ambient: [0, 0, 0],
+ diffuse: [0, 0, 0],
+ specular: [0, 0, 0],
+ constant: 1,
+ linear: 0,
+ quadratic: 0,
+ angle: 14,
+ exponent: 40,
+ blur: 5,
+};
+
+const COLOR_ATTRIBUTES = ['ambient', 'diffuse', 'specular'];
+
+export function generateLightingUniforms(
+ lights?: Array>,
+) {
+ const lightsMap: {
+ u_DirectionalLights: IDirectionalLight[];
+ u_NumOfDirectionalLights: number;
+ u_SpotLights: ISpotLight[];
+ u_NumOfSpotLights: number;
+ } = {
+ u_DirectionalLights: new Array(3).fill({ ...DEFAULT_DIRECTIONAL_LIGHT }),
+ u_NumOfDirectionalLights: 0,
+ u_SpotLights: new Array(3).fill({ ...DEFAULT_SPOT_LIGHT }),
+ u_NumOfSpotLights: 0,
+ };
+ if (!lights || !lights.length) {
+ lights = [DEFAULT_LIGHT];
+ }
+ lights.forEach(({ type = 'directional', ...rest }, i) => {
+ const lightsUniformName = lightTypeUniformMap[type].lights;
+ const lightsNumUniformName = lightTypeUniformMap[type].num;
+
+ // Object.keys(rest).forEach(key => {
+ // if (Util.isString(rest[key]) && COLOR_ATTRIBUTES.indexOf(key) > -1) {
+ // rest[key] = ColorUtil.color2RGBA(rest[key]).slice(0, 3);
+ // }
+ // });
+
+ // @ts-ignore
+ const num = lightsMap[lightsNumUniformName];
+ // @ts-ignore
+ lightsMap[lightsUniformName][num] = {
+ // @ts-ignore
+ ...lightsMap[lightsUniformName][num],
+ ...rest,
+ };
+ // @ts-ignore
+ lightsMap[lightsNumUniformName]++;
+ });
+ return lightsMap;
+}
+
+/**
+ * 光照 & Shadow
+ */
+@injectable()
+export default class LightingPlugin implements ILayerPlugin {
+ public apply(layer: ILayer) {
+ layer.hooks.beforeRender.tap('LightingPlugin', () => {
+ layer.models.forEach((model) =>
+ model.addUniforms({
+ //
+ }),
+ );
+ });
+ }
+}
diff --git a/packages/layers/src/plugins/MultiPassRendererPlugin.ts b/packages/layers/src/plugins/MultiPassRendererPlugin.ts
new file mode 100644
index 0000000000..02bff96d62
--- /dev/null
+++ b/packages/layers/src/plugins/MultiPassRendererPlugin.ts
@@ -0,0 +1,126 @@
+import {
+ ClearPass,
+ IGlobalConfigService,
+ ILayer,
+ ILayerPlugin,
+ IPostProcessingPass,
+ IRendererService,
+ MultiPassRenderer,
+ PixelPickingPass,
+ RenderPass,
+ TAAPass,
+ TYPES,
+} from '@l7/core';
+import { inject, injectable, interfaces, multiInject } from 'inversify';
+
+/**
+ * 'blurH' -> ['blurH', {}]
+ */
+export function normalizePasses(
+ passes: Array,
+) {
+ return passes.map((pass: string | [string, { [key: string]: unknown }]) => {
+ if (typeof pass === 'string') {
+ pass = [pass, {}];
+ }
+ return pass;
+ });
+}
+
+/**
+ * 自定义渲染管线:
+ * ClearPass -> PixelPickingPass(可选) -> RenderPass/TAAPass -> PostProcessing -> CopyPass
+ * 根据 Layer 配置的 passes 创建 PostProcessing
+ * @example
+ * new PolygonLayer({
+ * enableMultiPassRenderer: true,
+ * passes: [
+ * 'blurH',
+ * ['blurV', { radius: 10 }],
+ * ],
+ * })
+ */
+@injectable()
+export default class MultiPassRendererPlugin implements ILayerPlugin {
+ @inject(TYPES.IGlobalConfigService)
+ private readonly configService: IGlobalConfigService;
+
+ @inject(TYPES.IRendererService)
+ private readonly rendererService: IRendererService;
+
+ @inject(TYPES.IFactoryPostProcessingPass)
+ private readonly postProcessingPassFactory: (
+ name: string,
+ ) => IPostProcessingPass;
+
+ private enabled: boolean;
+
+ public apply(layer: ILayer) {
+ layer.hooks.init.tap('MultiPassRendererPlugin', () => {
+ const { enableMultiPassRenderer, passes = [] } = layer.getStyleOptions();
+
+ // SceneConfig 的 enableMultiPassRenderer 配置项可以统一关闭
+ this.enabled =
+ !!enableMultiPassRenderer &&
+ this.configService.getConfig().enableMultiPassRenderer !== false;
+
+ // 根据 LayerConfig passes 配置项初始化
+ if (this.enabled) {
+ layer.multiPassRenderer = this.createMultiPassRenderer(layer, passes);
+ layer.multiPassRenderer.setRenderFlag(true);
+ }
+ });
+
+ layer.hooks.beforeRender.tap('MultiPassRendererPlugin', () => {
+ if (this.enabled) {
+ // 渲染前根据 viewport 调整 FBO size
+ const { width, height } = this.rendererService.getViewportSize();
+ layer.multiPassRenderer.resize(width, height);
+ }
+ });
+ }
+
+ /**
+ * 默认添加 ClearPass、RenderPass
+ * 以及 PostProcessing 中的最后一个 CopyPass
+ */
+ private createMultiPassRenderer(
+ layer: ILayer,
+ passes: Array,
+ ) {
+ const multiPassRenderer = new MultiPassRenderer(layer);
+ const { enablePicking, enableTAA } = layer.getStyleOptions();
+
+ // clear first
+ // multiPassRenderer.add(new ClearPass());
+
+ // picking pass if enabled
+ if (enablePicking) {
+ multiPassRenderer.add(new PixelPickingPass());
+ }
+
+ // use TAA pass if enabled instead of render pass
+ if (enableTAA) {
+ multiPassRenderer.add(new TAAPass());
+ } else {
+ // render all layers in this pass
+ multiPassRenderer.add(new RenderPass());
+ }
+
+ // post processing
+ normalizePasses(passes).forEach(
+ (pass: [string, { [key: string]: unknown }]) => {
+ const [passName, initializationOptions] = pass;
+ multiPassRenderer.add(
+ this.postProcessingPassFactory(passName),
+ initializationOptions,
+ );
+ },
+ );
+
+ // 末尾为固定的 CopyPass
+ multiPassRenderer.add(this.postProcessingPassFactory('copy'));
+
+ return multiPassRenderer;
+ }
+}
diff --git a/packages/layers/src/plugins/PixelPickingPlugin.ts b/packages/layers/src/plugins/PixelPickingPlugin.ts
new file mode 100644
index 0000000000..1c3f1b341e
--- /dev/null
+++ b/packages/layers/src/plugins/PixelPickingPlugin.ts
@@ -0,0 +1,99 @@
+import {
+ AttributeType,
+ gl,
+ IEncodeFeature,
+ ILayer,
+ ILayerPlugin,
+ IRendererService,
+ lazyInject,
+ TYPES,
+} from '@l7/core';
+import { inject, injectable } from 'inversify';
+import { rgb2arr } from '../utils/color';
+
+function encodePickingColor(featureIdx: number): [number, number, number] {
+ return [
+ (featureIdx + 1) & 255,
+ ((featureIdx + 1) >> 8) & 255,
+ (((featureIdx + 1) >> 8) >> 8) & 255,
+ ];
+}
+
+const PickingStage = {
+ NONE: 0.0,
+ ENCODE: 1.0,
+ HIGHLIGHT: 2.0,
+};
+
+@injectable()
+export default class PixelPickingPlugin implements ILayerPlugin {
+ @inject(TYPES.IRendererService)
+ private readonly rendererService: IRendererService;
+
+ public apply(layer: ILayer) {
+ // TODO: 由于 Shader 目前无法根据是否开启拾取进行内容修改,因此即使不开启也需要生成 a_PickingColor
+ layer.hooks.init.tap('PixelPickingPlugin', () => {
+ const { enablePicking } = layer.getStyleOptions();
+ layer.styleAttributeService.registerStyleAttribute({
+ name: 'pickingColor',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_PickingColor',
+ buffer: {
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 3,
+ // TODO: 固定 feature range 范围内的 pickingColor 都是固定的,可以生成 cache
+ update: (feature: IEncodeFeature, featureIdx: number) =>
+ // 只有开启拾取才需要 encode
+ enablePicking ? encodePickingColor(featureIdx) : [0, 0, 0],
+ },
+ });
+ });
+ // 必须要与 PixelPickingPass 结合使用,因此必须开启 multiPassRenderer
+ // if (layer.multiPassRenderer) {
+ layer.hooks.beforePickingEncode.tap('PixelPickingPlugin', () => {
+ const { enablePicking } = layer.getStyleOptions();
+ if (enablePicking) {
+ layer.models.forEach((model) =>
+ model.addUniforms({
+ u_PickingStage: PickingStage.ENCODE,
+ }),
+ );
+ }
+ });
+
+ layer.hooks.afterPickingEncode.tap('PixelPickingPlugin', () => {
+ const { enablePicking } = layer.getStyleOptions();
+ if (enablePicking) {
+ layer.models.forEach((model) =>
+ model.addUniforms({
+ u_PickingStage: PickingStage.NONE,
+ u_PickingColor: [0, 0, 0],
+ u_HighlightColor: [0, 0, 0, 0],
+ }),
+ );
+ }
+ });
+
+ layer.hooks.beforeHighlight.tap(
+ 'PixelPickingPlugin',
+ (pickedColor: number[]) => {
+ const { highlightColor } = layer.getStyleOptions();
+ const highlightColorInArray =
+ typeof highlightColor === 'string'
+ ? rgb2arr(highlightColor)
+ : highlightColor || [1, 0, 0, 1];
+ layer.models.forEach((model) =>
+ model.addUniforms({
+ u_PickingStage: PickingStage.HIGHLIGHT,
+ u_PickingColor: pickedColor,
+ u_HighlightColor: highlightColorInArray.map((c) => c * 255),
+ }),
+ );
+ },
+ );
+ // }
+ }
+}
diff --git a/packages/layers/src/plugins/RegisterStyleAttributePlugin.ts b/packages/layers/src/plugins/RegisterStyleAttributePlugin.ts
new file mode 100644
index 0000000000..ea709b6952
--- /dev/null
+++ b/packages/layers/src/plugins/RegisterStyleAttributePlugin.ts
@@ -0,0 +1,69 @@
+import {
+ AttributeType,
+ gl,
+ IEncodeFeature,
+ ILayer,
+ ILayerPlugin,
+ ILogService,
+ lazyInject,
+ TYPES,
+} from '@l7/core';
+import { inject, injectable } from 'inversify';
+
+/**
+ * 在初始化阶段完成属性的注册,以及首次根据 Layer 指定的三角化方法完成 indices 和 attribute 的创建
+ */
+@injectable()
+export default class RegisterStyleAttributePlugin implements ILayerPlugin {
+ @inject(TYPES.ILogService)
+ private readonly logger: ILogService;
+
+ public apply(layer: ILayer) {
+ layer.hooks.init.tap('RegisterStyleAttributePlugin', () => {
+ this.registerBuiltinAttributes(layer);
+ });
+ }
+
+ private registerBuiltinAttributes(layer: ILayer) {
+ layer.styleAttributeService.registerStyleAttribute({
+ name: 'position',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Position',
+ buffer: {
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 3,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ ) => {
+ return vertex.length === 2
+ ? [vertex[0], vertex[1], 0]
+ : [vertex[0], vertex[1], vertex[2]];
+ },
+ },
+ });
+
+ layer.styleAttributeService.registerStyleAttribute({
+ name: 'color',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Color',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 4,
+ update: (feature: IEncodeFeature, featureIdx: number) => {
+ const { color } = feature;
+ return !color || !color.length ? [0, 0, 0, 0] : color;
+ },
+ },
+ });
+ }
+}
diff --git a/packages/layers/src/plugins/ShaderUniformPlugin.ts b/packages/layers/src/plugins/ShaderUniformPlugin.ts
new file mode 100644
index 0000000000..82ffadf0e8
--- /dev/null
+++ b/packages/layers/src/plugins/ShaderUniformPlugin.ts
@@ -0,0 +1,66 @@
+import {
+ CameraUniform,
+ CoordinateUniform,
+ ICameraService,
+ ICoordinateSystemService,
+ ILayer,
+ ILayerPlugin,
+ IRendererService,
+ lazyInject,
+ TYPES,
+} from '@l7/core';
+import { inject, injectable } from 'inversify';
+
+/**
+ * 在渲染之前需要获取当前 Shader 所需 Uniform,例如:
+ * 1. 从相机服务中获取 View & ProjectionMatrix,当前缩放等级等等
+ * 2. 从坐标系服务中获取当前坐标系,例如是否是偏移坐标系
+ * @see https://yuque.antfin-inc.com/yuqi.pyq/fgetpa/doml91
+ * 3. 当前 Layer 本身的样式属性
+ */
+@injectable()
+export default class ShaderUniformPlugin implements ILayerPlugin {
+ @inject(TYPES.ICameraService)
+ private readonly cameraService: ICameraService;
+
+ @inject(TYPES.ICoordinateSystemService)
+ private readonly coordinateSystemService: ICoordinateSystemService;
+
+ @inject(TYPES.IRendererService)
+ private readonly rendererService: IRendererService;
+
+ public apply(layer: ILayer) {
+ layer.hooks.beforeRender.tap('ShaderUniformPlugin', () => {
+ // 重新计算坐标系参数
+ this.coordinateSystemService.refresh();
+
+ const { width, height } = this.rendererService.getViewportSize();
+
+ layer.models.forEach((model) =>
+ model.addUniforms({
+ // 相机参数,包含 VP 矩阵、缩放等级
+ [CameraUniform.ProjectionMatrix]: this.cameraService.getProjectionMatrix(),
+ [CameraUniform.ViewMatrix]: this.cameraService.getViewMatrix(),
+ [CameraUniform.ViewProjectionMatrix]: this.cameraService.getViewProjectionMatrix(),
+ [CameraUniform.Zoom]: this.cameraService.getZoom(),
+ [CameraUniform.ZoomScale]: this.cameraService.getZoomScale(),
+ [CameraUniform.FocalDistance]: this.cameraService.getFocalDistance(),
+ [CameraUniform.CameraPosition]: this.cameraService.getCameraPosition(),
+ // 坐标系参数
+ [CoordinateUniform.CoordinateSystem]: this.coordinateSystemService.getCoordinateSystem(),
+ [CoordinateUniform.ViewportCenter]: this.coordinateSystemService.getViewportCenter(),
+ [CoordinateUniform.ViewportCenterProjection]: this.coordinateSystemService.getViewportCenterProjection(),
+ [CoordinateUniform.PixelsPerDegree]: this.coordinateSystemService.getPixelsPerDegree(),
+ [CoordinateUniform.PixelsPerDegree2]: this.coordinateSystemService.getPixelsPerDegree2(),
+ [CoordinateUniform.PixelsPerMeter]: this.coordinateSystemService.getPixelsPerMeter(),
+ // 其他参数,例如视口大小、DPR 等
+ u_ViewportSize: [width, height],
+ u_DevicePixelRatio: window.devicePixelRatio,
+ u_ModelMatrix: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
+ }),
+ );
+
+ // TODO:脏检查,决定是否需要渲染
+ });
+ }
+}
diff --git a/packages/layers/src/plugins/UpdateStyleAttributePlugin.ts b/packages/layers/src/plugins/UpdateStyleAttributePlugin.ts
new file mode 100644
index 0000000000..36618a1978
--- /dev/null
+++ b/packages/layers/src/plugins/UpdateStyleAttributePlugin.ts
@@ -0,0 +1,33 @@
+import { ILayer, ILayerPlugin, ILogService, lazyInject, TYPES } from '@l7/core';
+import { inject, injectable } from 'inversify';
+
+/**
+ * 在初始化阶段完成属性的注册,以及首次根据 Layer 指定的三角化方法完成 indices 和 attribute 的创建
+ */
+@injectable()
+export default class UpdateStyleAttributePlugin implements ILayerPlugin {
+ @inject(TYPES.ILogService)
+ private readonly logger: ILogService;
+
+ public apply(layer: ILayer) {
+ layer.hooks.beforeRender.tap('UpdateStyleAttributePlugin', () => {
+ const attributes =
+ layer.styleAttributeService.getLayerStyleAttributes() || [];
+ attributes
+ .filter((attribute) => attribute.needRegenerateVertices)
+ .forEach((attribute) => {
+ // 精确更新某个/某些 feature(s),需要传入 featureIdx
+ layer.styleAttributeService.updateAttributeByFeatureRange(
+ attribute.name,
+ layer.getEncodedData(), // 获取经过 mapping 最新的数据
+ attribute.featureRange.startIndex,
+ attribute.featureRange.endIndex,
+ );
+ attribute.needRegenerateVertices = false;
+ this.logger.info(
+ `regenerate vertex attributes: ${attribute.name} finished`,
+ );
+ });
+ });
+ }
+}
diff --git a/packages/layers/src/plugins/__tests__/lighting.spec.ts b/packages/layers/src/plugins/__tests__/lighting.spec.ts
new file mode 100644
index 0000000000..31666feea6
--- /dev/null
+++ b/packages/layers/src/plugins/__tests__/lighting.spec.ts
@@ -0,0 +1,47 @@
+import 'reflect-metadata';
+import { generateLightingUniforms } from '../LightingPlugin';
+
+describe('LightingPlugin', () => {
+ it('should generate proper uniforms for a directional light', () => {
+ const lightsMap = generateLightingUniforms([
+ {
+ type: 'directional',
+ },
+ ]);
+
+ expect(lightsMap.u_NumOfDirectionalLights).toEqual(1);
+ expect(lightsMap.u_NumOfSpotLights).toEqual(0);
+ });
+
+ it('should generate proper uniforms for directional and spot lights', () => {
+ const lightsMap = generateLightingUniforms([
+ {
+ type: 'directional',
+ },
+ {
+ type: 'spot',
+ },
+ ]);
+
+ expect(lightsMap.u_NumOfDirectionalLights).toEqual(1);
+ expect(lightsMap.u_NumOfSpotLights).toEqual(1);
+ });
+
+ it('should generate proper uniforms for directional and spot lights', () => {
+ const lightsMap = generateLightingUniforms([
+ {
+ type: 'directional',
+ ambient: [1, 1, 1],
+ },
+ {
+ type: 'spot',
+ angle: 10,
+ },
+ ]);
+
+ expect(lightsMap.u_NumOfDirectionalLights).toEqual(1);
+ expect(lightsMap.u_NumOfSpotLights).toEqual(1);
+ expect(lightsMap.u_DirectionalLights[0].ambient).toEqual([1, 1, 1]);
+ expect(lightsMap.u_SpotLights[0].angle).toEqual(10);
+ });
+});
diff --git a/packages/layers/src/point/index.ts b/packages/layers/src/point/index.ts
new file mode 100644
index 0000000000..d2a556c092
--- /dev/null
+++ b/packages/layers/src/point/index.ts
@@ -0,0 +1,62 @@
+import { IEncodeFeature } from '@l7/core';
+import BaseLayer from '../core/BaseLayer';
+import PointModels, { PointType } from './models/index';
+interface IPointLayerStyleOptions {
+ opacity: number;
+ strokeWidth: number;
+ strokeColor: string;
+}
+export default class PointLayer extends BaseLayer {
+ public name: string = 'PointLayer';
+ protected getConfigSchema() {
+ return {
+ properties: {
+ opacity: {
+ type: 'number',
+ minimum: 0,
+ maximum: 1,
+ },
+ },
+ };
+ }
+ protected renderModels() {
+ this.models.forEach((model) =>
+ model.draw({
+ uniforms: this.layerModel.getUninforms(),
+ }),
+ );
+ return this;
+ }
+
+ protected buildModels() {
+ const modelType = this.getModelType();
+ this.layerModel = new PointModels[modelType](this);
+ this.models = this.layerModel.buildModels();
+ }
+
+ private getModelType(): PointType {
+ // pointlayer
+ // 2D、 3d、 shape、image、text、normal、
+ const layerData = this.getEncodedData();
+ const { shape2d, shape3d } = this.configService.getConfig();
+ const iconMap = this.iconService.getIconMap();
+ const item = layerData.find((fe: IEncodeFeature) => {
+ return fe.hasOwnProperty('shape');
+ });
+ if (!item) {
+ return 'normal';
+ } else {
+ const shape = item.shape;
+ if (shape2d?.indexOf(shape as string) !== -1) {
+ return 'fill';
+ }
+ if (shape3d?.indexOf(shape as string) !== -1) {
+ return 'extrude';
+ }
+ if (iconMap.hasOwnProperty(shape as string)) {
+ return 'image';
+ }
+ return 'text';
+ }
+ }
+}
diff --git a/packages/layers/src/point/models/extrude.ts b/packages/layers/src/point/models/extrude.ts
new file mode 100644
index 0000000000..d7a7a8e477
--- /dev/null
+++ b/packages/layers/src/point/models/extrude.ts
@@ -0,0 +1,124 @@
+import {
+ AttributeType,
+ gl,
+ IEncodeFeature,
+ ILayer,
+ ILayerModel,
+ IModel,
+} from '@l7/core';
+import BaseModel from '../../core/baseModel';
+import { PointExtrudeTriangulation } from '../../core/triangulation';
+import pointExtrudeVert from '../shaders/extrude3_vert.glsl';
+import pointExtrudeFrag from '../shaders/extrude_frag.glsl';
+interface IPointLayerStyleOptions {
+ opacity: number;
+}
+export default class ExtrudeModel extends BaseModel {
+ public getUninforms() {
+ const { opacity } = this.layer.getStyleOptions() as IPointLayerStyleOptions;
+ return {
+ u_opacity: opacity || 1.0,
+ };
+ }
+
+ public buildModels(): IModel[] {
+ return [
+ this.layer.buildLayerModel({
+ moduleName: 'pointExtrude2',
+ vertexShader: pointExtrudeVert,
+ fragmentShader: pointExtrudeFrag,
+ triangulation: PointExtrudeTriangulation,
+ blend: {
+ enable: true,
+ func: {
+ srcRGB: gl.SRC_ALPHA,
+ srcAlpha: 1,
+ dstRGB: gl.ONE_MINUS_SRC_ALPHA,
+ dstAlpha: 1,
+ },
+ },
+ }),
+ ];
+ }
+ protected registerBuiltinAttributes() {
+ // point layer size;
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'size',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Size',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 3,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ const { size } = feature;
+ if (size) {
+ let buffersize: number[] = [];
+ if (Array.isArray(size)) {
+ buffersize =
+ size.length === 2 ? [size[0], size[0], size[1]] : size;
+ }
+ if (!Array.isArray(size)) {
+ buffersize = [size];
+ }
+ return buffersize;
+ } else {
+ return [2, 2, 2];
+ }
+ },
+ },
+ });
+
+ // point layer size;
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'normal',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Normal',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.STATIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 3,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ normal: number[],
+ ) => {
+ return normal;
+ },
+ },
+ });
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'pos',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Pos',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 3,
+ update: (feature: IEncodeFeature, featureIdx: number) => {
+ const coordinates = feature.coordinates as number[];
+ return [coordinates[0], coordinates[1], 0];
+ },
+ },
+ });
+ }
+}
diff --git a/packages/layers/src/point/models/fill.ts b/packages/layers/src/point/models/fill.ts
new file mode 100644
index 0000000000..560a6dda18
--- /dev/null
+++ b/packages/layers/src/point/models/fill.ts
@@ -0,0 +1,130 @@
+import {
+ AttributeType,
+ gl,
+ IEncodeFeature,
+ ILayer,
+ ILayerModel,
+ ILayerPlugin,
+ ILogService,
+ IModel,
+ IModelUniform,
+ IStyleAttributeService,
+ lazyInject,
+ TYPES,
+} from '@l7/core';
+import BaseModel from '../../core/baseModel';
+import { PointFillTriangulation } from '../../core/triangulation';
+import { rgb2arr } from '../../utils/color';
+import pointFillFrag from '../shaders/fill_frag.glsl';
+import pointFillVert from '../shaders/fill_vert.glsl';
+interface IPointLayerStyleOptions {
+ opacity: number;
+ strokeWidth: number;
+ strokeColor: string;
+}
+export default class FillModel extends BaseModel {
+ public getUninforms(): IModelUniform {
+ const {
+ opacity = 1,
+ strokeColor = 'rgb(0,0,0,0)',
+ strokeWidth = 1,
+ } = this.layer.getStyleOptions() as IPointLayerStyleOptions;
+ return {
+ u_opacity: opacity,
+ u_stroke_width: strokeWidth,
+ u_stroke_color: rgb2arr(strokeColor),
+ };
+ }
+
+ public buildModels(): IModel[] {
+ return [
+ this.layer.buildLayerModel({
+ moduleName: 'pointfill',
+ vertexShader: pointFillVert,
+ fragmentShader: pointFillFrag,
+ triangulation: PointFillTriangulation,
+ depth: { enable: false },
+ }),
+ ];
+ }
+
+ protected registerBuiltinAttributes() {
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'extrude',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Extrude',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 2,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ const extrude = [-1, -1, 1, -1, 1, 1, -1, 1];
+ const extrudeIndex = (attributeIdx % 4) * 2;
+ return [extrude[extrudeIndex], extrude[extrudeIndex + 1]];
+ },
+ },
+ });
+
+ // point layer size;
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'size',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Size',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 1,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ const { size } = feature;
+ return Array.isArray(size) ? [size[0]] : [size as number];
+ },
+ },
+ });
+
+ // point layer size;
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'shape',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Shape',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 1,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ const { shape = 2 } = feature;
+ const shape2d = this.layer.configService.getConfig()
+ .shape2d as string[];
+ const shapeIndex = shape2d.indexOf(shape as string);
+ return [shapeIndex];
+ },
+ },
+ });
+ }
+}
diff --git a/packages/layers/src/point/models/image.ts b/packages/layers/src/point/models/image.ts
new file mode 100644
index 0000000000..0b15517b6d
--- /dev/null
+++ b/packages/layers/src/point/models/image.ts
@@ -0,0 +1,123 @@
+import {
+ AttributeType,
+ gl,
+ IEncodeFeature,
+ ILayer,
+ ILayerModel,
+ IModel,
+ IModelUniform,
+ ITexture2D,
+} from '@l7/core';
+
+import BaseModel from '../../core/baseModel';
+import { PointImageTriangulation } from '../../core/triangulation';
+import pointImageFrag from '../shaders/image_frag.glsl';
+import pointImageVert from '../shaders/image_vert.glsl';
+interface IPointLayerStyleOptions {
+ opacity: number;
+}
+
+export default class ImageModel extends BaseModel {
+ private texture: ITexture2D;
+
+ public getUninforms(): IModelUniform {
+ const { opacity } = this.layer.getStyleOptions() as IPointLayerStyleOptions;
+ return {
+ u_opacity: opacity || 1.0,
+ u_texture: this.texture,
+ u_textSize: [1024, this.iconService.canvasHeight || 128],
+ };
+ }
+
+ public buildModels(): IModel[] {
+ this.registerBuiltinAttributes();
+ this.updateTexture();
+ this.iconService.on('imageUpdate', () => {
+ this.updateTexture();
+ this.layer.render(); // TODO 调用全局render
+ });
+ return [
+ this.layer.buildLayerModel({
+ moduleName: 'pointImage',
+ vertexShader: pointImageVert,
+ fragmentShader: pointImageFrag,
+ triangulation: PointImageTriangulation,
+ primitive: gl.POINTS,
+ depth: { enable: false },
+ blend: {
+ enable: true,
+ func: {
+ srcRGB: gl.SRC_ALPHA,
+ srcAlpha: 1,
+ dstRGB: gl.ONE_MINUS_SRC_ALPHA,
+ dstAlpha: 1,
+ },
+ },
+ }),
+ ];
+ }
+
+ protected registerBuiltinAttributes() {
+ // point layer size;
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'size',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Size',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 1,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ const { size } = feature;
+ return Array.isArray(size) ? [size[0]] : [size as number];
+ },
+ },
+ });
+
+ // point layer size;
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'uv',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Uv',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 2,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ const iconMap = this.iconService.getIconMap();
+
+ const { shape } = feature;
+ const { x, y } = iconMap[shape as string] || { x: 0, y: 0 };
+ return [x, y];
+ },
+ },
+ });
+ }
+
+ private updateTexture() {
+ const { createTexture2D } = this.rendererService;
+ this.texture = createTexture2D({
+ data: this.iconService.getCanvas(),
+ width: 1024,
+ height: this.iconService.canvasHeight || 128,
+ });
+ }
+}
diff --git a/packages/layers/src/point/models/index.ts b/packages/layers/src/point/models/index.ts
new file mode 100644
index 0000000000..8dd5b347a6
--- /dev/null
+++ b/packages/layers/src/point/models/index.ts
@@ -0,0 +1,17 @@
+import { ILayerModel } from '@l7/core';
+import ExtrudeModel from './extrude';
+import FillModel from './fill';
+import IMageModel from './image';
+import NormalModel from './normal';
+
+export type PointType = 'fill' | 'image' | 'normal' | 'extrude' | 'text';
+
+const PointModels: { [key in PointType]: any } = {
+ fill: FillModel,
+ image: IMageModel,
+ normal: NormalModel,
+ extrude: ExtrudeModel,
+ text: null,
+};
+
+export default PointModels;
diff --git a/packages/layers/src/point/models/normal.ts b/packages/layers/src/point/models/normal.ts
new file mode 100644
index 0000000000..eedabe8b84
--- /dev/null
+++ b/packages/layers/src/point/models/normal.ts
@@ -0,0 +1,92 @@
+import {
+ AttributeType,
+ gl,
+ IEncodeFeature,
+ ILayer,
+ ILayerModel,
+ IModel,
+ IModelUniform,
+} from '@l7/core';
+
+import BaseModel from '../../core/baseModel';
+import { rgb2arr } from '../../utils/color';
+import normalFrag from '../shaders/normal_frag.glsl';
+import normalVert from '../shaders/normal_vert.glsl';
+
+interface IPointLayerStyleOptions {
+ opacity: number;
+ strokeWidth: number;
+ strokeColor: string;
+}
+export function PointTriangulation(feature: IEncodeFeature) {
+ const coordinates = feature.coordinates as number[];
+ return {
+ vertices: [...coordinates],
+ indices: [0],
+ size: coordinates.length,
+ };
+}
+
+export default class NormalModel extends BaseModel {
+ public getUninforms(): IModelUniform {
+ const {
+ opacity = 1,
+ strokeColor = 'rgb(0,0,0,0)',
+ strokeWidth = 1,
+ } = this.layer.getStyleOptions() as IPointLayerStyleOptions;
+ return {
+ u_opacity: opacity,
+ u_stroke_width: strokeWidth,
+ u_stroke_color: rgb2arr(strokeColor),
+ };
+ }
+
+ public buildModels(): IModel[] {
+ return [
+ this.layer.buildLayerModel({
+ moduleName: 'normalpoint',
+ vertexShader: normalVert,
+ fragmentShader: normalFrag,
+ triangulation: PointTriangulation,
+ depth: { enable: false },
+ primitive: gl.POINTS,
+ blend: {
+ enable: true,
+ func: {
+ srcRGB: gl.ONE,
+ srcAlpha: 1,
+ dstRGB: gl.ONE,
+ dstAlpha: 1,
+ },
+ },
+ }),
+ ];
+ }
+
+ protected registerBuiltinAttributes() {
+ // point layer size;
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'size',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Size',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 1,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ const { size } = feature;
+ return Array.isArray(size) ? [size[0]] : [size as number];
+ },
+ },
+ });
+ }
+}
diff --git a/packages/layers/src/point/models/text.ts b/packages/layers/src/point/models/text.ts
new file mode 100644
index 0000000000..e05be1db44
--- /dev/null
+++ b/packages/layers/src/point/models/text.ts
@@ -0,0 +1,26 @@
+import {
+ AttributeType,
+ gl,
+ IEncodeFeature,
+ ILayer,
+ ILayerModel,
+ IModel,
+ IModelUniform,
+} from '@l7/core';
+import BaseModel from '../../core/baseModel';
+import { PointExtrudeTriangulation } from '../core/triangulation';
+import pointExtrudeFrag from '../shaders/extrude_frag.glsl';
+import pointExtrudeVert from '../shaders/extrude_vert.glsl';
+
+export default class ExtrudeModel extends BaseModel {
+ public getUninforms(): IModelUniform {
+ throw new Error('Method not implemented.');
+ }
+
+ public buildModels(): IModel[] {
+ throw new Error('Method not implemented.');
+ }
+ protected registerBuiltinAttributes() {
+ throw new Error('Method not implemented.');
+ }
+}
diff --git a/packages/layers/src/point/shaders/extrude3_vert.glsl b/packages/layers/src/point/shaders/extrude3_vert.glsl
new file mode 100644
index 0000000000..2c76fdf178
--- /dev/null
+++ b/packages/layers/src/point/shaders/extrude3_vert.glsl
@@ -0,0 +1,33 @@
+precision highp float;
+
+#define ambientRatio 0.5
+#define diffuseRatio 0.3
+#define specularRatio 0.2
+
+attribute vec3 a_Position;
+attribute vec3 a_Pos;
+attribute vec4 a_Color;
+attribute vec3 a_Size;
+attribute vec3 a_Normal;
+
+uniform mat4 u_ModelMatrix;
+varying vec4 v_color;
+
+#pragma include "projection"
+
+#pragma include "light"
+
+void main() {
+ vec3 size = a_Size * a_Position;
+
+ vec2 offset = project_pixel(size.xy);
+
+ vec4 project_pos = project_position(vec4(a_Pos.xy, 0, 1.0));
+ vec4 pos = vec4(project_pos.xy + offset, project_pixel(size.z), 1.0);
+
+ float lightWeight = calc_lighting(pos);
+ v_color =vec4(a_Color.rgb * lightWeight, a_Color.w);
+
+ gl_Position = project_common_position_to_clipspace(pos);
+
+}
diff --git a/packages/layers/src/point/shaders/extrude_frag.glsl b/packages/layers/src/point/shaders/extrude_frag.glsl
new file mode 100644
index 0000000000..3f0cf17883
--- /dev/null
+++ b/packages/layers/src/point/shaders/extrude_frag.glsl
@@ -0,0 +1,6 @@
+varying vec4 v_color;
+uniform float u_opacity: 1.0;
+void main() {
+ gl_FragColor = v_color;
+ gl_FragColor.a *= u_opacity;
+}
diff --git a/packages/layers/src/point/shaders/extrude_vert.glsl b/packages/layers/src/point/shaders/extrude_vert.glsl
new file mode 100644
index 0000000000..8b5ba21f5c
--- /dev/null
+++ b/packages/layers/src/point/shaders/extrude_vert.glsl
@@ -0,0 +1,33 @@
+precision highp float;
+
+#define ambientRatio 0.5
+#define diffuseRatio 0.3
+#define specularRatio 0.2
+
+attribute vec3 a_Position;
+attribute vec3 a_Pos;
+attribute vec4 a_Color;
+attribute vec3 a_Size;
+attribute vec3 a_Normal;
+
+uniform mat4 u_ModelMatrix;
+varying vec4 v_color;
+
+#pragma include "projection"
+#pragma include "light"
+
+void main() {
+ vec3 size = a_Size * a_Position;
+
+ vec2 offset = project_pixel(size.xy);
+
+ vec4 project_pos = project_position(vec4(a_Pos.xy, 0, 1.0));
+ vec4 pos = vec4(project_pos.xy + offset, project_pixel(size.z), 1.0);
+
+// float lightWeight = calc_lighting(pos);
+
+ v_color =vec4(a_Color.rgb*lightWeight, a_Color.w);
+
+ gl_Position = project_common_position_to_clipspace(pos);
+
+}
diff --git a/packages/layers/src/point/shaders/fill_frag.glsl b/packages/layers/src/point/shaders/fill_frag.glsl
new file mode 100644
index 0000000000..01231d9527
--- /dev/null
+++ b/packages/layers/src/point/shaders/fill_frag.glsl
@@ -0,0 +1,66 @@
+uniform float u_blur : 0;
+uniform float u_opacity : 1;
+uniform float u_stroke_width : 1;
+uniform vec4 u_stroke_color : [0, 0, 0, 0];
+uniform float u_stroke_opacity : 1;
+
+varying vec4 v_data;
+varying vec4 v_color;
+varying float v_radius;
+
+#pragma include "sdf_2d"
+#pragma include "picking"
+
+void main() {
+ int shape = int(floor(v_data.w + 0.5));
+
+ lowp float antialiasblur = v_data.z;
+ float antialiased_blur = -max(u_blur, antialiasblur);
+ float r = v_radius / (v_radius + u_stroke_width);
+
+ float outer_df;
+ float inner_df;
+ // 'circle', 'triangle', 'square', 'pentagon', 'hexagon', 'octogon', 'hexagram', 'rhombus', 'vesica'
+ if (shape == 0) {
+ outer_df = sdCircle(v_data.xy, 1.0);
+ inner_df = sdCircle(v_data.xy, r);
+ } else if (shape == 1) {
+ outer_df = sdEquilateralTriangle(1.1 * v_data.xy);
+ inner_df = sdEquilateralTriangle(1.1 / r * v_data.xy);
+ } else if (shape == 2) {
+ outer_df = sdBox(v_data.xy, vec2(1.));
+ inner_df = sdBox(v_data.xy, vec2(r));
+ } else if (shape == 3) {
+ outer_df = sdPentagon(v_data.xy, 0.8);
+ inner_df = sdPentagon(v_data.xy, r * 0.8);
+ } else if (shape == 4) {
+ outer_df = sdHexagon(v_data.xy, 0.8);
+ inner_df = sdHexagon(v_data.xy, r * 0.8);
+ } else if (shape == 5) {
+ outer_df = sdOctogon(v_data.xy, 1.0);
+ inner_df = sdOctogon(v_data.xy, r);
+ } else if (shape == 6) {
+ outer_df = sdHexagram(v_data.xy, 0.52);
+ inner_df = sdHexagram(v_data.xy, r * 0.52);
+ } else if (shape == 7) {
+ outer_df = sdRhombus(v_data.xy, vec2(1.0));
+ inner_df = sdRhombus(v_data.xy, vec2(r));
+ } else if (shape == 8) {
+ outer_df = sdVesica(v_data.xy, 1.1, 0.8);
+ inner_df = sdVesica(v_data.xy, r * 1.1, r * 0.8);
+ }
+
+ float opacity_t = smoothstep(0.0, antialiased_blur, outer_df);
+ if(u_stroke_width <0.01 ) {
+ gl_FragColor = v_color * opacity_t;
+ return;
+ }
+ float color_t = u_stroke_width < 0.01 ? 0.0 : smoothstep(
+ antialiased_blur,
+ 0.0,
+ inner_df
+ );
+ vec4 strokeColor = u_stroke_color == vec4(0) ? v_color : u_stroke_color;
+
+ gl_FragColor = opacity_t * mix(vec4(v_color.rgb, v_color.a * u_opacity), strokeColor * u_stroke_opacity, color_t);
+}
diff --git a/packages/layers/src/point/shaders/fill_vert.glsl b/packages/layers/src/point/shaders/fill_vert.glsl
new file mode 100644
index 0000000000..af5cb17eb2
--- /dev/null
+++ b/packages/layers/src/point/shaders/fill_vert.glsl
@@ -0,0 +1,40 @@
+attribute vec4 a_Color;
+attribute vec3 a_Position;
+attribute vec2 a_Extrude;
+attribute float a_Size;
+attribute float a_Shape;
+uniform mat4 u_ModelMatrix;
+
+uniform float u_stroke_width : 2;
+
+varying vec4 v_data;
+varying vec4 v_color;
+varying float v_radius;
+
+#pragma include "projection"
+#pragma include "picking"
+
+void main() {
+ // unpack color(vec2)
+ v_color = a_Color;
+ vec2 extrude = a_Extrude;
+
+ float shape_type = a_Shape;
+
+ // radius(16-bit)
+ v_radius = a_Size;
+
+ vec2 offset = project_pixel(extrude * (a_Size + u_stroke_width));
+ vec4 project_pos = project_position(vec4(a_Position.xy, 0.0, 1.0));
+
+ // TODO: billboard
+ gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, 0.0, 1.0));
+
+ // anti-alias
+ float antialiasblur = 1.0 / (a_Size + u_stroke_width);
+
+ // construct point coords
+ v_data = vec4(extrude, antialiasblur, shape_type);
+
+ setPickingColor(a_PickingColor);
+}
diff --git a/packages/layers/src/point/shaders/image_frag.glsl b/packages/layers/src/point/shaders/image_frag.glsl
new file mode 100644
index 0000000000..58992a075f
--- /dev/null
+++ b/packages/layers/src/point/shaders/image_frag.glsl
@@ -0,0 +1,28 @@
+
+uniform sampler2D u_texture;
+varying vec4 v_color;
+varying vec2 v_uv;
+uniform vec2 u_textSize;
+uniform float u_stroke_width : 1;
+uniform vec4 u_stroke_color : [1, 1, 1, 1];
+uniform float u_stroke_opacity : 1;
+uniform float u_opacity : 1;
+
+varying float v_size;
+void main(){
+vec2 pos= v_uv / u_textSize + gl_PointCoord / u_textSize * 64.;
+vec2 fragmentPosition = 2.0*gl_PointCoord - 1.0;
+float distance = length(fragmentPosition);
+float distanceSqrd = distance * distance;
+float radius = 1.;
+float r = 1.0 - smoothstep(radius-(radius*0.01),
+ radius+(radius*0.01),
+ distanceSqrd);
+ vec4 textureColor=texture2D(u_texture,pos);
+ if(v_color == vec4(0.)){
+ gl_FragColor= vec4(textureColor.xyz, textureColor.w * r);
+ }else {
+ gl_FragColor= step(0.01, textureColor.x) * v_color;
+ }
+ return;
+}
diff --git a/packages/layers/src/point/shaders/image_vert.glsl b/packages/layers/src/point/shaders/image_vert.glsl
new file mode 100644
index 0000000000..7aa6a25aa7
--- /dev/null
+++ b/packages/layers/src/point/shaders/image_vert.glsl
@@ -0,0 +1,24 @@
+
+precision highp float;
+attribute vec3 a_Position;
+attribute vec4 a_Color;
+attribute vec2 a_Uv;
+attribute float a_Size;
+varying vec4 v_color;
+varying vec2 v_uv;
+uniform mat4 u_ModelMatrix;
+uniform float u_stroke_width : 1;
+varying float v_size;
+
+#pragma include "projection"
+
+void main() {
+ v_color = a_Color;
+ v_uv = a_Uv;
+ vec4 project_pos = project_position(vec4(a_Position, 1.0));
+ v_size = a_Size;
+
+ gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));
+ gl_PointSize = a_Size * 2.0 * u_DevicePixelRatio;
+
+}
diff --git a/packages/layers/src/point/shaders/normal_frag.glsl b/packages/layers/src/point/shaders/normal_frag.glsl
new file mode 100644
index 0000000000..4481c286f9
--- /dev/null
+++ b/packages/layers/src/point/shaders/normal_frag.glsl
@@ -0,0 +1,7 @@
+
+uniform float u_opacity : 1;
+varying vec4 v_color;
+void main() {
+ gl_FragColor = v_color;
+ gl_FragColor.a = u_opacity;
+}
diff --git a/packages/layers/src/point/shaders/normal_vert.glsl b/packages/layers/src/point/shaders/normal_vert.glsl
new file mode 100644
index 0000000000..819b78c30a
--- /dev/null
+++ b/packages/layers/src/point/shaders/normal_vert.glsl
@@ -0,0 +1,17 @@
+
+attribute vec3 a_Position;
+uniform mat4 u_ModelMatrix;
+attribute float a_Size;
+attribute vec4 a_Color;
+varying vec4 v_color;
+
+#pragma include "projection"
+
+void main() {
+
+ v_color = a_Color;
+ vec4 project_pos = project_position(vec4(a_Position, 1.0));
+ gl_Position = project_common_position_to_clipspace(project_pos);
+ gl_PointSize = a_Size * 2.0 * u_DevicePixelRatio;
+
+}
diff --git a/packages/layers/src/point/shaders/text_frag.glsl b/packages/layers/src/point/shaders/text_frag.glsl
new file mode 100644
index 0000000000..d3dfa93034
--- /dev/null
+++ b/packages/layers/src/point/shaders/text_frag.glsl
@@ -0,0 +1,27 @@
+uniform sampler2D u_sdf_map;
+uniform float u_gamma_scale : 0.5;
+uniform float u_font_size : 24;
+uniform float u_opacity : 1.0;
+uniform vec4 u_stroke : [0, 0, 0, 1];
+uniform float u_strokeWidth : 2.0;
+uniform float u_halo_blur : 0.5;
+
+varying vec4 v_color;
+varying vec2 v_uv;
+varying float v_gamma_scale;
+
+void main() {
+ // get sdf from atlas
+ float dist = texture2D(u_sdf_map, v_uv).a;
+
+ float fontScale = u_font_size / 24.0;
+
+ lowp float buff = (6.0 - u_strokeWidth / fontScale) / SDF_PX;
+ highp float gamma = (u_halo_blur * 1.19 / SDF_PX + EDGE_GAMMA) / (fontScale * u_gamma_scale);
+
+ highp float gamma_scaled = gamma * v_gamma_scale;
+
+ highp float alpha = smoothstep(buff - gamma_scaled, buff + gamma_scaled, dist);
+
+ gl_FragColor = mix(v_color * u_opacity, u_stroke, smoothstep(0., 0.5, 1. - dist)) * alpha;
+}
diff --git a/packages/layers/src/point/shaders/text_vert.glsl b/packages/layers/src/point/shaders/text_vert.glsl
new file mode 100644
index 0000000000..496a5180c2
--- /dev/null
+++ b/packages/layers/src/point/shaders/text_vert.glsl
@@ -0,0 +1,35 @@
+attribute vec3 a_Position;
+attribute vec2 a_tex;
+attribute vec2 a_offset;
+attribute vec4 a_color;
+attribute float a_size;
+
+uniform vec2 u_sdf_map_size;
+uniform vec2 u_viewport_size;
+
+uniform float u_activeId : 0;
+uniform vec4 u_activeColor : [1.0, 0.0, 0.0, 1.0];
+
+varying vec2 v_uv;
+varying float v_gamma_scale;
+varying vec4 v_color;
+
+#pragma include "projection"
+
+void main() {
+ v_color = a_color;
+ v_uv = a_tex / u_sdf_map_size;
+
+ // 文本缩放比例
+ float fontScale = a_size / 24.;
+
+ vec4 project_pos = project_position(vec4(a_Position, 1.0));
+
+ vec4 projected_position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));
+
+ gl_Position = vec4(projected_position.xy / projected_position.w
+ + a_offset * fontScale / u_viewport_size * 2., 0.0, 1.0);
+ v_gamma_scale = gl_Position.w;
+
+
+}
diff --git a/packages/layers/src/point/shape/Path.ts b/packages/layers/src/point/shape/Path.ts
new file mode 100644
index 0000000000..1e12eb5709
--- /dev/null
+++ b/packages/layers/src/point/shape/Path.ts
@@ -0,0 +1,65 @@
+type IPosition = [number, number, number];
+export type IPath = IPosition[];
+export enum ShapeType3D {
+ CYLINDER = 'cylinder',
+ SQUARECOLUMN = 'squareColumn',
+ TRIANGLECOLUMN = 'triangleColumn',
+ HEXAGONCOLUMN = 'hexagonColumn',
+ PENTAGONCOLUMN = 'pentagonColumn',
+}
+export enum ShapeType2D {
+ CIRCLE = 'circle',
+ SQUARE = 'square',
+ TRIANGLE = 'triangle',
+ HEXAGON = 'hexagon',
+ PENTAGON = 'pentagon',
+}
+
+/**
+ * 生成规则多边形顶点个数
+ * @param pointCount 顶点个数 3 => 三角形
+ * @param start 顶点起始角度 调整图形的方向
+ */
+export function polygonPath(pointCount: number, start: number = 0): IPath {
+ const step = (Math.PI * 2) / pointCount;
+ const line = [];
+ for (let i = 0; i < pointCount; i++) {
+ line.push(step * i + (start * Math.PI) / 12);
+ }
+ const path: IPath = line.map((t) => {
+ const x = Math.sin(t + Math.PI / 4);
+ const y = Math.cos(t + Math.PI / 4);
+ return [x, y, 0];
+ });
+ // path.push(path[0]);
+ return path;
+}
+
+export function circle(): IPath {
+ return polygonPath(30);
+}
+export function square(): IPath {
+ return polygonPath(4);
+}
+export function triangle(): IPath {
+ return polygonPath(3);
+}
+export function hexagon(): IPath {
+ return polygonPath(6);
+}
+export function pentagon(): IPath {
+ return polygonPath(5);
+}
+
+export const geometryShape = {
+ [ShapeType2D.CIRCLE]: circle,
+ [ShapeType2D.HEXAGON]: hexagon,
+ [ShapeType2D.TRIANGLE]: triangle,
+ [ShapeType2D.SQUARE]: square,
+ [ShapeType2D.PENTAGON]: pentagon,
+ [ShapeType3D.CYLINDER]: circle,
+ [ShapeType3D.HEXAGONCOLUMN]: hexagon,
+ [ShapeType3D.TRIANGLECOLUMN]: triangle,
+ [ShapeType3D.SQUARECOLUMN]: square,
+ [ShapeType3D.PENTAGONCOLUMN]: pentagon,
+};
diff --git a/packages/layers/src/point/shape/extrude.ts b/packages/layers/src/point/shape/extrude.ts
new file mode 100644
index 0000000000..717d585609
--- /dev/null
+++ b/packages/layers/src/point/shape/extrude.ts
@@ -0,0 +1,74 @@
+import earcut from 'earcut';
+import { IPath } from './Path';
+export interface IExtrudeGeomety {
+ positions: number[];
+ index: number[];
+}
+/**
+ * 拉伸多边形顶点,返回拉伸后的顶点信息
+ * @param paths 路径数据组
+ * @param extrude 是否拉伸
+ */
+export default function extrudePolygon(path: IPath[]): IExtrudeGeomety {
+ const p1 = path[0][0];
+ const p2 = path[0][path[0].length - 1];
+ if (p1[0] === p2[0] && p1[1] === p2[1]) {
+ path[0] = path[0].slice(0, path[0].length - 1);
+ }
+ const n = path[0].length;
+ const flattengeo = earcut.flatten(path);
+ const positions = [];
+ const indexArray = [];
+ const normals = [];
+ // 设置顶部z值
+ for (let j = 0; j < flattengeo.vertices.length / 3; j++) {
+ flattengeo.vertices[j * 3 + 2] = 1;
+ normals.push(0, 0, 1);
+ }
+ positions.push(...flattengeo.vertices);
+ const triangles = earcut(
+ flattengeo.vertices,
+ flattengeo.holes,
+ flattengeo.dimensions,
+ );
+ indexArray.push(...triangles);
+ for (let i = 0; i < n; i++) {
+ const prePoint = flattengeo.vertices.slice(i * 3, i * 3 + 3);
+ let nextPoint = flattengeo.vertices.slice(i * 3 + 3, i * 3 + 6);
+ if (nextPoint.length === 0) {
+ nextPoint = flattengeo.vertices.slice(0, 3);
+ }
+ const indexOffset = positions.length / 3;
+ positions.push(
+ prePoint[0],
+ prePoint[1],
+ 1,
+ nextPoint[0],
+ nextPoint[1],
+ 1,
+ prePoint[0],
+ prePoint[1],
+ 0,
+ nextPoint[0],
+ nextPoint[1],
+ 0,
+ );
+ indexArray.push(...[1, 2, 0, 3, 2, 1].map((v) => v + indexOffset));
+ }
+ return {
+ positions,
+ index: indexArray,
+ };
+}
+export function fillPolygon(points: IPath[]) {
+ const flattengeo = earcut.flatten(points);
+ const triangles = earcut(
+ flattengeo.vertices,
+ flattengeo.holes,
+ flattengeo.dimensions,
+ );
+ return {
+ positions: flattengeo.vertices,
+ index: triangles,
+ };
+}
diff --git a/packages/layers/src/point/text.ts b/packages/layers/src/point/text.ts
new file mode 100644
index 0000000000..9ee0a9c28d
--- /dev/null
+++ b/packages/layers/src/point/text.ts
@@ -0,0 +1,188 @@
+import {
+ AttributeType,
+ gl,
+ IEncodeFeature,
+ IFontOptions,
+ ILayer,
+ ILayerPlugin,
+ ILogService,
+ IStyleAttributeService,
+ lazyInject,
+ TYPES,
+} from '@l7/core';
+import BaseLayer from '../core/BaseLayer';
+import { getGlyphQuads, shapeText } from '../utils/symbol-layout';
+import textFrag from './shaders/text_frag.glsl';
+import textVert from './shaders/text_vert.glsl';
+interface IPointTextLayerStyleOptions {
+ opacity: number;
+ textAnchor: string;
+ textOffset: [number, number];
+ spacing: number;
+ padding: [number, number];
+ stroke: string;
+ strokeWidth: number;
+ strokeOpacity: number;
+ fontWeight: string;
+ fontFamily: string;
+
+ textAllowOverlap: boolean;
+}
+export function PointTriangulation(feature: IEncodeFeature) {
+ const coordinates = feature.coordinates as number[];
+ return {
+ vertices: [...coordinates, ...coordinates, ...coordinates, ...coordinates],
+ indices: [0, 1, 2, 2, 3, 0],
+ size: coordinates.length,
+ };
+}
+export default class TextLayer extends BaseLayer {
+ public name: string = 'PointLayer';
+
+ protected getConfigSchema() {
+ return {
+ properties: {
+ opacity: {
+ type: 'number',
+ minimum: 0,
+ maximum: 1,
+ },
+ },
+ };
+ }
+
+ protected renderModels() {
+ const { opacity } = this.getStyleOptions();
+ this.models.forEach((model) =>
+ model.draw({
+ uniforms: {
+ u_opacity: opacity || 1.0,
+ },
+ }),
+ );
+ return this;
+ }
+
+ protected buildModels() {
+ this.registerBuiltinAttributes(this);
+ this.models = [
+ this.buildLayerModel({
+ moduleName: 'pointText',
+ vertexShader: textVert,
+ fragmentShader: textFrag,
+ triangulation: PointTriangulation,
+ depth: { enable: false },
+ blend: {
+ enable: true,
+ func: {
+ srcRGB: gl.SRC_ALPHA,
+ srcAlpha: 1,
+ dstRGB: gl.ONE_MINUS_SRC_ALPHA,
+ dstAlpha: 1,
+ },
+ },
+ }),
+ ];
+ }
+
+ private registerBuiltinAttributes(layer: ILayer) {
+ layer.styleAttributeService.registerStyleAttribute({
+ name: 'textOffsets',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_textOffsets',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.STATIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 2,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ const extrude = [-1, -1, 1, -1, 1, 1, -1, 1];
+ const extrudeIndex = (attributeIdx % 4) * 2;
+ return [extrude[extrudeIndex], extrude[extrudeIndex + 1]];
+ },
+ },
+ });
+
+ // point layer size;
+ layer.styleAttributeService.registerStyleAttribute({
+ name: 'size',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Size',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 1,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ const { size } = feature;
+ return Array.isArray(size) ? [size[0]] : [size as number];
+ },
+ },
+ });
+
+ // point layer size;
+ layer.styleAttributeService.registerStyleAttribute({
+ name: 'shape',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Shape',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 1,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ const { shape = 2 } = feature;
+ const shape2d = layer.configService.getConfig().shape2d as string[];
+ const shapeIndex = shape2d.indexOf(shape as string);
+ return [shapeIndex];
+ },
+ },
+ });
+ }
+
+ private initTextFont() {
+ const { fontWeight = 'normal', fontFamily } = this.getStyleOptions();
+ const data = this.getEncodedData();
+ const characterSet: string[] = [];
+ data.forEach((item: IEncodeFeature) => {
+ let { shape = '' } = item;
+ shape = shape.toString();
+ for (const char of shape) {
+ // 去重
+ if (characterSet.indexOf(char) === -1) {
+ characterSet.push(char);
+ }
+ }
+ });
+
+ this.fontService.setFontOptions({
+ characterSet,
+ fontWeight,
+ fontFamily,
+ });
+ }
+}
diff --git a/packages/layers/src/polygon/__tests__/polygonTriangulation.spec.ts b/packages/layers/src/polygon/__tests__/polygonTriangulation.spec.ts
new file mode 100644
index 0000000000..d69c058c28
--- /dev/null
+++ b/packages/layers/src/polygon/__tests__/polygonTriangulation.spec.ts
@@ -0,0 +1,23 @@
+import { IEncodeFeature } from '@l7/core';
+import { polygonTriangulation } from '../../core/triangulation';
+
+describe('PolygonTriangulation', () => {
+ it('should do triangulation with a polygon correctly', () => {
+ const mockFeature: IEncodeFeature = {
+ coordinates: [
+ [
+ [0, 0],
+ [1, 0],
+ [1, 1],
+ [0, 1],
+ ],
+ ],
+ color: [1, 0, 0, 0],
+ };
+ const { indices, vertices, size } = polygonTriangulation(mockFeature);
+
+ expect(indices).toEqual([2, 3, 0, 0, 1, 2]);
+ expect(vertices).toEqual([0, 0, 1, 0, 1, 1, 0, 1]);
+ expect(size).toEqual(2);
+ });
+});
diff --git a/packages/layers/src/polygon/index.ts b/packages/layers/src/polygon/index.ts
new file mode 100644
index 0000000000..52e663069b
--- /dev/null
+++ b/packages/layers/src/polygon/index.ts
@@ -0,0 +1,46 @@
+import { IEncodeFeature } from '@l7/core';
+import BaseLayer from '../core/BaseLayer';
+import PolygonModels, { PolygonModelType } from './models/';
+
+interface IPolygonLayerStyleOptions {
+ opacity: number;
+}
+
+export default class PolygonLayer extends BaseLayer {
+ public name: string = 'PolygonLayer';
+
+ protected getConfigSchema() {
+ return {
+ properties: {
+ opacity: {
+ type: 'number',
+ minimum: 0,
+ maximum: 1,
+ },
+ },
+ };
+ }
+
+ protected renderModels() {
+ this.models.forEach((model) =>
+ model.draw({
+ uniforms: this.layerModel.getUninforms(),
+ }),
+ );
+ return this;
+ }
+
+ protected buildModels() {
+ const shape = this.getModelType();
+ this.layerModel = new PolygonModels[shape](this);
+ this.models = this.layerModel.buildModels();
+ }
+
+ private getModelType(): PolygonModelType {
+ const shapeAttribute = this.styleAttributeService.getLayerStyleAttribute(
+ 'shape',
+ );
+ const shape = shapeAttribute?.scale?.field as PolygonModelType;
+ return shape || 'fill';
+ }
+}
diff --git a/packages/layers/src/polygon/models/extrude.ts b/packages/layers/src/polygon/models/extrude.ts
new file mode 100644
index 0000000000..ac4dafc960
--- /dev/null
+++ b/packages/layers/src/polygon/models/extrude.ts
@@ -0,0 +1,92 @@
+import {
+ AttributeType,
+ gl,
+ IEncodeFeature,
+ ILayer,
+ ILayerModel,
+ ILayerPlugin,
+ ILogService,
+ IModel,
+ IStyleAttributeService,
+ lazyInject,
+ TYPES,
+} from '@l7/core';
+import BaseModel from '../../core/baseModel';
+import { PolygonExtrudeTriangulation } from '../../core/triangulation';
+import polygonExtrudeFrag from '../shaders/polygon_extrude_frag.glsl';
+import polygonExtrudeVert from '../shaders/polygon_extrude_vert.glsl';
+interface IPolygonLayerStyleOptions {
+ opacity: number;
+}
+export default class ExtrudeModel extends BaseModel {
+ public getUninforms() {
+ const {
+ opacity = 1,
+ } = this.layer.getStyleOptions() as IPolygonLayerStyleOptions;
+ return {
+ u_opacity: opacity,
+ };
+ }
+
+ public buildModels(): IModel[] {
+ return [
+ this.layer.buildLayerModel({
+ moduleName: 'polygonExtrude',
+ vertexShader: polygonExtrudeVert,
+ fragmentShader: polygonExtrudeFrag,
+ triangulation: PolygonExtrudeTriangulation,
+ }),
+ ];
+ }
+
+ protected registerBuiltinAttributes() {
+ // point layer size;
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'normal',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Normal',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.STATIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 3,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ normal: number[],
+ ) => {
+ return normal;
+ },
+ },
+ });
+
+ this.layer.styleAttributeService.registerStyleAttribute({
+ name: 'size',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Size',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 1,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ const { size } = feature;
+ return Array.isArray(size) ? [size[0]] : [size as number];
+ },
+ },
+ });
+ }
+}
diff --git a/packages/layers/src/polygon/models/fill.ts b/packages/layers/src/polygon/models/fill.ts
new file mode 100644
index 0000000000..26c88f60aa
--- /dev/null
+++ b/packages/layers/src/polygon/models/fill.ts
@@ -0,0 +1,47 @@
+import {
+ AttributeType,
+ gl,
+ IEncodeFeature,
+ ILayer,
+ ILayerModel,
+ ILayerPlugin,
+ ILogService,
+ IModel,
+ IStyleAttributeService,
+ lazyInject,
+ TYPES,
+} from '@l7/core';
+import BaseModel from '../../core/baseModel';
+import { polygonTriangulation } from '../../core/triangulation';
+import polygon_frag from '../shaders/polygon_frag.glsl';
+import polygon_vert from '../shaders/polygon_vert.glsl';
+
+interface IPolygonLayerStyleOptions {
+ opacity: number;
+}
+export default class FillModel extends BaseModel {
+ public getUninforms() {
+ const {
+ opacity = 1,
+ } = this.layer.getStyleOptions() as IPolygonLayerStyleOptions;
+ return {
+ u_opacity: opacity,
+ };
+ }
+
+ public buildModels(): IModel[] {
+ return [
+ this.layer.buildLayerModel({
+ moduleName: 'polygon',
+ vertexShader: polygon_vert,
+ fragmentShader: polygon_frag,
+ triangulation: polygonTriangulation,
+ depth: { enable: false },
+ }),
+ ];
+ }
+
+ protected registerBuiltinAttributes() {
+ // point layer size;
+ }
+}
diff --git a/packages/layers/src/polygon/models/index.ts b/packages/layers/src/polygon/models/index.ts
new file mode 100644
index 0000000000..dd27c23e3c
--- /dev/null
+++ b/packages/layers/src/polygon/models/index.ts
@@ -0,0 +1,13 @@
+import LineModel from '../../line/models/line';
+import ExtrudeModel from './extrude';
+import FillModel from './fill';
+
+export type PolygonModelType = 'fill' | 'extrude' | 'line';
+
+const PolygonModels: { [key in PolygonModelType]: any } = {
+ fill: FillModel,
+ line: LineModel,
+ extrude: ExtrudeModel,
+};
+
+export default PolygonModels;
diff --git a/packages/layers/src/polygon/shaders/polygon_extrude_frag.glsl b/packages/layers/src/polygon/shaders/polygon_extrude_frag.glsl
new file mode 100644
index 0000000000..6a07a19084
--- /dev/null
+++ b/packages/layers/src/polygon/shaders/polygon_extrude_frag.glsl
@@ -0,0 +1,10 @@
+uniform float u_opacity: 1.0;
+varying vec4 v_Color;
+
+#pragma include "picking"
+
+void main() {
+ gl_FragColor = v_Color;
+ gl_FragColor.a *= u_opacity;
+ gl_FragColor = filterColor(gl_FragColor);
+}
diff --git a/packages/layers/src/polygon/shaders/polygon_extrude_vert.glsl b/packages/layers/src/polygon/shaders/polygon_extrude_vert.glsl
new file mode 100644
index 0000000000..c06be96eb0
--- /dev/null
+++ b/packages/layers/src/polygon/shaders/polygon_extrude_vert.glsl
@@ -0,0 +1,46 @@
+precision highp float;
+
+#define ambientRatio 0.5
+#define diffuseRatio 0.3
+#define specularRatio 0.2
+
+attribute vec4 a_Color;
+attribute vec3 a_Position;
+attribute vec3 a_Normal;
+attribute float a_Size;
+uniform mat4 u_ModelMatrix;
+
+varying vec4 v_Color;
+
+#pragma include "projection"
+#pragma include "picking"
+
+void main() {
+ vec4 project_pos = project_position(vec4(a_Position.xy, project_pixel(a_Position.z * a_Size), 1.0));
+
+ gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));
+
+ vec3 worldPos = vec3(project_pos * u_ModelMatrix);
+
+ vec3 worldNormal = vec3(vec4(a_Normal,1.0) * u_ModelMatrix);
+// vec3 worldNormal = project_normal(a_Normal);
+ // //cal light weight
+ vec3 viewDir = normalize(u_CameraPosition - worldPos);
+
+ vec3 lightDir = normalize(vec3(1, -10.5, 12));
+
+ vec3 halfDir = normalize(viewDir+lightDir);
+ // //lambert
+ float lambert = dot(worldNormal, lightDir);
+ //specular
+ float specular = pow( max(0.0, dot(worldNormal, halfDir)), 16.0);
+ //sum to light weight
+ float lightWeight = ambientRatio + diffuseRatio * lambert + specularRatio * specular;
+ // v_Color = a_Color;
+ v_Color =vec4(a_Color.rgb * lightWeight, a_Color.w);
+
+
+
+ setPickingColor(a_PickingColor);
+}
+
diff --git a/packages/layers/src/polygon/shaders/polygon_frag.glsl b/packages/layers/src/polygon/shaders/polygon_frag.glsl
new file mode 100644
index 0000000000..6a07a19084
--- /dev/null
+++ b/packages/layers/src/polygon/shaders/polygon_frag.glsl
@@ -0,0 +1,10 @@
+uniform float u_opacity: 1.0;
+varying vec4 v_Color;
+
+#pragma include "picking"
+
+void main() {
+ gl_FragColor = v_Color;
+ gl_FragColor.a *= u_opacity;
+ gl_FragColor = filterColor(gl_FragColor);
+}
diff --git a/packages/layers/src/polygon/shaders/polygon_vert.glsl b/packages/layers/src/polygon/shaders/polygon_vert.glsl
new file mode 100644
index 0000000000..8f83442e9c
--- /dev/null
+++ b/packages/layers/src/polygon/shaders/polygon_vert.glsl
@@ -0,0 +1,19 @@
+attribute vec4 a_Color;
+attribute vec3 a_Position;
+attribute vec3 a_Normal;
+attribute float a_Size;
+uniform mat4 u_ModelMatrix;
+
+varying vec4 v_Color;
+
+#pragma include "projection"
+#pragma include "picking"
+
+void main() {
+ v_Color = a_Color;
+ vec4 project_pos = project_position(vec4(a_Position, 1.0));
+ gl_Position = project_common_position_to_clipspace(vec4(project_pos.xyz, 1.0));
+
+ setPickingColor(a_PickingColor);
+}
+
diff --git a/packages/layers/src/raster/buffers/triangulation.ts b/packages/layers/src/raster/buffers/triangulation.ts
new file mode 100644
index 0000000000..be96cf697b
--- /dev/null
+++ b/packages/layers/src/raster/buffers/triangulation.ts
@@ -0,0 +1,22 @@
+import { IEncodeFeature, IParseDataItem } from '@l7/core';
+// @ts-ignore
+import Martini from '@mapbox/martini';
+export function RasterTriangulation(parserData: IParseDataItem) {
+ const { coordinates, data, min, max, width, height } = parserData;
+ const maxlength = Math.max(width, height);
+ const gridSize = Math.pow(2, Math.ceil(Math.log2(maxlength))) + 1;
+ const terrain = new Float32Array(gridSize * gridSize);
+ for (let i = 0; i < width; i++) {
+ for (let j = 0; j < height; j++) {
+ terrain[i * gridSize + j] = data[i * width + j];
+ }
+ }
+ const martini = new Martini(gridSize);
+ const tile = martini.createTile(terrain);
+ const mesh = tile.getMesh(gridSize / 2);
+ return {
+ vertices: Array.from(mesh.vertices) as number[],
+ indices: Array.from(mesh.triangles) as number[],
+ size: 2,
+ };
+}
diff --git a/packages/layers/src/raster/image.ts b/packages/layers/src/raster/image.ts
new file mode 100644
index 0000000000..2c8e24b440
--- /dev/null
+++ b/packages/layers/src/raster/image.ts
@@ -0,0 +1,111 @@
+import {
+ AttributeType,
+ gl,
+ IEncodeFeature,
+ ILayer,
+ ILayerPlugin,
+ ILogService,
+ IStyleAttributeService,
+ ITexture2D,
+ lazyInject,
+ TYPES,
+} from '@l7/core';
+import BaseLayer from '../core/BaseLayer';
+import { RasterImageTriangulation } from '../core/triangulation';
+import rasterImageFrag from './shaders/image_frag.glsl';
+import rasterImageVert from './shaders/image_vert.glsl';
+interface IPointLayerStyleOptions {
+ opacity: number;
+}
+
+export default class ImageLayer extends BaseLayer {
+ public name: string = 'ImageLayer';
+ protected texture: ITexture2D;
+
+ protected getConfigSchema() {
+ return {
+ properties: {
+ opacity: {
+ type: 'number',
+ minimum: 0,
+ maximum: 1,
+ },
+ },
+ };
+ }
+
+ protected renderModels() {
+ const { opacity } = this.getStyleOptions();
+ if (this.texture) {
+ this.models.forEach((model) =>
+ model.draw({
+ uniforms: {
+ u_opacity: opacity || 1,
+ u_texture: this.texture,
+ },
+ }),
+ );
+ }
+
+ return this;
+ }
+
+ protected buildModels() {
+ this.registerBuiltinAttributes(this);
+ const source = this.getSource();
+ const { createTexture2D } = this.rendererService;
+ source.data.images.then((imageData: HTMLImageElement[]) => {
+ this.texture = createTexture2D({
+ data: imageData[0],
+ width: imageData[0].width,
+ height: imageData[0].height,
+ });
+ this.renderModels();
+ });
+ this.models = [
+ this.buildLayerModel({
+ moduleName: 'RasterImage',
+ vertexShader: rasterImageVert,
+ fragmentShader: rasterImageFrag,
+ triangulation: RasterImageTriangulation,
+ primitive: gl.TRIANGLES,
+ depth: { enable: false },
+ blend: {
+ enable: true,
+ func: {
+ srcRGB: gl.SRC_ALPHA,
+ srcAlpha: 1,
+ dstRGB: gl.ONE_MINUS_SRC_ALPHA,
+ dstAlpha: 1,
+ },
+ },
+ }),
+ ];
+ }
+
+ private registerBuiltinAttributes(layer: ILayer) {
+ // point layer size;
+ layer.styleAttributeService.registerStyleAttribute({
+ name: 'uv',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Uv',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 2,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ return [vertex[3], vertex[4]];
+ },
+ },
+ });
+ }
+}
diff --git a/packages/layers/src/raster/raster.ts b/packages/layers/src/raster/raster.ts
new file mode 100644
index 0000000000..6df660f36c
--- /dev/null
+++ b/packages/layers/src/raster/raster.ts
@@ -0,0 +1,131 @@
+import {
+ AttributeType,
+ gl,
+ IEncodeFeature,
+ ILayer,
+ ILayerPlugin,
+ ILogService,
+ IRasterParserDataItem,
+ IStyleAttributeService,
+ ITexture2D,
+ lazyInject,
+ TYPES,
+} from '@l7/core';
+import BaseLayer from '../core/BaseLayer';
+import { generateColorRamp, IColorRamp } from '../utils/color';
+import { RasterTriangulation } from './buffers/triangulation';
+import rasterFrag from './shaders/raster_frag.glsl';
+import rasterVert from './shaders/raster_vert.glsl';
+interface IRasterLayerStyleOptions {
+ opacity: number;
+ min: number;
+ max: number;
+ extent: [number, number, number, number];
+ rampColors: IColorRamp;
+ heightRatio: number;
+}
+
+export default class RasterLayer extends BaseLayer {
+ public name: string = 'e';
+ protected texture: ITexture2D;
+ protected colorTexture: ITexture2D;
+
+ protected getConfigSchema() {
+ return {
+ properties: {
+ opacity: {
+ type: 'number',
+ minimum: 0,
+ maximum: 1,
+ },
+ },
+ };
+ }
+
+ protected renderModels() {
+ const { opacity, heightRatio = 10 } = this.getStyleOptions();
+ const parserDataItem = this.getSource().data.dataArray[0];
+ const { coordinates, width, height, min, max } = parserDataItem;
+ this.models.forEach((model) =>
+ model.draw({
+ uniforms: {
+ u_opacity: opacity || 1,
+ u_texture: this.texture,
+ u_min: min,
+ u_width: width,
+ u_height: height,
+ u_max: max,
+ u_heightRatio: heightRatio,
+ u_colorTexture: this.colorTexture,
+ u_extent: [...coordinates[0], ...coordinates[1]],
+ },
+ }),
+ );
+
+ return this;
+ }
+
+ protected buildModels() {
+ const parserDataItem = this.getSource().data.dataArray[0];
+ const { createTexture2D } = this.rendererService;
+ this.texture = createTexture2D({
+ data: parserDataItem.data,
+ width: parserDataItem.width,
+ height: parserDataItem.height,
+ format: gl.LUMINANCE,
+ type: gl.FLOAT,
+ aniso: 4,
+ });
+ const { rampColors } = this.getStyleOptions();
+ const imageData = generateColorRamp(rampColors as IColorRamp);
+ this.colorTexture = createTexture2D({
+ data: imageData.data,
+ width: imageData.width,
+ height: imageData.height,
+ flipY: true,
+ });
+ this.models = [this.buildRasterModel()];
+ }
+ private buildRasterModel() {
+ const source = this.getSource();
+ const sourceFeature = source.data.dataArray[0];
+ const triangulation = RasterTriangulation(sourceFeature);
+ this.shaderModuleService.registerModule('raster', {
+ vs: rasterVert,
+ fs: rasterFrag,
+ });
+
+ const { vs, fs, uniforms } = this.shaderModuleService.getModule('raster');
+ const {
+ createAttribute,
+ createElements,
+ createBuffer,
+ createModel,
+ } = this.rendererService;
+ return createModel({
+ vs,
+ fs,
+ attributes: {
+ a_Position: createAttribute({
+ buffer: createBuffer({
+ data: triangulation.vertices,
+ type: gl.FLOAT,
+ }),
+ size: 2,
+ }),
+ },
+ primitive: gl.TRIANGLES,
+ uniforms: {
+ ...uniforms,
+ },
+ depth: {
+ enable: true,
+ },
+ elements: createElements({
+ data: triangulation.indices,
+ type: gl.UNSIGNED_INT,
+ count: triangulation.indices.length,
+ }),
+ });
+ }
+}
diff --git a/packages/layers/src/raster/raster2d.ts b/packages/layers/src/raster/raster2d.ts
new file mode 100644
index 0000000000..c805aadbfe
--- /dev/null
+++ b/packages/layers/src/raster/raster2d.ts
@@ -0,0 +1,125 @@
+import {
+ AttributeType,
+ gl,
+ IEncodeFeature,
+ ILayer,
+ ITexture2D,
+} from '@l7/core';
+import BaseLayer from '../core/BaseLayer';
+import { RasterImageTriangulation } from '../core/triangulation';
+import { generateColorRamp, IColorRamp } from '../utils/color';
+import rasterImageFrag from './shaders/raster_2d_frag.glsl';
+import rasterImageVert from './shaders/raster_2d_vert.glsl';
+interface IRasterLayerStyleOptions {
+ opacity: number;
+ min: number;
+ max: number;
+ rampColors: IColorRamp;
+}
+
+export default class Raster2dLayer extends BaseLayer {
+ public name: string = 'RasterLayer';
+ protected texture: ITexture2D;
+ protected colorTexture: ITexture2D;
+
+ protected getConfigSchema() {
+ return {
+ properties: {
+ opacity: {
+ type: 'number',
+ minimum: 0,
+ maximum: 1,
+ },
+ },
+ };
+ }
+
+ protected renderModels() {
+ const { opacity } = this.getStyleOptions();
+ const parserDataItem = this.getSource().data.dataArray[0];
+ const { min, max } = parserDataItem;
+ if (this.texture) {
+ this.models.forEach((model) =>
+ model.draw({
+ uniforms: {
+ u_opacity: opacity || 1,
+ u_texture: this.texture,
+ u_min: min,
+ u_max: max,
+ u_colorTexture: this.colorTexture,
+ },
+ }),
+ );
+ }
+
+ return this;
+ }
+
+ protected buildModels() {
+ this.registerBuiltinAttributes(this);
+ const source = this.getSource();
+ const { createTexture2D } = this.rendererService;
+ const parserDataItem = this.getSource().data.dataArray[0];
+ this.texture = createTexture2D({
+ data: parserDataItem.data,
+ width: parserDataItem.width,
+ height: parserDataItem.height,
+ format: gl.LUMINANCE,
+ type: gl.FLOAT,
+ aniso: 4,
+ });
+ const { rampColors } = this.getStyleOptions();
+ const imageData = generateColorRamp(rampColors as IColorRamp);
+ this.colorTexture = createTexture2D({
+ data: imageData.data,
+ width: imageData.width,
+ height: imageData.height,
+ flipY: true,
+ });
+ this.models = [
+ this.buildLayerModel({
+ moduleName: 'Raster3DImage',
+ vertexShader: rasterImageVert,
+ fragmentShader: rasterImageFrag,
+ triangulation: RasterImageTriangulation,
+ primitive: gl.TRIANGLES,
+ depth: { enable: false },
+ blend: {
+ enable: true,
+ func: {
+ srcRGB: gl.SRC_ALPHA,
+ srcAlpha: 1,
+ dstRGB: gl.ONE_MINUS_SRC_ALPHA,
+ dstAlpha: 1,
+ },
+ },
+ }),
+ ];
+ }
+
+ private registerBuiltinAttributes(layer: ILayer) {
+ // point layer size;
+ layer.styleAttributeService.registerStyleAttribute({
+ name: 'uv',
+ type: AttributeType.Attribute,
+ descriptor: {
+ name: 'a_Uv',
+ buffer: {
+ // give the WebGL driver a hint that this buffer may change
+ usage: gl.DYNAMIC_DRAW,
+ data: [],
+ type: gl.FLOAT,
+ },
+ size: 2,
+ update: (
+ feature: IEncodeFeature,
+ featureIdx: number,
+ vertex: number[],
+ attributeIdx: number,
+ ) => {
+ return [vertex[3], vertex[4]];
+ },
+ },
+ });
+ }
+}
diff --git a/packages/layers/src/raster/shaders/image_frag.glsl b/packages/layers/src/raster/shaders/image_frag.glsl
new file mode 100644
index 0000000000..91901e16b2
--- /dev/null
+++ b/packages/layers/src/raster/shaders/image_frag.glsl
@@ -0,0 +1,8 @@
+precision mediump float;
+uniform float u_opacity: 1.0;
+uniform sampler2D u_texture;
+varying vec2 v_texCoord;
+void main() {
+ vec4 color = texture2D(u_texture,vec2(v_texCoord.x,v_texCoord.y));
+ gl_FragColor = color;
+}
diff --git a/packages/layers/src/raster/shaders/image_vert.glsl b/packages/layers/src/raster/shaders/image_vert.glsl
new file mode 100644
index 0000000000..0d317c7e3f
--- /dev/null
+++ b/packages/layers/src/raster/shaders/image_vert.glsl
@@ -0,0 +1,11 @@
+precision highp float;
+uniform mat4 u_ModelMatrix;
+attribute vec3 a_Position;
+attribute vec2 a_Uv;
+varying vec2 v_texCoord;
+#pragma include "projection"
+void main() {
+ v_texCoord = a_Uv;
+ vec4 project_pos = project_position(vec4(a_Position, 1.0));
+ gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy,0., 1.0));
+}
diff --git a/packages/layers/src/raster/shaders/raster_2d_frag.glsl b/packages/layers/src/raster/shaders/raster_2d_frag.glsl
new file mode 100644
index 0000000000..b2be740612
--- /dev/null
+++ b/packages/layers/src/raster/shaders/raster_2d_frag.glsl
@@ -0,0 +1,18 @@
+precision mediump float;
+uniform float u_opacity: 1.0;
+uniform sampler2D u_texture;
+uniform sampler2D u_colorTexture;
+uniform float u_min;
+uniform float u_max;
+varying vec2 v_texCoord;
+
+void main() {
+
+ float value = texture2D(u_texture,vec2(v_texCoord.x,v_texCoord.y)).a;
+ value = clamp(value,u_min,u_max);
+ float value1 = (value - u_min) / (u_max -u_min);
+ vec2 ramp_pos = vec2(
+ fract(16.0 * (1.0 - value1)),
+ floor(16.0 * (1.0 - value1)) / 16.0);
+ gl_FragColor = texture2D(u_colorTexture,ramp_pos);;
+}
diff --git a/packages/layers/src/raster/shaders/raster_2d_vert.glsl b/packages/layers/src/raster/shaders/raster_2d_vert.glsl
new file mode 100644
index 0000000000..0d317c7e3f
--- /dev/null
+++ b/packages/layers/src/raster/shaders/raster_2d_vert.glsl
@@ -0,0 +1,11 @@
+precision highp float;
+uniform mat4 u_ModelMatrix;
+attribute vec3 a_Position;
+attribute vec2 a_Uv;
+varying vec2 v_texCoord;
+#pragma include "projection"
+void main() {
+ v_texCoord = a_Uv;
+ vec4 project_pos = project_position(vec4(a_Position, 1.0));
+ gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy,0., 1.0));
+}
diff --git a/packages/layers/src/raster/shaders/raster_frag.glsl b/packages/layers/src/raster/shaders/raster_frag.glsl
new file mode 100644
index 0000000000..8c56cd6d8d
--- /dev/null
+++ b/packages/layers/src/raster/shaders/raster_frag.glsl
@@ -0,0 +1,9 @@
+varying vec4 v_color;
+uniform float u_opacity: 1.0;
+#define PI 3.141592653589793
+
+void main() {
+ gl_FragColor = v_color;
+ gl_FragColor.a *= u_opacity;
+
+}
diff --git a/packages/layers/src/raster/shaders/raster_vert.glsl b/packages/layers/src/raster/shaders/raster_vert.glsl
new file mode 100644
index 0000000000..7ada3b09ce
--- /dev/null
+++ b/packages/layers/src/raster/shaders/raster_vert.glsl
@@ -0,0 +1,40 @@
+precision highp float;
+attribute vec3 a_Position;
+uniform mat4 u_ModelMatrix;
+uniform vec4 u_extent;
+uniform sampler2D u_texture;
+uniform sampler2D u_colorTexture;
+uniform float u_min;
+uniform float u_max;
+uniform float u_width;
+uniform float u_height;
+uniform float u_heightRatio;
+
+varying vec2 v_texCoord;
+varying vec4 v_color;
+
+#pragma include "projection"
+void main() {
+ vec2 uv = a_Position.xy / vec2(u_width, u_height);
+ vec2 minxy = project_position(vec4(u_extent.xy, 0, 1.0)).xy;
+ vec2 maxxy = project_position(vec4(u_extent.zw, 0, 1.0)).xy;
+ float value = texture2D(u_texture, vec2(uv.x,1.0 - uv.y)).x;
+ vec2 step = (maxxy - minxy) / vec2(u_width, u_height);
+ vec2 pos = minxy + vec2(a_Position.x, a_Position.y ) * step;
+ // v_texCoord = a_Uv;
+ value = clamp(value,u_min,u_max);
+ float value1 = (value - u_min) / (u_max -u_min);
+ vec2 ramp_pos = vec2(
+ fract(16.0 * (1.0 - value1)),
+ floor(16.0 * (1.0 - value1)) / 16.0);
+ v_color = texture2D(u_colorTexture,ramp_pos);
+
+ // if(uv.x > 1.0 || uv.y > 1.0) {
+ // v_color = vec4(0.);
+ // }
+
+ // vec2 range = u_extent.zw - u_extent.xy;
+ // vec4 project_pos = project_position(vec4(pos, 0, 1.0));
+ gl_Position = project_common_position_to_clipspace(vec4(pos.xy, project_scale(value) * u_heightRatio, 1.0));
+
+}
diff --git a/packages/layers/src/utils/color.ts b/packages/layers/src/utils/color.ts
new file mode 100644
index 0000000000..20cbcff16e
--- /dev/null
+++ b/packages/layers/src/utils/color.ts
@@ -0,0 +1,36 @@
+import * as d3 from 'd3-color';
+export interface IColorRamp {
+ positions: number[];
+ colors: string[];
+}
+export function rgb2arr(str: string) {
+ const color = d3.color(str) as d3.RGBColor;
+ const arr = [0, 0, 0, 0];
+ if (color != null) {
+ arr[0] = color.r / 255;
+ arr[1] = color.g / 255;
+ arr[2] = color.b / 255;
+ arr[3] = color.opacity;
+ }
+ return arr;
+}
+
+export function generateColorRamp(colorRamp: IColorRamp): ImageData {
+ const canvas = document.createElement('canvas');
+ const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;
+ canvas.width = 256;
+ canvas.height = 1;
+ const gradient = ctx.createLinearGradient(0, 0, 256, 0);
+ let data = null;
+ const min = colorRamp.positions[0];
+ const max = colorRamp.positions[colorRamp.positions.length - 1];
+ for (let i = 0; i < colorRamp.colors.length; ++i) {
+ const value = (colorRamp.positions[i] - min) / (max - min);
+ gradient.addColorStop(value, colorRamp.colors[i]);
+ }
+ ctx.fillStyle = gradient;
+ ctx.fillRect(0, 0, 256, 1);
+ data = new Uint8ClampedArray(ctx.getImageData(0, 0, 256, 1).data);
+
+ return new ImageData(data, 16, 16);
+}
diff --git a/packages/layers/src/utils/polylineNormal.ts b/packages/layers/src/utils/polylineNormal.ts
new file mode 100644
index 0000000000..3ac7ee0d54
--- /dev/null
+++ b/packages/layers/src/utils/polylineNormal.ts
@@ -0,0 +1,232 @@
+import { aProjectFlat, lngLatToMeters, Point } from '@l7/utils';
+import { vec2 } from 'gl-matrix';
+export function computeMiter(
+ tangent: vec2,
+ miter: vec2,
+ lineA: vec2,
+ lineB: vec2,
+ halfThick: number,
+) {
+ vec2.add(tangent, lineA, lineB);
+ vec2.normalize(tangent, tangent);
+ miter = vec2.fromValues(-tangent[1], tangent[0]);
+ const tmp = vec2.fromValues(-lineA[1], lineA[0]);
+ return halfThick / vec2.dot(miter, tmp);
+}
+export function computeNormal(out: vec2, dir: vec2) {
+ return vec2.set(out, -dir[1], dir[0]);
+}
+export function direction(out: vec2, a: vec2, b: vec2) {
+ const a1 = aProjectFlat([a[0], a[1]]);
+ const b1 = aProjectFlat([b[0], b[1]]);
+ vec2.sub(out, a1, b1);
+ vec2.normalize(out, out);
+ return out;
+}
+function extrusions(
+ positions: number[],
+ out: number[],
+ miters: number[],
+ point: vec2,
+ normal: vec2,
+ scale: number,
+) {
+ addNext(out, miters, normal, -scale);
+ addNext(out, miters, normal, scale);
+ positions.push(point[0], point[1], 0);
+ positions.push(point[0], point[1], 0);
+}
+
+function addNext(
+ out: number[],
+ miters: number[],
+ normal: vec2,
+ length: number,
+) {
+ out.push(normal[0], normal[1], 0);
+ miters.push(length);
+}
+
+function lineSegmentDistance(end: vec2, start: vec2) {
+ const a1 = aProjectFlat([start[0], start[1]]);
+ const b1 = aProjectFlat([end[0], end[1]]);
+ const dx = a1[0] - b1[0];
+ const dy = a1[1] - b1[1];
+ return Math.sqrt(dx * dx + dy * dy);
+}
+
+function isPointEqual(a: vec2, b: vec2) {
+ return a[0] === b[0] && a[1] === b[1];
+}
+
+export default function(
+ points: number[][],
+ closed: boolean,
+ indexOffset: number,
+) {
+ const lineA = vec2.fromValues(0, 0);
+ const lineB = vec2.fromValues(0, 0);
+ const tangent = vec2.fromValues(0, 0);
+ const miter: vec2 = vec2.create();
+ let started = false;
+ let lineNormal = null;
+ const tmp = vec2.create();
+ let count = indexOffset || 0;
+ const miterLimit = 3;
+
+ const out: number[] = [];
+ const attrPos: number[] = [];
+ const attrIndex: number[] = [];
+ const miters: number[] = [];
+ const attrDistance = [0, 0];
+ if (closed) {
+ points = points.slice();
+ points.push(points[0]);
+ }
+
+ const total = points.length;
+
+ for (let i = 1; i < total; i++) {
+ const index = count;
+ const last = vec2.fromValues(points[i - 1][0], points[i - 1][1]);
+ const cur = vec2.fromValues(points[i][0], points[i][1]);
+ let next =
+ i < points.length - 1
+ ? vec2.fromValues(points[i + 1][0], points[i + 1][1])
+ : null;
+ // 如果当前点和前一点相同,跳过
+ if (isPointEqual(last, cur)) {
+ continue;
+ }
+ if (next) {
+ let nextIndex = i + 1;
+ // 找到不相同的下一点
+ while (next && isPointEqual(cur, next)) {
+ next =
+ nextIndex < points.length - 1
+ ? vec2.fromValues(points[++nextIndex][0], points[nextIndex][1])
+ : null;
+ }
+ }
+ const lineDistance = lineSegmentDistance(cur, last);
+ const d = lineDistance + attrDistance[attrDistance.length - 1];
+ direction(lineA, cur, last);
+ if (!lineNormal) {
+ lineNormal = vec2.create();
+ computeNormal(lineNormal, lineA);
+ }
+
+ if (!started) {
+ started = true;
+ extrusions(attrPos, out, miters, last, lineNormal, 1);
+ }
+
+ attrIndex.push(index + 0, index + 2, index + 1);
+
+ // no miter, simple segment
+ if (!next) {
+ // reset normal
+ computeNormal(lineNormal, lineA);
+ extrusions(attrPos, out, miters, cur, lineNormal, 1);
+ attrDistance.push(d, d);
+ attrIndex.push(index + 1, index + 2, index + 3);
+ count += 2;
+ } else {
+ // get unit dir of next line
+ direction(lineB, next, cur);
+
+ // stores tangent & miter
+ let miterLen = computeMiter(
+ tangent,
+ vec2.fromValues(miter[0], miter[1]),
+ lineA,
+ lineB,
+ 1,
+ );
+
+ // get orientation
+ const flip = vec2.dot(tangent, lineNormal) < 0 ? -1 : 1;
+ const bevel = Math.abs(miterLen) > miterLimit;
+
+ // 处理前后两条线段重合的情况,这种情况不需要使用任何接头(miter/bevel)。
+ // 理论上这种情况下 miterLen = Infinity,本应通过 isFinite(miterLen) 判断,
+ // 但是 AMap 投影变换后丢失精度,只能通过一个阈值(1000)判断。
+
+ if (Math.abs(miterLen) > 1000) {
+ extrusions(attrPos, out, miters, cur, lineNormal, 1);
+ attrIndex.push(index + 1, index + 2, index + 3);
+ attrIndex.push(index + 2, index + 4, index + 3);
+ computeNormal(tmp, lineB);
+ vec2.copy(lineNormal, tmp); // store normal for next round
+
+ extrusions(attrPos, out, miters, cur, lineNormal, 1);
+ attrDistance.push(d, d, d, d);
+
+ // the miter is now the normal for our next join
+ count += 4;
+ continue;
+ }
+
+ if (bevel) {
+ miterLen = miterLimit;
+
+ // next two points in our first segment
+ extrusions(attrPos, out, miters, cur, lineNormal, 1);
+
+ attrIndex.push(index + 1, index + 2, index + 3);
+
+ // now add the bevel triangle
+ attrIndex.push(
+ ...(flip === 1
+ ? [index + 2, index + 4, index + 5]
+ : [index + 4, index + 5, index + 3]),
+ );
+
+ computeNormal(tmp, lineB);
+ vec2.copy(lineNormal, tmp); // store normal for next round
+
+ extrusions(attrPos, out, miters, cur, lineNormal, 1);
+ attrDistance.push(d, d, d, d);
+
+ // the miter is now the normal for our next join
+ count += 4;
+ } else {
+ // next two points in our first segment
+ extrusions(attrPos, out, miters, cur, lineNormal, 1);
+ attrIndex.push(index + 1, index + 2, index + 3);
+
+ // now add the miter triangles
+ addNext(out, miters, lineNormal, miterLen * -flip);
+ attrPos.push(cur[0], cur[1], 0);
+ attrIndex.push(index + 2, index + 4, index + 3);
+ attrIndex.push(index + 4, index + 5, index + 6);
+ computeNormal(tmp, lineB);
+ vec2.copy(lineNormal, tmp); // store normal for next round
+
+ extrusions(attrPos, out, miters, cur, lineNormal, 1);
+ attrDistance.push(d, d, d, d, d);
+
+ // the miter is now the normal for our next join
+ count += 5;
+ }
+ }
+ }
+ const pickData = [];
+ for (let i = 0; i < miters.length; i++) {
+ const totalDistance = attrDistance[attrDistance.length - 1];
+ pickData.push(
+ attrPos[i * 3],
+ attrPos[i * 3 + 1],
+ attrPos[i * 3 + 1],
+ attrDistance[i],
+ miters[i],
+ totalDistance,
+ );
+ }
+ return {
+ normals: out,
+ attrIndex,
+ attrPos: pickData, // [x,y,z, distance, miter ]
+ };
+}
+// [x,y,z, distance, miter ]
diff --git a/packages/layers/src/utils/symbol-layout.ts b/packages/layers/src/utils/symbol-layout.ts
new file mode 100644
index 0000000000..204e192395
--- /dev/null
+++ b/packages/layers/src/utils/symbol-layout.ts
@@ -0,0 +1,260 @@
+/**
+ * 返回文本相对锚点位置
+ * @param {string} anchor 锚点位置
+ * @return {alignment} alignment
+ */
+function getAnchorAlignment(anchor: string) {
+ let horizontalAlign = 0.5;
+ let verticalAlign = 0.5;
+
+ switch (anchor) {
+ case 'right':
+ case 'top-right':
+ case 'bottom-right':
+ horizontalAlign = 1;
+ break;
+ case 'left':
+ case 'top-left':
+ case 'bottom-left':
+ horizontalAlign = 0;
+ break;
+ default:
+ horizontalAlign = 0.5;
+ }
+
+ switch (anchor) {
+ case 'bottom':
+ case 'bottom-right':
+ case 'bottom-left':
+ verticalAlign = 1;
+ break;
+ case 'top':
+ case 'top-right':
+ case 'top-left':
+ verticalAlign = 0;
+ break;
+ default:
+ verticalAlign = 0.5;
+ }
+
+ return { horizontalAlign, verticalAlign };
+}
+
+// justify right = 1, left = 0, center = 0.5
+function justifyLine(
+ positionedGlyphs: any,
+ glyphMap: any,
+ start: number,
+ end: number,
+ justify: number,
+) {
+ if (!justify) {
+ return;
+ }
+
+ const lastPositionedGlyph = positionedGlyphs[end];
+ const glyph = lastPositionedGlyph.glyph;
+ if (glyph) {
+ const lastAdvance = glyphMap[glyph].advance * lastPositionedGlyph.scale;
+ const lineIndent = (positionedGlyphs[end].x + lastAdvance) * justify;
+
+ for (let j = start; j <= end; j++) {
+ positionedGlyphs[j].x -= lineIndent;
+ }
+ }
+}
+
+// justify right=1 left=0 center=0.5
+// horizontalAlign right=1 left=0 center=0.5
+// verticalAlign right=1 left=0 center=0.5
+function align(
+ positionedGlyphs: any[],
+ justify: number,
+ horizontalAlign: number,
+ verticalAlign: number,
+ maxLineLength: number,
+ lineHeight: number,
+ lineCount: number,
+) {
+ const shiftX = (justify - horizontalAlign) * maxLineLength;
+ const shiftY = (-verticalAlign * lineCount + 0.5) * lineHeight;
+
+ for (const glyphs of positionedGlyphs) {
+ glyphs.x += shiftX;
+ glyphs.y += shiftY;
+ }
+}
+
+function shapeLines(
+ shaping: any,
+ glyphMap: any,
+ lines: any[],
+ lineHeight: number,
+ textAnchor: string,
+ textJustify: string,
+ spacing: number,
+) {
+ // buffer 为 4
+ const yOffset = -8;
+
+ let x = 0;
+ let y = yOffset;
+
+ let maxLineLength = 0;
+ const positionedGlyphs = shaping.positionedGlyphs;
+
+ const justify =
+ textJustify === 'right' ? 1 : textJustify === 'left' ? 0 : 0.5;
+
+ const lineStartIndex = positionedGlyphs.length;
+ lines.forEach((line) => {
+ line.split('').forEach((char: string) => {
+ const glyph = glyphMap[char];
+ const baselineOffset = 0;
+
+ if (glyph) {
+ positionedGlyphs.push({
+ glyph: char,
+ x,
+ y: y + baselineOffset,
+ vertical: false, // TODO:目前只支持水平方向
+ scale: 1,
+ metrics: glyph,
+ });
+ x += glyph.advance + spacing;
+ }
+ });
+
+ // 左右对齐
+ if (positionedGlyphs.length !== lineStartIndex) {
+ const lineLength = x - spacing;
+ maxLineLength = Math.max(lineLength, maxLineLength);
+ justifyLine(
+ positionedGlyphs,
+ glyphMap,
+ lineStartIndex,
+ positionedGlyphs.length - 1,
+ justify,
+ );
+ }
+
+ x = 0;
+ y += lineHeight;
+ });
+
+ const { horizontalAlign, verticalAlign } = getAnchorAlignment(textAnchor);
+ align(
+ positionedGlyphs,
+ justify,
+ horizontalAlign,
+ verticalAlign,
+ maxLineLength,
+ lineHeight,
+ lines.length,
+ );
+
+ // 计算包围盒
+ const height = y - yOffset;
+
+ shaping.top += -verticalAlign * height;
+ shaping.bottom = shaping.top + height;
+ shaping.left += -horizontalAlign * maxLineLength;
+ shaping.right = shaping.left + maxLineLength;
+}
+
+/**
+ * 计算文本中每个独立字符相对锚点的位置
+ *
+ * @param {string} text 原始文本
+ * @param {*} glyphs mapping
+ * @param {number} lineHeight 行高
+ * @param {string} textAnchor 文本相对于锚点的位置
+ * @param {string} textJustify 左右对齐
+ * @param {number} spacing 字符间距
+ * @param {[number, number]} translate 文本水平 & 垂直偏移量
+ * @return {boolean|shaping} 每个字符相对于锚点的位置
+ */
+export function shapeText(
+ text: string,
+ glyphs: any,
+ lineHeight: number,
+ textAnchor: string,
+ textJustify: string,
+ spacing: number,
+ translate: [number, number],
+) {
+ // TODO:处理换行
+ const lines = text.split('\n');
+
+ const positionedGlyphs: any[] = [];
+ const shaping = {
+ positionedGlyphs,
+ top: translate[1],
+ bottom: translate[1],
+ left: translate[0],
+ right: translate[0],
+ lineCount: lines.length,
+ text,
+ };
+
+ shapeLines(
+ shaping,
+ glyphs,
+ lines,
+ lineHeight,
+ textAnchor,
+ textJustify,
+ spacing,
+ );
+ if (!positionedGlyphs.length) {
+ return false;
+ }
+
+ return shaping;
+}
+
+export function getGlyphQuads(
+ shaping: any,
+ textOffset: [number, number],
+ alongLine: boolean,
+) {
+ const { positionedGlyphs } = shaping;
+ const quads = [];
+
+ for (const positionedGlyph of positionedGlyphs) {
+ const rect = positionedGlyph.metrics;
+
+ // The rects have an addditional buffer that is not included in their size.
+ const rectBuffer = 4;
+
+ const halfAdvance = (rect.advance * positionedGlyph.scale) / 2;
+
+ const glyphOffset = alongLine
+ ? [positionedGlyph.x + halfAdvance, positionedGlyph.y]
+ : [0, 0];
+
+ const builtInOffset = alongLine
+ ? [0, 0]
+ : [
+ positionedGlyph.x + halfAdvance + textOffset[0],
+ positionedGlyph.y + textOffset[1],
+ ];
+
+ const x1 =
+ (0 - rectBuffer) * positionedGlyph.scale - halfAdvance + builtInOffset[0];
+ const y1 = (0 - rectBuffer) * positionedGlyph.scale + builtInOffset[1];
+ const x2 = x1 + rect.width * positionedGlyph.scale;
+ const y2 = y1 + rect.height * positionedGlyph.scale;
+
+ const tl = { x: x1, y: y1 };
+ const tr = { x: x2, y: y1 };
+ const bl = { x: x1, y: y2 };
+ const br = { x: x2, y: y2 };
+
+ // TODO:处理字符旋转的情况
+
+ quads.push({ tl, tr, bl, br, tex: rect, glyphOffset });
+ }
+
+ return quads;
+}
diff --git a/packages/layers/tsconfig.build.json b/packages/layers/tsconfig.build.json
new file mode 100644
index 0000000000..17f6c4525a
--- /dev/null
+++ b/packages/layers/tsconfig.build.json
@@ -0,0 +1,9 @@
+{
+ "extends": "../../tsconfig.build.json",
+ "compilerOptions": {
+ "declarationDir": "./es",
+ "rootDir": "./src",
+ "baseUrl": "./"
+ },
+ "include": ["./src"]
+}
\ No newline at end of file
diff --git a/packages/maps/.gitignore b/packages/maps/.gitignore
new file mode 100644
index 0000000000..49c199b6ab
--- /dev/null
+++ b/packages/maps/.gitignore
@@ -0,0 +1,3 @@
+lib
+es
+dist
diff --git a/packages/maps/package.json b/packages/maps/package.json
new file mode 100644
index 0000000000..bbc9cfa1d2
--- /dev/null
+++ b/packages/maps/package.json
@@ -0,0 +1,43 @@
+{
+ "name": "@l7/maps",
+ "version": "0.0.1",
+ "description": "",
+ "main": "lib/index.js",
+ "module": "es/index.js",
+ "types": "es/index.d.ts",
+ "sideEffects": false,
+ "files": [
+ "lib",
+ "es",
+ "typings/index.d.ts",
+ "README.md"
+ ],
+ "scripts": {
+ "tsc": "tsc --project tsconfig.build.json",
+ "clean": "rimraf dist; rimraf es; rimraf lib;",
+ "build": "run-p build:*",
+ "build:cjs": "BABEL_ENV=cjs babel src --root-mode upward --out-dir lib --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
+ "build:esm": "BABEL_ENV=esm babel src --root-mode upward --out-dir es --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
+ "watch": "BABEL_ENV=cjs babel src --watch --root-mode upward --out-dir lib --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments"
+ },
+ "author": "xiaoiver",
+ "license": "ISC",
+ "dependencies": {
+ "@l7/core": "^0.0.1",
+ "@l7/utils": "0.0.1",
+ "gl-matrix": "^3.1.0",
+ "inversify": "^5.0.1",
+ "mapbox-gl": "^1.2.1",
+ "viewport-mercator-project": "^6.2.1"
+ },
+ "devDependencies": {
+ "@types/amap-js-api": "^1.4.6",
+ "@types/gl-matrix": "^2.4.5",
+ "@types/mapbox-gl": "^0.54.3",
+ "@types/viewport-mercator-project": "^6.1.0"
+ },
+ "gitHead": "0563f357f3a07c099bf1ffa9350e6fa3c88353ae",
+ "publishConfig": {
+ "access": "public"
+ }
+}
diff --git a/packages/maps/src/amap/Viewport.ts b/packages/maps/src/amap/Viewport.ts
new file mode 100644
index 0000000000..d7b63e5ca5
--- /dev/null
+++ b/packages/maps/src/amap/Viewport.ts
@@ -0,0 +1,123 @@
+import { IMapCamera, IViewport } from '@l7/core';
+import { mat4, vec3 } from 'gl-matrix';
+
+const DEGREES_TO_RADIANS = Math.PI / 180;
+
+export default class Viewport implements IViewport {
+ private projectionMatrix: mat4 = mat4.create();
+ private viewMatrix: mat4 = mat4.create();
+ private viewProjectionMatrix: mat4 = mat4.create();
+ private viewUncenteredMatrix: mat4 = mat4.create();
+ private zoom: number;
+ private center: number[];
+
+ public syncWithMapCamera(mapCamera: Partial) {
+ const {
+ zoom = 1,
+ pitch = 0,
+ bearing = 0,
+ center = [0, 0],
+ offsetOrigin = [0, 0],
+ cameraHeight = 1,
+ aspect = 1,
+ near = 0.1,
+ far = 1000,
+ fov = 0,
+ } = mapCamera;
+ this.zoom = zoom;
+ this.center = center;
+
+ const pitchInRadians = pitch * DEGREES_TO_RADIANS;
+ const rotationInRadians = (360 - bearing) * DEGREES_TO_RADIANS;
+
+ // 计算透视投影矩阵 projectionMatrix
+ mat4.perspective(this.projectionMatrix, fov, aspect, near, far);
+
+ // 计算相机矩阵 viewMatrix
+ const eye = vec3.fromValues(
+ cameraHeight * Math.sin(pitchInRadians) * Math.sin(rotationInRadians),
+ -cameraHeight * Math.sin(pitchInRadians) * Math.cos(rotationInRadians),
+ cameraHeight * Math.cos(pitchInRadians),
+ );
+ const up = vec3.fromValues(
+ -Math.cos(pitchInRadians) * Math.sin(rotationInRadians),
+ Math.cos(pitchInRadians) * Math.cos(rotationInRadians),
+ Math.sin(pitchInRadians),
+ );
+ mat4.lookAt(this.viewMatrix, eye, vec3.fromValues(0, 0, 0), up);
+
+ // 移动相机位置
+ mat4.translate(
+ this.viewMatrix,
+ this.viewMatrix,
+ vec3.fromValues(-offsetOrigin[0], offsetOrigin[1], 0),
+ );
+
+ mat4.multiply(
+ this.viewProjectionMatrix,
+ this.projectionMatrix,
+ this.viewMatrix,
+ );
+ }
+
+ public getZoom(): number {
+ return this.zoom;
+ }
+
+ public getZoomScale(): number {
+ // 512 尺寸下的缩放:2 ^ 19
+ return 524288;
+ }
+
+ public getCenter(): [number, number] {
+ const [lng, lat] = this.center;
+ return [lng, lat];
+ }
+
+ public getProjectionMatrix(): number[] {
+ // @ts-ignore
+ return this.projectionMatrix;
+ }
+
+ public getViewMatrix(): number[] {
+ // @ts-ignore
+ return this.viewMatrix;
+ }
+
+ public getViewMatrixUncentered(): number[] {
+ // @ts-ignore
+ return this.viewUncenteredMatrix;
+ }
+ public getViewProjectionMatrix(): number[] {
+ // @ts-ignore
+ return this.viewProjectionMatrix;
+ }
+
+ public getFocalDistance() {
+ return 1;
+ }
+
+ /**
+ * P20 坐标系,固定 scale
+ */
+ public projectFlat(
+ lngLat: [number, number],
+ scale?: number | undefined,
+ ): [number, number] {
+ const maxs = 85.0511287798;
+ const lat = Math.max(Math.min(maxs, lngLat[1]), -maxs);
+ // tslint:disable-next-line:no-bitwise
+ const zoomScale = 256 << 20;
+ let d = Math.PI / 180;
+ let x = lngLat[0] * d;
+ let y = lat * d;
+ y = Math.log(Math.tan(Math.PI / 4 + y / 2));
+ const a = 0.5 / Math.PI;
+ const b = 0.5;
+ const c = -0.5 / Math.PI;
+ d = 0.5;
+ x = zoomScale * (a * x + b) - 215440491;
+ y = -(zoomScale * (c * y + d) - 106744817);
+ return [x, y];
+ }
+}
diff --git a/packages/maps/src/amap/index.ts b/packages/maps/src/amap/index.ts
new file mode 100644
index 0000000000..cc715e0a1a
--- /dev/null
+++ b/packages/maps/src/amap/index.ts
@@ -0,0 +1,296 @@
+/**
+ * AMapService
+ */
+import {
+ Bounds,
+ CoordinateSystem,
+ ICoordinateSystemService,
+ ILngLat,
+ IMapConfig,
+ IMapService,
+ IPoint,
+ IViewport,
+ MapServiceEvent,
+ MapType,
+ TYPES,
+} from '@l7/core';
+import { DOM } from '@l7/utils';
+import { inject, injectable } from 'inversify';
+import { IAMapEvent, IAMapInstance } from '../../typings/index';
+import { MapTheme } from './theme';
+import Viewport from './Viewport';
+
+const AMAP_API_KEY: string = '15cd8a57710d40c9b7c0e3cc120f1200';
+const AMAP_VERSION: string = '1.4.15';
+const LNGLAT_OFFSET_ZOOM_THRESHOLD = 12;
+
+/**
+ * AMapService
+ */
+@injectable()
+export default class AMapService implements IMapService {
+ public map: AMap.Map & IAMapInstance;
+
+ @inject(TYPES.ICoordinateSystemService)
+ private readonly coordinateSystemService: ICoordinateSystemService;
+ @inject(TYPES.IEventEmitter)
+ private eventEmitter: any;
+ private markerContainer: HTMLElement;
+ private $mapContainer: HTMLElement | null;
+ private $jsapi: HTMLScriptElement;
+
+ private viewport: Viewport;
+
+ private cameraChangedCallback: (viewport: IViewport) => void;
+
+ // init
+ public addMarkerContainer(): void {
+ const mapContainer = this.map.getContainer();
+ if (mapContainer !== null) {
+ const amap = mapContainer.getElementsByClassName(
+ 'amap-maps',
+ )[0] as HTMLElement;
+ this.markerContainer = DOM.create('div', 'l7-marker-container', amap);
+ }
+ }
+ public getMarkerContainer(): HTMLElement {
+ return this.markerContainer;
+ }
+
+ // map event
+ public on(type: string, handler: (...args: any[]) => void): void {
+ if (MapServiceEvent.indexOf(type) !== -1) {
+ this.eventEmitter.on(type, handler);
+ } else {
+ this.map.on(type, handler);
+ }
+ }
+ public off(type: string, handler: (...args: any[]) => void): void {
+ if (MapServiceEvent.indexOf(type) !== -1) {
+ this.eventEmitter.off(type, handler);
+ } else {
+ this.map.off(type, handler);
+ }
+ }
+
+ public getContainer(): HTMLElement | null {
+ return this.map.getContainer();
+ }
+
+ public getSize(): [number, number] {
+ const size = this.map.getSize();
+ return [size.getWidth(), size.getHeight()];
+ }
+
+ public getType() {
+ return MapType.amap;
+ }
+ public getZoom(): number {
+ return this.map.getZoom();
+ }
+ public getCenter(): ILngLat {
+ const center = this.map.getCenter();
+ return {
+ lng: center.getLng(),
+ lat: center.getLat(),
+ };
+ }
+
+ public getPitch(): number {
+ return this.map.getPitch();
+ }
+
+ public getRotation(): number {
+ return this.map.getRotation();
+ }
+
+ public getBounds(): Bounds {
+ // @ts-ignore
+ const amapBound = this.map.getBounds().toBounds();
+ const NE = amapBound.getNorthEast();
+ const SW = amapBound.getSouthWest();
+ return [
+ [NE.getLng(), NE.getLat()],
+ [SW.getLng(), SW.getLat()],
+ ];
+ }
+
+ public getMinZoom(): number {
+ const zooms = this.map.get('zooms') as [number, number];
+ return zooms[0];
+ }
+ public getMaxZoom(): number {
+ const zooms = this.map.get('zooms') as [number, number];
+ return zooms[1];
+ }
+ public setRotation(rotation: number): void {
+ return this.map.setRotation(rotation);
+ }
+
+ public zoomIn(): void {
+ this.map.zoomIn();
+ }
+
+ public zoomOut(): void {
+ this.map.zoomOut();
+ }
+
+ public panTo(p: [number, number]): void {
+ this.map.panTo(p);
+ }
+ public panBy(pixel: [number, number]): void {
+ this.map.panTo(pixel);
+ }
+ public fitBounds(extent: Bounds): void {
+ this.map.setBounds(
+ new AMap.Bounds([extent[0][0], extent[0][1], extent[1][0], extent[1][1]]),
+ );
+ }
+ public setZoomAndCenter(zoom: number, center: [number, number]): void {
+ this.map.setZoomAndCenter(zoom, center);
+ }
+ public setMapStyle(style: string): void {
+ this.map.setMapStyle(this.getMapStyle(style));
+ }
+ public pixelToLngLat(pixel: [number, number]): ILngLat {
+ const lngLat = this.map.pixelToLngLat(new AMap.Pixel(pixel[0], pixel[1]));
+ return { lng: lngLat.getLng(), lat: lngLat.getLat() };
+ }
+ public lngLatToPixel(lnglat: [number, number]): IPoint {
+ const p = this.map.lnglatToPixel(new AMap.LngLat(lnglat[0], lnglat[1]));
+ return {
+ x: p.getX(),
+ y: p.getY(),
+ };
+ }
+ public containerToLngLat(pixel: [number, number]): ILngLat {
+ const ll = new AMap.Pixel(pixel[0], pixel[1]);
+ const lngLat = this.map.containerToLngLat(ll);
+ return {
+ lng: lngLat.getLng(),
+ lat: lngLat.getLat(),
+ };
+ }
+ public lngLatToContainer(lnglat: [number, number]): IPoint {
+ const ll = new AMap.LngLat(lnglat[0], lnglat[1]);
+ const pixel = this.map.lngLatToContainer(ll);
+ return {
+ x: pixel.getX(),
+ y: pixel.getY(),
+ };
+ }
+
+ public async init(mapConfig: IMapConfig): Promise {
+ const {
+ id,
+ style = 'light',
+ minZoom = 0,
+ maxZoom = 18,
+ token = AMAP_API_KEY,
+ ...rest
+ } = mapConfig;
+
+ this.$mapContainer = document.getElementById(id);
+
+ // this.eventEmitter = container.get(TYPES.IEventEmitter);
+
+ // tslint:disable-next-line:typedef
+ await new Promise((resolve) => {
+ // 异步加载高德地图
+ // @see https://lbs.amap.com/api/javascript-api/guide/abc/load
+ window.onload = (): void => {
+ // @ts-ignore
+ this.map = new AMap.Map(id, {
+ mapStyle: this.getMapStyle(style),
+ zooms: [minZoom, maxZoom],
+ viewMode: '3D',
+ ...rest,
+ });
+
+ // 监听地图相机时间
+ this.map.on('camerachange', this.handlerCameraChanged);
+ this.emit('mapload');
+ resolve();
+ };
+
+ const url: string = `https://webapi.amap.com/maps?v=${AMAP_VERSION}&key=${token}&plugin=Map3D&callback=onload`;
+ this.$jsapi = document.createElement('script');
+ this.$jsapi.charset = 'utf-8';
+ this.$jsapi.src = url;
+ document.head.appendChild(this.$jsapi);
+ });
+
+ this.viewport = new Viewport();
+ }
+ public emit(name: string, ...args: any[]) {
+ this.eventEmitter.emit(name, ...args);
+ }
+
+ public once(name: string, ...args: any[]) {
+ this.eventEmitter.once(name, ...args);
+ }
+
+ public destroy() {
+ this.eventEmitter.removeAllListeners();
+ if (this.map) {
+ this.map.destroy();
+ document.head.removeChild(this.$jsapi);
+ }
+ }
+
+ public getMapContainer() {
+ return this.$mapContainer;
+ }
+
+ public onCameraChanged(callback: (viewport: IViewport) => void): void {
+ this.cameraChangedCallback = callback;
+ }
+
+ private handlerCameraChanged = (e: IAMapEvent): void => {
+ const {
+ fov,
+ near,
+ far,
+ height,
+ pitch,
+ rotation,
+ aspect,
+ position,
+ } = e.camera;
+ const { lng, lat } = this.getCenter();
+ if (this.cameraChangedCallback) {
+ // resync viewport
+ this.viewport.syncWithMapCamera({
+ aspect,
+ // AMap 定义 rotation 为顺时针方向,而 Mapbox 为逆时针
+ // @see https://docs.mapbox.com/mapbox-gl-js/api/#map#getbearing
+ bearing: 360 - rotation,
+ far,
+ fov,
+ cameraHeight: height,
+ near,
+ pitch,
+ // AMap 定义的缩放等级 与 Mapbox 相差 1
+ zoom: this.map.getZoom() - 1,
+ center: [lng, lat],
+ offsetOrigin: [position.x, position.y],
+ });
+
+ // set coordinate system
+ // if (this.viewport.getZoom() > LNGLAT_OFFSET_ZOOM_THRESHOLD) {
+ // // TODO:偏移坐标系高德地图不支持 pitch bear 同步
+ // this.coordinateSystemService.setCoordinateSystem(
+ // CoordinateSystem.P20_OFFSET,
+ // );
+ // } else {
+ // this.coordinateSystemService.setCoordinateSystem(CoordinateSystem.P20);
+ // }
+ this.coordinateSystemService.setCoordinateSystem(CoordinateSystem.P20);
+ this.cameraChangedCallback(this.viewport);
+ }
+ };
+
+ private getMapStyle(name: string) {
+ return MapTheme[name] ? MapTheme[name] : name;
+ }
+}
diff --git a/packages/maps/src/amap/theme.ts b/packages/maps/src/amap/theme.ts
new file mode 100644
index 0000000000..ce284d7338
--- /dev/null
+++ b/packages/maps/src/amap/theme.ts
@@ -0,0 +1,7 @@
+export const MapTheme: {
+ [key: string]: any;
+} = {
+ dark: 'amap://styles/2a09079c3daac9420ee53b67307a8006?isPublic=true',
+ light: 'amap://styles/1fd9f8ef9751298f11f5c56968312c70?isPublic=true',
+ normal: 'amap://styles/12db649ba3493333b098127ed892c0cb?isPublic=true',
+};
diff --git a/packages/maps/src/index.ts b/packages/maps/src/index.ts
new file mode 100644
index 0000000000..b70638e8a5
--- /dev/null
+++ b/packages/maps/src/index.ts
@@ -0,0 +1,4 @@
+import AMapService from './amap';
+import MapboxService from './mapbox';
+
+export { AMapService, MapboxService };
diff --git a/packages/maps/src/mapbox/Viewport.ts b/packages/maps/src/mapbox/Viewport.ts
new file mode 100644
index 0000000000..90fa2a5e3f
--- /dev/null
+++ b/packages/maps/src/mapbox/Viewport.ts
@@ -0,0 +1,71 @@
+import { IMapCamera, IViewport } from '@l7/core';
+import WebMercatorViewport from 'viewport-mercator-project';
+
+export default class Viewport implements IViewport {
+ private viewport: WebMercatorViewport;
+
+ public syncWithMapCamera(mapCamera: Partial) {
+ const {
+ center,
+ zoom,
+ pitch,
+ bearing,
+ viewportHeight,
+ viewportWidth,
+ } = mapCamera;
+
+ /**
+ * Deck.gl 使用的也是 Mapbox 同步相机,相机参数保持一致
+ * 例如相机高度固定为 height * 1.5,因此不需要传
+ */
+ this.viewport = new WebMercatorViewport({
+ width: viewportWidth,
+ height: viewportHeight,
+ longitude: center && center[0],
+ latitude: center && center[1],
+ zoom,
+ pitch,
+ bearing,
+ });
+ }
+
+ public getZoom(): number {
+ return this.viewport.zoom;
+ }
+
+ public getZoomScale(): number {
+ return Math.pow(2, this.getZoom());
+ }
+
+ public getCenter(): [number, number] {
+ return [this.viewport.longitude, this.viewport.latitude];
+ }
+
+ public getProjectionMatrix(): number[] {
+ return this.viewport.projectionMatrix;
+ }
+
+ public getViewMatrix(): number[] {
+ return this.viewport.viewMatrix;
+ }
+
+ public getViewMatrixUncentered(): number[] {
+ // @ts-ignore
+ return this.viewport.viewMatrixUncentered;
+ }
+ public getViewProjectionMatrix(): number[] {
+ // @ts-ignore
+ return this.viewport.viewProjectionMatrix;
+ }
+
+ public getFocalDistance() {
+ return 1;
+ }
+
+ public projectFlat(
+ lngLat: [number, number],
+ scale?: number | undefined,
+ ): [number, number] {
+ return this.viewport.projectFlat(lngLat, scale);
+ }
+}
diff --git a/packages/maps/src/mapbox/index.ts b/packages/maps/src/mapbox/index.ts
new file mode 100644
index 0000000000..d37be55f6f
--- /dev/null
+++ b/packages/maps/src/mapbox/index.ts
@@ -0,0 +1,274 @@
+/**
+ * MapboxService
+ */
+import {
+ Bounds,
+ CoordinateSystem,
+ ICoordinateSystemService,
+ ILngLat,
+ IMapConfig,
+ IMapService,
+ IPoint,
+ IViewport,
+ MapServiceEvent,
+ MapType,
+ TYPES,
+} from '@l7/core';
+import { DOM } from '@l7/utils';
+import { inject, injectable } from 'inversify';
+import mapboxgl, { IControl, Map } from 'mapbox-gl';
+import { IMapboxInstance } from '../../typings/index';
+import Viewport from './Viewport';
+const EventMap: {
+ [key: string]: any;
+} = {
+ mapmove: 'move',
+ camerachange: 'move',
+};
+import { MapTheme } from './theme';
+
+const LNGLAT_OFFSET_ZOOM_THRESHOLD = 12;
+
+/**
+ * AMapService
+ */
+@injectable()
+export default class MapboxService implements IMapService {
+ public map: Map & IMapboxInstance;
+ @inject(TYPES.ICoordinateSystemService)
+ private readonly coordinateSystemService: ICoordinateSystemService;
+
+ @inject(TYPES.IEventEmitter)
+ private eventEmitter: any;
+ private viewport: Viewport;
+ private markerContainer: HTMLElement;
+ private cameraChangedCallback: (viewport: IViewport) => void;
+ private $mapContainer: HTMLElement | null;
+
+ // init
+ public addMarkerContainer(): void {
+ const container = this.map.getCanvasContainer();
+ this.markerContainer = DOM.create('div', 'l7-marker-container', container);
+ }
+
+ public getMarkerContainer(): HTMLElement {
+ return this.markerContainer;
+ }
+
+ // map event
+ public on(type: string, handle: (...args: any[]) => void): void {
+ if (MapServiceEvent.indexOf(type) !== -1) {
+ this.eventEmitter.on(type, handle);
+ } else {
+ // 统一事件名称
+ this.map.on(EventMap[type] || type, handle);
+ }
+ }
+ public off(type: string, handle: (...args: any[]) => void): void {
+ this.map.off(EventMap[type] || type, handle);
+ }
+
+ public getContainer(): HTMLElement | null {
+ return this.map.getContainer();
+ }
+
+ public getSize(): [number, number] {
+ const size = this.map.transform;
+ return [size.width, size.height];
+ }
+ // get mapStatus method
+
+ public getType() {
+ return MapType.mapbox;
+ }
+ public getZoom(): number {
+ return this.map.getZoom();
+ }
+
+ public getCenter(): ILngLat {
+ return this.map.getCenter();
+ }
+
+ public getPitch(): number {
+ return this.map.getPitch();
+ }
+
+ public getRotation(): number {
+ return this.map.getBearing();
+ }
+
+ public getBounds(): Bounds {
+ return this.map.getBounds().toArray() as Bounds;
+ }
+
+ public getMinZoom(): number {
+ return this.map.getMinZoom();
+ }
+
+ public getMaxZoom(): number {
+ return this.map.getMaxZoom();
+ }
+
+ public setRotation(rotation: number): void {
+ this.map.setBearing(rotation);
+ }
+
+ public zoomIn(): void {
+ this.map.zoomIn();
+ }
+
+ public zoomOut(): void {
+ this.map.zoomOut();
+ }
+
+ public panTo(p: [number, number]): void {
+ this.map.panTo(p);
+ }
+
+ public panBy(pixel: [number, number]): void {
+ this.panTo(pixel);
+ }
+
+ public fitBounds(bound: Bounds): void {
+ this.map.fitBounds(bound);
+ }
+
+ public setMaxZoom(max: number): void {
+ this.map.setMaxZoom(max);
+ }
+
+ public setMinZoom(min: number): void {
+ this.map.setMinZoom(min);
+ }
+
+ public setZoomAndCenter(zoom: number, center: [number, number]): void {
+ this.map.flyTo({
+ zoom,
+ center,
+ });
+ }
+
+ public setMapStyle(style: string): void {
+ this.map.setStyle(this.getMapStyle(style));
+ }
+ // TODO: 计算像素坐标
+ public pixelToLngLat(pixel: [number, number]): ILngLat {
+ return this.map.unproject(pixel);
+ }
+
+ public lngLatToPixel(lnglat: [number, number]): IPoint {
+ return this.map.project(lnglat);
+ }
+
+ public containerToLngLat(pixel: [number, number]): ILngLat {
+ return this.map.unproject(pixel);
+ }
+
+ public lngLatToContainer(lnglat: [number, number]): IPoint {
+ return this.map.project(lnglat);
+ }
+
+ public async init(mapConfig: IMapConfig): Promise {
+ const {
+ id,
+ attributionControl = false,
+ style = 'light',
+ token = 'pk.eyJ1IjoieGlhb2l2ZXIiLCJhIjoiY2pxcmc5OGNkMDY3cjQzbG42cXk5NTl3YiJ9.hUC5Chlqzzh0FFd_aEc-uQ',
+ rotation = 0,
+ ...rest
+ } = mapConfig;
+ this.$mapContainer = document.getElementById(id);
+
+ this.viewport = new Viewport();
+
+ /**
+ * TODO: 使用 mapbox v0.53.x 版本 custom layer,需要共享 gl context
+ * @see https://github.com/mapbox/mapbox-gl-js/blob/master/debug/threejs.html#L61-L64
+ */
+ mapboxgl.accessToken = token;
+ // @ts-ignore
+ this.map = new mapboxgl.Map({
+ container: id,
+ style: this.getMapStyle(style),
+ attributionControl,
+ bearing: rotation,
+ ...rest,
+ });
+ this.map.on('load', this.handleCameraChanged);
+ this.map.on('move', this.handleCameraChanged);
+
+ // 不同于高德地图,需要手动触发首次渲染
+ this.handleCameraChanged();
+ this.removeLogoControl();
+ }
+
+ public destroy() {
+ this.eventEmitter.removeAllListeners();
+ if (this.map) {
+ this.map.remove();
+ this.$mapContainer = null;
+ }
+ }
+ public emit(name: string, ...args: any[]) {
+ this.eventEmitter.emit(name, ...args);
+ }
+ public once(name: string, ...args: any[]) {
+ this.eventEmitter.once(name, ...args);
+ }
+
+ public getMapContainer() {
+ return this.$mapContainer;
+ }
+
+ public onCameraChanged(callback: (viewport: IViewport) => void): void {
+ this.cameraChangedCallback = callback;
+ }
+ // 同步不同底图的配置项
+ private initMapConig(): void {
+ throw new Error('Method not implemented.');
+ }
+ private handleCameraChanged = () => {
+ // @see https://github.com/mapbox/mapbox-gl-js/issues/2572
+ const { lat, lng } = this.map.getCenter().wrap();
+
+ // resync
+ this.viewport.syncWithMapCamera({
+ bearing: this.map.getBearing(),
+ center: [lng, lat],
+ viewportHeight: this.map.transform.height,
+ pitch: this.map.getPitch(),
+ viewportWidth: this.map.transform.width,
+ zoom: this.map.getZoom(),
+ // mapbox 中固定相机高度为 viewport 高度的 1.5 倍
+ cameraHeight: 0,
+ });
+
+ // set coordinate system
+ if (this.viewport.getZoom() > LNGLAT_OFFSET_ZOOM_THRESHOLD) {
+ this.coordinateSystemService.setCoordinateSystem(
+ CoordinateSystem.LNGLAT_OFFSET,
+ );
+ } else {
+ this.coordinateSystemService.setCoordinateSystem(CoordinateSystem.LNGLAT);
+ }
+
+ this.cameraChangedCallback(this.viewport);
+ };
+
+ private removeLogoControl(): void {
+ // @ts-ignore
+ const controls = this.map._controls as IControl[];
+ const logoCtr = controls.find((ctr: IControl) => {
+ if (ctr.hasOwnProperty('_updateLogo')) {
+ return true;
+ }
+ });
+ if (logoCtr) {
+ this.map.removeControl(logoCtr);
+ }
+ }
+
+ private getMapStyle(name: string) {
+ return MapTheme[name] ? MapTheme[name] : name;
+ }
+}
diff --git a/packages/maps/src/mapbox/theme.ts b/packages/maps/src/mapbox/theme.ts
new file mode 100644
index 0000000000..b665cb74e7
--- /dev/null
+++ b/packages/maps/src/mapbox/theme.ts
@@ -0,0 +1,7 @@
+export const MapTheme: {
+ [key: string]: any;
+} = {
+ light: 'mapbox://styles/zcxduo/ck233y3ru1di71cnulo9jdg2v',
+ dark: 'mapbox://styles/zcxduo/ck241p6413s0b1cpayzldv7x7',
+ normal: 'mapbox://styles/mapbox/streets-v11',
+};
diff --git a/packages/maps/tsconfig.build.json b/packages/maps/tsconfig.build.json
new file mode 100644
index 0000000000..17f6c4525a
--- /dev/null
+++ b/packages/maps/tsconfig.build.json
@@ -0,0 +1,9 @@
+{
+ "extends": "../../tsconfig.build.json",
+ "compilerOptions": {
+ "declarationDir": "./es",
+ "rootDir": "./src",
+ "baseUrl": "./"
+ },
+ "include": ["./src"]
+}
\ No newline at end of file
diff --git a/packages/maps/typings/index.d.ts b/packages/maps/typings/index.d.ts
new file mode 100644
index 0000000000..2cc081b0c5
--- /dev/null
+++ b/packages/maps/typings/index.d.ts
@@ -0,0 +1,51 @@
+///
+///
+
+import { IControl } from 'mapbox-gl';
+
+interface Window {
+ onLoad: () => void;
+}
+interface IAMapEvent {
+ camera: {
+ fov: number;
+ near: number;
+ far: number;
+ height: number;
+ pitch: number;
+ rotation: number;
+ aspect: number;
+ position: { x: number; y: number };
+ };
+}
+
+interface IAMapInstance {
+ get(key: string): unknown;
+}
+
+interface IMapboxInstance {
+ _controls: IControl[];
+ transform: {
+ width: number;
+ height: number;
+ };
+}
+interface IEventEmitter {
+ emit(event: EventTypes, ...args: any[]): boolean;
+ /**
+ * Add a listener for a given event.
+ */
+ on(event: EventTypes, handle: (...args: any[]) => void, context?: any): this;
+
+ off(
+ event: EventTypes,
+ handle: (...args: any[]) => void,
+ context?: any,
+ once?: boolean,
+ ): this;
+
+ /**
+ * Remove all listeners, or those of the specified event.
+ */
+ removeAllListeners(event?: EventTypes): this;
+}
diff --git a/packages/renderer/.gitignore b/packages/renderer/.gitignore
new file mode 100644
index 0000000000..49c199b6ab
--- /dev/null
+++ b/packages/renderer/.gitignore
@@ -0,0 +1,3 @@
+lib
+es
+dist
diff --git a/packages/renderer/package.json b/packages/renderer/package.json
new file mode 100644
index 0000000000..ed16a0dfb5
--- /dev/null
+++ b/packages/renderer/package.json
@@ -0,0 +1,36 @@
+{
+ "name": "@l7/renderer",
+ "version": "0.0.1",
+ "description": "",
+ "main": "lib/index.js",
+ "module": "es/index.js",
+ "types": "es/index.d.ts",
+ "sideEffects": false,
+ "files": [
+ "lib",
+ "es",
+ "README.md"
+ ],
+ "scripts": {
+ "tsc": "tsc --project tsconfig.build.json",
+ "clean": "rimraf dist; rimraf es; rimraf lib;",
+ "build": "run-p build:*",
+ "build:cjs": "BABEL_ENV=cjs babel src --root-mode upward --out-dir lib --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
+ "build:esm": "BABEL_ENV=esm babel src --root-mode upward --out-dir es --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
+ "watch": "BABEL_ENV=cjs babel src --watch --root-mode upward --out-dir lib --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments"
+ },
+ "author": "xiaoiver",
+ "license": "ISC",
+ "dependencies": {
+ "@l7/core": "^0.0.1",
+ "gl": "^4.4.0",
+ "inversify": "^5.0.1",
+ "inversify-logging": "^0.2.1",
+ "reflect-metadata": "^0.1.13",
+ "regl": "^1.3.11"
+ },
+ "gitHead": "0563f357f3a07c099bf1ffa9350e6fa3c88353ae",
+ "publishConfig": {
+ "access": "public"
+ }
+}
diff --git a/packages/renderer/src/index.ts b/packages/renderer/src/index.ts
new file mode 100644
index 0000000000..01b1f9ad66
--- /dev/null
+++ b/packages/renderer/src/index.ts
@@ -0,0 +1,6 @@
+/**
+ *
+ */
+import ReglRendererService from './regl';
+
+export { ReglRendererService };
diff --git a/packages/renderer/src/regl/ReglAttribute.ts b/packages/renderer/src/regl/ReglAttribute.ts
new file mode 100644
index 0000000000..b91f7e8310
--- /dev/null
+++ b/packages/renderer/src/regl/ReglAttribute.ts
@@ -0,0 +1,44 @@
+import { IAttribute, IAttributeInitializationOptions, IBuffer } from '@l7/core';
+import regl from 'regl';
+import ReglBuffer from './ReglBuffer';
+
+/**
+ * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#attributes
+ */
+export default class ReglAttribute implements IAttribute {
+ private attribute: regl.Attribute;
+ private buffer: IBuffer;
+
+ constructor(gl: regl.Regl, options: IAttributeInitializationOptions) {
+ const { buffer, offset, stride, normalized, size, divisor } = options;
+ this.buffer = buffer;
+ this.attribute = {
+ buffer: (buffer as ReglBuffer).get(),
+ offset: offset || 0,
+ stride: stride || 0,
+ normalized: normalized || false,
+ divisor: divisor || 0,
+ };
+
+ if (size) {
+ this.attribute.size = size;
+ }
+ }
+
+ public get() {
+ return this.attribute;
+ }
+
+ public updateBuffer(options: {
+ // 用于替换的数据
+ data: number[] | number[][] | Uint8Array | Uint16Array | Uint32Array;
+ // 原 Buffer 替换位置,单位为 byte
+ offset: number;
+ }) {
+ this.buffer.subData(options);
+ }
+
+ public destroy() {
+ this.buffer.destroy();
+ }
+}
diff --git a/packages/renderer/src/regl/ReglBuffer.ts b/packages/renderer/src/regl/ReglBuffer.ts
new file mode 100644
index 0000000000..f9d165bd69
--- /dev/null
+++ b/packages/renderer/src/regl/ReglBuffer.ts
@@ -0,0 +1,39 @@
+import { gl, IBuffer, IBufferInitializationOptions } from '@l7/core';
+import regl from 'regl';
+import { dataTypeMap, usageMap } from './constants';
+
+/**
+ * adaptor for regl.Buffer
+ * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#buffers
+ */
+export default class ReglBuffer implements IBuffer {
+ private buffer: regl.Buffer;
+
+ constructor(reGl: regl.Regl, options: IBufferInitializationOptions) {
+ const { data, usage, type } = options;
+ this.buffer = reGl.buffer({
+ data,
+ usage: usageMap[usage || gl.STATIC_DRAW],
+ type: dataTypeMap[type || gl.UNSIGNED_BYTE],
+ // length: 0,
+ });
+ }
+
+ public get() {
+ return this.buffer;
+ }
+
+ public destroy() {
+ this.buffer.destroy();
+ }
+
+ public subData({
+ data,
+ offset,
+ }: {
+ data: number[] | number[][] | Uint8Array | Uint16Array | Uint32Array;
+ offset: number;
+ }) {
+ this.buffer.subdata(data, offset);
+ }
+}
diff --git a/packages/renderer/src/regl/ReglElements.ts b/packages/renderer/src/regl/ReglElements.ts
new file mode 100644
index 0000000000..72e648ab74
--- /dev/null
+++ b/packages/renderer/src/regl/ReglElements.ts
@@ -0,0 +1,40 @@
+import { gl, IElements, IElementsInitializationOptions } from '@l7/core';
+import regl from 'regl';
+import { dataTypeMap, usageMap } from './constants';
+
+/**
+ * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#elements
+ */
+export default class ReglElements implements IElements {
+ private elements: regl.Elements;
+
+ constructor(reGl: regl.Regl, options: IElementsInitializationOptions) {
+ const { data, usage, type, count } = options;
+
+ this.elements = reGl.elements({
+ data,
+ usage: usageMap[usage || gl.STATIC_DRAW],
+ type: dataTypeMap[type || gl.UNSIGNED_BYTE] as
+ | 'uint8'
+ | 'uint16'
+ | 'uint32',
+ count,
+ });
+ }
+
+ public get() {
+ return this.elements;
+ }
+
+ public subData({
+ data,
+ }: {
+ data: number[] | number[][] | Uint8Array | Uint16Array | Uint32Array;
+ }) {
+ this.elements.subdata(data);
+ }
+
+ public destroy() {
+ this.elements.destroy();
+ }
+}
diff --git a/packages/renderer/src/regl/ReglFramebuffer.ts b/packages/renderer/src/regl/ReglFramebuffer.ts
new file mode 100644
index 0000000000..da430a1b39
--- /dev/null
+++ b/packages/renderer/src/regl/ReglFramebuffer.ts
@@ -0,0 +1,52 @@
+import {
+ gl,
+ IFramebuffer,
+ IFramebufferInitializationOptions,
+ IRenderbuffer,
+ ITexture2D,
+} from '@l7/core';
+import regl from 'regl';
+import ReglTexture2D from './ReglTexture2D';
+
+/**
+ * adaptor for regl.Framebuffer
+ * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#framebuffers
+ */
+export default class ReglFramebuffer implements IFramebuffer {
+ private framebuffer: regl.Framebuffer;
+
+ constructor(reGl: regl.Regl, options: IFramebufferInitializationOptions) {
+ const { width, height, color, colors, depth, stencil } = options;
+
+ const framebufferOptions: regl.FramebufferOptions = {
+ width,
+ height,
+ };
+
+ if (Array.isArray(colors)) {
+ framebufferOptions.colors = colors.map((c: ITexture2D | IRenderbuffer) =>
+ (c as ReglTexture2D).get(),
+ );
+ }
+
+ if (color && typeof color !== 'boolean') {
+ framebufferOptions.color = (color as ReglTexture2D).get();
+ }
+
+ // TODO: depth & stencil
+
+ this.framebuffer = reGl.framebuffer(framebufferOptions);
+ }
+
+ public get() {
+ return this.framebuffer;
+ }
+
+ public destroy() {
+ this.framebuffer.destroy();
+ }
+
+ public resize({ width, height }: { width: number; height: number }) {
+ this.framebuffer.resize(width, height);
+ }
+}
diff --git a/packages/renderer/src/regl/ReglModel.ts b/packages/renderer/src/regl/ReglModel.ts
new file mode 100644
index 0000000000..661d4f4a79
--- /dev/null
+++ b/packages/renderer/src/regl/ReglModel.ts
@@ -0,0 +1,249 @@
+import {
+ gl,
+ IModel,
+ IModelDrawOptions,
+ IModelInitializationOptions,
+ IUniform,
+} from '@l7/core';
+import regl from 'regl';
+import {
+ blendEquationMap,
+ blendFuncMap,
+ cullFaceMap,
+ depthFuncMap,
+ primitiveMap,
+ stencilFuncMap,
+ stencilOpMap,
+} from './constants';
+import ReglAttribute from './ReglAttribute';
+import ReglElements from './ReglElements';
+import ReglFramebuffer from './ReglFramebuffer';
+import ReglTexture2D from './ReglTexture2D';
+
+/**
+ * adaptor for regl.DrawCommand
+ */
+export default class ReglModel implements IModel {
+ private reGl: regl.Regl;
+ private drawCommand: regl.DrawCommand;
+ private uniforms: {
+ [key: string]: IUniform;
+ } = {};
+
+ constructor(reGl: regl.Regl, options: IModelInitializationOptions) {
+ this.reGl = reGl;
+ const {
+ vs,
+ fs,
+ attributes,
+ uniforms,
+ primitive,
+ count,
+ elements,
+ depth,
+ blend,
+ stencil,
+ cull,
+ instances,
+ } = options;
+ const reglUniforms: { [key: string]: IUniform } = {};
+ if (uniforms) {
+ this.uniforms = uniforms;
+ Object.keys(uniforms).forEach((uniformName) => {
+ // use regl prop API
+ // @ts-ignore
+ reglUniforms[uniformName] = reGl.prop(uniformName);
+ });
+ }
+
+ const reglAttributes: { [key: string]: regl.Attribute } = {};
+ Object.keys(attributes).forEach((name: string) => {
+ reglAttributes[name] = (attributes[name] as ReglAttribute).get();
+ });
+ const drawParams: regl.DrawConfig = {
+ attributes: reglAttributes,
+ frag: fs,
+ uniforms: reglUniforms,
+ vert: vs,
+ primitive:
+ primitiveMap[primitive === undefined ? gl.TRIANGLES : primitive],
+ };
+ if (instances) {
+ drawParams.instances = instances;
+ }
+
+ // elements 中可能包含 count,此时不应传入
+ if (count) {
+ drawParams.count = count;
+ }
+
+ if (elements) {
+ drawParams.elements = (elements as ReglElements).get();
+ }
+
+ this.initDepthDrawParams({ depth }, drawParams);
+ this.initBlendDrawParams({ blend }, drawParams);
+ this.initStencilDrawParams({ stencil }, drawParams);
+ this.initCullDrawParams({ cull }, drawParams);
+ this.drawCommand = reGl(drawParams);
+ }
+
+ public addUniforms(uniforms: { [key: string]: IUniform }) {
+ this.uniforms = {
+ ...this.uniforms,
+ ...uniforms,
+ };
+ }
+
+ public draw(options: IModelDrawOptions) {
+ const uniforms: {
+ [key: string]: IUniform;
+ } = {
+ ...this.uniforms,
+ ...options.uniforms,
+ };
+
+ const reglDrawProps: {
+ [key: string]:
+ | regl.Framebuffer
+ | regl.Texture2D
+ | number
+ | number[]
+ | boolean;
+ } = {};
+
+ Object.keys(uniforms).forEach((uniformName: string) => {
+ const type = typeof uniforms[uniformName];
+ if (
+ type === 'boolean' ||
+ type === 'number' ||
+ Array.isArray(uniforms[uniformName]) ||
+ // @ts-ignore
+ uniforms[uniformName].BYTES_PER_ELEMENT
+ ) {
+ reglDrawProps[uniformName] = uniforms[uniformName] as
+ | number
+ | number[]
+ | boolean;
+ } else {
+ reglDrawProps[uniformName] = (uniforms[uniformName] as
+ | ReglFramebuffer
+ | ReglTexture2D).get();
+ }
+ });
+ this.drawCommand(reglDrawProps);
+ }
+
+ public destroy() {
+ // don't need do anything since we will call `rendererService.cleanup()`
+ }
+
+ /**
+ * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#depth-buffer
+ */
+ private initDepthDrawParams(
+ { depth }: Pick,
+ drawParams: regl.DrawConfig,
+ ) {
+ if (depth) {
+ drawParams.depth = {
+ enable: depth.enable === undefined ? true : !!depth.enable,
+ mask: depth.mask === undefined ? true : !!depth.mask,
+ func: depthFuncMap[depth.func || gl.LESS],
+ range: depth.range || [0, 1],
+ };
+ }
+ }
+
+ /**
+ * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#blending
+ */
+ private initBlendDrawParams(
+ { blend }: Pick,
+ drawParams: regl.DrawConfig,
+ ) {
+ if (blend) {
+ const { enable, func, equation, color = [0, 0, 0, 0] } = blend;
+ // @ts-ignore
+ drawParams.blend = {
+ enable: enable === undefined ? false : !!enable,
+ func: {
+ srcRGB: blendFuncMap[(func && func.srcRGB) || gl.SRC_ALPHA],
+ srcAlpha: blendFuncMap[(func && func.srcAlpha) || gl.SRC_ALPHA],
+ dstRGB: blendFuncMap[(func && func.dstRGB) || gl.ONE_MINUS_SRC_ALPHA],
+ dstAlpha:
+ blendFuncMap[(func && func.dstAlpha) || gl.ONE_MINUS_SRC_ALPHA],
+ },
+ equation: {
+ rgb: blendEquationMap[(equation && equation.rgb) || gl.FUNC_ADD],
+ alpha: blendEquationMap[(equation && equation.alpha) || gl.FUNC_ADD],
+ },
+ color,
+ };
+ }
+ }
+
+ /**
+ * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#stencil
+ */
+ private initStencilDrawParams(
+ { stencil }: Pick,
+ drawParams: regl.DrawConfig,
+ ) {
+ if (stencil) {
+ const {
+ enable,
+ mask = -1,
+ func = {
+ cmp: gl.ALWAYS,
+ ref: 0,
+ mask: -1,
+ },
+ opFront = {
+ fail: gl.KEEP,
+ zfail: gl.KEEP,
+ zpass: gl.KEEP,
+ },
+ opBack = {
+ fail: gl.KEEP,
+ zfail: gl.KEEP,
+ zpass: gl.KEEP,
+ },
+ } = stencil;
+ drawParams.stencil = {
+ enable: enable === undefined ? false : !!enable,
+ mask,
+ func: {
+ ...func,
+ cmp: stencilFuncMap[func.cmp],
+ },
+ opFront: {
+ fail: stencilOpMap[opFront.fail],
+ zfail: stencilOpMap[opFront.zfail],
+ zpass: stencilOpMap[opFront.zpass],
+ },
+ opBack: {
+ fail: stencilOpMap[opBack.fail],
+ zfail: stencilOpMap[opBack.zfail],
+ zpass: stencilOpMap[opBack.zpass],
+ },
+ };
+ }
+ }
+
+ /**
+ * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#culling
+ */
+ private initCullDrawParams(
+ { cull }: Pick,
+ drawParams: regl.DrawConfig,
+ ) {
+ if (cull) {
+ const { enable, face = gl.BACK } = cull;
+ drawParams.cull = {
+ enable: enable === undefined ? false : !!enable,
+ face: cullFaceMap[face],
+ };
+ }
+ }
+}
diff --git a/packages/renderer/src/regl/ReglRenderbuffer.ts b/packages/renderer/src/regl/ReglRenderbuffer.ts
new file mode 100644
index 0000000000..0040cd9bd9
--- /dev/null
+++ b/packages/renderer/src/regl/ReglRenderbuffer.ts
@@ -0,0 +1,32 @@
+import { IRenderbuffer, IRenderbufferInitializationOptions } from '@l7/core';
+import regl from 'regl';
+import { formatMap } from './constants';
+
+/**
+ * adaptor for regl.Renderbuffer
+ * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#renderbuffers
+ */
+export default class ReglRenderbuffer implements IRenderbuffer {
+ private renderbuffer: regl.Renderbuffer;
+
+ constructor(reGl: regl.Regl, options: IRenderbufferInitializationOptions) {
+ const { width, height, format } = options;
+ this.renderbuffer = reGl.renderbuffer({
+ width,
+ height,
+ format: formatMap[format] as regl.RenderbufferFormat,
+ });
+ }
+
+ public get() {
+ return this.renderbuffer;
+ }
+
+ public destroy() {
+ this.renderbuffer.destroy();
+ }
+
+ public resize({ width, height }: { width: number; height: number }) {
+ this.renderbuffer.resize(width, height);
+ }
+}
diff --git a/packages/renderer/src/regl/ReglTexture2D.ts b/packages/renderer/src/regl/ReglTexture2D.ts
new file mode 100644
index 0000000000..6bf4a02b1d
--- /dev/null
+++ b/packages/renderer/src/regl/ReglTexture2D.ts
@@ -0,0 +1,80 @@
+import { gl, ITexture2D, ITexture2DInitializationOptions } from '@l7/core';
+import regl from 'regl';
+import {
+ colorSpaceMap,
+ dataTypeMap,
+ filterMap,
+ formatMap,
+ mipmapMap,
+ wrapModeMap,
+} from './constants';
+
+/**
+ * adaptor for regl.Buffer
+ * @see https://github.com/regl-project/regl/blob/gh-pages/API.md#buffers
+ */
+export default class ReglTexture2D implements ITexture2D {
+ private texture: regl.Texture2D;
+
+ constructor(reGl: regl.Regl, options: ITexture2DInitializationOptions) {
+ const {
+ data,
+ type = gl.UNSIGNED_BYTE,
+ width,
+ height,
+ flipY = false,
+ format = gl.RGBA,
+ mipmap = false,
+ wrapS = gl.CLAMP_TO_EDGE,
+ wrapT = gl.CLAMP_TO_EDGE,
+ aniso = 0,
+ alignment = 1,
+ premultiplyAlpha = false,
+ mag = gl.NEAREST,
+ min = gl.NEAREST,
+ colorSpace = gl.NONE,
+ } = options;
+
+ const textureOptions: regl.Texture2DOptions = {
+ width,
+ height,
+ // @ts-ignore
+ type: dataTypeMap[type],
+ format: formatMap[format],
+ wrapS: wrapModeMap[wrapS],
+ wrapT: wrapModeMap[wrapT],
+ // @ts-ignore
+ mag: filterMap[mag],
+ min: filterMap[min],
+ alignment,
+ flipY,
+ colorSpace: colorSpaceMap[colorSpace],
+ premultiplyAlpha,
+ aniso,
+ };
+
+ if (data) {
+ textureOptions.data = data;
+ }
+
+ if (typeof mipmap === 'string') {
+ textureOptions.mipmap = mipmapMap[mipmap];
+ } else if (typeof mipmap === 'boolean') {
+ textureOptions.mipmap = mipmap;
+ }
+
+ this.texture = reGl.texture(textureOptions);
+ }
+
+ public get() {
+ return this.texture;
+ }
+
+ public resize({ width, height }: { width: number; height: number }): void {
+ this.texture.resize(width, height);
+ }
+
+ public destroy() {
+ this.texture.destroy();
+ }
+}
diff --git a/packages/renderer/src/regl/__tests__/model.spec.ts b/packages/renderer/src/regl/__tests__/model.spec.ts
new file mode 100644
index 0000000000..8f81b4b175
--- /dev/null
+++ b/packages/renderer/src/regl/__tests__/model.spec.ts
@@ -0,0 +1,76 @@
+import 'reflect-metadata';
+import regl from 'regl';
+import ReglModel from '../ReglModel';
+import createContext from './utils/create-context';
+
+describe('ReglModel', () => {
+ let gl;
+ let reGL: regl.Regl;
+
+ beforeEach(() => {
+ gl = createContext(1, 1);
+ reGL = regl(gl);
+ });
+
+ it('should generate model with empty uniforms correctly', () => {
+ const model = new ReglModel(reGL, {
+ vs: 'void main() {gl_Position = vec4(0.);}',
+ fs: 'void main() {gl_FragColor = vec4(0.);}',
+ attributes: {},
+ });
+
+ // @ts-ignore
+ expect(model.uniforms).toEqual({});
+ });
+
+ it('should generate model with uniforms correctly', () => {
+ const model = new ReglModel(reGL, {
+ vs: 'void main() {gl_Position = vec4(0.);}',
+ fs: 'void main() {gl_FragColor = vec4(0.);}',
+ attributes: {},
+ uniforms: {
+ u_1: 1,
+ u_2: [1, 2],
+ },
+ });
+
+ // @ts-ignore
+ expect(model.uniforms.u_1).toEqual(1);
+ // @ts-ignore
+ expect(model.uniforms.u_2).toEqual([1, 2]);
+ });
+
+ it('should generate model with struct uniforms correctly', () => {
+ // 支持 struct 结构,例如 'colors[0].r'
+ // @see https://github.com/regl-project/regl/blob/gh-pages/API.md#uniforms
+ const model = new ReglModel(reGL, {
+ vs: 'void main() {gl_Position = vec4(0.);}',
+ fs: 'void main() {gl_FragColor = vec4(0.);}',
+ attributes: {},
+ // @ts-ignore
+ uniforms: {
+ u_Struct: [
+ {
+ a: 1,
+ b: [1, 2],
+ },
+ {
+ a: 2,
+ b: [3, 4],
+ },
+ ],
+ },
+ });
+
+ expect(model.uniforms['u_Struct[0].a']).toEqual(undefined);
+
+ // // @ts-ignore
+ // expect(model.uniforms['u_Struct[0].a']).toEqual(1);
+ // // @ts-ignore
+ // expect(model.uniforms['u_Struct[0].b']).toEqual([1, 2]);
+ // // @ts-ignore
+ // expect(model.uniforms['u_Struct[1].a']).toEqual(2);
+ // // @ts-ignore
+ // expect(model.uniforms['u_Struct[1].b']).toEqual([3, 4]);
+ });
+});
diff --git a/packages/renderer/src/regl/__tests__/utils/create-context.ts b/packages/renderer/src/regl/__tests__/utils/create-context.ts
new file mode 100644
index 0000000000..39a7e6104c
--- /dev/null
+++ b/packages/renderer/src/regl/__tests__/utils/create-context.ts
@@ -0,0 +1,21 @@
+import gl from 'gl';
+
+// borrow from regl
+// @see https://github.com/regl-project/regl/blob/gh-pages/test/util/create-context.js#L28
+const CONTEXT = gl(1, 1, { preserveDrawingBuffer: true });
+const RESIZE = CONTEXT.getExtension('STACKGL_resize_drawingbuffer');
+
+export default function(width: number, height: number) {
+ resize(width, height);
+ return CONTEXT;
+}
+
+export function resize(width: number, height: number) {
+ if (RESIZE) {
+ RESIZE.resize(width, height);
+ }
+}
+
+export function destroy() {
+ //
+}
diff --git a/packages/renderer/src/regl/constants.ts b/packages/renderer/src/regl/constants.ts
new file mode 100644
index 0000000000..ba5b7e6a2d
--- /dev/null
+++ b/packages/renderer/src/regl/constants.ts
@@ -0,0 +1,199 @@
+/**
+ * @desc 由于 regl 使用大量字符串而非 WebGL 常量,因此需要映射
+ */
+import { gl } from '@l7/core';
+import regl from 'regl';
+
+// @see https://github.com/regl-project/regl/blob/gh-pages/lib/constants/primitives.json
+export const primitiveMap: {
+ [key: string]:
+ | 'points'
+ | 'lines'
+ | 'line loop'
+ | 'line strip'
+ | 'triangles'
+ | 'triangle strip'
+ | 'triangle fan';
+} = {
+ [gl.POINTS]: 'points',
+ [gl.LINES]: 'lines',
+ [gl.LINE_LOOP]: 'line loop',
+ [gl.LINE_STRIP]: 'line strip',
+ [gl.TRIANGLES]: 'triangles',
+ [gl.TRIANGLE_FAN]: 'triangle fan',
+ [gl.TRIANGLE_STRIP]: 'triangle strip',
+};
+
+export const usageMap: {
+ [key: string]: 'static' | 'dynamic' | 'stream';
+} = {
+ [gl.STATIC_DRAW]: 'static',
+ [gl.DYNAMIC_DRAW]: 'dynamic',
+ [gl.STREAM_DRAW]: 'stream',
+};
+
+export const dataTypeMap: {
+ [key: string]:
+ | 'int8'
+ | 'int16'
+ | 'int32'
+ | 'uint8'
+ | 'uint16'
+ | 'uint32'
+ | 'float';
+} = {
+ [gl.BYTE]: 'int8',
+ [gl.UNSIGNED_INT]: 'int16',
+ [gl.INT]: 'int32',
+ [gl.UNSIGNED_BYTE]: 'uint8',
+ [gl.UNSIGNED_SHORT]: 'uint16',
+ [gl.UNSIGNED_INT]: 'uint32',
+ [gl.FLOAT]: 'float',
+};
+
+export const formatMap: {
+ [key: string]:
+ | 'alpha'
+ | 'luminance'
+ | 'luminance alpha'
+ | 'rgb'
+ | 'rgba'
+ | 'rgba4'
+ | 'rgb5 a1'
+ | 'rgb565'
+ | 'depth'
+ | 'depth stencil';
+} = {
+ [gl.ALPHA]: 'alpha',
+ [gl.LUMINANCE]: 'luminance',
+ [gl.LUMINANCE_ALPHA]: 'luminance alpha',
+ [gl.RGB]: 'rgb',
+ [gl.RGBA]: 'rgba',
+ [gl.RGBA4]: 'rgba4',
+ [gl.RGB5_A1]: 'rgb5 a1',
+ [gl.RGB565]: 'rgb565',
+ [gl.DEPTH_COMPONENT]: 'depth',
+ [gl.DEPTH_STENCIL]: 'depth stencil',
+};
+
+export const mipmapMap: {
+ [key: string]: 'dont care' | 'nice' | 'fast';
+} = {
+ [gl.DONT_CARE]: 'dont care',
+ [gl.NICEST]: 'nice',
+ [gl.FASTEST]: 'fast',
+};
+
+export const filterMap: {
+ [key: string]:
+ | 'nearest'
+ | 'linear'
+ | 'mipmap'
+ | 'nearest mipmap linear'
+ | 'linear mipmap nearest'
+ | 'nearest mipmap nearest';
+} = {
+ [gl.NEAREST]: 'nearest',
+ [gl.LINEAR]: 'linear',
+ [gl.LINEAR_MIPMAP_LINEAR]: 'mipmap',
+ [gl.NEAREST_MIPMAP_LINEAR]: 'nearest mipmap linear',
+ [gl.LINEAR_MIPMAP_NEAREST]: 'linear mipmap nearest',
+ [gl.NEAREST_MIPMAP_NEAREST]: 'nearest mipmap nearest',
+};
+
+export const wrapModeMap: {
+ [key: string]: 'repeat' | 'clamp' | 'mirror';
+} = {
+ [gl.REPEAT]: 'repeat',
+ [gl.CLAMP_TO_EDGE]: 'clamp',
+ [gl.MIRRORED_REPEAT]: 'mirror',
+};
+
+export const colorSpaceMap: {
+ [key: string]: 'none' | 'browser';
+} = {
+ [gl.NONE]: 'none',
+ [gl.BROWSER_DEFAULT_WEBGL]: 'browser',
+};
+
+export const depthFuncMap: {
+ [key: string]:
+ | 'never'
+ | 'always'
+ | 'less'
+ | 'lequal'
+ | 'greater'
+ | 'gequal'
+ | 'equal'
+ | 'notequal';
+} = {
+ [gl.NEVER]: 'never',
+ [gl.ALWAYS]: 'always',
+ [gl.LESS]: 'less',
+ [gl.LEQUAL]: 'lequal',
+ [gl.GREATER]: 'greater',
+ [gl.GEQUAL]: 'gequal',
+ [gl.EQUAL]: 'equal',
+ [gl.NOTEQUAL]: 'notequal',
+};
+
+export const blendEquationMap: {
+ [key: string]: regl.BlendingEquation;
+} = {
+ [gl.FUNC_ADD]: 'add',
+ [gl.FUNC_SUBTRACT]: 'subtract',
+ [gl.FUNC_REVERSE_SUBTRACT]: 'reverse subtract',
+};
+
+export const blendFuncMap: {
+ [key: string]: regl.BlendingFunction;
+} = {
+ [gl.ZERO]: 'zero',
+ [gl.ONE]: 'one',
+ [gl.SRC_COLOR]: 'src color',
+ [gl.ONE_MINUS_SRC_COLOR]: 'one minus src color',
+ [gl.SRC_ALPHA]: 'src alpha',
+ [gl.ONE_MINUS_SRC_ALPHA]: 'one minus src alpha',
+ [gl.DST_COLOR]: 'dst color',
+ [gl.ONE_MINUS_DST_COLOR]: 'one minus dst color',
+ [gl.DST_ALPHA]: 'dst alpha',
+ [gl.ONE_MINUS_DST_ALPHA]: 'one minus dst alpha',
+ [gl.CONSTANT_COLOR]: 'constant color',
+ [gl.ONE_MINUS_CONSTANT_COLOR]: 'one minus constant color',
+ [gl.CONSTANT_ALPHA]: 'constant alpha',
+ [gl.ONE_MINUS_CONSTANT_ALPHA]: 'one minus constant alpha',
+ [gl.SRC_ALPHA_SATURATE]: 'src alpha saturate',
+};
+
+export const stencilFuncMap: {
+ [key: string]: regl.ComparisonOperatorType;
+} = {
+ [gl.NEVER]: 'never',
+ [gl.ALWAYS]: 'always',
+ [gl.LESS]: 'less',
+ [gl.LEQUAL]: 'lequal',
+ [gl.GREATER]: 'greater',
+ [gl.GEQUAL]: 'gequal',
+ [gl.EQUAL]: 'equal',
+ [gl.NOTEQUAL]: 'notequal',
+};
+
+export const stencilOpMap: {
+ [key: string]: regl.StencilOperationType;
+} = {
+ [gl.ZERO]: 'zero',
+ [gl.KEEP]: 'keep',
+ [gl.REPLACE]: 'replace',
+ [gl.INVERT]: 'invert',
+ [gl.INCR]: 'increment',
+ [gl.DECR]: 'decrement',
+ [gl.INCR_WRAP]: 'increment wrap',
+ [gl.DECR_WRAP]: 'decrement wrap',
+};
+
+export const cullFaceMap: {
+ [key: string]: regl.FaceOrientationType;
+} = {
+ [gl.FRONT]: 'front',
+ [gl.BACK]: 'back',
+};
diff --git a/packages/renderer/src/regl/index.ts b/packages/renderer/src/regl/index.ts
new file mode 100644
index 0000000000..d5ab2ec49d
--- /dev/null
+++ b/packages/renderer/src/regl/index.ts
@@ -0,0 +1,168 @@
+/**
+ * render w/ regl
+ * @see https://github.com/regl-project/regl/blob/gh-pages/API.md
+ */
+import {
+ IAttribute,
+ IAttributeInitializationOptions,
+ IBuffer,
+ IBufferInitializationOptions,
+ IClearOptions,
+ IElements,
+ IElementsInitializationOptions,
+ IFramebuffer,
+ IFramebufferInitializationOptions,
+ IModel,
+ IModelInitializationOptions,
+ IReadPixelsOptions,
+ IRendererService,
+ ITexture2D,
+ ITexture2DInitializationOptions,
+} from '@l7/core';
+import { injectable } from 'inversify';
+import regl from 'regl';
+import ReglAttribute from './ReglAttribute';
+import ReglBuffer from './ReglBuffer';
+import ReglElements from './ReglElements';
+import ReglFramebuffer from './ReglFramebuffer';
+import ReglModel from './ReglModel';
+import ReglTexture2D from './ReglTexture2D';
+
+/**
+ * regl renderer
+ */
+@injectable()
+export default class ReglRendererService implements IRendererService {
+ private gl: regl.Regl;
+ private $container: HTMLDivElement | null;
+
+ public async init($container: HTMLDivElement): Promise {
+ this.$container = $container;
+ // tslint:disable-next-line:typedef
+ this.gl = await new Promise((resolve, reject) => {
+ regl({
+ container: $container,
+ attributes: {
+ alpha: true,
+ // use TAA instead of MSAA
+ // @see https://www.khronos.org/registry/webgl/specs/1.0/#5.2.1
+ antialias: true,
+ premultipliedAlpha: true,
+ },
+ // TODO: use extensions
+ extensions: [
+ 'OES_element_index_uint',
+ 'EXT_shader_texture_lod', // IBL
+ 'OES_standard_derivatives', // wireframe
+ 'EXT_SRGB', // baseColor emmisive
+ 'OES_texture_float', // shadow map
+ 'WEBGL_depth_texture',
+ 'angle_instanced_arrays',
+ 'EXT_texture_filter_anisotropic', // VSM shadow map
+ ],
+ optionalExtensions: ['oes_texture_float_linear'],
+ // profile: true,
+ onDone: (err: Error | null, r?: regl.Regl | undefined): void => {
+ if (err || !r) {
+ reject(err);
+ }
+ resolve(r);
+ },
+ });
+ });
+ }
+
+ public createModel = (options: IModelInitializationOptions): IModel =>
+ new ReglModel(this.gl, options);
+
+ public createAttribute = (
+ options: IAttributeInitializationOptions,
+ ): IAttribute => new ReglAttribute(this.gl, options);
+
+ public createBuffer = (options: IBufferInitializationOptions): IBuffer =>
+ new ReglBuffer(this.gl, options);
+
+ public createElements = (
+ options: IElementsInitializationOptions,
+ ): IElements => new ReglElements(this.gl, options);
+
+ public createTexture2D = (
+ options: ITexture2DInitializationOptions,
+ ): ITexture2D => new ReglTexture2D(this.gl, options);
+
+ public createFramebuffer = (options: IFramebufferInitializationOptions) =>
+ new ReglFramebuffer(this.gl, options);
+
+ public useFramebuffer = (
+ framebuffer: IFramebuffer | null,
+ drawCommands: () => void,
+ ) => {
+ this.gl({
+ framebuffer: framebuffer ? (framebuffer as ReglFramebuffer).get() : null,
+ })(drawCommands);
+ };
+
+ public clear = (options: IClearOptions) => {
+ // @see https://github.com/regl-project/regl/blob/gh-pages/API.md#clear-the-draw-buffer
+ const { color, depth, stencil, framebuffer = null } = options;
+ const reglClearOptions: regl.ClearOptions = {
+ color,
+ depth,
+ stencil,
+ };
+
+ reglClearOptions.framebuffer =
+ framebuffer === null
+ ? framebuffer
+ : (framebuffer as ReglFramebuffer).get();
+
+ this.gl.clear(reglClearOptions);
+ };
+
+ public viewport = ({
+ x,
+ y,
+ width,
+ height,
+ }: {
+ x: number;
+ y: number;
+ width: number;
+ height: number;
+ }) => {
+ // use WebGL context directly
+ // @see https://github.com/regl-project/regl/blob/gh-pages/API.md#unsafe-escape-hatch
+ this.gl._gl.viewport(x, y, width, height);
+ this.gl._refresh();
+ };
+
+ public readPixels = (options: IReadPixelsOptions) => {
+ const { framebuffer, x, y, width, height } = options;
+ const readPixelsOptions: regl.ReadOptions = {
+ x,
+ y,
+ width,
+ height,
+ };
+ if (framebuffer) {
+ readPixelsOptions.framebuffer = (framebuffer as ReglFramebuffer).get();
+ }
+ return this.gl.read(readPixelsOptions);
+ };
+
+ public getViewportSize = () => {
+ return {
+ width: this.gl._gl.drawingBufferWidth,
+ height: this.gl._gl.drawingBufferHeight,
+ };
+ };
+
+ public getContainer = () => {
+ return this.$container;
+ };
+
+ public destroy = () => {
+ // @see https://github.com/regl-project/regl/blob/gh-pages/API.md#clean-up
+ this.gl.destroy();
+ };
+}
diff --git a/packages/renderer/tsconfig.build.json b/packages/renderer/tsconfig.build.json
new file mode 100644
index 0000000000..17f6c4525a
--- /dev/null
+++ b/packages/renderer/tsconfig.build.json
@@ -0,0 +1,9 @@
+{
+ "extends": "../../tsconfig.build.json",
+ "compilerOptions": {
+ "declarationDir": "./es",
+ "rootDir": "./src",
+ "baseUrl": "./"
+ },
+ "include": ["./src"]
+}
\ No newline at end of file
diff --git a/packages/scene/.gitignore b/packages/scene/.gitignore
new file mode 100644
index 0000000000..49c199b6ab
--- /dev/null
+++ b/packages/scene/.gitignore
@@ -0,0 +1,3 @@
+lib
+es
+dist
diff --git a/packages/scene/package.json b/packages/scene/package.json
new file mode 100644
index 0000000000..e0b53247f3
--- /dev/null
+++ b/packages/scene/package.json
@@ -0,0 +1,38 @@
+{
+ "name": "@l7/scene",
+ "version": "0.0.1",
+ "description": "",
+ "main": "lib/index.js",
+ "module": "es/index.js",
+ "types": "es/index.d.ts",
+ "sideEffects": false,
+ "files": [
+ "lib",
+ "es",
+ "README.md"
+ ],
+ "scripts": {
+ "tsc": "tsc --project tsconfig.build.json",
+ "clean": "rimraf dist; rimraf es; rimraf lib;",
+ "build": "run-p build:*",
+ "build:cjs": "BABEL_ENV=cjs babel src --root-mode upward --out-dir lib --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
+ "build:esm": "BABEL_ENV=esm babel src --root-mode upward --out-dir es --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
+ "watch": "BABEL_ENV=cjs babel src --watch --root-mode upward --out-dir lib --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments"
+ },
+ "author": "xiaoiver",
+ "license": "ISC",
+ "dependencies": {
+ "@l7/component": "^0.0.1",
+ "@l7/core": "^0.0.1",
+ "@l7/maps": "^0.0.1",
+ "@l7/renderer": "^0.0.1",
+ "inversify": "^5.0.1",
+ "inversify-inject-decorators": "^3.1.0",
+ "mapbox-gl": "^1.2.1",
+ "reflect-metadata": "^0.1.13"
+ },
+ "gitHead": "0563f357f3a07c099bf1ffa9350e6fa3c88353ae",
+ "publishConfig": {
+ "access": "public"
+ }
+}
diff --git a/packages/scene/src/index.ts b/packages/scene/src/index.ts
new file mode 100644
index 0000000000..8cd3bead9f
--- /dev/null
+++ b/packages/scene/src/index.ts
@@ -0,0 +1,276 @@
+import { Logo } from '@l7/component';
+import {
+ Bounds,
+ container,
+ IControl,
+ IControlService,
+ IIconService,
+ IImage,
+ ILayer,
+ ILayerService,
+ ILngLat,
+ IMapConfig,
+ IMapService,
+ IMarker,
+ IPoint,
+ IRenderConfig,
+ IRendererService,
+ ISceneService,
+ MapType,
+ Point,
+ SceneEventList,
+ TYPES,
+} from '@l7/core';
+import { AMapService, MapboxService } from '@l7/maps';
+import { ReglRendererService } from '@l7/renderer';
+import { interfaces } from 'inversify';
+import { Map } from 'mapbox-gl';
+
+// 绑定渲染引擎服务
+container
+ .bind(TYPES.IRendererService)
+ .to(ReglRendererService)
+ .inSingletonScope();
+// // 绑定地图服务 AMap & Mapbox
+// container
+// .bind(TYPES.IMapService)
+// .to(AMapService)
+// .whenTargetNamed(MapType.amap)
+// .inSingletonScope();
+// container
+// .bind(TYPES.IMapService)
+// .to(MapboxService)
+// .inSingletonScope();
+// // 地图服务工厂,根据 name 返回指定服务
+// container
+// .bind>(TYPES.IFactoryMapService)
+// .toFactory((context) => {
+// return (named: string) => {
+// return context.container.getNamed(TYPES.IMapService, named);
+// };
+// });
+
+// 缓存当前地图类型,便于 DEMO 中切换底图时动态绑定
+let mapType: MapType;
+
+/**
+ * 暴露 Scene API
+ *
+ * @example
+ * import { Scene } from '@l7/scene';
+ * import { PointLayer } from '@l7/layers';
+ *
+ * const scene = new Scene();
+ * const pointLayer = new PointLayer();
+ * scene.addLayer(pointLayer);
+ * scene.render();
+ */
+class Scene {
+ // public map: AMap.Map | Map;
+ private sceneService: ISceneService;
+ private mapService: IMapService;
+ private controlService: IControlService;
+ private layerService: ILayerService;
+
+ private iconService: IIconService;
+
+ public constructor(config: IMapConfig & IRenderConfig) {
+ const { type = MapType.amap } = config;
+ // 根据用户传入参数绑定地图服务
+ let mapServiceImpl: new (...args: any[]) => IMapService;
+ if (type === MapType.mapbox) {
+ mapServiceImpl = MapboxService;
+ } else if (type === MapType.amap) {
+ mapServiceImpl = AMapService;
+ } else {
+ throw new Error('不支持的地图服务');
+ }
+
+ // DEMO 中切换底图实现时,需要重新绑定底图服务
+ // @see https://github.com/inversify/InversifyJS/blob/master/wiki/container_api.md#containerrebindserviceidentifier-serviceidentifier
+ if (!container.isBound(TYPES.IMapService)) {
+ container
+ .bind(TYPES.IMapService)
+ .to(mapServiceImpl)
+ .inSingletonScope();
+ } else if (type !== mapType) {
+ container
+ .rebind(TYPES.IMapService)
+ .to(mapServiceImpl)
+ .inSingletonScope();
+ }
+
+ // 依赖注入
+ this.sceneService = container.get(TYPES.ISceneService);
+ this.mapService = container.get(TYPES.IMapService);
+ this.iconService = container.get(TYPES.IIconService);
+ this.controlService = container.get(TYPES.IControlService);
+ this.layerService = container.get(TYPES.ILayerService);
+ mapType = this.mapService.getType();
+
+ // 初始化 scene
+ this.sceneService.init(config);
+ // 初始化组件
+ this.initControl();
+ }
+
+ public getMapService(): IMapService {
+ return this.mapService;
+ //
+ }
+
+ public get map() {
+ return this.mapService.map;
+ }
+
+ public addLayer(layer: ILayer): void {
+ this.sceneService.addLayer(layer);
+ }
+
+ public getLayers(): ILayer[] {
+ return this.layerService.getLayers();
+ }
+
+ public getLayer(id: string): ILayer | undefined {
+ return this.layerService.getLayer(id);
+ }
+
+ public removeLayer(layer: ILayer): void {
+ this.layerService.remove(layer);
+ }
+
+ public render(): void {
+ this.sceneService.render();
+ }
+
+ // asset method
+ public addImage(id: string, img: IImage) {
+ this.iconService.addImage(id, img);
+ }
+
+ public hasImage(id: string) {
+ this.iconService.hasImage(id);
+ }
+
+ public removeImage(id: string) {
+ this.iconService.removeImage(id);
+ }
+
+ // map control method
+ public addControl(ctr: IControl) {
+ if (this.mapService.map) {
+ this.controlService.addControl(ctr, this.mapService);
+ } else {
+ this.mapService.once('mapload', () => {
+ this.controlService.addControl(ctr, this.mapService);
+ });
+ }
+ }
+
+ public removeControl(ctr: IControl) {
+ this.controlService.removeControl(ctr);
+ }
+
+ // marker
+ public addMarker(marker: IMarker) {
+ marker.addTo(this);
+ }
+ // map envent;
+
+ public on(type: string, handle: (...args: any[]) => void): void {
+ SceneEventList.indexOf(type) === -1
+ ? this.mapService.on(type, handle)
+ : this.sceneService.on(type, handle);
+ }
+
+ public off(type: string, handle: (...args: any[]) => void): void {
+ SceneEventList.indexOf(type) === -1
+ ? this.mapService.off(type, handle)
+ : this.sceneService.off(type, handle);
+ }
+
+ // map method
+
+ public getZoom(): number {
+ return this.mapService.getZoom();
+ }
+
+ public getCenter(): ILngLat {
+ return this.mapService.getCenter();
+ }
+
+ public getPitch(): number {
+ return this.mapService.getPitch();
+ }
+
+ public getRotation(): number {
+ return this.mapService.getRotation();
+ }
+
+ public getBounds(): Bounds {
+ return this.mapService.getBounds();
+ }
+
+ // set Map status
+
+ public setRotation(rotation: number): void {
+ this.mapService.setRotation(rotation);
+ }
+ public zoomIn(): void {
+ this.mapService.zoomIn();
+ }
+
+ public zoomOut(): void {
+ this.mapService.zoomOut();
+ }
+
+ public panTo(p: Point): void {
+ this.mapService.panTo(p);
+ }
+
+ public panBy(pixel: Point): void {
+ this.mapService.panTo(pixel);
+ }
+
+ public fitBounds(bound: Bounds): void {
+ this.mapService.fitBounds(bound);
+ }
+
+ public setZoomAndCenter(zoom: number, center: Point): void {
+ this.mapService.setZoomAndCenter(zoom, center);
+ }
+
+ public setMapStyle(style: string): void {
+ this.mapService.setMapStyle(style);
+ }
+
+ // conversion Method
+ public pixelToLngLat(pixel: Point): ILngLat {
+ return this.mapService.pixelToLngLat(pixel);
+ }
+
+ public lngLatToPixel(lnglat: Point): IPoint {
+ return this.mapService.lngLatToPixel(lnglat);
+ }
+
+ public containerToLngLat(pixel: Point): ILngLat {
+ return this.mapService.containerToLngLat(pixel);
+ }
+
+ public lngLatToContainer(lnglat: Point): IPoint {
+ return this.mapService.lngLatToContainer(lnglat);
+ }
+
+ public destroy() {
+ this.sceneService.destroy();
+ // TODO: 清理其他 Service 例如 IconService
+ }
+
+ private initControl(): void {
+ this.addControl(new Logo());
+ }
+
+ // 资源管理
+}
+
+export { Scene };
diff --git a/packages/scene/tsconfig.build.json b/packages/scene/tsconfig.build.json
new file mode 100644
index 0000000000..17f6c4525a
--- /dev/null
+++ b/packages/scene/tsconfig.build.json
@@ -0,0 +1,9 @@
+{
+ "extends": "../../tsconfig.build.json",
+ "compilerOptions": {
+ "declarationDir": "./es",
+ "rootDir": "./src",
+ "baseUrl": "./"
+ },
+ "include": ["./src"]
+}
\ No newline at end of file
diff --git a/packages/source/.gitignore b/packages/source/.gitignore
new file mode 100644
index 0000000000..49c199b6ab
--- /dev/null
+++ b/packages/source/.gitignore
@@ -0,0 +1,3 @@
+lib
+es
+dist
diff --git a/packages/source/__tests__/data/csv.ts b/packages/source/__tests__/data/csv.ts
new file mode 100644
index 0000000000..544ce107da
--- /dev/null
+++ b/packages/source/__tests__/data/csv.ts
@@ -0,0 +1,24 @@
+const csvData: string = `lat,lng
+30.276149,120.134107
+30.282163,120.124196
+30.274328,120.133228
+30.261044,120.129313
+30.275465,120.130145
+30.275899,120.133798
+30.275337,120.133301
+30.267925,120.127693
+30.274128,120.133302
+30.276134,120.133701
+30.271074,120.130644
+30.273078,120.133634
+30.283676,120.135383
+30.274393,120.133392
+30.274166,120.135521
+30.275843,120.133903
+30.276774,120.130388
+30.276638,120.127044
+30.272734,120.133633
+30.276321,120.133722
+30.269838,120.123237`;
+
+export default csvData;
diff --git a/packages/source/__tests__/data/json.ts b/packages/source/__tests__/data/json.ts
new file mode 100644
index 0000000000..40e7b2286f
--- /dev/null
+++ b/packages/source/__tests__/data/json.ts
@@ -0,0 +1,24 @@
+import { IJsonData } from '../../src/interface';
+const data1: IJsonData = [
+ {
+ lng: 112.323,
+ lat: 30.456,
+ name: 'dog',
+ },
+ {
+ lng: 112.323,
+ lat: 30.456,
+ name: 'cat',
+ },
+];
+const data2: IJsonData = [
+ {
+ coord: [112.323, 30.456],
+ name: 'dog',
+ },
+ {
+ coord: [110.234, 1234],
+ name: 'cat',
+ },
+];
+export { data1, data2 };
diff --git a/packages/source/__tests__/data/polygon.ts b/packages/source/__tests__/data/polygon.ts
new file mode 100644
index 0000000000..da9f189c0f
--- /dev/null
+++ b/packages/source/__tests__/data/polygon.ts
@@ -0,0 +1,65 @@
+import { FeatureCollection, Geometries, Properties } from '@turf/helpers';
+
+const Polygon: FeatureCollection = {
+ type: 'FeatureCollection',
+ features: [
+ {
+ type: 'Feature',
+ properties: {
+ name: 'tom',
+ },
+ geometry: {
+ type: 'Polygon',
+ coordinates: [
+ [
+ [114.25077438354492, 30.600093873550072],
+ [114.26502227783203, 30.600093873550072],
+ [114.26502227783203, 30.60807236997211],
+ [114.25077438354492, 30.60807236997211],
+ [114.25077438354492, 30.600093873550072],
+ ],
+ ],
+ },
+ },
+ {
+ type: 'Feature',
+ properties: {
+ name: 'joy',
+ },
+ geometry: {
+ type: 'Polygon',
+ coordinates: [
+ [
+ [114.31137084960938, 30.600093873550072],
+ [114.30656433105469, 30.589602628298536],
+ [114.31549072265625, 30.571572765814274],
+ [114.32167053222655, 30.593149091802424],
+ [114.32424545288086, 30.59965060448085],
+ [114.31137084960938, 30.600093873550072],
+ ],
+ ],
+ },
+ },
+ {
+ type: 'Feature',
+ properties: {
+ name: 'dog',
+ },
+ geometry: {
+ type: 'Polygon',
+ coordinates: [
+ [
+ [114.26004409790039, 30.57024256120887],
+ [114.24373626708983, 30.563886887421297],
+ [114.25472259521484, 30.555756930350302],
+ [114.26776885986328, 30.55560910664438],
+ [114.27618026733398, 30.56832112235078],
+ [114.26004409790039, 30.57024256120887],
+ ],
+ ],
+ },
+ },
+ ],
+};
+
+export default Polygon;
diff --git a/packages/source/__tests__/parser/csv.spec.ts b/packages/source/__tests__/parser/csv.spec.ts
new file mode 100644
index 0000000000..e591a8cac5
--- /dev/null
+++ b/packages/source/__tests__/parser/csv.spec.ts
@@ -0,0 +1,12 @@
+import csv from '../../src/parser/csv';
+import csvData from '../data/csv';
+describe('parser.json', () => {
+ it('parser json x, y ', () => {
+ const result = csv(csvData, {
+ type: 'json',
+ x: 'lng',
+ y: 'lat',
+ });
+ expect(result.dataArray.length).toEqual(21);
+ });
+});
diff --git a/packages/source/__tests__/parser/geojson.spec.ts b/packages/source/__tests__/parser/geojson.spec.ts
new file mode 100644
index 0000000000..df84f5c0cd
--- /dev/null
+++ b/packages/source/__tests__/parser/geojson.spec.ts
@@ -0,0 +1,22 @@
+import geojson from '../../src/parser/geojson';
+import polygon from '../data/polygon';
+
+describe('parser.geojson', () => {
+ it('parser json', () => {
+ const result = geojson(polygon);
+ expect(result.dataArray.length).toEqual(3);
+ });
+ it('parser json hash id ', () => {
+ const result = geojson(polygon, {
+ idField: 'name',
+ });
+ expect(result.dataArray.length).toEqual(3);
+ if (result.featureKeys) {
+ expect(Object.keys(result.featureKeys)).toEqual([
+ '408534',
+ '410464',
+ '431974',
+ ]);
+ }
+ });
+});
diff --git a/packages/source/__tests__/parser/json.spec.ts b/packages/source/__tests__/parser/json.spec.ts
new file mode 100644
index 0000000000..d4395f332a
--- /dev/null
+++ b/packages/source/__tests__/parser/json.spec.ts
@@ -0,0 +1,19 @@
+import json from '../../src/parser/json';
+import { data1, data2 } from '../data/json';
+describe('parser.json', () => {
+ it('parser json x, y ', () => {
+ const result = json(data1, {
+ type: 'json',
+ x: 'lng',
+ y: 'lat',
+ });
+ expect(result.dataArray.length).toEqual(2);
+ });
+ it('parser json coordinate', () => {
+ const result = json(data2, {
+ type: 'json',
+ coordinates: 'coord',
+ });
+ expect(result.dataArray.length).toEqual(2);
+ });
+});
diff --git a/packages/source/__tests__/source.spec.ts b/packages/source/__tests__/source.spec.ts
new file mode 100644
index 0000000000..48086eaca4
--- /dev/null
+++ b/packages/source/__tests__/source.spec.ts
@@ -0,0 +1,14 @@
+import Source from '../src/source';
+import Polygon from './data/polygon';
+
+describe('source constructor', () => {
+ it('source.constructor', () => {
+ const source = new Source(Polygon);
+ expect(source.extent).toEqual([
+ 114.24373626708983,
+ 30.55560910664438,
+ 114.32424545288086,
+ 30.60807236997211,
+ ]);
+ });
+});
diff --git a/packages/source/package.json b/packages/source/package.json
new file mode 100644
index 0000000000..0acdc79e1c
--- /dev/null
+++ b/packages/source/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "@l7/source",
+ "version": "0.0.1",
+ "description": "",
+ "main": "lib/index.js",
+ "module": "es/index.js",
+ "types": "es/index.d.ts",
+ "sideEffects": true,
+ "files": [
+ "lib",
+ "es",
+ "README.md"
+ ],
+ "scripts": {
+ "tsc": "tsc --project tsconfig.build.json",
+ "clean": "rimraf dist; rimraf es; rimraf lib;",
+ "build": "run-p build:*",
+ "build:cjs": "BABEL_ENV=cjs babel src --root-mode upward --out-dir lib --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
+ "build:esm": "BABEL_ENV=esm babel src --root-mode upward --out-dir es --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
+ "watch": "BABEL_ENV=cjs babel src --watch --root-mode upward --out-dir lib --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
+ "lint:ts": "run-p -c lint:ts-*",
+ "test": "jest"
+ },
+ "author": "lzxue",
+ "license": "ISC",
+ "dependencies": {
+ "@l7/core": "0.0.1",
+ "@l7/utils": "0.0.1",
+ "@mapbox/geojson-rewind": "^0.4.0",
+ "@turf/helpers": "^6.1.4",
+ "@turf/invariant": "^6.1.2",
+ "@turf/meta": "^6.0.2",
+ "d3-dsv": "^1.1.1",
+ "d3-hexbin": "^0.2.2",
+ "eventemitter3": "^4.0.0",
+ "gl-matrix": "^3.1.0",
+ "inversify": "^5.0.1",
+ "inversify-inject-decorators": "^3.1.0",
+ "inversify-logging": "^0.2.1",
+ "lodash": "^4.17.15",
+ "reflect-metadata": "^0.1.13",
+ "supercluster": "^6.0.2",
+ "tapable": "^2.0.0-beta.8"
+ },
+ "devDependencies": {
+ "@types/d3-dsv": "^1.0.36",
+ "@types/d3-hexbin": "^0.2.3",
+ "@types/gl-matrix": "^2.4.5",
+ "@types/lodash": "^4.14.138",
+ "@types/viewport-mercator-project": "^6.1.0"
+ },
+ "gitHead": "0563f357f3a07c099bf1ffa9350e6fa3c88353ae",
+ "publishConfig": {
+ "access": "public"
+ }
+}
diff --git a/packages/source/src/factory.ts b/packages/source/src/factory.ts
new file mode 100644
index 0000000000..b7c2b5d644
--- /dev/null
+++ b/packages/source/src/factory.ts
@@ -0,0 +1,24 @@
+import { IParserCfg, ITransform } from '@l7/core';
+import { IParserData } from './interface';
+type ParserFunction = (data: any, cfg?: any) => IParserData;
+type transformFunction = (data: IParserData, cfg?: any) => IParserData;
+const TRANSFORMS: {
+ [type: string]: transformFunction;
+} = {};
+const PARSERS: {
+ [type: string]: ParserFunction;
+} = {};
+export const getParser = (type: string) => PARSERS[type];
+export const registerParser = (
+ type: string,
+ parserFunction: ParserFunction,
+): void => {
+ PARSERS[type] = parserFunction;
+};
+export const getTransform = (type: string) => TRANSFORMS[type];
+export const registerTransform = (
+ type: string,
+ transFunction: transformFunction,
+): void => {
+ TRANSFORMS[type] = transFunction;
+};
diff --git a/packages/source/src/index.ts b/packages/source/src/index.ts
new file mode 100644
index 0000000000..b4f693a4ca
--- /dev/null
+++ b/packages/source/src/index.ts
@@ -0,0 +1,27 @@
+import { registerParser, registerTransform } from './factory';
+import csv from './parser/csv';
+import geojson from './parser/geojson';
+import image from './parser/image';
+import json from './parser/json';
+import raster from './parser/raster';
+import Source from './source';
+import { cluster } from './transform/cluster';
+import { aggregatorToGrid } from './transform/grid';
+import { pointToHexbin } from './transform/hexagon';
+export default Source;
+registerParser('geojson', geojson);
+registerParser('image', image);
+registerParser('csv', csv);
+registerParser('json', json);
+registerParser('raster', raster);
+registerTransform('cluster', cluster);
+registerTransform('grid', aggregatorToGrid);
+registerTransform('hexagon', pointToHexbin);
+export {
+ getTransform,
+ registerTransform,
+ getParser,
+ registerParser,
+} from './factory';
+
+export * from './interface';
diff --git a/packages/source/src/interface.ts b/packages/source/src/interface.ts
new file mode 100644
index 0000000000..fa6612f2ef
--- /dev/null
+++ b/packages/source/src/interface.ts
@@ -0,0 +1,26 @@
+export type DataType = string | object[] | object;
+export interface IDictionary {
+ [key: string]: TValue;
+}
+export interface IFeatureKey {
+ [key: string]: {
+ index: number;
+ idField: any;
+ };
+}
+// 解析后返回数据类型
+export interface IParseDataItem {
+ coordinates: any[];
+ _id: number;
+ [key: string]: any;
+}
+export interface IParserData {
+ [key: string]: any;
+ dataArray: IParseDataItem[];
+ // 瓦片地图数据字典
+ featureKeys?: IFeatureKey;
+}
+export interface IJsonItem {
+ [key: string]: any;
+}
+export type IJsonData = IJsonItem[];
diff --git a/packages/source/src/parser/csv.ts b/packages/source/src/parser/csv.ts
new file mode 100644
index 0000000000..90bf9177ab
--- /dev/null
+++ b/packages/source/src/parser/csv.ts
@@ -0,0 +1,7 @@
+import { IJsonData, IParserCfg, IParserData } from '@l7/core';
+import { csvParse } from 'd3-dsv';
+import json from './json';
+export default function csv(data: string, cfg: IParserCfg): IParserData {
+ const csvData: IJsonData = csvParse(data);
+ return json(csvData, cfg);
+}
diff --git a/packages/source/src/parser/geojson.ts b/packages/source/src/parser/geojson.ts
new file mode 100644
index 0000000000..67fb42eb4c
--- /dev/null
+++ b/packages/source/src/parser/geojson.ts
@@ -0,0 +1,72 @@
+import { djb2hash } from '@l7/utils';
+// @ts-ignore
+import rewind from '@mapbox/geojson-rewind';
+import {
+ Feature,
+ FeatureCollection,
+ Geometries,
+ Geometry,
+ Properties,
+} from '@turf/helpers';
+import { getCoords } from '@turf/invariant';
+import * as turfMeta from '@turf/meta';
+import { IFeatureKey, IParseDataItem, IParserData } from '../interface';
+interface IGeoJSON {
+ features: object[];
+}
+interface IParserCFG {
+ idField?: string;
+ [key: string]: any;
+}
+export default function geoJSON(
+ data: FeatureCollection,
+ cfg?: IParserCFG,
+): IParserData {
+ rewind(data, true); // 设置地理多边形方向 If clockwise is true, the outer ring is clockwise, otherwise it is counterclockwise.
+ const resultData: IParseDataItem[] = [];
+ const featureKeys: IFeatureKey = {};
+ data.features = data.features.filter((item: Feature) => {
+ const geometry: Geometry | null = item.geometry as Geometry;
+ return (
+ item != null &&
+ geometry &&
+ geometry.type &&
+ geometry.coordinates &&
+ geometry.coordinates.length > 0
+ );
+ });
+ // 数据为空时处理
+ let i = 0;
+ // multi polygon 拆分
+ turfMeta.flattenEach(
+ data,
+ (currentFeature: Feature, featureIndex: number) => {
+ const coord = getCoords(currentFeature);
+ let id = featureIndex;
+ // 瓦片数据通过字段hash建立索引
+ if (
+ cfg &&
+ cfg.idField &&
+ currentFeature.properties &&
+ currentFeature.properties[cfg.idField]
+ ) {
+ const value = currentFeature.properties[cfg.idField];
+ id = djb2hash(value) % 1000019;
+ featureKeys[id] = {
+ index: i++,
+ idField: value,
+ };
+ }
+ const dataItem: IParseDataItem = {
+ ...currentFeature.properties,
+ coordinates: coord,
+ _id: id,
+ };
+ resultData.push(dataItem);
+ },
+ );
+ return {
+ dataArray: resultData,
+ featureKeys,
+ };
+}
diff --git a/packages/source/src/parser/image.ts b/packages/source/src/parser/image.ts
new file mode 100644
index 0000000000..966291162f
--- /dev/null
+++ b/packages/source/src/parser/image.ts
@@ -0,0 +1,53 @@
+import { IParserData } from '@l7/core';
+import { getImage } from '@l7/utils';
+interface IImageCfg {
+ extent: [number, number, number, number];
+}
+export default function image(
+ data: string | string[],
+ cfg: IImageCfg,
+): IParserData {
+ const { extent } = cfg;
+ const images = new Promise((resolve) => {
+ loadData(data, (res: any) => {
+ resolve(res);
+ });
+ });
+ const resultData: IParserData = {
+ images,
+ _id: 1,
+ dataArray: [
+ {
+ _id: 0,
+ coordinates: [
+ [extent[0], extent[1]],
+ [extent[2], extent[3]],
+ ],
+ },
+ ],
+ };
+ return resultData;
+}
+function loadData(data: string | string[], done: any) {
+ const url = data;
+ const imageDatas: HTMLImageElement[] = [];
+ if (typeof url === 'string') {
+ getImage({ url }, (err: string, img: HTMLImageElement) => {
+ imageDatas.push(img);
+ done(imageDatas);
+ });
+ } else {
+ const imageCount = url.length;
+ let imageindex = 0;
+ url.forEach((item) => {
+ getImage({ url: item }, (err: any, img: HTMLImageElement) => {
+ imageindex++;
+ imageDatas.push(img);
+ if (imageindex === imageCount) {
+ done(imageDatas);
+ }
+ });
+ });
+ }
+ return image;
+}
diff --git a/packages/source/src/parser/index.ts b/packages/source/src/parser/index.ts
new file mode 100644
index 0000000000..1b0f067281
--- /dev/null
+++ b/packages/source/src/parser/index.ts
@@ -0,0 +1 @@
+export { default as geojson } from './geojson';
diff --git a/packages/source/src/parser/json.ts b/packages/source/src/parser/json.ts
new file mode 100644
index 0000000000..4cf4088f6a
--- /dev/null
+++ b/packages/source/src/parser/json.ts
@@ -0,0 +1,51 @@
+// @ts-ignore
+import {
+ IJsonData,
+ IJsonItem,
+ IParseDataItem,
+ IParserCfg,
+ IParserData,
+} from '@l7/core';
+// @ts-ignore
+import rewind from '@mapbox/geojson-rewind';
+export default function json(data: IJsonData, cfg: IParserCfg): IParserData {
+ const { x, y, x1, y1, coordinates } = cfg;
+ const resultData: IParseDataItem[] = [];
+ data.forEach((col: IJsonItem, featureIndex: number) => {
+ let coords = [];
+ if (x && y) {
+ coords = [parseFloat(col[x]), parseFloat(col[y])];
+ } // 点数据
+ if (x && y && x1 && y1) {
+ // 弧线 或者线段
+ coords = [
+ [parseFloat(col[x]), parseFloat(col[y])],
+ [parseFloat(col[x1]), parseFloat(col[y1])],
+ ];
+ }
+ if (coordinates) {
+ let type = 'Polygon';
+ if (!Array.isArray(coordinates[0])) {
+ type = 'Point';
+ }
+ if (Array.isArray(coordinates[0]) && !Array.isArray(coordinates[0][0])) {
+ type = 'LineString';
+ }
+ const geometry = {
+ type,
+ coordinates: [...col[coordinates]],
+ };
+ rewind(geometry, true);
+ coords = geometry.coordinates;
+ }
+ const dataItem = {
+ ...col,
+ _id: featureIndex,
+ coordinates: coords,
+ };
+ resultData.push(dataItem);
+ });
+ return {
+ dataArray: resultData,
+ };
+}
diff --git a/packages/source/src/parser/raster.ts b/packages/source/src/parser/raster.ts
new file mode 100644
index 0000000000..7c3bf6f1ba
--- /dev/null
+++ b/packages/source/src/parser/raster.ts
@@ -0,0 +1,22 @@
+import { IParserData, IRasterCfg } from '@l7/core';
+export default function raster(data: number[], cfg: IRasterCfg): IParserData {
+ const { extent, width, height, min, max } = cfg;
+ const resultData = {
+ _id: 1,
+ dataArray: [
+ {
+ _id: 1,
+ data: Array.from(data),
+ width,
+ height,
+ min,
+ max,
+ coordinates: [
+ [extent[0], extent[1]],
+ [extent[2], extent[3]],
+ ],
+ },
+ ],
+ };
+ return resultData;
+}
diff --git a/packages/source/src/source.ts b/packages/source/src/source.ts
new file mode 100644
index 0000000000..9caa6e2534
--- /dev/null
+++ b/packages/source/src/source.ts
@@ -0,0 +1,66 @@
+import { IParserCfg, IParserData, ISourceCFG, ITransform } from '@l7/core';
+import { extent } from '@l7/utils';
+import { BBox, FeatureCollection, Geometries, Properties } from '@turf/helpers';
+import { EventEmitter } from 'eventemitter3';
+import { cloneDeep } from 'lodash';
+import { SyncHook } from 'tapable';
+import { getParser, getTransform } from './';
+export default class Source extends EventEmitter {
+ public data: IParserData;
+
+ // 数据范围
+ public extent: BBox;
+ // 生命周期钩子
+ public hooks = {
+ init: new SyncHook(['source']),
+ layout: new SyncHook(['source']),
+ update: new SyncHook(['source']),
+ };
+ public parser: IParserCfg = { type: 'geojson' };
+ public transforms: ITransform[] = [];
+
+ // 原始数据
+ private originData: any;
+ constructor(data: any, cfg?: ISourceCFG) {
+ super();
+ this.data = cloneDeep(data);
+ this.originData = data;
+ if (cfg) {
+ if (cfg.parser) {
+ this.parser = cfg.parser;
+ }
+ if (cfg.transforms) {
+ this.transforms = cfg.transforms;
+ }
+ }
+ this.hooks.init.tap('parser', () => {
+ this.excuteParser();
+ });
+ this.hooks.init.tap('transform', () => {
+ this.executeTrans();
+ });
+ this.init();
+ }
+ private excuteParser(): void {
+ const parser = this.parser;
+ const type: string = parser.type || 'geojson';
+ const sourceParser = getParser(type);
+ this.data = sourceParser(this.originData, parser);
+ // 计算范围
+ this.extent = extent(this.data.dataArray);
+ }
+ /**
+ * 数据统计
+ */
+ private executeTrans() {
+ const trans = this.transforms;
+ trans.forEach((tran: ITransform) => {
+ const { type } = tran;
+ const data = getTransform(type)(this.data, tran);
+ Object.assign(this.data, data);
+ });
+ }
+ private init() {
+ this.hooks.init.call(this);
+ }
+}
diff --git a/packages/source/src/transform/cluster.ts b/packages/source/src/transform/cluster.ts
new file mode 100644
index 0000000000..5ee549286c
--- /dev/null
+++ b/packages/source/src/transform/cluster.ts
@@ -0,0 +1,59 @@
+import { IParserCfg, IParserData, ISourceCFG, ITransform } from '@l7/core';
+import Supercluster from 'supercluster';
+export function cluster(data: IParserData, option: ITransform): IParserData {
+ const { radius = 80, maxZoom = 18, minZoom = 0, field, zoom = 2 } = option;
+ if (data.pointIndex) {
+ const clusterData = data.pointIndex.getClusters(data.extent, zoom);
+ data.dataArray = formatData(clusterData);
+ return data;
+ }
+ const pointIndex = new Supercluster({
+ radius,
+ minZoom,
+ maxZoom,
+ map: (props) => ({ sum: props[field] }), // 根据指定字段求和
+ reduce: (accumulated, props) => {
+ accumulated.sum += props.sum;
+ },
+ });
+ const geojson: {
+ type: string;
+ features: any[];
+ } = {
+ type: 'FeatureCollection',
+ features: [],
+ };
+ geojson.features = data.dataArray.map((item) => {
+ return {
+ type: 'Feature',
+ properties: {
+ [field]: item[field],
+ },
+ geometry: {
+ type: 'Point',
+ coordinates: item.coordinates,
+ },
+ };
+ });
+ pointIndex.load(geojson.features);
+ const clusterPoint = pointIndex.getClusters(data.extent, zoom);
+ const resultData = clusterPoint.map((point, index) => {
+ return {
+ coordinates: point.geometry.coordinates,
+ _id: index + 1,
+ ...point.properties,
+ };
+ });
+ data.dataArray = resultData;
+ data.pointIndex = pointIndex;
+ return data;
+}
+export function formatData(clusterPoint: any[]) {
+ return clusterPoint.map((point, index) => {
+ return {
+ coordinates: point.geometry.coordinates,
+ _id: index + 1,
+ ...point.properties,
+ };
+ });
+}
diff --git a/packages/source/src/transform/grid.ts b/packages/source/src/transform/grid.ts
new file mode 100644
index 0000000000..92f47f1ad5
--- /dev/null
+++ b/packages/source/src/transform/grid.ts
@@ -0,0 +1,113 @@
+/**
+ * 生成四边形热力图
+ */
+import { IParserCfg, IParserData, ISourceCFG, ITransform } from '@l7/core';
+import { aProjectFlat, metersToLngLat } from '@l7/utils';
+import { statMap } from './statistics';
+
+interface IGridHash {
+ [key: string]: any;
+}
+interface IGridOffset {
+ yOffset: number;
+ xOffset: number;
+}
+const R_EARTH = 6378000;
+
+export function aggregatorToGrid(data: IParserData, option: ITransform) {
+ const dataArray = data.dataArray;
+ const { size = 10 } = option;
+ const { gridHash, gridOffset } = _pointsGridHash(dataArray, size);
+ const layerData = _getGridLayerDataFromGridHash(gridHash, gridOffset, option);
+ return {
+ yOffset: gridOffset.yOffset / 1.8,
+ xOffset: gridOffset.xOffset / 1.8,
+ radius: gridOffset.xOffset,
+ type: 'grid',
+ dataArray: layerData,
+ };
+}
+
+function _pointsGridHash(dataArray: any[], size: number) {
+ let latMin = Infinity;
+ let latMax = -Infinity;
+ let pLat;
+ for (const point of dataArray) {
+ pLat = point.coordinates[1];
+ if (Number.isFinite(pLat)) {
+ latMin = pLat < latMin ? pLat : latMin;
+ latMax = pLat > latMax ? pLat : latMax;
+ }
+ }
+ // const centerLat = (latMin + latMax) / 2;
+ const centerLat = 34.54083;
+ const gridOffset = _calculateGridLatLonOffset(size, centerLat);
+ if (gridOffset.xOffset <= 0 || gridOffset.yOffset <= 0) {
+ return { gridHash: {}, gridOffset };
+ }
+ const gridHash: IGridHash = {};
+ for (const point of dataArray) {
+ const lat = point.coordinates[1];
+ const lng = point.coordinates[0];
+
+ if (Number.isFinite(lat) && Number.isFinite(lng)) {
+ const latIdx = Math.floor((lat + 90) / gridOffset.yOffset);
+ const lonIdx = Math.floor((lng + 180) / gridOffset.xOffset);
+ const key = `${latIdx}-${lonIdx}`;
+
+ gridHash[key] = gridHash[key] || { count: 0, points: [] };
+ gridHash[key].count += 1;
+ gridHash[key].points.push(point);
+ }
+ }
+
+ return { gridHash, gridOffset };
+}
+// 计算网格偏移量
+function _calculateGridLatLonOffset(cellSize: number, latitude: number) {
+ const yOffset = _calculateLatOffset(cellSize);
+ const xOffset = _calculateLonOffset(latitude, cellSize);
+ return { yOffset, xOffset };
+}
+
+function _calculateLatOffset(dy: number) {
+ return (dy / R_EARTH) * (180 / Math.PI);
+}
+
+function _calculateLonOffset(lat: number, dx: number) {
+ return ((dx / R_EARTH) * (180 / Math.PI)) / Math.cos((lat * Math.PI) / 180);
+}
+function _getGridLayerDataFromGridHash(
+ gridHash: IGridHash,
+ gridOffset: IGridOffset,
+ option: ITransform,
+) {
+ return Object.keys(gridHash).reduce((accu, key, i) => {
+ const idxs = key.split('-');
+ const latIdx = parseInt(idxs[0], 10);
+ const lonIdx = parseInt(idxs[1], 10);
+ const item: {
+ [key: string]: any;
+ } = {};
+ if (option.field && option.method) {
+ const columns = getColumn(gridHash[key].points, option.field);
+ item[option.method] = statMap[option.method](columns);
+ }
+ Object.assign(item, {
+ _id: i + 1,
+ coordinates: [
+ -180 + gridOffset.xOffset * lonIdx,
+ -90 + gridOffset.yOffset * latIdx,
+ ],
+ count: gridHash[key].count,
+ });
+ // @ts-ignore
+ accu.push(item);
+ return accu;
+ }, []);
+}
+function getColumn(data: any[], columnName: string) {
+ return data.map((item) => {
+ return item[columnName] * 1;
+ });
+}
diff --git a/packages/source/src/transform/grid2.ts b/packages/source/src/transform/grid2.ts
new file mode 100644
index 0000000000..903dfb51cf
--- /dev/null
+++ b/packages/source/src/transform/grid2.ts
@@ -0,0 +1,94 @@
+/**
+ * 生成四边形热力图
+ */
+import {
+ IParseDataItem,
+ IParserCfg,
+ IParserData,
+ ISourceCFG,
+ ITransform,
+} from '@l7/core';
+import { aProjectFlat, metersToLngLat } from '@l7/utils';
+import { statMap } from './statistics';
+
+interface IGridHash {
+ [key: string]: any;
+}
+interface IGridOffset {
+ yOffset: number;
+ xOffset: number;
+}
+interface IRawData {
+ coordinates: [number, number];
+ [key: string]: any;
+}
+const R_EARTH = 6378000;
+
+export function aggregatorToGrid(data: IParserData, option: ITransform) {
+ const dataArray = data.dataArray;
+ const { size = 10 } = option;
+ const pixlSize = ((size / (2 * Math.PI * R_EARTH)) * (256 << 20)) / 2;
+ const screenPoints: IRawData[] = dataArray.map((point: IParseDataItem) => {
+ const [x, y] = aProjectFlat(point.coordinates);
+ return {
+ ...point,
+ coordinates: [parseInt(x.toFixed(0), 10), parseInt(y.toFixed(0), 10)],
+ };
+ });
+ const gridHash = _pointsGridHash(screenPoints, pixlSize);
+ const layerData = _getGridLayerDataFromGridHash(gridHash, pixlSize, option);
+ return {
+ yOffset: pixlSize / 2,
+ xOffset: pixlSize / 2,
+ dataArray: layerData,
+ };
+}
+
+function _pointsGridHash(dataArray: any[], size: number) {
+ const gridHash: IGridHash = {};
+ for (const point of dataArray) {
+ const x = point.coordinates[0];
+ const y = point.coordinates[1];
+ const latIdx = Math.floor(y / size);
+ const lonIdx = Math.floor(x / size);
+ const key = `${latIdx}-${lonIdx}`;
+
+ gridHash[key] = gridHash[key] || { count: 0, points: [] };
+ gridHash[key].count += 1;
+ gridHash[key].points.push(point);
+ }
+
+ return gridHash;
+}
+
+function _getGridLayerDataFromGridHash(
+ gridHash: IGridHash,
+ size: number,
+ option: ITransform,
+) {
+ return Object.keys(gridHash).reduce((accu, key, i) => {
+ const idxs = key.split('-');
+ const latIdx = parseInt(idxs[0], 10);
+ const lonIdx = parseInt(idxs[1], 10);
+ const item: {
+ [key: string]: any;
+ } = {};
+ if (option.field && option.method) {
+ const columns = getColumn(gridHash[key].points, option.field);
+ item[option.method] = statMap[option.method](columns);
+ }
+ Object.assign(item, {
+ _id: i + 1,
+ coordinates: [lonIdx * size, latIdx * size],
+ count: gridHash[key].count,
+ });
+ // @ts-ignore
+ accu.push(item);
+ return accu;
+ }, []);
+}
+function getColumn(data: any[], columnName: string) {
+ return data.map((item) => {
+ return item[columnName] * 1;
+ });
+}
diff --git a/packages/source/src/transform/hexagon.ts b/packages/source/src/transform/hexagon.ts
new file mode 100644
index 0000000000..06cdd48d54
--- /dev/null
+++ b/packages/source/src/transform/hexagon.ts
@@ -0,0 +1,63 @@
+import { aProjectFlat, metersToLngLat } from '@l7/utils';
+import { hexbin } from 'd3-hexbin';
+const R_EARTH = 6378000;
+import {
+ IParseDataItem,
+ IParserCfg,
+ IParserData,
+ ISourceCFG,
+ ITransform,
+} from '@l7/core';
+import { statMap } from './statistics';
+interface IHexBinItem extends Array {
+ x: number;
+ y: number;
+ [key: string]: any;
+}
+interface IRawData {
+ coordinates: [number, number];
+ [key: string]: any;
+}
+export function pointToHexbin(data: IParserData, option: ITransform) {
+ const dataArray = data.dataArray;
+ const { size = 10 } = option;
+ const pixlSize = ((size / (2 * Math.PI * R_EARTH)) * (256 << 20)) / 2;
+ const screenPoints: IRawData[] = dataArray.map((point: IParseDataItem) => {
+ const [x, y] = aProjectFlat(point.coordinates);
+ return {
+ ...point,
+ coordinates: [x, y],
+ };
+ });
+
+ const newHexbin = hexbin()
+ .radius(pixlSize)
+ .x((d: IRawData) => d.coordinates[0])
+ .y((d: IRawData) => d.coordinates[1]);
+ const hexbinBins = newHexbin(screenPoints);
+
+ const result: IParserData = {
+ dataArray: hexbinBins.map((hex: IHexBinItem, index: number) => {
+ if (option.field && option.method) {
+ const columns = getColumn(hex, option.field);
+ hex[option.method] = statMap[option.method](columns);
+ }
+ return {
+ [option.method]: hex[option.method],
+ count: hex.length,
+ coordinates: [hex.x, hex.y],
+ _id: index + 1,
+ };
+ }),
+ radius: pixlSize,
+ xOffset: pixlSize,
+ yOffset: pixlSize,
+ type: 'hexagon',
+ };
+ return result;
+}
+function getColumn(data: IHexBinItem, columnName: string) {
+ return data.map((item: IRawData) => {
+ return item[columnName] * 1;
+ });
+}
diff --git a/packages/source/src/transform/statistics.ts b/packages/source/src/transform/statistics.ts
new file mode 100644
index 0000000000..5f2f4f387c
--- /dev/null
+++ b/packages/source/src/transform/statistics.ts
@@ -0,0 +1,77 @@
+function max(x: number[]) {
+ if (x.length === 0) {
+ throw new Error('max requires at least one data point');
+ }
+
+ let value = x[0];
+ for (let i = 1; i < x.length; i++) {
+ // On the first iteration of this loop, max is
+ // undefined and is thus made the maximum element in the array
+ if (x[i] > value) {
+ value = x[i];
+ }
+ }
+ return value;
+}
+
+function min(x: number[]) {
+ if (x.length === 0) {
+ throw new Error('min requires at least one data point');
+ }
+
+ let value = x[0];
+ for (let i = 1; i < x.length; i++) {
+ // On the first iteration of this loop, min is
+ // undefined and is thus made the minimum element in the array
+ if (x[i] < value) {
+ value = x[i];
+ }
+ }
+ return value;
+}
+
+function sum(x: number[]) {
+ // If the array is empty, we needn't bother computing its sum
+ if (x.length === 0) {
+ return 0;
+ }
+
+ // Initializing the sum as the first number in the array
+ let sumNum = x[0];
+
+ // Keeping track of the floating-point error correction
+ let correction = 0;
+
+ let transition;
+
+ for (let i = 1; i < x.length; i++) {
+ transition = sumNum + x[i] * 1;
+
+ // Here we need to update the correction in a different fashion
+ // if the new absolute value is greater than the absolute sum
+ if (Math.abs(sumNum) >= Math.abs(x[i])) {
+ correction += sumNum - transition + x[i];
+ } else {
+ correction += x[i] - transition + sumNum;
+ }
+
+ sumNum = transition;
+ }
+
+ // Returning the corrected sum
+ return sumNum + correction * 1;
+}
+function mean(x: number[]) {
+ if (x.length === 0) {
+ throw new Error('mean requires at least one data point');
+ }
+ return sum(x) / x.length;
+}
+
+export { sum, max, min, mean };
+export const statMap: { [key: string]: any } = {
+ min,
+ max,
+ mean,
+ sum,
+};
diff --git a/packages/source/tsconfig.build.json b/packages/source/tsconfig.build.json
new file mode 100644
index 0000000000..17f6c4525a
--- /dev/null
+++ b/packages/source/tsconfig.build.json
@@ -0,0 +1,9 @@
+{
+ "extends": "../../tsconfig.build.json",
+ "compilerOptions": {
+ "declarationDir": "./es",
+ "rootDir": "./src",
+ "baseUrl": "./"
+ },
+ "include": ["./src"]
+}
\ No newline at end of file
diff --git a/packages/utils/.gitignore b/packages/utils/.gitignore
new file mode 100644
index 0000000000..49c199b6ab
--- /dev/null
+++ b/packages/utils/.gitignore
@@ -0,0 +1,3 @@
+lib
+es
+dist
diff --git a/packages/utils/__tests__/geo.spec.ts b/packages/utils/__tests__/geo.spec.ts
new file mode 100644
index 0000000000..1e2eb32431
--- /dev/null
+++ b/packages/utils/__tests__/geo.spec.ts
@@ -0,0 +1,8 @@
+import { aProjectFlat, lngLatToMeters, project } from '../src/geo';
+describe('aProjectFlat', () => {
+ it('aProjectFlat', () => {
+ // console.log(aProjectFlat([112, 32]));
+ // console.log(lngLatToMeters([112, 32]));
+ // console.log(project([112, 32]));
+ });
+});
diff --git a/packages/utils/package.json b/packages/utils/package.json
new file mode 100644
index 0000000000..35a735ec74
--- /dev/null
+++ b/packages/utils/package.json
@@ -0,0 +1,43 @@
+{
+ "name": "@l7/utils",
+ "version": "0.0.1",
+ "description": "",
+ "main": "lib/index.js",
+ "module": "es/index.js",
+ "types": "es/index.d.ts",
+ "sideEffects": true,
+ "files": [
+ "lib",
+ "es",
+ "README.md"
+ ],
+ "scripts": {
+ "tsc": "tsc --project tsconfig.build.json",
+ "clean": "rimraf dist; rimraf es; rimraf lib;",
+ "build": "run-p build:*",
+ "build:cjs": "BABEL_ENV=cjs babel src --root-mode upward --out-dir lib --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
+ "build:esm": "BABEL_ENV=esm babel src --root-mode upward --out-dir es --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments",
+ "watch": "BABEL_ENV=cjs babel src --watch --root-mode upward --out-dir lib --source-maps --extensions .ts,.tsx --delete-dir-on-start --no-comments"
+ },
+ "author": "lzxue",
+ "license": "ISC",
+ "dependencies": {
+ "@turf/helpers": "^6.1.4",
+ "eventemitter3": "^4.0.0",
+ "gl-matrix": "^3.1.0",
+ "inversify": "^5.0.1",
+ "inversify-inject-decorators": "^3.1.0",
+ "inversify-logging": "^0.2.1",
+ "lodash": "^4.17.15",
+ "reflect-metadata": "^0.1.13",
+ "tapable": "^2.0.0-beta.8"
+ },
+ "devDependencies": {
+ "@types/gl-matrix": "^2.4.5",
+ "@types/lodash": "^4.14.138"
+ },
+ "gitHead": "0563f357f3a07c099bf1ffa9350e6fa3c88353ae",
+ "publishConfig": {
+ "access": "public"
+ }
+}
diff --git a/packages/utils/src/dom.ts b/packages/utils/src/dom.ts
new file mode 100644
index 0000000000..205cd123ab
--- /dev/null
+++ b/packages/utils/src/dom.ts
@@ -0,0 +1,143 @@
+const docStyle = window.document.documentElement.style;
+type ELType = HTMLElement | SVGElement;
+export function createRendererContainer(domId: string): HTMLDivElement | null {
+ const $wrapper = document.getElementById(domId);
+
+ if ($wrapper) {
+ const $container = document.createElement('div');
+ $container.style.cssText += `
+ position: absolute;
+ top: 0;
+ z-index:2;
+ height: 100%;
+ width: 100%;
+ pointer-events: none;
+ `;
+ $container.id = 'l7_canvaslayer';
+ $wrapper.appendChild($container);
+ return $container;
+ }
+
+ return null;
+}
+
+export function trim(str: string) {
+ return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, '');
+}
+
+// @function splitWords(str: String): String[]
+// Trims and splits the string on whitespace and returns the array of parts.
+export function splitWords(str: string) {
+ return trim(str).split(/\s+/);
+}
+
+function testProp(props: string[]): string {
+ if (!docStyle) {
+ return props[0];
+ }
+ for (const i in props) {
+ if (props[i] && props[i] in docStyle) {
+ return props[i];
+ }
+ }
+
+ return props[0];
+}
+export function create(
+ tagName: string,
+ className?: string,
+ container?: HTMLElement,
+) {
+ const el = document.createElement(tagName);
+ el.className = className || '';
+
+ if (container) {
+ container.appendChild(el);
+ }
+ return el;
+}
+// @function remove(el: HTMLElement)
+// Removes `el` from its parent element
+export function remove(el: ELType) {
+ const parent = el.parentNode;
+ if (parent) {
+ parent.removeChild(el);
+ }
+}
+
+// @function addClass(el: HTMLElement, name: String)
+// Adds `name` to the element's class attribute.
+export function addClass(el: ELType, name: string) {
+ if (el.classList !== undefined) {
+ const classes = splitWords(name);
+ for (let i = 0, len = classes.length; i < len; i++) {
+ el.classList.add(classes[i]);
+ }
+ } else if (!hasClass(el, name)) {
+ const className = getClass(el);
+ setClass(el, (className ? className + ' ' : '') + name);
+ }
+}
+
+// @function removeClass(el: HTMLElement, name: String)
+// Removes `name` from the element's class attribute.
+export function removeClass(el: ELType, name: string) {
+ if (el.classList !== undefined) {
+ el.classList.remove(name);
+ } else {
+ setClass(
+ el,
+ trim((' ' + getClass(el) + ' ').replace(' ' + name + ' ', ' ')),
+ );
+ }
+}
+
+// @function hasClass(el: HTMLElement, name: String): Boolean
+// Returns `true` if the element's class attribute contains `name`.
+export function hasClass(el: ELType, name: string) {
+ if (el.classList !== undefined) {
+ return el.classList.contains(name);
+ }
+ const className = getClass(el);
+ return (
+ className.length > 0 &&
+ new RegExp('(^|\\s)' + name + '(\\s|$)').test(className)
+ );
+}
+
+// @function setClass(el: HTMLElement, name: String)
+// Sets the element's class.
+export function setClass(el: ELType, name: string) {
+ if (el instanceof HTMLElement) {
+ el.className = name;
+ } else {
+ // in case of SVG element
+ el.className.baseVal = name;
+ }
+}
+
+// @function getClass(el: HTMLElement): String
+// Returns the element's class.
+export function getClass(el: ELType) {
+ // Check if the element is an SVGElementInstance and use the correspondingElement instead
+ // (Required for linked SVG elements in IE11.)
+ if (el instanceof SVGElement) {
+ el = el.correspondingElement;
+ }
+ return el.className.baseVal === undefined
+ ? el.className
+ : el.className.baseVal;
+}
+
+export function empty(el: ELType) {
+ while (el.firstChild) {
+ el.removeChild(el.firstChild);
+ }
+}
+
+const transformProp = testProp(['transform', 'WebkitTransform']);
+
+export function setTransform(el: ELType, value: string) {
+ // @ts-ignore
+ el.style[transformProp] = value;
+}
diff --git a/packages/utils/src/event.ts b/packages/utils/src/event.ts
new file mode 100644
index 0000000000..3662f8ebd7
--- /dev/null
+++ b/packages/utils/src/event.ts
@@ -0,0 +1,8 @@
+export function bindAll(fns: string[], context: any) {
+ fns.forEach((fn) => {
+ if (!context[fn]) {
+ return;
+ }
+ context[fn] = context[fn].bind(context);
+ });
+}
diff --git a/packages/utils/src/fetchData.ts b/packages/utils/src/fetchData.ts
new file mode 100644
index 0000000000..a4e874fee6
--- /dev/null
+++ b/packages/utils/src/fetchData.ts
@@ -0,0 +1,125 @@
+class AJAXError extends Error {
+ private status: number;
+ private url: string;
+
+ constructor(message: string, status: number, url: string) {
+ super(message);
+ this.status = status;
+ this.url = url;
+
+ // work around for https://github.com/Rich-Harris/buble/issues/40
+ this.name = this.constructor.name;
+ this.message = message;
+ }
+
+ public toString() {
+ return `${this.name}: ${this.message} (${this.status}): ${this.url}`;
+ }
+}
+
+function makeRequest(requestParameters: any) {
+ const xhr = new XMLHttpRequest();
+
+ xhr.open('GET', requestParameters.url, true);
+ for (const k in requestParameters.headers) {
+ if (requestParameters.headers.hasOwnProperty(k)) {
+ xhr.setRequestHeader(k, requestParameters.headers[k]);
+ }
+ }
+ xhr.withCredentials = requestParameters.credentials === 'include';
+ return xhr;
+}
+
+export const getJSON = (requestParameters: any, callback: any) => {
+ const xhr = makeRequest(requestParameters);
+ xhr.setRequestHeader('Accept', 'application/json');
+ xhr.onerror = () => {
+ callback(new Error(xhr.statusText));
+ };
+ xhr.onload = () => {
+ if (xhr.status >= 200 && xhr.status < 300 && xhr.response) {
+ let data;
+ try {
+ data = JSON.parse(xhr.response);
+ } catch (err) {
+ return callback(err);
+ }
+ callback(null, data);
+ } else {
+ if (xhr.status === 401) {
+ callback(
+ new AJAXError(`${xhr.statusText}`, xhr.status, requestParameters.url),
+ );
+ } else {
+ callback(
+ new AJAXError(xhr.statusText, xhr.status, requestParameters.url),
+ );
+ }
+ }
+ };
+ xhr.send();
+ return xhr;
+};
+
+export const getArrayBuffer = (requestParameters: any, callback: any) => {
+ const xhr = makeRequest(requestParameters);
+ xhr.responseType = 'arraybuffer';
+ xhr.onerror = () => {
+ callback(new Error(xhr.statusText));
+ };
+ xhr.onload = () => {
+ const response = xhr.response;
+ if (response.byteLength === 0 && xhr.status === 200) {
+ return callback(new Error('http status 200 returned without content.'));
+ }
+ if (xhr.status >= 200 && xhr.status < 300 && xhr.response) {
+ callback(null, {
+ data: response,
+ cacheControl: xhr.getResponseHeader('Cache-Control'),
+ expires: xhr.getResponseHeader('Expires'),
+ });
+ } else {
+ callback(
+ new AJAXError(xhr.statusText, xhr.status, requestParameters.url),
+ );
+ }
+ };
+ xhr.send();
+ return xhr;
+};
+
+function sameOrigin(url: string) {
+ const a = window.document.createElement('a');
+ a.href = url;
+ return (
+ a.protocol === window.document.location.protocol &&
+ a.host === window.document.location.host
+ );
+}
+
+const transparentPngUrl =
+ 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII=';
+
+export const getImage = (requestParameters: any, callback: any) => {
+ // request the image with XHR to work around caching issues
+ // see https://github.com/mapbox/mapbox-gl-js/issues/1470
+ return getArrayBuffer(requestParameters, (err: string, imgData: any) => {
+ if (err) {
+ callback(err);
+ } else if (imgData) {
+ const img = new window.Image();
+ img.crossOrigin = 'anonymous';
+ const URL = window.URL || window.webkitURL;
+ img.onload = () => {
+ callback(null, img);
+ URL.revokeObjectURL(img.src);
+ };
+ const blob = new window.Blob([new Uint8Array(imgData.data)], {
+ type: 'image/png',
+ });
+ img.src = imgData.data.byteLength
+ ? URL.createObjectURL(blob)
+ : transparentPngUrl;
+ }
+ });
+};
diff --git a/packages/utils/src/geo.ts b/packages/utils/src/geo.ts
new file mode 100644
index 0000000000..61c6ae1778
--- /dev/null
+++ b/packages/utils/src/geo.ts
@@ -0,0 +1,209 @@
+import {
+ BBox,
+ Coord,
+ degreesToRadians,
+ isObject,
+ radiansToLength,
+ Units,
+} from '@turf/helpers';
+
+const originShift = (2 * Math.PI * 6378137) / 2.0;
+export type Point = number[];
+/**
+ * 计算地理数据范围
+ * @param {dataArray} data 地理坐标数据
+ * @return {Array} dataExtent
+ */
+export function extent(data: any[]): BBox {
+ const dataExtent: BBox = [Infinity, Infinity, -Infinity, -Infinity];
+ data.forEach((item) => {
+ const { coordinates } = item;
+ caculExtent(dataExtent, coordinates);
+ });
+ return dataExtent;
+}
+function caculExtent(dataExtent: BBox, coords: any[]) {
+ if (Array.isArray(coords[0])) {
+ coords.forEach((coord) => {
+ caculExtent(dataExtent, coord);
+ });
+ } else {
+ if (dataExtent[0] > coords[0]) {
+ dataExtent[0] = coords[0];
+ }
+ if (dataExtent[1] > coords[1]) {
+ dataExtent[1] = coords[1];
+ }
+ if (dataExtent[2] < coords[0]) {
+ dataExtent[2] = coords[0];
+ }
+ if (dataExtent[3] < coords[1]) {
+ dataExtent[3] = coords[1];
+ }
+ }
+ return dataExtent;
+}
+
+export function tranfrormCoord(data: any[], cb: (item: any[]) => any) {
+ return transform(data, cb);
+}
+function transform(item: any[], cb: (item: any[]) => any): any {
+ if (Array.isArray(item[0])) {
+ return item.map((coord) => {
+ return transform(coord, cb);
+ });
+ }
+ return cb(item);
+}
+export function lngLatToMeters(lnglat: Point): Point;
+export function lngLatToMeters(
+ lnglat: Point,
+ validate: boolean = true,
+ accuracy = { enable: true, decimal: 1 },
+) {
+ lnglat = validateLngLat(lnglat, validate);
+ const lng = lnglat[0];
+ const lat = lnglat[1];
+ let x = (lng * originShift) / 180.0;
+ let y =
+ Math.log(Math.tan(((90 + lat) * Math.PI) / 360.0)) / (Math.PI / 180.0);
+ y = (y * originShift) / 180.0;
+ if (accuracy.enable) {
+ x = Number(x.toFixed(accuracy.decimal));
+ y = Number(y.toFixed(accuracy.decimal));
+ }
+ return lnglat.length === 3 ? [x, y, lnglat[2]] : [x, y];
+}
+
+export function metersToLngLat(meters: Point, decimal = 6) {
+ const x = meters[0];
+ const y = meters[1];
+ let lng = (x / originShift) * 180.0;
+ let lat = (y / originShift) * 180.0;
+ lat =
+ (180 / Math.PI) *
+ (2 * Math.atan(Math.exp((lat * Math.PI) / 180.0)) - Math.PI / 2.0);
+ if (decimal !== undefined && decimal !== null) {
+ lng = Number(lng.toFixed(decimal));
+ lat = Number(lat.toFixed(decimal));
+ }
+ return meters.length === 3 ? [lng, lat, meters[2]] : [lng, lat];
+}
+export function longitude(lng: number) {
+ if (lng === undefined || lng === null) {
+ throw new Error('lng is required');
+ }
+
+ // lngitudes cannot extends beyond +/-90 degrees
+ if (lng > 180 || lng < -180) {
+ lng = lng % 360;
+ if (lng > 180) {
+ lng = -360 + lng;
+ }
+ if (lng < -180) {
+ lng = 360 + lng;
+ }
+ if (lng === 0) {
+ lng = 0;
+ }
+ }
+ return lng;
+}
+export function latitude(lat: number) {
+ if (lat === undefined || lat === null) {
+ throw new Error('lat is required');
+ }
+
+ if (lat > 90 || lat < -90) {
+ lat = lat % 180;
+ if (lat > 90) {
+ lat = -180 + lat;
+ }
+ if (lat < -90) {
+ lat = 180 + lat;
+ }
+ if (lat === 0) {
+ lat = 0;
+ }
+ }
+ return lat;
+}
+export function validateLngLat(lnglat: Point, validate: boolean): Point {
+ if (validate === false) {
+ return lnglat;
+ }
+
+ const lng = longitude(lnglat[0]);
+ let lat = latitude(lnglat[1]);
+
+ // Global Mercator does not support latitudes within 85 to 90 degrees
+ if (lat > 85) {
+ lat = 85;
+ }
+ if (lat < -85) {
+ lat = -85;
+ }
+ return lnglat.length === 3 ? [lng, lat, lnglat[2]] : [lng, lat];
+}
+export function aProjectFlat(lnglat: number[]) {
+ const maxs = 85.0511287798;
+ const lat = Math.max(Math.min(maxs, lnglat[1]), -maxs);
+ const scale = 256 << 20;
+ let d = Math.PI / 180;
+ let x = lnglat[0] * d;
+ let y = lat * d;
+ y = Math.log(Math.tan(Math.PI / 4 + y / 2));
+
+ const a = 0.5 / Math.PI;
+ const b = 0.5;
+ const c = -0.5 / Math.PI;
+ d = 0.5;
+ x = scale * (a * x + b);
+ y = scale * (c * y + d);
+ return [parseInt(x.toString(), 10), parseInt(y.toString(), 10)];
+}
+export function unProjectFlat(px: number[]): [number, number] {
+ const a = 0.5 / Math.PI;
+ const b = 0.5;
+ const c = -0.5 / Math.PI;
+ let d = 0.5;
+ const scale = 256 << 20;
+ let [x, y] = px;
+ x = (x / scale - b) / a;
+ y = (y / scale - d) / c;
+ y = (Math.atan(Math.pow(Math.E, y)) - Math.PI / 4) * 2;
+ d = Math.PI / 180;
+ const lat = y / d;
+ const lng = x / d;
+ return [lng, lat];
+}
+export function lnglatDistance(
+ coordinates1: [number, number],
+ coordinates2: [number, number],
+ units?: Units,
+): number {
+ const dLat = degreesToRadians(coordinates2[1] - coordinates1[1]);
+ const dLon = degreesToRadians(coordinates2[0] - coordinates1[0]);
+ const lat1 = degreesToRadians(coordinates1[1]);
+ const lat2 = degreesToRadians(coordinates2[1]);
+ const a =
+ Math.pow(Math.sin(dLat / 2), 2) +
+ Math.pow(Math.sin(dLon / 2), 2) * Math.cos(lat1) * Math.cos(lat2);
+
+ return radiansToLength(
+ 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)),
+ (units = 'meters'),
+ );
+}
+
+export function project(lnglat: [number, number]) {
+ const d = Math.PI / 180;
+ const max = 85.0511287798;
+ const earthRadius = 6378137;
+ const lat = Math.max(Math.min(max, lnglat[1]), -max);
+ const sin = Math.sin(lat * d);
+ const x = earthRadius * lnglat[0] * d;
+ const y = (earthRadius * Math.log((1 + sin) / (1 - sin))) / 2;
+
+ return [x, y];
+}
diff --git a/packages/utils/src/hash.ts b/packages/utils/src/hash.ts
new file mode 100644
index 0000000000..ace2ff1694
--- /dev/null
+++ b/packages/utils/src/hash.ts
@@ -0,0 +1,24 @@
+export function BKDRHash(str: string) {
+ const seed = 131;
+ const seed2 = 137;
+ let hash = 0;
+ str += 'x';
+ const MAX_SAFE_INTEGER = Math.floor(9007199254740991 / seed2);
+ for (let i = 0; i < str.length; i++) {
+ if (hash > MAX_SAFE_INTEGER) {
+ hash = Math.floor(hash / seed2);
+ }
+ hash = hash * seed + str.charCodeAt(i);
+ }
+ return hash;
+}
+export function djb2hash(str: string) {
+ str = str.toString();
+ let hash = 5381;
+ let i = str.length;
+
+ while (i) {
+ hash = (hash * 33) ^ str.charCodeAt(--i);
+ }
+ return hash >>> 0;
+}
diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts
new file mode 100644
index 0000000000..d3e73b4277
--- /dev/null
+++ b/packages/utils/src/index.ts
@@ -0,0 +1,7 @@
+export { djb2hash, BKDRHash } from './hash';
+import * as DOM from './dom';
+export * from './fetchData';
+export * from './geo';
+export * from './lru_cache';
+export * from './event';
+export { DOM };
diff --git a/packages/utils/src/lru_cache.ts b/packages/utils/src/lru_cache.ts
new file mode 100644
index 0000000000..4299f87412
--- /dev/null
+++ b/packages/utils/src/lru_cache.ts
@@ -0,0 +1,86 @@
+/**
+ * LRU Cache class with limit
+ *
+ * Update order for each get/set operation
+ * Delete oldest when reach given limit
+ */
+type callback = (...args: any[]) => void;
+interface ICache {
+ [key: string]: any;
+}
+export class LRUCache {
+ private limit: number;
+ private cache: ICache;
+ private destroy: (value: any, key: string) => void;
+ private order: any[];
+ constructor(limit = 50, destroy?: callback) {
+ this.limit = limit;
+ this.destroy = destroy || this.defaultDestroy;
+ this.order = [];
+ this.clear();
+ }
+
+ public clear() {
+ this.order.forEach((key) => {
+ this.delete(key);
+ });
+ this.cache = {};
+ // access/update order, first item is oldest, last item is newest
+ this.order = [];
+ }
+
+ public get(key: string) {
+ const value = this.cache[key];
+ if (value) {
+ // update order
+ this.deleteOrder(key);
+ this.appendOrder(key);
+ }
+ return value;
+ }
+
+ public set(key: string, value: any) {
+ if (!this.cache[key]) {
+ // if reach limit, delete the oldest
+ if (Object.keys(this.cache).length === this.limit) {
+ this.delete(this.order[0]);
+ }
+
+ this.cache[key] = value;
+ this.appendOrder(key);
+ } else {
+ // if found in cache, delete the old one, insert new one to the first of list
+ this.delete(key);
+
+ this.cache[key] = value;
+ this.appendOrder(key);
+ }
+ }
+
+ public delete(key: string) {
+ const value = this.cache[key];
+ if (value) {
+ this.deleteCache(key);
+ this.deleteOrder(key);
+ this.destroy(value, key);
+ }
+ }
+
+ private deleteCache(key: string) {
+ delete this.cache[key];
+ }
+
+ private deleteOrder(key: string) {
+ const index = this.order.findIndex((o) => o === key);
+ if (index >= 0) {
+ this.order.splice(index, 1);
+ }
+ }
+
+ private appendOrder(key: string) {
+ this.order.push(key);
+ }
+ private defaultDestroy(value: any, key: string) {
+ return null;
+ }
+}
diff --git a/packages/utils/tsconfig.build.json b/packages/utils/tsconfig.build.json
new file mode 100644
index 0000000000..17f6c4525a
--- /dev/null
+++ b/packages/utils/tsconfig.build.json
@@ -0,0 +1,9 @@
+{
+ "extends": "../../tsconfig.build.json",
+ "compilerOptions": {
+ "declarationDir": "./es",
+ "rootDir": "./src",
+ "baseUrl": "./"
+ },
+ "include": ["./src"]
+}
\ No newline at end of file
diff --git a/site/css/demo.css b/site/css/demo.css
new file mode 100644
index 0000000000..7b6e46e0e3
--- /dev/null
+++ b/site/css/demo.css
@@ -0,0 +1,21 @@
+.lableclass {
+ position: absolute;
+ display: inline;
+ cursor: pointer;
+ background: rgb(255, 228, 120);
+ border: solid 2px #fff;
+ padding: 4px;
+ white-space: nowrap;
+ font: bold 12px/18px arial, sans-serif;
+ color: #fff;
+ border-radius: 50%;
+ width: 40px;
+ height: 40px;
+ line-height: 30px;
+ /* opacity: 0.7; */
+ text-align: center;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
diff --git a/site/css/home.css b/site/css/home.css
new file mode 100644
index 0000000000..fc6eda07df
--- /dev/null
+++ b/site/css/home.css
@@ -0,0 +1,32 @@
+.home_l7_feature_img {
+ width:100px;
+}
+.feature-logo {
+ height: 100px !important;
+}
+.cover-image {
+ margin-top: 60px;
+ height: 300px;
+
+}
+@media only screen and (max-height: 599) and (max-width: 800px) {
+ .cover-image {
+ margin-top: 40px;
+ margin-left: 260px;
+ max-height: 400px;
+ }
+}
+@media only screen and (min-height: 599px) and (min-width:800px) {
+ .cover-image {
+ margin-top: 40px;
+ margin-left: 10px;
+ height: 600px;
+ }
+}
+@media only screen and (max-height: 599px) and (min-width:800px) {
+ .cover-image {
+ margin-top: 40px;
+ margin-left: 10px;
+ height: 600px;
+ }
+}
diff --git a/site/locale.json b/site/locale.json
new file mode 100644
index 0000000000..cc16452ec4
--- /dev/null
+++ b/site/locale.json
@@ -0,0 +1,18 @@
+{
+ "L7 地理空间数据可视分析引擎": "L7 Geospatial Visualization Analysis",
+ "地理空间数据可视化": "Geospatial Data Visualization Analysis Framework",
+ "L7 是由蚂蚁金服 AntV 数据可视化团队推出的基于WebGL的开源大规模地理空间数据可视分析开发框架。": "Large-scale WebGL-powered Geospatial data visualization analysis framework",
+ "架构灵活且自由":"Flexible and Scalable",
+ "业务专业且通用":"Simple and Universal",
+ "视觉酷炫且动感":"Cool and Dynamic",
+ "支持地图底图,渲染引擎,图层自由定制、扩展,组合":"Support many basemap, many rendering engine, and layer free customization, extension, combination",
+ "以图形符号学地理设计体系理论基础,易用、易理解、专业、专注":"Base on Semiology of Graphics , easy to use, easy to understand, professional, focused",
+ "支持海量数据,2D、3D,动态,可交互,高性能渲染":"Support multiple basemaps, rendering engines, layers can be customized, expanded and combined freely",
+ "蚂蚁数据可视化": "AntV",
+ "继续了解": "More",
+ "更新": "Update",
+ "下载使用":"Download",
+ "浅色色板": "Light Theme",
+ "深色色板": "Dark Theme",
+ "一个个真实的地理数据可视化案例,将复杂的地理数据,通过简单,易用的API接口,让用户达到开箱即用的效果。" : "We have summarized a series of story design templates from lots of real geospatial data visualization cases, so that users can use them directly."
+}
diff --git a/site/pages/index.en.tsx b/site/pages/index.en.tsx
new file mode 100644
index 0000000000..4816cd94d3
--- /dev/null
+++ b/site/pages/index.en.tsx
@@ -0,0 +1,2 @@
+import Index from './index.zh';
+export default Index;
diff --git a/site/pages/index.zh.tsx b/site/pages/index.zh.tsx
index c4578a2078..81072e05ad 100644
--- a/site/pages/index.zh.tsx
+++ b/site/pages/index.zh.tsx
@@ -80,7 +80,11 @@ const IndexPage = () => {
coverImage={
>>>>>> f40e44f... fix(fix): fix
/>
}
title={t('L7 地理空间数据可视分析引擎')}
diff --git a/stories/Animation/Animation.stories.tsx b/stories/Animation/Animation.stories.tsx
new file mode 100644
index 0000000000..44b1b9e505
--- /dev/null
+++ b/stories/Animation/Animation.stories.tsx
@@ -0,0 +1,5 @@
+import { storiesOf } from '@storybook/react';
+import * as React from 'react';
+import Polygon from './components/Polygon';
+// @ts-ignore
+storiesOf('动画', module).add('动态更新指定 feature(s)', () => );
diff --git a/stories/Animation/components/Polygon.tsx b/stories/Animation/components/Polygon.tsx
new file mode 100644
index 0000000000..3786c27b78
--- /dev/null
+++ b/stories/Animation/components/Polygon.tsx
@@ -0,0 +1,101 @@
+// @ts-ignore
+import { PolygonLayer } from '@l7/layers';
+// @ts-ignore
+import { Scene } from '@l7/scene';
+import * as dat from 'dat.gui';
+import * as React from 'react';
+
+function convertRGB2Hex(rgb: number[]) {
+ return (
+ '#' + rgb.map((r) => ('0' + Math.floor(r).toString(16)).slice(-2)).join('')
+ );
+}
+
+export default class Mapbox extends React.Component {
+ private gui: dat.GUI;
+ private $stats: Node;
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ if (this.gui) {
+ this.gui.destroy();
+ }
+ if (this.$stats) {
+ document.body.removeChild(this.$stats);
+ }
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d2e0e930-fd44-4fca-8872-c1037b0fee7b.json',
+ );
+ const scene = new Scene({
+ id: 'map',
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/streets-v9',
+ center: [110.19382669582967, 50.258134],
+ pitch: 0,
+ zoom: 3,
+ });
+ this.scene = scene;
+ const layer = new PolygonLayer({
+ enablePicking: false,
+ });
+
+ layer
+ .source(await response.json())
+ .size('name', [0, 10000, 50000, 30000, 100000])
+ .color('name', [
+ '#2E8AE6',
+ '#69D1AB',
+ '#DAF291',
+ '#FFD591',
+ '#FF7A45',
+ '#CF1D49',
+ ])
+ .shape('fill')
+ .style({
+ opacity: 0.3,
+ });
+ scene.addLayer(layer);
+ scene.render();
+ /*** 运行时修改样式属性 ***/
+ const gui = new dat.GUI();
+ this.gui = gui;
+ const styleOptions = {
+ color: [0, 0, 0],
+ featureRange: {
+ startIndex: 0,
+ endIndex: Infinity,
+ },
+ };
+ const pointFolder = gui.addFolder('精确更新 feature');
+ pointFolder.add(styleOptions.featureRange, 'startIndex', 0, 100, 1);
+ pointFolder.add(styleOptions.featureRange, 'endIndex', 0, 100, 1);
+ pointFolder.addColor(styleOptions, 'color').onChange((color: number[]) => {
+ layer.color('name', [convertRGB2Hex(color)], {
+ featureRange: {
+ startIndex: styleOptions.featureRange.startIndex,
+ endIndex: styleOptions.featureRange.endIndex,
+ },
+ });
+ scene.render();
+ });
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/Layers/Layers.stories.tsx b/stories/Layers/Layers.stories.tsx
new file mode 100644
index 0000000000..1625fe47f2
--- /dev/null
+++ b/stories/Layers/Layers.stories.tsx
@@ -0,0 +1,27 @@
+import { storiesOf } from '@storybook/react';
+import * as React from 'react';
+import Arc2DLineDemo from './components/Arc2DLine';
+import ArcLineDemo from './components/Arcline';
+import HeatMapDemo from './components/heatMap';
+import GridHeatMap from './components/heatMapgrid';
+import LineLayer from './components/Line';
+import PointDemo from './components/Point';
+import Point3D from './components/Point3D';
+import PointImage from './components/pointImage';
+import Polygon3D from './components/polygon3D';
+import ImageLayerDemo from './components/rasterImage';
+import RasterLayerDemo from './components/RasterLayer';
+
+// @ts-ignore
+storiesOf('图层', module)
+ .add('点图层', () => )
+ .add('3D点', () => )
+ .add('图片标注', () => )
+ .add('面3d图层', () => )
+ .add('线图层', () => )
+ .add('3D弧线', () => )
+ .add('2D弧线', () => )
+ .add('网格热力图', () => )
+ .add('热力图', () => )
+ .add('栅格', () => )
+ .add('图片', () => );
diff --git a/stories/Layers/components/Arc2DLine.tsx b/stories/Layers/components/Arc2DLine.tsx
new file mode 100644
index 0000000000..8629a3f8e8
--- /dev/null
+++ b/stories/Layers/components/Arc2DLine.tsx
@@ -0,0 +1,56 @@
+import { Arc2DLineLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+import * as React from 'react';
+
+export default class Arc2DLineDemo extends React.Component {
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/rmsportal/UEXQMifxtkQlYfChpPwT.txt',
+ );
+ const scene = new Scene({
+ center: [116.2825, 39.9],
+ id: 'map',
+ pitch: 0,
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/dark-v9',
+ zoom: 2,
+ });
+ const lineLayer = new Arc2DLineLayer({})
+ .source(await response.text(), {
+ parser: {
+ type: 'csv',
+ x: 'lng1',
+ y: 'lat1',
+ x1: 'lng2',
+ y1: 'lat2',
+ },
+ })
+ .size(0.5)
+ .shape('arc')
+ .color('rgb(13,64,140)');
+ scene.addLayer(lineLayer);
+ scene.render();
+ this.scene = scene;
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/Layers/components/Arcline.tsx b/stories/Layers/components/Arcline.tsx
new file mode 100644
index 0000000000..0ffe2e4439
--- /dev/null
+++ b/stories/Layers/components/Arcline.tsx
@@ -0,0 +1,56 @@
+import { ArcLineLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+import * as React from 'react';
+
+export default class ArcLineDemo extends React.Component {
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/rmsportal/UEXQMifxtkQlYfChpPwT.txt',
+ );
+ const scene = new Scene({
+ center: [116.2825, 39.9],
+ id: 'map',
+ pitch: 0,
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/dark-v9',
+ zoom: 2,
+ });
+ const lineLayer = new ArcLineLayer({})
+ .source(await response.text(), {
+ parser: {
+ type: 'csv',
+ x: 'lng1',
+ y: 'lat1',
+ x1: 'lng2',
+ y1: 'lat2',
+ },
+ })
+ .size(0.5)
+ .shape('arc')
+ .color('rgb(13,64,140)');
+ scene.addLayer(lineLayer);
+ scene.render();
+ this.scene = scene;
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/Layers/components/Line.tsx b/stories/Layers/components/Line.tsx
new file mode 100644
index 0000000000..e3542876d2
--- /dev/null
+++ b/stories/Layers/components/Line.tsx
@@ -0,0 +1,80 @@
+import { LineLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+import * as React from 'react';
+
+export default class LineDemo extends React.Component {
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/rmsportal/ZVfOvhVCzwBkISNsuKCc.json',
+ );
+ const testdata = {
+ type: 'FeatureCollection',
+ features: [
+ {
+ type: 'Feature',
+ properties: {},
+ geometry: {
+ type: 'LineString',
+ coordinates: [
+ [91.58203125, 34.95799531086792],
+ [96.767578125, 34.379712580462204],
+ [99.228515625, 33.7243396617476],
+ ],
+ },
+ },
+ ],
+ };
+ const scene = new Scene({
+ center: [102.602992, 23.107329],
+ id: 'map',
+ pitch: 0,
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/dark-v9',
+ zoom: 13,
+ });
+ const lineLayer = new LineLayer({})
+ .source(await response.json())
+ .size(1)
+ .shape('line')
+ .color(
+ 'ELEV',
+ [
+ '#E8FCFF',
+ '#CFF6FF',
+ '#A1E9ff',
+ '#65CEF7',
+ '#3CB1F0',
+ '#2894E0',
+ '#1772c2',
+ '#105CB3',
+ '#0D408C',
+ '#002466',
+ ].reverse(),
+ )
+
+ scene.addLayer(lineLayer);
+ scene.render();
+ this.scene = scene;
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/Layers/components/Point.tsx b/stories/Layers/components/Point.tsx
new file mode 100644
index 0000000000..303a9217d6
--- /dev/null
+++ b/stories/Layers/components/Point.tsx
@@ -0,0 +1,81 @@
+import { PointLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+import * as React from 'react';
+import data from '../data/data.json';
+export default class Point3D extends React.Component {
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ this.scene.destroy();
+ }
+
+ public componentDidMount() {
+ const scene = new Scene({
+ center: [120.19382669582967, 30.258134],
+ id: 'map',
+ pitch: 0,
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/streets-v9',
+ zoom: 1,
+ });
+ const pointLayer = new PointLayer({});
+ const p1 = {
+ type: 'FeatureCollection',
+ features: [
+ {
+ type: 'Feature',
+ properties: {},
+ geometry: {
+ type: 'Point',
+ coordinates: [83.671875, 44.84029065139799],
+ },
+ },
+ ],
+ };
+ pointLayer
+ .source(data)
+ .color('name', [
+ '#FFF5B8',
+ '#FFDC7D',
+ '#FFAB5C',
+ '#F27049',
+ '#D42F31',
+ '#730D1C',
+ ])
+ .shape('subregion',[
+ 'circle',
+ 'triangle',
+ 'square',
+ 'pentagon',
+ 'hexagon',
+ 'octogon',
+ 'hexagram',
+ 'rhombus',
+ 'vesica',
+ ])
+ .size('scalerank', [5,10])
+ .style({
+ opacity: 1.0
+ })
+ ;
+ scene.addLayer(pointLayer);
+ console.log(pointLayer);
+ scene.render();
+ this.scene = scene;
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/Layers/components/Point3D.tsx b/stories/Layers/components/Point3D.tsx
new file mode 100644
index 0000000000..34b8e4315f
--- /dev/null
+++ b/stories/Layers/components/Point3D.tsx
@@ -0,0 +1,59 @@
+import { Point3dLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+import * as React from 'react';
+import data from '../data/data.json';
+export default class Point3D extends React.Component {
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ this.scene.destroy();
+ }
+
+ public componentDidMount() {
+ const scene = new Scene({
+ center: [120.19382669582967, 30.258134],
+ id: 'map',
+ pitch: 0,
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/streets-v9',
+ zoom: 1,
+ });
+ const pointLayer = new Point3dLayer({});
+ const p1 = {
+ type: 'FeatureCollection',
+ features: [
+ {
+ type: 'Feature',
+ properties: {},
+ geometry: {
+ type: 'Point',
+ coordinates: [83.671875, 44.84029065139799],
+ },
+ },
+ ],
+ };
+ pointLayer
+ .source(data)
+ .color('red')
+ .shape('cylinder')
+ .size([15, 10]);
+ scene.addLayer(pointLayer);
+ scene.render();
+ this.scene = scene;
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/Layers/components/RasterLayer.tsx b/stories/Layers/components/RasterLayer.tsx
new file mode 100644
index 0000000000..e489cdeb2a
--- /dev/null
+++ b/stories/Layers/components/RasterLayer.tsx
@@ -0,0 +1,92 @@
+import { RasterLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+// @ts-ignore
+import * as GeoTIFF from 'geotiff/dist/geotiff.bundle.js';
+import * as React from 'react';
+
+export default class ImageLayerDemo extends React.Component {
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const scene = new Scene({
+ center: [121.268, 30.3628],
+ id: 'map',
+ pitch: 0,
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/streets-v9',
+ zoom: 2,
+ });
+ const tiffdata = await this.getTiffData();
+ const layer = new RasterLayer({});
+ layer
+ .source(tiffdata.data, {
+ parser: {
+ type: 'raster',
+ width: tiffdata.width,
+ height: tiffdata.height,
+ min: 0,
+ max: 8000,
+ extent: [73.482190241, 3.82501784112, 135.106618732, 57.6300459963],
+ },
+ })
+ .style({
+ opacity: 0.8,
+ rampColors: {
+ colors: [
+ '#002466',
+ '#0D408C',
+ '#105CB3',
+ '#1A76C7',
+ '#2894E0',
+ '#3CB4F0',
+ '#65CEF7',
+ '#98E3FA',
+ '#CFF6FF',
+ '#E8FCFF',
+ ],
+ positions: [0, 0.02, 0.05, 0.1, 0.2, 0.3, 0.5, 0.6, 0.8, 1.0],
+ },
+ });
+ scene.addLayer(layer);
+ console.log(layer);
+ scene.render();
+ this.scene = scene;
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+ private async getTiffData() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/rmsportal/XKgkjjGaAzRyKupCBiYW.dat',
+ );
+ const arrayBuffer = await response.arrayBuffer();
+ const tiff = await GeoTIFF.fromArrayBuffer(arrayBuffer);
+ const image = await tiff.getImage();
+ const width = image.getWidth();
+ const height = image.getHeight();
+ const values = await image.readRasters();
+ return {
+ data: values[0],
+ width,
+ height,
+ min: 0,
+ max: 8000,
+ };
+ }
+}
diff --git a/stories/Layers/components/Text.tsx b/stories/Layers/components/Text.tsx
new file mode 100644
index 0000000000..00c39467ce
--- /dev/null
+++ b/stories/Layers/components/Text.tsx
@@ -0,0 +1,77 @@
+import { PointLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+import * as React from 'react';
+import data from '../data/data.json';
+export default class Point3D extends React.Component {
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ this.scene.destroy();
+ }
+
+ public componentDidMount() {
+ const scene = new Scene({
+ center: [120.19382669582967, 30.258134],
+ id: 'map',
+ pitch: 0,
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/streets-v9',
+ zoom: 1,
+ });
+ const pointLayer = new PointLayer({});
+ const p1 = {
+ type: 'FeatureCollection',
+ features: [
+ {
+ type: 'Feature',
+ properties: {},
+ geometry: {
+ type: 'Point',
+ coordinates: [83.671875, 44.84029065139799],
+ },
+ },
+ ],
+ };
+ pointLayer
+ .source(data)
+ .color('name', [
+ '#FFF5B8',
+ '#FFDC7D',
+ '#FFAB5C',
+ '#F27049',
+ '#D42F31',
+ '#730D1C',
+ ])
+ .shape('subregion',[
+ 'circle',
+ 'triangle',
+ 'square',
+ 'pentagon',
+ 'hexagon',
+ 'octogon',
+ 'hexagram',
+ 'rhombus',
+ 'vesica',
+ ])
+ .size('scalerank', [2, 4, 6, 8, 10]);
+ scene.addLayer(pointLayer);
+ console.log(pointLayer);
+ scene.render();
+ this.scene = scene;
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/Layers/components/heatMap.tsx b/stories/Layers/components/heatMap.tsx
new file mode 100644
index 0000000000..932a838c23
--- /dev/null
+++ b/stories/Layers/components/heatMap.tsx
@@ -0,0 +1,72 @@
+import { HeatMapLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+// @ts-ignore
+import * as React from 'react';
+
+export default class HeatMapLayerDemo extends React.Component {
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d3564b06-670f-46ea-8edb-842f7010a7c6.json',
+ );
+ const scene = new Scene({
+ center: [121.268, 30.3628],
+ id: 'map',
+ pitch: 0,
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/dark-v10',
+ zoom: 2,
+ });
+ const layer = new HeatMapLayer({
+ enableTAA: false,
+ });
+ layer
+ .source(await response.json())
+ .size('mag', [0, 1]) // weight映射通道
+ .style({
+ intensity: 2,
+ radius: 20,
+ opacity: 0.6,
+ rampColors: {
+ colors: [
+ '#2E8AE6',
+ '#69D1AB',
+ '#DAF291',
+ '#FFD591',
+ '#FF7A45',
+ '#CF1D49',
+ ],
+ positions: [0,0.2, 0.4, 0.6, 0.8, 1.0],
+ },
+ });
+ scene.addLayer(layer);
+ console.log(layer);
+ // requestAnimationFrame(run);
+ scene.render();
+ this.scene = scene;
+ // function run() {
+ // scene.render();
+ // requestAnimationFrame(run);
+ // }
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/Layers/components/heatMapgrid.tsx b/stories/Layers/components/heatMapgrid.tsx
new file mode 100644
index 0000000000..87b94df2c6
--- /dev/null
+++ b/stories/Layers/components/heatMapgrid.tsx
@@ -0,0 +1,78 @@
+import { HeatmapLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+import * as React from 'react';
+
+export default class GridHeatMap extends React.Component {
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/c3f8bda2-081b-449d-aa9f-9413b779205b.json',
+ );
+ const scene = new Scene({
+ center: [116.49434030056, 39.868073421167621],
+ id: 'map',
+ pitch: 0,
+ type: 'amap',
+ style: 'mapbox://styles/mapbox/streets-v9',
+ zoom: 16,
+ });
+ const layer = new HeatMapGridLayer({});
+ layer
+ .source(await response.json(), {
+ parser: {
+ type: 'json',
+ x: 'lng',
+ y: 'lat',
+ },
+ transforms: [
+ {
+ type: 'grid',
+ size: 50,
+ field: 'count',
+ method: 'sum',
+ },
+ ],
+ })
+ .size('sum', (value: number) => {
+ return value;
+ })
+ .shape('circle')
+ .style({
+ coverage: 0.8,
+ angle: 0,
+ })
+ .color('count', [
+ '#002466',
+ '#105CB3',
+ '#2894E0',
+ '#CFF6FF',
+ '#FFF5B8',
+ '#FFAB5C',
+ '#F27049',
+ '#730D1C',
+ ]);
+ scene.addLayer(layer);
+ scene.render();
+ this.scene = scene;
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/Layers/components/pointImage.tsx b/stories/Layers/components/pointImage.tsx
new file mode 100644
index 0000000000..1d35687395
--- /dev/null
+++ b/stories/Layers/components/pointImage.tsx
@@ -0,0 +1,74 @@
+import { PointImageLayer, PointLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+import * as React from 'react';
+import data from '../data/data.json';
+export default class PointImage extends React.Component {
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/893d1d5f-11d9-45f3-8322-ee9140d288ae.json',
+ );
+ const scene = new Scene({
+ center: [121.40, 31.258134],
+ zoom: 15,
+ id: 'map',
+ pitch: 0,
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/streets-v9',
+ });
+ scene.addImage(
+ '00',
+ 'https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*Rq6tQ5b4_JMAAAAAAAAAAABkARQnAQ',
+ );
+ scene.addImage(
+ '01',
+ 'https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*0D0SQ6AgkRMAAAAAAAAAAABkARQnAQ',
+ );
+ scene.addImage(
+ '02',
+ 'https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*o16fSIvcKdUAAAAAAAAAAABkARQnAQ',
+ );
+ this.scene = scene;
+ scene.on('loaded', () => {
+ run();
+ });
+ const imageLayer = new PointImageLayer({})
+ .source(await response.json(), {
+ parser: {
+ type: 'json',
+ x: 'longitude',
+ y: 'latitude',
+ }
+ })
+ .shape('name', ['00', '01', '02'])
+ .size(60);
+ scene.addLayer(imageLayer);
+
+ function run() {
+ scene.render();
+ console.log('render');
+ requestAnimationFrame(run);
+ }
+ this.scene = scene;
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/Layers/components/polygon3D.tsx b/stories/Layers/components/polygon3D.tsx
new file mode 100644
index 0000000000..852bd170a0
--- /dev/null
+++ b/stories/Layers/components/polygon3D.tsx
@@ -0,0 +1,76 @@
+// @ts-ignore
+import { Polygon3DLayer } from '@l7/layers';
+// @ts-ignore
+import { Scene } from '@l7/scene';
+import * as React from 'react';
+
+function convertRGB2Hex(rgb: number[]) {
+ return (
+ '#' + rgb.map((r) => ('0' + Math.floor(r).toString(16)).slice(-2)).join('')
+ );
+}
+
+export default class Polygon3D extends React.Component {
+ private gui: dat.GUI;
+ private $stats: Node;
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ if (this.gui) {
+ this.gui.destroy();
+ }
+ if (this.$stats) {
+ document.body.removeChild(this.$stats);
+ }
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d2e0e930-fd44-4fca-8872-c1037b0fee7b.json',
+ );
+ const scene = new Scene({
+ id: 'map',
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/streets-v9',
+ center: [110.19382669582967, 50.258134],
+ pitch: 0,
+ zoom: 3,
+ });
+ this.scene = scene;
+ const layer = new Polygon3DLayer({});
+ layer
+ .source(await response.json())
+ .size('name', [0, 10000, 50000, 30000, 100000])
+ .color('name', [
+ '#2E8AE6',
+ '#69D1AB',
+ '#DAF291',
+ '#FFD591',
+ '#FF7A45',
+ '#CF1D49',
+ ])
+ .shape('fill')
+ .style({
+ opacity: 1.0,
+ });
+ scene.addLayer(layer);
+ scene.render();
+ this.scene = scene;
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/Layers/components/rasterImage.tsx b/stories/Layers/components/rasterImage.tsx
new file mode 100644
index 0000000000..330812320a
--- /dev/null
+++ b/stories/Layers/components/rasterImage.tsx
@@ -0,0 +1,50 @@
+import { ImageLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+import * as React from 'react';
+
+export default class ImageLayerDemo extends React.Component {
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ this.scene.destroy();
+ }
+
+ public componentDidMount() {
+ const scene = new Scene({
+ center: [121.2680,30.3628],
+ id: 'map',
+ pitch: 0,
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/streets-v9',
+ zoom: 10,
+ });
+ const layer = new ImageLayer({});
+ layer.source(
+ 'https://gw.alipayobjects.com/zos/rmsportal/FnHFeFklTzKDdUESRNDv.jpg',
+ {
+ parser: {
+ type: 'image',
+ extent: [121.168, 30.2828, 121.384, 30.4219],
+ },
+ },
+ );
+ scene.addLayer(layer);
+ scene.render();
+ this.scene = scene;
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/Layers/data/data.json b/stories/Layers/data/data.json
new file mode 100644
index 0000000000..9a9f830d5c
--- /dev/null
+++ b/stories/Layers/data/data.json
@@ -0,0 +1,4940 @@
+{
+ "type": "FeatureCollection",
+ "features": [
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "South West Cape",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -43.510984,
+ "long_x": 146.054227,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 146.03379804609568,
+ -43.5404025683706
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Howe",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -37.488775,
+ "long_x": 149.95853,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 149.95838463633373,
+ -37.48894622188092
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Otway",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -38.857622,
+ "long_x": 143.565403,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 143.537005108191,
+ -38.85472383068997
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Jaffa",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -36.944244,
+ "long_x": 139.690866,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 139.68061977964746,
+ -36.95624316107086
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Carnot",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -34.920233,
+ "long_x": 135.656027,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 135.65378326897053,
+ -34.93870859313661
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Byron",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -28.658282,
+ "long_x": 153.632849,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 153.62799176015545,
+ -28.66197417050363
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Manifold",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -22.702081,
+ "long_x": 150.811228,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 150.81116783945873,
+ -22.702080987505923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape York",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -10.710859,
+ "long_x": 142.522018,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 142.52173912852123,
+ -10.710747979693423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Melville",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -14.163629,
+ "long_x": 144.506417,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 144.50660240977123,
+ -14.163506768755923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Arnhem",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -12.337984,
+ "long_x": 136.952429,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 136.91481885262823,
+ -12.295662864626316
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "West Cape Howe",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -35.104301,
+ "long_x": 117.597011,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 117.59693444102123,
+ -35.10430266719342
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Leeuwin",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -34.297841,
+ "long_x": 115.10633,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 115.1280088910596,
+ -34.328007092559645
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Pasley",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -33.929054,
+ "long_x": 123.517283,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 123.51722252695873,
+ -33.92888762813092
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Londonderry",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -13.713856,
+ "long_x": 126.964514,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 126.94130045687105,
+ -13.74290642667802
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Steep Point",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -26.16822,
+ "long_x": 113.169959,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 113.14519563289093,
+ -26.157463616878637
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "North West Cape",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -21.809776,
+ "long_x": 114.117534,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 114.16010761213809,
+ -21.801474697071743
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Lands End",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 50.069677,
+ "long_x": -5.668629,
+ "region": "Europe",
+ "subregion": "British Isles",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -5.668629523822517,
+ 50.06970856327533
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo Gracias a Dios",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 14.994242,
+ "long_x": -83.15866,
+ "region": "North America",
+ "subregion": "Central America",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -83.15874182851002,
+ 14.994208074994077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Brewster",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 70.150754,
+ "long_x": -22.122616,
+ "region": "North America",
+ "subregion": "Greenland",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -22.122731086322517,
+ 70.15088532108783
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Morris Jesup",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 83.626331,
+ "long_x": -32.491541,
+ "region": "North America",
+ "subregion": "Greenland",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -32.49150550038502,
+ 83.62628815311908
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Cape York",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 76.218919,
+ "long_x": -68.218612,
+ "region": "North America",
+ "subregion": "Greenland",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -68.21861731679127,
+ 76.21887848515033
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Nunap Isua",
+ "comment": null,
+ "name_alt": "Cape Farewell",
+ "lat_y": 59.862583,
+ "long_x": -43.90088,
+ "region": "North America",
+ "subregion": "Greenland",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -43.90080725819752,
+ 59.86267731327533
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Rifstangi",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 66.530766,
+ "long_x": -16.126417,
+ "region": "Europe",
+ "subregion": "Iceland",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -16.148503201808108,
+ 66.53076813358783
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Grmsey",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 66.669359,
+ "long_x": -18.251096,
+ "region": "Europe",
+ "subregion": "Iceland",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -18.251088019916267,
+ 66.66937897343158
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Surtsey",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 63.217764,
+ "long_x": -20.434929,
+ "region": "Europe",
+ "subregion": "Iceland",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -20.434803840228767,
+ 63.21771881718158
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cap Est",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -15.274849,
+ "long_x": 50.499889,
+ "region": "Africa",
+ "subregion": "Indian Ocean",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 50.49976647227123,
+ -15.274956964068423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Cape Vohimena",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -25.546355,
+ "long_x": 45.158683,
+ "region": "Africa",
+ "subregion": "Indian Ocean",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 45.15870201914623,
+ -25.546319268755923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Rodrigues",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -19.702241,
+ "long_x": 66.54263,
+ "region": "Seven seas (open ocean)",
+ "subregion": "Indian Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 66.54273522227123,
+ -19.702203057818423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Diego Garcia",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -19.702241,
+ "long_x": 66.54263,
+ "region": "Seven seas (open ocean)",
+ "subregion": "Indian Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 72.44202721445873,
+ -7.332207940630923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "I. Clarión",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 18.345725,
+ "long_x": -114.749992,
+ "region": "Seven seas (open ocean)",
+ "subregion": "North Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -114.74998938710377,
+ 18.345770574994077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "I. Socorro",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 18.786694,
+ "long_x": -110.992912,
+ "region": "Seven seas (open ocean)",
+ "subregion": "North Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -110.99290930897877,
+ 18.786810614056577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Tikopia",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -12.28881,
+ "long_x": 168.833542,
+ "region": "Oceania",
+ "subregion": "Melanesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 168.83362877695873,
+ -12.288750909380923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Norfolk I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -29.02416,
+ "long_x": 167.960052,
+ "region": "Oceania",
+ "subregion": "Melanesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 167.96009362070873,
+ -29.024102471880923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Cretin",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -6.637492,
+ "long_x": 147.852392,
+ "region": "Oceania",
+ "subregion": "Melanesia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 147.85242760508373,
+ -6.637261651568423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Îles Chesterfield",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -19.20447,
+ "long_x": 159.95171,
+ "region": "Oceania",
+ "subregion": "Melanesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 159.95167076914623,
+ -19.204644464068423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Lamotrek",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 7.509727,
+ "long_x": 146.333084,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 146.33301842539623,
+ 7.509711004681577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Kosrae",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 5.329221,
+ "long_x": 162.974172,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 162.97413170664623,
+ 5.329169012494077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Arorea",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -2.617755,
+ "long_x": 176.81264,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 176.81263268320873,
+ -2.617852471880923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Pingelap",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 6.22951,
+ "long_x": 160.702931,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 160.70289147227123,
+ 6.229681707806577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Kapingamarangi",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 1.079429,
+ "long_x": 154.781328,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 154.78138268320873,
+ 1.079474188275327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Agrihan",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 18.777332,
+ "long_x": 145.670369,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 145.67042076914623,
+ 18.777411199994077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Asuncion",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 19.688654,
+ "long_x": 145.40141,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 145.40125573008373,
+ 19.688666082806577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Wotje",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 9.451143,
+ "long_x": 170.012255,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 170.01209557383373,
+ 9.451300360150327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Bikar",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 12.243519,
+ "long_x": 170.120691,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 170.12061608164623,
+ 12.243597723431577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Pagan",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 18.119631,
+ "long_x": 145.785087,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 145.78492272227123,
+ 18.119635321087827
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Wake I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 19.303497,
+ "long_x": 166.63626,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 166.63624108164623,
+ 19.303595282025327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Tabiteuea",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -1.201405,
+ "long_x": 174.755207,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 174.75513756602123,
+ -1.201348565630923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Aranuka",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 0.226766,
+ "long_x": 173.626286,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 173.62623131602123,
+ 0.226752020306577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Nauru",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -0.505856,
+ "long_x": 166.930778,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 166.93067467539623,
+ -0.505791925005923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ebon",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 4.59977,
+ "long_x": 168.736432,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 168.73633873789623,
+ 4.599798895306577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Jaluit",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 5.964455,
+ "long_x": 169.682894,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 169.68299401133373,
+ 5.964483953900327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Mili",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 6.107334,
+ "long_x": 171.725875,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 171.72584069102123,
+ 6.107489324994077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Majuro",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 7.118009,
+ "long_x": 171.159743,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 171.15980065195873,
+ 7.117987371869077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ailinglapalap",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 7.276392,
+ "long_x": 168.596926,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 168.59693444102123,
+ 7.276495672650327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Kwajalein",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 8.746619,
+ "long_x": 167.735072,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 167.73511803477123,
+ 8.746710516400327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Rongelap",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 11.164329,
+ "long_x": 166.869876,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 166.86988365977123,
+ 11.164496160931577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Bikini",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 11.639231,
+ "long_x": 165.550698,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 165.55042565195873,
+ 11.639288641400327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Reinga",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -34.432767,
+ "long_x": 172.7285,
+ "region": "Oceania",
+ "subregion": "New Zealand",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 172.70558117137455,
+ -34.42039113947056
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Necker",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 23.586649,
+ "long_x": -164.704743,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -164.70470130116627,
+ 23.586676336712827
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Laysan",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 25.776083,
+ "long_x": -171.733589,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -171.73363196522877,
+ 25.776007391400327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Kure Atoll",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 28.440992,
+ "long_x": -178.319207,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -178.31920325429127,
+ 28.440985418744077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Nikumaroro",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -4.644675,
+ "long_x": -174.53143,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -174.53142249257252,
+ -4.644707940630923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Howland I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 0.814266,
+ "long_x": -176.638313,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -176.63829505116627,
+ 0.814276434369077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Palmyra Atoll",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 5.879013,
+ "long_x": -162.09929,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -162.09923255116627,
+ 5.879095770306577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Jarvis",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -0.368919,
+ "long_x": -160.020814,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -160.02080237538502,
+ -0.368951104693423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Takutea",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -19.8026,
+ "long_x": -158.294405,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -158.29430091054127,
+ -19.802666925005923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Rakahanga",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -10.022892,
+ "long_x": -161.081621,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -161.08171546132252,
+ -10.022881768755923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Raroia",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -16.054416,
+ "long_x": -142.509609,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -142.50963294179127,
+ -16.054253839068423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Rapa",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -27.587603,
+ "long_x": -144.328315,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -144.32823645741627,
+ -27.587456964068423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Mangareva",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -23.102464,
+ "long_x": -134.985909,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -134.98582923085377,
+ -23.102593682818423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Henderson I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -24.349847,
+ "long_x": -128.317479,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -128.31755530507252,
+ -24.349663995318423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Nanumea",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -5.67562,
+ "long_x": 176.137639,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 176.13770592539623,
+ -5.675591729693423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Niulakita",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -10.750687,
+ "long_x": 179.497571,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 179.49756920664623,
+ -10.750664971880923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "The Snares",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -48.017042,
+ "long_x": 166.588946,
+ "region": "Oceania",
+ "subregion": "New Zealand",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 166.58887780039623,
+ -48.01690032344342
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Kanton",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -2.757106,
+ "long_x": -171.71703,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -171.71703040272877,
+ -2.757134698443423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Tabuaeran",
+ "comment": null,
+ "name_alt": "Fanning I.",
+ "lat_y": 3.866545,
+ "long_x": -159.326781,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -159.32683264882252,
+ 3.866705633587827
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Malden",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -4.042491,
+ "long_x": -154.983478,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -154.98350989491627,
+ -4.042657159380923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Rarotonga",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -21.201867,
+ "long_x": -159.797637,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -159.79771887929127,
+ -21.201836846880923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Rangiroa",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -15.2046,
+ "long_x": -147.773967,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -147.77403723866627,
+ -15.204766534380923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Funafuti",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -8.491577,
+ "long_x": 179.19841,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 179.19837487070873,
+ -8.491631768755923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Vavau",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -18.590062,
+ "long_x": -173.976769,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -173.97673499257252,
+ -18.590020440630923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "I. de Pascua",
+ "comment": null,
+ "name_alt": "Easter I.",
+ "lat_y": -27.102117,
+ "long_x": -109.367953,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -109.36790930897877,
+ -27.102227471880923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "St. Croix",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 17.762944,
+ "long_x": -64.763088,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -64.76317298085377,
+ 17.763006903119077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Grand Cayman",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 19.315829,
+ "long_x": -81.271416,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -81.27159583241627,
+ 19.315802313275327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "San Salvador",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 24.052793,
+ "long_x": -74.492848,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -74.49290930897877,
+ 24.052801824994077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Grenada",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 12.105978,
+ "long_x": -61.723079,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -61.72319495351002,
+ 12.105963446087827
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Barbuda",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 17.622525,
+ "long_x": -61.789243,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -61.78929602772877,
+ 17.622626043744077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Antigua",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 17.040441,
+ "long_x": -61.775982,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -61.77592932851002,
+ 17.040594793744077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Guadeloupe",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 16.180583,
+ "long_x": -61.656947,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -61.65703284413502,
+ 16.180670477337827
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Dominica",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 15.452943,
+ "long_x": -61.352652,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -61.35271155507252,
+ 15.452887274212827
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Martinique",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 14.672462,
+ "long_x": -61.008715,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -61.00883948476002,
+ 14.672491766400327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Saint Lucia",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 13.918332,
+ "long_x": -60.982225,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -60.98222815663502,
+ 13.918280340619077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Saint Vincent",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 13.270131,
+ "long_x": -61.207143,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -61.20720374257252,
+ 13.270209051556577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Barbados",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 13.164326,
+ "long_x": -59.566742,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -59.56682288319752,
+ 13.164252020306577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Tobago",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 11.259334,
+ "long_x": -60.677992,
+ "region": "South America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -60.67808997304127,
+ 11.259283758587827
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Margarita",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 10.981467,
+ "long_x": -64.051401,
+ "region": "South America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -64.05144202382252,
+ 10.981512762494077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Curaao",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 12.185355,
+ "long_x": -68.999109,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -68.99919593007252,
+ 12.185309149212827
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Aruba",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 12.502849,
+ "long_x": -69.96488,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -69.96501624257252,
+ 12.502752996869077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ras Banäs",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 23.950592,
+ "long_x": 35.778059,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 35.77808678477123,
+ 23.950628973431577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ponta das Salinas",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -12.832908,
+ "long_x": 12.928991,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 12.968705086077254,
+ -12.855718342716505
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ponta das Palmeirinhas",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -9.071387,
+ "long_x": 12.999549,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 13.033811372274608,
+ -9.099938228394153
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo Bojador",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 26.157836,
+ "long_x": -14.473111,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -14.473194953510017,
+ 26.157965399212827
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Cape Agulhas",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -34.801182,
+ "long_x": 19.993472,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 19.993418816021233,
+ -34.80108001094342
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Gees Gwardafuy",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 11.812855,
+ "long_x": 51.235173,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 51.258313644180184,
+ 11.822028799226407
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Victoria Falls",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -17.77079,
+ "long_x": 25.460133,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "waterfall"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 25.852793816021233,
+ -17.928033135943423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Novyy I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -50.959168,
+ "long_x": -72.995002,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -2.811695930072517,
+ -70.86150481563092
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Lyddan I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -50.959168,
+ "long_x": -72.995002,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -20.902027961322517,
+ -74.11870696406842
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Verblyud I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -50.959168,
+ "long_x": -72.995002,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 16.049937370708733,
+ -69.88189055781842
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Coulman I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -50.959168,
+ "long_x": -72.995002,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 169.73536217539623,
+ -73.50945403438092
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Minna Hook",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -50.959168,
+ "long_x": -72.995002,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 167.25318444102123,
+ -78.63811614375592
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Wright I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -50.959168,
+ "long_x": -72.995002,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -116.89262854726002,
+ -74.06670501094342
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Grant I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -50.959168,
+ "long_x": -72.995002,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -131.48540198476002,
+ -74.48272063594342
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Newman I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -50.959168,
+ "long_x": -72.995002,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -145.68681800038502,
+ -75.59185149531842
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Dean I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -50.959168,
+ "long_x": -72.995002,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -127.63438880116627,
+ -74.50066497188092
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Cape Adare",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 170.26734223219574,
+ -71.33025954578193
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Cape Poinsett",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 113.20496666758373,
+ -65.78606536250592
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Masson I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 96.63392174570873,
+ -66.15068938594342
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Mikhaylov I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 85.60340416758373,
+ -66.84026458125592
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Cape Norvegia",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -12.327320930072517,
+ -71.37249114375592
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Deception I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -60.61430823476002,
+ -62.95086028438092
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Cape Framnes",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -60.59343421132252,
+ -65.97173430781842
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Cape Agassiz",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -62.87468421132252,
+ -68.45610930781842
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Cape Jeremy",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -68.79051673085377,
+ -69.43328215938092
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Comorin",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 8.143554,
+ "long_x": 77.471497,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 77.51210506924555,
+ 8.085338515340696
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Dondra Head",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 5.947528,
+ "long_x": 80.616321,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 80.59180925571331,
+ 5.929580617022318
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Yelizavety",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 54.416083,
+ "long_x": 142.720445,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 142.72059166758373,
+ 54.41620514530658
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Pt. Yuzhnyy",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 57.733572,
+ "long_x": 156.796426,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 156.79664147227123,
+ 57.73346588749408
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Sata",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 31.026941,
+ "long_x": 130.695089,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 130.69520104258373,
+ 31.026922918744077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Aniva",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 46.081706,
+ "long_x": 143.43487,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 143.43482506602123,
+ 46.08179352421283
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Terpeniya",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 48.66928,
+ "long_x": 144.712582,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 144.71253502695873,
+ 48.66937897343158
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Lopatka",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 50.914155,
+ "long_x": 156.651536,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 156.65162194102123,
+ 50.91412994999408
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Ozernoy",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 57.7708,
+ "long_x": 163.246685,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 163.24683678477123,
+ 57.77088043827533
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Olyutorskiy",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 59.960807,
+ "long_x": 170.31265,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 170.31287682383373,
+ 59.96082184452533
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Navarin",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 62.327239,
+ "long_x": 179.074225,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 179.07422936289623,
+ 62.32727692265033
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Lopatka",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 71.907853,
+ "long_x": 150.066042,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 150.06592858164623,
+ 71.90778229374408
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Ince",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 42.084312,
+ "long_x": 34.983358,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 34.98328698008373,
+ 42.08417389530658
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ras Fartak",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 15.677412,
+ "long_x": 52.229105,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 52.2389696999939,
+ 15.65795249845498
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ras Sharbatat",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 18.164534,
+ "long_x": 56.56827,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 56.558165806017215,
+ 18.166986171245085
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ra's al Had",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 22.530158,
+ "long_x": 59.849134,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 59.7995168175437,
+ 22.518675327148298
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Hachijjima",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 33.109796,
+ "long_x": 139.804903,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 139.80482018320873,
+ 33.10980866093158
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Plain of Jars",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 20.550709,
+ "long_x": 101.890532,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "plain"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 101.89063561289623,
+ 20.550909735150327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Nordkapp",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 71.18337,
+ "long_x": 25.662398,
+ "region": "Europe",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 25.66067519711473,
+ 71.15450206702127
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo de São Vicentete",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 37.038304,
+ "long_x": -8.969391,
+ "region": "Europe",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -8.969410773822517,
+ 37.03827545780658
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo Fisterra",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 42.952418,
+ "long_x": -9.267837,
+ "region": "Europe",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -9.26996282865152,
+ 42.92873605781255
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape San Blas",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 29.713967,
+ "long_x": -85.270961,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -85.27092444569752,
+ 29.713995672650327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Sable",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 43.469097,
+ "long_x": -65.610769,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -65.61082923085377,
+ 43.46900055546283
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Bauld",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 51.568576,
+ "long_x": -55.430306,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -55.43028723866627,
+ 51.56848786015033
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Fear",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 33.867949,
+ "long_x": -77.990568,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -77.99058997304127,
+ 33.86798737186908
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "I. Guadalupe",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 29.052552,
+ "long_x": -118.317465,
+ "region": "Seven seas (open ocean)",
+ "subregion": "North Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -118.31749426991627,
+ 29.052496649212827
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Miquelon",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 46.929526,
+ "long_x": -56.329884,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -56.32988440663502,
+ 46.92938873905658
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Cabo Corrientes",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 20.409471,
+ "long_x": -105.683581,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -105.67795873874799,
+ 20.420365114940253
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Pt. Eugenia",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 27.861925,
+ "long_x": -115.07629,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -115.04623945046137,
+ 27.842887092585283
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Point Conception",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 34.582313,
+ "long_x": -120.659016,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -120.46360036202867,
+ 34.46027592467621
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Cape Hatteras",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 35.437762,
+ "long_x": -75.450543,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -75.54032952413311,
+ 35.24475263812895
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Cape Sable",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 25.124896,
+ "long_x": -81.090442,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -81.09044348866627,
+ 25.124762274212827
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Cape Hope",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 68.35638,
+ "long_x": -166.815582,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -166.81321268769543,
+ 68.35380207543972
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Point Barrow",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 71.372637,
+ "long_x": -156.615894,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -156.4719492091668,
+ 71.40589128763096
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Cape Canaveral",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 28.483713,
+ "long_x": -80.534941,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -80.53625603636821,
+ 28.473056814472134
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Cape Mendocino",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 40.350222,
+ "long_x": -124.323474,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -124.39201745043425,
+ 40.44222065537283
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Cabo San Lucas",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 22.887711,
+ "long_x": -109.969843,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -109.96983801991627,
+ 22.887762762494077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Cape Churchill",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 58.752014,
+ "long_x": -93.182023,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -93.18211829335377,
+ 58.75208161015033
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Cape Cod",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 41.734867,
+ "long_x": -69.964865,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -70.03687833567446,
+ 41.9914589934385
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Cape May",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 37.2017,
+ "long_x": -75.926791,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -74.95121933164988,
+ 38.92969645987068
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 2,
+ "name": "Niagara Falls",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 43.087653,
+ "long_x": -79.044073,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "waterfall"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -79.04411780507252,
+ 43.08771393436908
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "I. Alejandro Selkirk",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -33.722178,
+ "long_x": -80.733492,
+ "region": "Seven seas (open ocean)",
+ "subregion": "South Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -80.73350989491627,
+ -33.72222258906842
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "I. San Ambrosio",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -26.341922,
+ "long_x": -79.900062,
+ "region": "Seven seas (open ocean)",
+ "subregion": "South Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -79.90001380116627,
+ -26.341851495318423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "I. Robinson Crusoe",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -33.589852,
+ "long_x": -78.872522,
+ "region": "Seven seas (open ocean)",
+ "subregion": "South Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -78.87254798085377,
+ -33.58965422969342
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo Orange",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 4.125735,
+ "long_x": -51.242144,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -51.26287766987179,
+ 4.135614177285231
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo de Santa Marta Grande",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -28.558078,
+ "long_x": -48.735526,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -48.80338037734664,
+ -28.57198267323537
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Punta del Este",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -34.975503,
+ "long_x": -54.933154,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -54.94628769070382,
+ -34.96658679840526
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo San Antonio",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -36.381052,
+ "long_x": -56.655377,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -56.716792100626165,
+ -36.40959917438929
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo Corrientes",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -38.135985,
+ "long_x": -57.546212,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -57.56252349612641,
+ -38.066376942128464
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Punta Rasa",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -40.834718,
+ "long_x": -62.282201,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -62.25911745789756,
+ -40.72626411656719
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo Dos Bahías",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -44.9887,
+ "long_x": -65.615952,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -65.5438334451688,
+ -44.89439847091873
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Punta Negra",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -5.948875,
+ "long_x": -81.108252,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -81.10832678944752,
+ -5.948663018755923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Punta Lavapié",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -37.262867,
+ "long_x": -73.606377,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -73.60304396243782,
+ -37.17120002933805
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Cabo de Hornos",
+ "comment": null,
+ "name_alt": "Cape Horn",
+ "lat_y": -55.862824,
+ "long_x": -67.169425,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -67.16942298085377,
+ -55.86284758906842
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 2,
+ "name": "Salto Angel",
+ "comment": null,
+ "name_alt": "Angel Falls",
+ "lat_y": 5.686836,
+ "long_x": -62.061848,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "waterfall"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -62.06181800038502,
+ 5.686896063275327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 2,
+ "name": "Iguazu Falls",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -25.568265,
+ "long_x": -54.582842,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "waterfall"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -54.58299719960377,
+ -25.568291925005923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Clipperton I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 10.309933,
+ "long_x": -109.213284,
+ "region": "Seven seas (open ocean)",
+ "subregion": "North Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -109.2295822833424,
+ 10.304020508304784
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Île Amsterdam",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -19.702241,
+ "long_x": 66.54263,
+ "region": "Seven seas (open ocean)",
+ "subregion": "South Indian Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 77.53467858164623,
+ -37.85796477656842
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Île Amsterdam",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -19.702241,
+ "long_x": 66.54263,
+ "region": "Seven seas (open ocean)",
+ "subregion": "South Indian Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 77.52552330820873,
+ -38.72014739375592
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Île Europa",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -22.837936,
+ "long_x": 40.192423,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 40.19239342539623,
+ -22.837945245318423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Annobón",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -1.429572,
+ "long_x": 5.621149,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 5.621104362896233,
+ -1.429620050005923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Ascension",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -7.925105,
+ "long_x": -14.362648,
+ "region": "Seven seas (open ocean)",
+ "subregion": "Southern Atlantic Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -14.362721320697517,
+ -7.925225518755923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Tristan da Cunha",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -35.278715,
+ "long_x": -17.932071,
+ "region": "Seven seas (open ocean)",
+ "subregion": "Southern Atlantic Ocean",
+ "featureclass": "island group"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -12.265431281635017,
+ -37.07024505000592
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Gough I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -35.278715,
+ "long_x": -17.932071,
+ "region": "Seven seas (open ocean)",
+ "subregion": "Southern Atlantic Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -9.967213508197517,
+ -40.34014251094342
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Bouvet I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -35.278715,
+ "long_x": -17.932071,
+ "region": "Seven seas (open ocean)",
+ "subregion": "Southern Atlantic Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 3.409922722271233,
+ -54.41655852656842
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Cape Colbeck",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -50.959168,
+ "long_x": -72.995002,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -158.25767981679127,
+ -77.11113860469342
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Is. de Fernando de Noronha",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -3.849881,
+ "long_x": -32.417053,
+ "region": "Seven seas (open ocean)",
+ "subregion": "Southern Atlantic Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -32.41704260976002,
+ -3.849908135943423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Cocos Is.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -12.158465,
+ "long_x": 96.828369,
+ "region": "Seven seas (open ocean)",
+ "subregion": "Indian Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 96.82837975352123,
+ -12.158257745318423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Christmas I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -10.472542,
+ "long_x": 105.667155,
+ "region": "Seven seas (open ocean)",
+ "subregion": "Indian Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 105.66712487070873,
+ -10.472588800005923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Campbell I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Seven seas (open ocean)",
+ "subregion": "South Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 169.12012780039623,
+ -52.51043059688092
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Macquarie I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Seven seas (open ocean)",
+ "subregion": "South Indian Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 158.89600670664623,
+ -54.60979583125592
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Cape Darnley",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 69.61109459727123,
+ -67.77349212031842
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Cape Ann",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 51.40809166758373,
+ -66.16106536250592
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Peter I I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Antarctica",
+ "subregion": "Southern Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -90.56822669179127,
+ -68.76604583125592
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Antipodes Islands",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -49.649273,
+ "long_x": 178.773056,
+ "region": "Seven seas (open ocean)",
+ "subregion": "South Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 178.77295983164623,
+ -49.64934661250592
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Bounty Is.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -47.688207,
+ "long_x": 178.89656,
+ "region": "Seven seas (open ocean)",
+ "subregion": "South Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 178.89661705820873,
+ -47.68828704219342
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Balls Pyramid",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -31.826904,
+ "long_x": 159.158463,
+ "region": "Seven seas (open ocean)",
+ "subregion": "South Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 159.15833580820873,
+ -31.826958917193423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Lord Howe I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -31.542569,
+ "long_x": 159.069307,
+ "region": "Seven seas (open ocean)",
+ "subregion": "South Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 159.06922448008373,
+ -31.542535089068423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "St. Helena",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -15.950901,
+ "long_x": -5.705161,
+ "region": "Seven seas (open ocean)",
+ "subregion": "Southern Atlantic Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -5.705128547260017,
+ -15.950860284380923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "I. del Coco",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 5.539857,
+ "long_x": -87.092227,
+ "region": "Seven seas (open ocean)",
+ "subregion": "North Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -87.09221350819752,
+ 5.539923407025327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Sable I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 43.930893,
+ "long_x": -59.91953,
+ "region": "Seven seas (open ocean)",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -59.91960608632252,
+ 43.93097565311908
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo Delgado",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -10.670103,
+ "long_x": 40.624309,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 40.62440026133373,
+ -10.670098565630923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ponta da Barra",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -23.829888,
+ "long_x": 35.515696,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 35.51563561289623,
+ -23.830010675005923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ponta São Sebastio",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -22.118899,
+ "long_x": 35.480417,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 35.48023522227123,
+ -22.118829034380923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ras Cantin",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 32.581636,
+ "long_x": -9.273918,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -9.273915168353767,
+ 32.58161041874408
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ras Kasr",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 18.076817,
+ "long_x": 38.573746,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 38.58027735871919,
+ 18.075167704493374
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ponta de Jericoacoara",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -2.85044,
+ "long_x": -40.067208,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -39.991649927946355,
+ -2.851822991583529
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo de São Roque",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -5.193476,
+ "long_x": -35.447654,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -35.50994900651512,
+ -5.156866121305913
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ponta da Baleia",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -17.710136,
+ "long_x": -39.157619,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -39.14557867836578,
+ -17.678753845220847
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo de São Tomé",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -21.996382,
+ "long_x": -41.009692,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -40.98763990313761,
+ -21.971754611783773
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo Frio",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -22.869501,
+ "long_x": -41.962188,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -41.89015627474056,
+ -22.759730815669258
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo San Diego",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -54.6406,
+ "long_x": -65.21365,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -65.21361243397877,
+ -54.64067962031842
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo Tres Puntas",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -47.237629,
+ "long_x": -65.774707,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -65.74439816328368,
+ -47.328778975372465
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cap Saint André",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -16.174457,
+ "long_x": 44.467405,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 44.46729576914623,
+ -16.174493096880923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape St. Lucia",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -28.552694,
+ "long_x": 32.367221,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 32.36732018320873,
+ -28.552666925005923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape St. Francis",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -34.171766,
+ "long_x": 24.817688,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 24.84143613032799,
+ -34.18861022316314
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Minamitori-shima",
+ "comment": null,
+ "name_alt": "Marcus I.",
+ "lat_y": 24.319813,
+ "long_x": 153.958899,
+ "region": "Seven seas (open ocean)",
+ "subregion": "North Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 153.95887291758373,
+ 24.319769598431577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Is. Martin Vaz",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -20.559422,
+ "long_x": -29.338439,
+ "region": "Seven seas (open ocean)",
+ "subregion": "Southern Atlantic Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -29.338429328510017,
+ -20.559502862505923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Rockall",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 58.163524,
+ "long_x": -12.408715,
+ "region": "Seven seas (open ocean)",
+ "subregion": "North Atlantic Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -12.408741828510017,
+ 58.16339752811908
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "I. de Cozumel",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 20.444687,
+ "long_x": -86.880555,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -86.88060462147877,
+ 20.444708563275327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Bermuda Islands",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 32.317339,
+ "long_x": -64.742895,
+ "region": "Seven seas (open ocean)",
+ "subregion": "North Atlantic Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -64.74290930897877,
+ 32.31726715702533
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Punta Galera",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 0.731221,
+ "long_x": -80.062205,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -80.06212317616627,
+ 0.731207586712827
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Cap Lopez",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -0.604761,
+ "long_x": 8.726423,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 8.727299789450319,
+ -0.615086490513119
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Cape Bobaomby",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -11.966598,
+ "long_x": 49.262904,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 49.26282799570873,
+ -11.966485284380923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Cap Blanc",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 20.822108,
+ "long_x": -17.052856,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -17.052906867572517,
+ 20.822088934369077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Cape of Good Hope",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -34.307311,
+ "long_x": 18.441206,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 18.441294792583733,
+ -34.30718352656842
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Cape Palmas",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 4.373924,
+ "long_x": -7.457356,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -7.457386848041267,
+ 4.373968817181577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Cape Verde",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 14.732312,
+ "long_x": -17.471776,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -17.471730109760017,
+ 14.732489324994077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Cap Bon",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 37.073954,
+ "long_x": 11.024061,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 11.024180534771233,
+ 37.07398102421283
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Oceanic pole of inaccessibility",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -48.865032,
+ "long_x": -123.401986,
+ "region": "Seven seas (open ocean)",
+ "subregion": "South Pacific Ocean",
+ "featureclass": "pole"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -123.40202796132252,
+ -48.86504485469342
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "South Magnetic Pole 2005 (est)",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -48.865032,
+ "long_x": -123.401986,
+ "region": "Antarctica",
+ "subregion": "Southern Ocean",
+ "featureclass": "pole"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 137.85425865977123,
+ -64.51824309688092
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "North Magnetic Pole 2005 (est)",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -48.865032,
+ "long_x": -123.401986,
+ "region": "Seven seas (open ocean)",
+ "subregion": "Arctic Ocean",
+ "featureclass": "pole"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -114.40569007069752,
+ 82.71008942265033
+ ]
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/stories/MapAdaptor/Map.md b/stories/MapAdaptor/Map.md
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/stories/MapAdaptor/Map.stories.tsx b/stories/MapAdaptor/Map.stories.tsx
new file mode 100644
index 0000000000..6571687bec
--- /dev/null
+++ b/stories/MapAdaptor/Map.stories.tsx
@@ -0,0 +1,26 @@
+import { storiesOf } from '@storybook/react';
+import * as React from 'react';
+import AMap from './components/AMap';
+import Mapbox from './components/Mapbox';
+// import Polygon from './components/Polygon';
+// import Point3D from './components/Point3D';
+// import Line from './components/Line';
+// import ImageLayer from './components/Image';
+// import GridHeatMap from './components/GridHeatmap';
+// import PointImage from './components/pointImage';
+// @ts-ignore
+import notes from './Map.md';
+// @ts-ignore
+storiesOf('地图底图', module)
+ .add('高德地图', () => , {
+ notes: { markdown: notes },
+ })
+ .add('Mapbox', () => , {
+ notes: { markdown: notes },
+ });
+// .add('Polygon', () => );
+// .add('Point3D', () => )
+// .add('Line', () => )
+// .add('GridHeatMap', () => )
+// .add('Image', () => )
+// .add('pointImage', () => );
diff --git a/stories/MapAdaptor/components/AMap.tsx b/stories/MapAdaptor/components/AMap.tsx
new file mode 100644
index 0000000000..c66ca5f408
--- /dev/null
+++ b/stories/MapAdaptor/components/AMap.tsx
@@ -0,0 +1,62 @@
+// @ts-ignore
+import { PolygonLayer } from '@l7/layers';
+// @ts-ignore
+import { Scene } from '@l7/scene';
+import * as React from 'react';
+
+export default class AMap extends React.Component {
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d2e0e930-fd44-4fca-8872-c1037b0fee7b.json',
+ );
+ const scene = new Scene({
+ center: [110.19382669582967, 50.258134],
+ id: 'map',
+ pitch: 0,
+ style: 'dark',
+ type: 'amap',
+ zoom: 3,
+ });
+ const layer = new PolygonLayer({});
+
+ layer
+ .source(await response.json())
+ .size('name', [0, 10000, 50000, 30000, 100000])
+ .color('name', [
+ '#2E8AE6',
+ '#69D1AB',
+ '#DAF291',
+ '#FFD591',
+ '#FF7A45',
+ '#CF1D49',
+ ])
+ .shape('fill')
+ .style({
+ opacity: 0.8,
+ });
+ scene.addLayer(layer);
+ scene.render();
+ this.scene = scene;
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/MapAdaptor/components/GridHeatmap.tsx b/stories/MapAdaptor/components/GridHeatmap.tsx
new file mode 100644
index 0000000000..69ca5a9d42
--- /dev/null
+++ b/stories/MapAdaptor/components/GridHeatmap.tsx
@@ -0,0 +1,78 @@
+import { HeatMapLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+import * as React from 'react';
+
+export default class GridHeatMap extends React.Component {
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/c3f8bda2-081b-449d-aa9f-9413b779205b.json',
+ );
+ const scene = new Scene({
+ center: [116.49434030056, 39.868073421167621],
+ id: 'map',
+ pitch: 0,
+ type: 'amap',
+ style: 'mapbox://styles/mapbox/streets-v9',
+ zoom: 16,
+ });
+ const layer = new HeatMapLayer({});
+ layer
+ .source(await response.json(), {
+ parser: {
+ type: 'json',
+ x: 'lng',
+ y: 'lat',
+ },
+ transforms: [
+ {
+ type: 'grid',
+ size: 50,
+ field: 'count',
+ method: 'sum',
+ },
+ ],
+ })
+ .size('sum', (value: number) => {
+ return value;
+ })
+ .shape('circle')
+ .style({
+ coverage: 0.5,
+ angle: 0,
+ opacity: 1,
+ })
+ .color('count', [
+ '#002466',
+ '#105CB3',
+ '#2894E0',
+ '#CFF6FF',
+ '#FFF5B8',
+ '#FFAB5C',
+ '#F27049',
+ '#730D1C',
+ ]);
+ scene.addLayer(layer);
+ scene.render();
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/MapAdaptor/components/Image.tsx b/stories/MapAdaptor/components/Image.tsx
new file mode 100644
index 0000000000..abe2bdb95c
--- /dev/null
+++ b/stories/MapAdaptor/components/Image.tsx
@@ -0,0 +1,50 @@
+import { ImageLayer } from '@l7/layers';
+import { Scene } from '@l7/scene';
+import * as React from 'react';
+
+export default class ImageLayerDemo extends React.Component {
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ this.scene.destroy();
+ }
+
+ public componentDidMount() {
+ const scene = new Scene({
+ center: [121.2680, 30.3628],
+ id: 'map',
+ pitch: 0,
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/streets-v9',
+ zoom: 10,
+ });
+ const layer = new ImageLayer({});
+ layer.source(
+ 'https://gw.alipayobjects.com/zos/rmsportal/FnHFeFklTzKDdUESRNDv.jpg',
+ {
+ parser: {
+ type: 'image',
+ extent: [121.168, 30.2828, 121.384, 30.4219],
+ },
+ },
+ );
+ // scene.addLayer(layer);
+ scene.render();
+ console.log(scene);
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/MapAdaptor/components/Line.tsx b/stories/MapAdaptor/components/Line.tsx
new file mode 100644
index 0000000000..590a119418
--- /dev/null
+++ b/stories/MapAdaptor/components/Line.tsx
@@ -0,0 +1,87 @@
+import { Line } from '@l7/layers';
+import { Scene } from '@l7/scene';
+import * as React from 'react';
+
+export default class Point3D extends React.Component {
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/rmsportal/ZVfOvhVCzwBkISNsuKCc.json',
+ );
+ const testdata = {
+ type: 'FeatureCollection',
+ features: [
+ {
+ type: 'Feature',
+ properties: {},
+ geometry: {
+ type: 'LineString',
+ coordinates: [
+ [91.58203125, 34.95799531086792],
+ [96.767578125, 34.379712580462204],
+ [99.228515625, 33.7243396617476],
+ ],
+ },
+ },
+ ],
+ };
+ const scene = new Scene({
+ center: [102.602992, 23.107329],
+ id: 'map',
+ pitch: 0,
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/dark-v9',
+ zoom: 13,
+ });
+ const LineLayer = new Line({});
+
+ LineLayer.source(await response.json())
+ .size(1)
+ .shape('line')
+ .color(
+ 'ELEV',
+ [
+ '#E8FCFF',
+ '#CFF6FF',
+ '#A1E9ff',
+ '#65CEF7',
+ '#3CB1F0',
+ '#2894E0',
+ '#1772c2',
+ '#105CB3',
+ '#0D408C',
+ '#002466',
+ ].reverse(),
+ )
+ .render();
+ scene.addLayer(LineLayer);
+ // function run() {
+ // scene.render();
+ // requestAnimationFrame(run);
+ // }
+ // requestAnimationFrame(run);
+ scene.render();
+ this.scene = scene;
+ console.log(LineLayer);
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/MapAdaptor/components/Mapbox.tsx b/stories/MapAdaptor/components/Mapbox.tsx
new file mode 100644
index 0000000000..ec32ba3d5e
--- /dev/null
+++ b/stories/MapAdaptor/components/Mapbox.tsx
@@ -0,0 +1,85 @@
+// @ts-ignore
+import '!style-loader!css-loader!./css/l7.css';
+import { Marker, Popup, Scale, Zoom } from '@l7/component';
+import { PolygonLayer } from '@l7/layers';
+// @ts-ignore
+import { Scene } from '@l7/scene';
+import * as React from 'react';
+
+export default class Mapbox extends React.Component {
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d2e0e930-fd44-4fca-8872-c1037b0fee7b.json',
+ );
+ const scene = new Scene({
+ id: 'map',
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/streets-v9',
+ center: [110.19382669582967, 30.258134],
+ pitch: 0,
+ zoom: 3,
+ });
+ this.scene = scene;
+ const layer = new PolygonLayer({});
+
+ layer
+ .source(await response.json())
+ .size('name', [0, 10000, 50000, 30000, 100000])
+ .color('name', () => {
+ return 'yellow';
+ })
+ .shape('fill')
+ .style({
+ opacity: 0.8,
+ });
+ scene.addLayer(layer);
+ scene.render();
+ scene.on('loaded', () => {
+ const zoomControl = new Zoom({
+ position: 'bottomright',
+ });
+ const scaleControl = new Scale();
+ const popup = new Popup({
+ offsets: [0, 20],
+ })
+ .setLnglat({
+ lng: 120.19382669582967,
+ lat: 30.258134,
+ })
+ .setText('hello')
+ .addTo(scene);
+
+ const maker = new Marker();
+ maker
+ .setLnglat({
+ lng: 120.19382669582967,
+ lat: 30.258134,
+ })
+ .addTo(scene);
+ scene.addControl(zoomControl);
+ scene.addControl(scaleControl);
+ // layer.fitBounds();
+ });
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/MapAdaptor/components/Point3D.tsx b/stories/MapAdaptor/components/Point3D.tsx
new file mode 100644
index 0000000000..bbe2a407e7
--- /dev/null
+++ b/stories/MapAdaptor/components/Point3D.tsx
@@ -0,0 +1,64 @@
+import { Point } from '@l7/layers';
+import { Scene } from '@l7/scene';
+import * as React from 'react';
+import data from './data.json';
+
+export default class Point3D extends React.Component {
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ this.scene.destroy();
+ }
+
+ public componentDidMount() {
+ const scene = new Scene({
+ center: [120.19382669582967, 30.258134],
+ id: 'map',
+ pitch: 0,
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/streets-v9',
+ zoom: 1,
+ });
+ scene.addImage(
+ '00',
+ 'https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*kzTMQqS2QdUAAAAAAAAAAABkARQnAQ',
+ );
+ const pointLayer = new Point({});
+ const p1 = {
+ type: 'FeatureCollection',
+ features: [
+ {
+ type: 'Feature',
+ properties: {},
+ geometry: {
+ type: 'Point',
+ coordinates: [83.671875, 44.84029065139799],
+ },
+ },
+ ],
+ };
+ pointLayer
+ .source(data)
+ .color('blue')
+ .shape('scalerank', [ 'triangleColumn', 'squareColumn', 'hexagonColumn' ,'cylinder' ])
+ .size([25, 10]);
+ scene.addLayer(pointLayer);
+ scene.render();
+
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/MapAdaptor/components/Polygon.tsx b/stories/MapAdaptor/components/Polygon.tsx
new file mode 100644
index 0000000000..c44abc5a70
--- /dev/null
+++ b/stories/MapAdaptor/components/Polygon.tsx
@@ -0,0 +1,100 @@
+// @ts-ignore
+import { PolygonLayer } from '@l7/layers';
+// @ts-ignore
+import { Scene } from '@l7/scene';
+import * as dat from 'dat.gui';
+import * as React from 'react';
+
+function convertRGB2Hex(rgb: number[]) {
+ return (
+ '#' + rgb.map((r) => ('0' + Math.floor(r).toString(16)).slice(-2)).join('')
+ );
+}
+
+export default class Mapbox extends React.Component {
+ private gui: dat.GUI;
+ private $stats: Node;
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ if (this.gui) {
+ this.gui.destroy();
+ }
+ if (this.$stats) {
+ document.body.removeChild(this.$stats);
+ }
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d2e0e930-fd44-4fca-8872-c1037b0fee7b.json',
+ );
+ const scene = new Scene({
+ id: 'map',
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/streets-v9',
+ center: [110.19382669582967, 50.258134],
+ pitch: 0,
+ zoom: 3,
+ });
+ this.scene = scene;
+ const layer = new PolygonLayer({});
+
+ // TODO: new GeoJSONSource()
+ layer
+ .source(await response.json())
+ .size('name', [0, 10000, 50000, 30000, 100000])
+ .color('name', [
+ '#2E8AE6',
+ '#69D1AB',
+ '#DAF291',
+ '#FFD591',
+ '#FF7A45',
+ '#CF1D49',
+ ])
+ .shape('fill')
+ .style({
+ opacity: 0.2,
+ });
+ scene.addLayer(layer);
+ scene.render();
+ /*** 运行时修改样式属性 ***/
+ const gui = new dat.GUI();
+ this.gui = gui;
+ const styleOptions = {
+ color: [0, 0, 0],
+ featureRange: {
+ startIndex: 0,
+ endIndex: Infinity,
+ },
+ };
+ const pointFolder = gui.addFolder('精确更新 feature');
+ pointFolder.add(styleOptions.featureRange, 'startIndex', 0, 100, 1);
+ pointFolder.add(styleOptions.featureRange, 'endIndex', 0, 100, 1);
+ pointFolder.addColor(styleOptions, 'color').onChange((color: number[]) => {
+ layer.color('name', [convertRGB2Hex(color)], {
+ featureRange: {
+ startIndex: styleOptions.featureRange.startIndex,
+ endIndex: styleOptions.featureRange.endIndex,
+ },
+ });
+ scene.render();
+ });
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/MapAdaptor/components/css/l7.css b/stories/MapAdaptor/components/css/l7.css
new file mode 100644
index 0000000000..1d573ca53b
--- /dev/null
+++ b/stories/MapAdaptor/components/css/l7.css
@@ -0,0 +1,400 @@
+.l7-marker {
+ position: absolute !important;
+ top: 0;
+ left: 0;
+ z-index: 5;
+}
+.l7-popup-anchor-top,
+.l7-popup-anchor-top-left,
+.l7-popup-anchor-top-right {
+ -webkit-flex-direction: column;
+ flex-direction: column;
+}
+
+.l7-popup-anchor-bottom,
+.l7-popup-anchor-bottom-left,
+.l7-popup-anchor-bottom-right {
+ -webkit-flex-direction: column-reverse;
+ flex-direction: column-reverse;
+}
+
+.l7-popup-anchor-left {
+ -webkit-flex-direction: row;
+ flex-direction: row;
+}
+
+.l7-popup-anchor-right {
+ -webkit-flex-direction: row-reverse;
+ flex-direction: row-reverse;
+}
+.l7-popup {
+ position: absolute;
+ top: 0;
+ left: 0;
+ display: -webkit-flex;
+ display: flex;
+ will-change: transform;
+ pointer-events: none;
+ z-index: 5;
+}
+.l7-popup-tip {
+ width: 0;
+ height: 0;
+ border: 10px solid transparent;
+ z-index: 1;
+}
+.l7-popup-anchor-top .l7-popup-tip {
+ -webkit-align-self: center;
+ align-self: center;
+ border-top: none;
+ border-bottom-color: #fff;
+}
+
+.l7-popup-anchor-top-left .l7-popup-tip {
+ -webkit-align-self: flex-start;
+ align-self: flex-start;
+ border-top: none;
+ border-left: none;
+ border-bottom-color: #fff;
+}
+
+.l7-popup-anchor-top-right .l7-popup-tip {
+ -webkit-align-self: flex-end;
+ align-self: flex-end;
+ border-top: none;
+ border-right: none;
+ border-bottom-color: #fff;
+}
+
+.l7-popup-anchor-bottom .l7-popup-tip {
+ -webkit-align-self: center;
+ align-self: center;
+ border-bottom: none;
+ border-top-color: #fff;
+}
+
+.l7-popup-anchor-bottom-left .l7-popup-tip {
+ -webkit-align-self: flex-start;
+ align-self: flex-start;
+ border-bottom: none;
+ border-left: none;
+ border-top-color: #fff;
+}
+
+.l7-popup-anchor-bottom-right .l7-popup-tip {
+ -webkit-align-self: flex-end;
+ align-self: flex-end;
+ border-bottom: none;
+ border-right: none;
+ border-top-color: #fff;
+}
+
+.l7-popup-anchor-left .l7-popup-tip {
+ -webkit-align-self: center;
+ align-self: center;
+ border-left: none;
+ border-right-color: #fff;
+}
+
+.l7-popup-anchor-right .l7-popup-tip {
+ -webkit-align-self: center;
+ align-self: center;
+ border-right: none;
+ border-left-color: #fff;
+}
+
+.l7-popup-close-button {
+ position: absolute;
+ right: 0;
+ top: 0;
+ border: 0;
+ padding: 0;
+ font-size: 25px;
+ line-height: 20px;
+ border-radius: 0 3px 0 0;
+ cursor: pointer;
+ background-color: transparent;
+}
+
+.l7-popup-close-button:hover {
+ background-color: rgba(0, 0, 0, 0.05);
+}
+
+.l7-popup-content {
+ position: relative;
+ background: #fff;
+ border-radius: 3px;
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
+ padding: 10px 10px 15px;
+ pointer-events: auto;
+}
+
+.l7-popup-anchor-top-left .l7-popup-content {
+ border-top-left-radius: 0;
+}
+
+.l7-popup-anchor-top-right .l7-popup-content {
+ border-top-right-radius: 0;
+}
+
+.l7-popup-anchor-bottom-left .l7-popup-content {
+ border-bottom-left-radius: 0;
+}
+
+.l7-popup-anchor-bottom-right .l7-popup-content {
+ border-bottom-right-radius: 0;
+}
+
+.l7-popup-track-pointer {
+ display: none;
+}
+
+.l7-popup-track-pointer * {
+ pointer-events: none;
+ user-select: none;
+}
+
+.l7-map:hover .l7-popup-track-pointer {
+ display: flex;
+}
+
+.l7-map:active .l7-popup-track-pointer {
+ display: none;
+}
+
+.l7-popup-close-button {
+ position: absolute;
+ right: 0;
+ top: 0;
+ border: 0;
+ border-radius: 0 3px 0 0;
+ cursor: pointer;
+ background-color: transparent;
+}
+
+.l7-popup-close-button:hover {
+ background-color: rgba(0, 0, 0, 0.05);
+}
+
+.l7-popup-content {
+ position: relative;
+ background: #fff;
+ border-radius: 3px;
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
+ padding: 10px 10px 15px;
+ pointer-events: auto;
+}
+
+/* general toolbar styles */
+
+.l7-bar {
+ box-shadow: 0 1px 5px rgba(0,0,0,0.65);
+ border-radius: 4px;
+ }
+.l7-bar a,
+.l7-bar a:hover {
+ background-color: #fff;
+ width: 36px;
+ height: 36px;
+ line-height: 30px;
+ font-size: 30px;
+ display: block;
+ text-align: center;
+ text-decoration: none;
+ color: #8E9DAB;
+ }
+.l7-bar a,
+.l7-control-layers-toggle {
+ background-position: 50% 50%;
+ background-repeat: no-repeat;
+ display: block;
+ }
+.l7-bar a:hover {
+ background-color: #f4f4f4;
+ }
+.l7-bar a:first-child {
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ }
+.l7-bar a:last-child {
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ border-bottom: none;
+ }
+.l7-bar a.l7-disabled {
+ cursor: default;
+ background-color: #f4f4f4;
+ color: #bbb;
+ }
+
+
+/* control positioning */
+
+.l7-control-container {
+ font: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;
+}
+.l7-control-hide {
+ display: none;
+}
+.l7-control {
+ position: relative;
+ z-index: 800;
+ pointer-events: visiblePainted; /* IE 9-10 doesn't have auto */
+ pointer-events: auto;
+ }
+.l7-top,
+.l7-bottom {
+ position: absolute;
+ z-index: 1000;
+ pointer-events: none;
+ }
+.l7-top {
+ top: 0;
+ }
+.l7-right {
+ right: 0;
+ }
+.l7-bottom {
+ bottom: 0;
+ }
+.l7-left {
+ left: 0;
+ }
+.l7-control {
+ float: left;
+ clear: both;
+ }
+.l7-right .l7-control {
+ float: right;
+ }
+.l7-top .l7-control {
+ margin-top: 10px;
+ }
+.l7-bottom .l7-control {
+ margin-bottom: 10px;
+ }
+.l7-left .l7-control {
+ margin-left: 10px;
+ }
+.l7-right .l7-control {
+ margin-right: 10px;
+ }
+
+ /* attribution and scale controls */
+
+.l7-control-container .l7-control-attribution {
+ background: #fff;
+ background: rgba(255, 255, 255, 0.7);
+ margin: 0;
+ }
+.l7-control-attribution,
+.l7-control-scale-line {
+ padding: 0 5px;
+ color: #333;
+ }
+.l7-control-attribution a {
+ text-decoration: none;
+ }
+.l7-control-attribution a:hover {
+ text-decoration: underline;
+ }
+.l7-container .l7-control-attribution,
+.l7-container .l7-control-scale {
+ font-size: 11px;
+ padding: 5px 5px 2px 5px;
+ background: rgba(255, 255, 255, 0.7);
+ }
+.l7-left .l7-control-scale {
+ margin-left: 5px;
+ }
+.l7-bottom .l7-control-scale {
+ margin-bottom: 5px;
+ }
+.l7-control-scale-line {
+ border: 2px solid #8E9DAB;
+ border-top: none;
+ color: #8e9dab;
+ line-height: 1.1;
+ padding: 2px 5px 1px;
+ font-size: 11px;
+ white-space: nowrap;
+ overflow: hidden;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+
+ background: #fff;
+ background: rgba(255, 255, 255, 0.8);
+ }
+.l7-control-scale-line:not(:first-child) {
+ border-top: 2px solid #777;
+ border-bottom: none;
+ margin-top: -2px;
+ }
+.l7-control-scale-line:not(:first-child):not(:last-child) {
+ border-bottom: 2px solid #777;
+ }
+
+.l7-touch .l7-control-attribution,
+.l7-touch .l7-control-layers,
+.l7-touch .l7-bar {
+ box-shadow: none;
+ }
+.l7-touch .l7-control-layers,
+.l7-touch .l7-bar {
+ border: 2px solid rgba(0,0,0,0.2);
+ background-clip: padding-box;
+ }
+
+
+ /* layers control */
+
+.l7-control-layers {
+ box-shadow: 0 1px 5px rgba(0,0,0,0.4);
+ background: #fff;
+ border-radius: 5px;
+ }
+.l7-control-layers-toggle {
+ background-image: url(../images/layers.svg);
+ width: 36px;
+ height: 36px;
+ }
+.l7-retina .l7-control-layers-toggle {
+ background-image: url(../images/layers.svg);
+ background-size: 26px 26px;
+ }
+.l7-touch .l7-control-layers-toggle {
+ width: 44px;
+ height: 44px;
+ }
+.l7-control-layers .l7-control-layers-list,
+.l7-control-layers-expanded .l7-control-layers-toggle {
+ display: none;
+ }
+.l7-control-layers-expanded .l7-control-layers-list {
+ display: block;
+ position: relative;
+ }
+.l7-control-layers-expanded {
+ padding: 6px 10px 6px 6px;
+ color: #333;
+ background: #fff;
+ }
+.l7-control-layers-scrollbar {
+ overflow-y: scroll;
+ overflow-x: hidden;
+ padding-right: 5px;
+ }
+.l7-control-layers-selector {
+ margin-top: 2px;
+ position: relative;
+ top: 1px;
+ }
+.l7-control-layers label {
+ display: block;
+ }
+.l7-control-layers-separator {
+ height: 0;
+ border-top: 1px solid #ddd;
+ margin: 5px -10px 5px -6px;
+ }
+
diff --git a/stories/MapAdaptor/components/data.json b/stories/MapAdaptor/components/data.json
new file mode 100644
index 0000000000..9a9f830d5c
--- /dev/null
+++ b/stories/MapAdaptor/components/data.json
@@ -0,0 +1,4940 @@
+{
+ "type": "FeatureCollection",
+ "features": [
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "South West Cape",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -43.510984,
+ "long_x": 146.054227,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 146.03379804609568,
+ -43.5404025683706
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Howe",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -37.488775,
+ "long_x": 149.95853,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 149.95838463633373,
+ -37.48894622188092
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Otway",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -38.857622,
+ "long_x": 143.565403,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 143.537005108191,
+ -38.85472383068997
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Jaffa",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -36.944244,
+ "long_x": 139.690866,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 139.68061977964746,
+ -36.95624316107086
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Carnot",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -34.920233,
+ "long_x": 135.656027,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 135.65378326897053,
+ -34.93870859313661
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Byron",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -28.658282,
+ "long_x": 153.632849,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 153.62799176015545,
+ -28.66197417050363
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Manifold",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -22.702081,
+ "long_x": 150.811228,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 150.81116783945873,
+ -22.702080987505923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape York",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -10.710859,
+ "long_x": 142.522018,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 142.52173912852123,
+ -10.710747979693423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Melville",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -14.163629,
+ "long_x": 144.506417,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 144.50660240977123,
+ -14.163506768755923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Arnhem",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -12.337984,
+ "long_x": 136.952429,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 136.91481885262823,
+ -12.295662864626316
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "West Cape Howe",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -35.104301,
+ "long_x": 117.597011,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 117.59693444102123,
+ -35.10430266719342
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Leeuwin",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -34.297841,
+ "long_x": 115.10633,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 115.1280088910596,
+ -34.328007092559645
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Pasley",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -33.929054,
+ "long_x": 123.517283,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 123.51722252695873,
+ -33.92888762813092
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Londonderry",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -13.713856,
+ "long_x": 126.964514,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 126.94130045687105,
+ -13.74290642667802
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Steep Point",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -26.16822,
+ "long_x": 113.169959,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 113.14519563289093,
+ -26.157463616878637
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "North West Cape",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -21.809776,
+ "long_x": 114.117534,
+ "region": "Oceania",
+ "subregion": "Australia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 114.16010761213809,
+ -21.801474697071743
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Lands End",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 50.069677,
+ "long_x": -5.668629,
+ "region": "Europe",
+ "subregion": "British Isles",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -5.668629523822517,
+ 50.06970856327533
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo Gracias a Dios",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 14.994242,
+ "long_x": -83.15866,
+ "region": "North America",
+ "subregion": "Central America",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -83.15874182851002,
+ 14.994208074994077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Brewster",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 70.150754,
+ "long_x": -22.122616,
+ "region": "North America",
+ "subregion": "Greenland",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -22.122731086322517,
+ 70.15088532108783
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Morris Jesup",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 83.626331,
+ "long_x": -32.491541,
+ "region": "North America",
+ "subregion": "Greenland",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -32.49150550038502,
+ 83.62628815311908
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Cape York",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 76.218919,
+ "long_x": -68.218612,
+ "region": "North America",
+ "subregion": "Greenland",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -68.21861731679127,
+ 76.21887848515033
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Nunap Isua",
+ "comment": null,
+ "name_alt": "Cape Farewell",
+ "lat_y": 59.862583,
+ "long_x": -43.90088,
+ "region": "North America",
+ "subregion": "Greenland",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -43.90080725819752,
+ 59.86267731327533
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Rifstangi",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 66.530766,
+ "long_x": -16.126417,
+ "region": "Europe",
+ "subregion": "Iceland",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -16.148503201808108,
+ 66.53076813358783
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Grmsey",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 66.669359,
+ "long_x": -18.251096,
+ "region": "Europe",
+ "subregion": "Iceland",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -18.251088019916267,
+ 66.66937897343158
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Surtsey",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 63.217764,
+ "long_x": -20.434929,
+ "region": "Europe",
+ "subregion": "Iceland",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -20.434803840228767,
+ 63.21771881718158
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cap Est",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -15.274849,
+ "long_x": 50.499889,
+ "region": "Africa",
+ "subregion": "Indian Ocean",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 50.49976647227123,
+ -15.274956964068423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Cape Vohimena",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -25.546355,
+ "long_x": 45.158683,
+ "region": "Africa",
+ "subregion": "Indian Ocean",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 45.15870201914623,
+ -25.546319268755923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Rodrigues",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -19.702241,
+ "long_x": 66.54263,
+ "region": "Seven seas (open ocean)",
+ "subregion": "Indian Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 66.54273522227123,
+ -19.702203057818423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Diego Garcia",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -19.702241,
+ "long_x": 66.54263,
+ "region": "Seven seas (open ocean)",
+ "subregion": "Indian Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 72.44202721445873,
+ -7.332207940630923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "I. Clarión",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 18.345725,
+ "long_x": -114.749992,
+ "region": "Seven seas (open ocean)",
+ "subregion": "North Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -114.74998938710377,
+ 18.345770574994077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "I. Socorro",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 18.786694,
+ "long_x": -110.992912,
+ "region": "Seven seas (open ocean)",
+ "subregion": "North Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -110.99290930897877,
+ 18.786810614056577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Tikopia",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -12.28881,
+ "long_x": 168.833542,
+ "region": "Oceania",
+ "subregion": "Melanesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 168.83362877695873,
+ -12.288750909380923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Norfolk I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -29.02416,
+ "long_x": 167.960052,
+ "region": "Oceania",
+ "subregion": "Melanesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 167.96009362070873,
+ -29.024102471880923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Cretin",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -6.637492,
+ "long_x": 147.852392,
+ "region": "Oceania",
+ "subregion": "Melanesia",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 147.85242760508373,
+ -6.637261651568423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Îles Chesterfield",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -19.20447,
+ "long_x": 159.95171,
+ "region": "Oceania",
+ "subregion": "Melanesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 159.95167076914623,
+ -19.204644464068423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Lamotrek",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 7.509727,
+ "long_x": 146.333084,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 146.33301842539623,
+ 7.509711004681577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Kosrae",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 5.329221,
+ "long_x": 162.974172,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 162.97413170664623,
+ 5.329169012494077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Arorea",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -2.617755,
+ "long_x": 176.81264,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 176.81263268320873,
+ -2.617852471880923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Pingelap",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 6.22951,
+ "long_x": 160.702931,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 160.70289147227123,
+ 6.229681707806577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Kapingamarangi",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 1.079429,
+ "long_x": 154.781328,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 154.78138268320873,
+ 1.079474188275327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Agrihan",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 18.777332,
+ "long_x": 145.670369,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 145.67042076914623,
+ 18.777411199994077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Asuncion",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 19.688654,
+ "long_x": 145.40141,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 145.40125573008373,
+ 19.688666082806577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Wotje",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 9.451143,
+ "long_x": 170.012255,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 170.01209557383373,
+ 9.451300360150327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Bikar",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 12.243519,
+ "long_x": 170.120691,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 170.12061608164623,
+ 12.243597723431577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Pagan",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 18.119631,
+ "long_x": 145.785087,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 145.78492272227123,
+ 18.119635321087827
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Wake I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 19.303497,
+ "long_x": 166.63626,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 166.63624108164623,
+ 19.303595282025327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Tabiteuea",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -1.201405,
+ "long_x": 174.755207,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 174.75513756602123,
+ -1.201348565630923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Aranuka",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 0.226766,
+ "long_x": 173.626286,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 173.62623131602123,
+ 0.226752020306577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Nauru",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -0.505856,
+ "long_x": 166.930778,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 166.93067467539623,
+ -0.505791925005923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ebon",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 4.59977,
+ "long_x": 168.736432,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 168.73633873789623,
+ 4.599798895306577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Jaluit",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 5.964455,
+ "long_x": 169.682894,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 169.68299401133373,
+ 5.964483953900327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Mili",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 6.107334,
+ "long_x": 171.725875,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 171.72584069102123,
+ 6.107489324994077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Majuro",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 7.118009,
+ "long_x": 171.159743,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 171.15980065195873,
+ 7.117987371869077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ailinglapalap",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 7.276392,
+ "long_x": 168.596926,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 168.59693444102123,
+ 7.276495672650327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Kwajalein",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 8.746619,
+ "long_x": 167.735072,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 167.73511803477123,
+ 8.746710516400327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Rongelap",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 11.164329,
+ "long_x": 166.869876,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 166.86988365977123,
+ 11.164496160931577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Bikini",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 11.639231,
+ "long_x": 165.550698,
+ "region": "Oceania",
+ "subregion": "Micronesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 165.55042565195873,
+ 11.639288641400327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Reinga",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -34.432767,
+ "long_x": 172.7285,
+ "region": "Oceania",
+ "subregion": "New Zealand",
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 172.70558117137455,
+ -34.42039113947056
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Necker",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 23.586649,
+ "long_x": -164.704743,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -164.70470130116627,
+ 23.586676336712827
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Laysan",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 25.776083,
+ "long_x": -171.733589,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -171.73363196522877,
+ 25.776007391400327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Kure Atoll",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 28.440992,
+ "long_x": -178.319207,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -178.31920325429127,
+ 28.440985418744077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Nikumaroro",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -4.644675,
+ "long_x": -174.53143,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -174.53142249257252,
+ -4.644707940630923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Howland I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 0.814266,
+ "long_x": -176.638313,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -176.63829505116627,
+ 0.814276434369077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Palmyra Atoll",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 5.879013,
+ "long_x": -162.09929,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -162.09923255116627,
+ 5.879095770306577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Jarvis",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -0.368919,
+ "long_x": -160.020814,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -160.02080237538502,
+ -0.368951104693423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Takutea",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -19.8026,
+ "long_x": -158.294405,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -158.29430091054127,
+ -19.802666925005923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Rakahanga",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -10.022892,
+ "long_x": -161.081621,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -161.08171546132252,
+ -10.022881768755923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Raroia",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -16.054416,
+ "long_x": -142.509609,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -142.50963294179127,
+ -16.054253839068423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Rapa",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -27.587603,
+ "long_x": -144.328315,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -144.32823645741627,
+ -27.587456964068423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Mangareva",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -23.102464,
+ "long_x": -134.985909,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -134.98582923085377,
+ -23.102593682818423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Henderson I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -24.349847,
+ "long_x": -128.317479,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -128.31755530507252,
+ -24.349663995318423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Nanumea",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -5.67562,
+ "long_x": 176.137639,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 176.13770592539623,
+ -5.675591729693423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Niulakita",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -10.750687,
+ "long_x": 179.497571,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 179.49756920664623,
+ -10.750664971880923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "The Snares",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -48.017042,
+ "long_x": 166.588946,
+ "region": "Oceania",
+ "subregion": "New Zealand",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 166.58887780039623,
+ -48.01690032344342
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Kanton",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -2.757106,
+ "long_x": -171.71703,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -171.71703040272877,
+ -2.757134698443423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Tabuaeran",
+ "comment": null,
+ "name_alt": "Fanning I.",
+ "lat_y": 3.866545,
+ "long_x": -159.326781,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -159.32683264882252,
+ 3.866705633587827
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Malden",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -4.042491,
+ "long_x": -154.983478,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -154.98350989491627,
+ -4.042657159380923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Rarotonga",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -21.201867,
+ "long_x": -159.797637,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -159.79771887929127,
+ -21.201836846880923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Rangiroa",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -15.2046,
+ "long_x": -147.773967,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -147.77403723866627,
+ -15.204766534380923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Funafuti",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -8.491577,
+ "long_x": 179.19841,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 179.19837487070873,
+ -8.491631768755923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Vavau",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -18.590062,
+ "long_x": -173.976769,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -173.97673499257252,
+ -18.590020440630923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "I. de Pascua",
+ "comment": null,
+ "name_alt": "Easter I.",
+ "lat_y": -27.102117,
+ "long_x": -109.367953,
+ "region": "Oceania",
+ "subregion": "Polynesia",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -109.36790930897877,
+ -27.102227471880923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "St. Croix",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 17.762944,
+ "long_x": -64.763088,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -64.76317298085377,
+ 17.763006903119077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Grand Cayman",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 19.315829,
+ "long_x": -81.271416,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -81.27159583241627,
+ 19.315802313275327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "San Salvador",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 24.052793,
+ "long_x": -74.492848,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -74.49290930897877,
+ 24.052801824994077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Grenada",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 12.105978,
+ "long_x": -61.723079,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -61.72319495351002,
+ 12.105963446087827
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Barbuda",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 17.622525,
+ "long_x": -61.789243,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -61.78929602772877,
+ 17.622626043744077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Antigua",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 17.040441,
+ "long_x": -61.775982,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -61.77592932851002,
+ 17.040594793744077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Guadeloupe",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 16.180583,
+ "long_x": -61.656947,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -61.65703284413502,
+ 16.180670477337827
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Dominica",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 15.452943,
+ "long_x": -61.352652,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -61.35271155507252,
+ 15.452887274212827
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Martinique",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 14.672462,
+ "long_x": -61.008715,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -61.00883948476002,
+ 14.672491766400327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Saint Lucia",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 13.918332,
+ "long_x": -60.982225,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -60.98222815663502,
+ 13.918280340619077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Saint Vincent",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 13.270131,
+ "long_x": -61.207143,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -61.20720374257252,
+ 13.270209051556577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Barbados",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 13.164326,
+ "long_x": -59.566742,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -59.56682288319752,
+ 13.164252020306577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Tobago",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 11.259334,
+ "long_x": -60.677992,
+ "region": "South America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -60.67808997304127,
+ 11.259283758587827
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Margarita",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 10.981467,
+ "long_x": -64.051401,
+ "region": "South America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -64.05144202382252,
+ 10.981512762494077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Curaao",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 12.185355,
+ "long_x": -68.999109,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -68.99919593007252,
+ 12.185309149212827
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Aruba",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 12.502849,
+ "long_x": -69.96488,
+ "region": "North America",
+ "subregion": "West Indies",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -69.96501624257252,
+ 12.502752996869077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ras Banäs",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 23.950592,
+ "long_x": 35.778059,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 35.77808678477123,
+ 23.950628973431577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ponta das Salinas",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -12.832908,
+ "long_x": 12.928991,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 12.968705086077254,
+ -12.855718342716505
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ponta das Palmeirinhas",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -9.071387,
+ "long_x": 12.999549,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 13.033811372274608,
+ -9.099938228394153
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo Bojador",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 26.157836,
+ "long_x": -14.473111,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -14.473194953510017,
+ 26.157965399212827
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Cape Agulhas",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -34.801182,
+ "long_x": 19.993472,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 19.993418816021233,
+ -34.80108001094342
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Gees Gwardafuy",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 11.812855,
+ "long_x": 51.235173,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 51.258313644180184,
+ 11.822028799226407
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Victoria Falls",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -17.77079,
+ "long_x": 25.460133,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "waterfall"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 25.852793816021233,
+ -17.928033135943423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Novyy I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -50.959168,
+ "long_x": -72.995002,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -2.811695930072517,
+ -70.86150481563092
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Lyddan I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -50.959168,
+ "long_x": -72.995002,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -20.902027961322517,
+ -74.11870696406842
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Verblyud I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -50.959168,
+ "long_x": -72.995002,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 16.049937370708733,
+ -69.88189055781842
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Coulman I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -50.959168,
+ "long_x": -72.995002,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 169.73536217539623,
+ -73.50945403438092
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Minna Hook",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -50.959168,
+ "long_x": -72.995002,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 167.25318444102123,
+ -78.63811614375592
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Wright I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -50.959168,
+ "long_x": -72.995002,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -116.89262854726002,
+ -74.06670501094342
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Grant I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -50.959168,
+ "long_x": -72.995002,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -131.48540198476002,
+ -74.48272063594342
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Newman I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -50.959168,
+ "long_x": -72.995002,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -145.68681800038502,
+ -75.59185149531842
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Dean I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -50.959168,
+ "long_x": -72.995002,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -127.63438880116627,
+ -74.50066497188092
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Cape Adare",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 170.26734223219574,
+ -71.33025954578193
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Cape Poinsett",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 113.20496666758373,
+ -65.78606536250592
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Masson I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 96.63392174570873,
+ -66.15068938594342
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Mikhaylov I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 85.60340416758373,
+ -66.84026458125592
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Cape Norvegia",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -12.327320930072517,
+ -71.37249114375592
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Deception I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -60.61430823476002,
+ -62.95086028438092
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Cape Framnes",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -60.59343421132252,
+ -65.97173430781842
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Cape Agassiz",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -62.87468421132252,
+ -68.45610930781842
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Cape Jeremy",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -68.79051673085377,
+ -69.43328215938092
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Comorin",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 8.143554,
+ "long_x": 77.471497,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 77.51210506924555,
+ 8.085338515340696
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Dondra Head",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 5.947528,
+ "long_x": 80.616321,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 80.59180925571331,
+ 5.929580617022318
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Yelizavety",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 54.416083,
+ "long_x": 142.720445,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 142.72059166758373,
+ 54.41620514530658
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Pt. Yuzhnyy",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 57.733572,
+ "long_x": 156.796426,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 156.79664147227123,
+ 57.73346588749408
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Sata",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 31.026941,
+ "long_x": 130.695089,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 130.69520104258373,
+ 31.026922918744077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Aniva",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 46.081706,
+ "long_x": 143.43487,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 143.43482506602123,
+ 46.08179352421283
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Terpeniya",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 48.66928,
+ "long_x": 144.712582,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 144.71253502695873,
+ 48.66937897343158
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Lopatka",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 50.914155,
+ "long_x": 156.651536,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 156.65162194102123,
+ 50.91412994999408
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Ozernoy",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 57.7708,
+ "long_x": 163.246685,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 163.24683678477123,
+ 57.77088043827533
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Olyutorskiy",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 59.960807,
+ "long_x": 170.31265,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 170.31287682383373,
+ 59.96082184452533
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Navarin",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 62.327239,
+ "long_x": 179.074225,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 179.07422936289623,
+ 62.32727692265033
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Lopatka",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 71.907853,
+ "long_x": 150.066042,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 150.06592858164623,
+ 71.90778229374408
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Ince",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 42.084312,
+ "long_x": 34.983358,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 34.98328698008373,
+ 42.08417389530658
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ras Fartak",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 15.677412,
+ "long_x": 52.229105,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 52.2389696999939,
+ 15.65795249845498
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ras Sharbatat",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 18.164534,
+ "long_x": 56.56827,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 56.558165806017215,
+ 18.166986171245085
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ra's al Had",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 22.530158,
+ "long_x": 59.849134,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 59.7995168175437,
+ 22.518675327148298
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Hachijjima",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 33.109796,
+ "long_x": 139.804903,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 139.80482018320873,
+ 33.10980866093158
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Plain of Jars",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 20.550709,
+ "long_x": 101.890532,
+ "region": "Asia",
+ "subregion": null,
+ "featureclass": "plain"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 101.89063561289623,
+ 20.550909735150327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Nordkapp",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 71.18337,
+ "long_x": 25.662398,
+ "region": "Europe",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 25.66067519711473,
+ 71.15450206702127
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo de São Vicentete",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 37.038304,
+ "long_x": -8.969391,
+ "region": "Europe",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -8.969410773822517,
+ 37.03827545780658
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo Fisterra",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 42.952418,
+ "long_x": -9.267837,
+ "region": "Europe",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -9.26996282865152,
+ 42.92873605781255
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape San Blas",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 29.713967,
+ "long_x": -85.270961,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -85.27092444569752,
+ 29.713995672650327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Sable",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 43.469097,
+ "long_x": -65.610769,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -65.61082923085377,
+ 43.46900055546283
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Bauld",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 51.568576,
+ "long_x": -55.430306,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -55.43028723866627,
+ 51.56848786015033
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape Fear",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 33.867949,
+ "long_x": -77.990568,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -77.99058997304127,
+ 33.86798737186908
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "I. Guadalupe",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 29.052552,
+ "long_x": -118.317465,
+ "region": "Seven seas (open ocean)",
+ "subregion": "North Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -118.31749426991627,
+ 29.052496649212827
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Miquelon",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 46.929526,
+ "long_x": -56.329884,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -56.32988440663502,
+ 46.92938873905658
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Cabo Corrientes",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 20.409471,
+ "long_x": -105.683581,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -105.67795873874799,
+ 20.420365114940253
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Pt. Eugenia",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 27.861925,
+ "long_x": -115.07629,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -115.04623945046137,
+ 27.842887092585283
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Point Conception",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 34.582313,
+ "long_x": -120.659016,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -120.46360036202867,
+ 34.46027592467621
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Cape Hatteras",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 35.437762,
+ "long_x": -75.450543,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -75.54032952413311,
+ 35.24475263812895
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Cape Sable",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 25.124896,
+ "long_x": -81.090442,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -81.09044348866627,
+ 25.124762274212827
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Cape Hope",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 68.35638,
+ "long_x": -166.815582,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -166.81321268769543,
+ 68.35380207543972
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Point Barrow",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 71.372637,
+ "long_x": -156.615894,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -156.4719492091668,
+ 71.40589128763096
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Cape Canaveral",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 28.483713,
+ "long_x": -80.534941,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -80.53625603636821,
+ 28.473056814472134
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Cape Mendocino",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 40.350222,
+ "long_x": -124.323474,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -124.39201745043425,
+ 40.44222065537283
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Cabo San Lucas",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 22.887711,
+ "long_x": -109.969843,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -109.96983801991627,
+ 22.887762762494077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Cape Churchill",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 58.752014,
+ "long_x": -93.182023,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -93.18211829335377,
+ 58.75208161015033
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Cape Cod",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 41.734867,
+ "long_x": -69.964865,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -70.03687833567446,
+ 41.9914589934385
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Cape May",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 37.2017,
+ "long_x": -75.926791,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -74.95121933164988,
+ 38.92969645987068
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 2,
+ "name": "Niagara Falls",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 43.087653,
+ "long_x": -79.044073,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "waterfall"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -79.04411780507252,
+ 43.08771393436908
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "I. Alejandro Selkirk",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -33.722178,
+ "long_x": -80.733492,
+ "region": "Seven seas (open ocean)",
+ "subregion": "South Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -80.73350989491627,
+ -33.72222258906842
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "I. San Ambrosio",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -26.341922,
+ "long_x": -79.900062,
+ "region": "Seven seas (open ocean)",
+ "subregion": "South Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -79.90001380116627,
+ -26.341851495318423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "I. Robinson Crusoe",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -33.589852,
+ "long_x": -78.872522,
+ "region": "Seven seas (open ocean)",
+ "subregion": "South Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -78.87254798085377,
+ -33.58965422969342
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo Orange",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 4.125735,
+ "long_x": -51.242144,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -51.26287766987179,
+ 4.135614177285231
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo de Santa Marta Grande",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -28.558078,
+ "long_x": -48.735526,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -48.80338037734664,
+ -28.57198267323537
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Punta del Este",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -34.975503,
+ "long_x": -54.933154,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -54.94628769070382,
+ -34.96658679840526
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo San Antonio",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -36.381052,
+ "long_x": -56.655377,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -56.716792100626165,
+ -36.40959917438929
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo Corrientes",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -38.135985,
+ "long_x": -57.546212,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -57.56252349612641,
+ -38.066376942128464
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Punta Rasa",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -40.834718,
+ "long_x": -62.282201,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -62.25911745789756,
+ -40.72626411656719
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo Dos Bahías",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -44.9887,
+ "long_x": -65.615952,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -65.5438334451688,
+ -44.89439847091873
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Punta Negra",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -5.948875,
+ "long_x": -81.108252,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -81.10832678944752,
+ -5.948663018755923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Punta Lavapié",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -37.262867,
+ "long_x": -73.606377,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -73.60304396243782,
+ -37.17120002933805
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Cabo de Hornos",
+ "comment": null,
+ "name_alt": "Cape Horn",
+ "lat_y": -55.862824,
+ "long_x": -67.169425,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -67.16942298085377,
+ -55.86284758906842
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 2,
+ "name": "Salto Angel",
+ "comment": null,
+ "name_alt": "Angel Falls",
+ "lat_y": 5.686836,
+ "long_x": -62.061848,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "waterfall"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -62.06181800038502,
+ 5.686896063275327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 2,
+ "name": "Iguazu Falls",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -25.568265,
+ "long_x": -54.582842,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "waterfall"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -54.58299719960377,
+ -25.568291925005923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Clipperton I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 10.309933,
+ "long_x": -109.213284,
+ "region": "Seven seas (open ocean)",
+ "subregion": "North Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -109.2295822833424,
+ 10.304020508304784
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Île Amsterdam",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -19.702241,
+ "long_x": 66.54263,
+ "region": "Seven seas (open ocean)",
+ "subregion": "South Indian Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 77.53467858164623,
+ -37.85796477656842
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Île Amsterdam",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -19.702241,
+ "long_x": 66.54263,
+ "region": "Seven seas (open ocean)",
+ "subregion": "South Indian Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 77.52552330820873,
+ -38.72014739375592
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Île Europa",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -22.837936,
+ "long_x": 40.192423,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 40.19239342539623,
+ -22.837945245318423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Annobón",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -1.429572,
+ "long_x": 5.621149,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 5.621104362896233,
+ -1.429620050005923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Ascension",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -7.925105,
+ "long_x": -14.362648,
+ "region": "Seven seas (open ocean)",
+ "subregion": "Southern Atlantic Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -14.362721320697517,
+ -7.925225518755923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Tristan da Cunha",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -35.278715,
+ "long_x": -17.932071,
+ "region": "Seven seas (open ocean)",
+ "subregion": "Southern Atlantic Ocean",
+ "featureclass": "island group"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -12.265431281635017,
+ -37.07024505000592
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Gough I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -35.278715,
+ "long_x": -17.932071,
+ "region": "Seven seas (open ocean)",
+ "subregion": "Southern Atlantic Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -9.967213508197517,
+ -40.34014251094342
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 7,
+ "name": "Bouvet I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -35.278715,
+ "long_x": -17.932071,
+ "region": "Seven seas (open ocean)",
+ "subregion": "Southern Atlantic Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 3.409922722271233,
+ -54.41655852656842
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Cape Colbeck",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -50.959168,
+ "long_x": -72.995002,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -158.25767981679127,
+ -77.11113860469342
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Is. de Fernando de Noronha",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -3.849881,
+ "long_x": -32.417053,
+ "region": "Seven seas (open ocean)",
+ "subregion": "Southern Atlantic Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -32.41704260976002,
+ -3.849908135943423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Cocos Is.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -12.158465,
+ "long_x": 96.828369,
+ "region": "Seven seas (open ocean)",
+ "subregion": "Indian Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 96.82837975352123,
+ -12.158257745318423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Christmas I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -10.472542,
+ "long_x": 105.667155,
+ "region": "Seven seas (open ocean)",
+ "subregion": "Indian Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 105.66712487070873,
+ -10.472588800005923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Campbell I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Seven seas (open ocean)",
+ "subregion": "South Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 169.12012780039623,
+ -52.51043059688092
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Macquarie I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Seven seas (open ocean)",
+ "subregion": "South Indian Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 158.89600670664623,
+ -54.60979583125592
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Cape Darnley",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 69.61109459727123,
+ -67.77349212031842
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Cape Ann",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Antarctica",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 51.40809166758373,
+ -66.16106536250592
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Peter I I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -52.510412,
+ "long_x": 169.120166,
+ "region": "Antarctica",
+ "subregion": "Southern Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -90.56822669179127,
+ -68.76604583125592
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Antipodes Islands",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -49.649273,
+ "long_x": 178.773056,
+ "region": "Seven seas (open ocean)",
+ "subregion": "South Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 178.77295983164623,
+ -49.64934661250592
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Bounty Is.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -47.688207,
+ "long_x": 178.89656,
+ "region": "Seven seas (open ocean)",
+ "subregion": "South Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 178.89661705820873,
+ -47.68828704219342
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Balls Pyramid",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -31.826904,
+ "long_x": 159.158463,
+ "region": "Seven seas (open ocean)",
+ "subregion": "South Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 159.15833580820873,
+ -31.826958917193423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Lord Howe I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -31.542569,
+ "long_x": 159.069307,
+ "region": "Seven seas (open ocean)",
+ "subregion": "South Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 159.06922448008373,
+ -31.542535089068423
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "St. Helena",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -15.950901,
+ "long_x": -5.705161,
+ "region": "Seven seas (open ocean)",
+ "subregion": "Southern Atlantic Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -5.705128547260017,
+ -15.950860284380923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "I. del Coco",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 5.539857,
+ "long_x": -87.092227,
+ "region": "Seven seas (open ocean)",
+ "subregion": "North Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -87.09221350819752,
+ 5.539923407025327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 6,
+ "name": "Sable I.",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 43.930893,
+ "long_x": -59.91953,
+ "region": "Seven seas (open ocean)",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -59.91960608632252,
+ 43.93097565311908
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo Delgado",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -10.670103,
+ "long_x": 40.624309,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 40.62440026133373,
+ -10.670098565630923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ponta da Barra",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -23.829888,
+ "long_x": 35.515696,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 35.51563561289623,
+ -23.830010675005923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ponta São Sebastio",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -22.118899,
+ "long_x": 35.480417,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 35.48023522227123,
+ -22.118829034380923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ras Cantin",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 32.581636,
+ "long_x": -9.273918,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -9.273915168353767,
+ 32.58161041874408
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ras Kasr",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 18.076817,
+ "long_x": 38.573746,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 38.58027735871919,
+ 18.075167704493374
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ponta de Jericoacoara",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -2.85044,
+ "long_x": -40.067208,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -39.991649927946355,
+ -2.851822991583529
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo de São Roque",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -5.193476,
+ "long_x": -35.447654,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -35.50994900651512,
+ -5.156866121305913
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Ponta da Baleia",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -17.710136,
+ "long_x": -39.157619,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -39.14557867836578,
+ -17.678753845220847
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo de São Tomé",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -21.996382,
+ "long_x": -41.009692,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -40.98763990313761,
+ -21.971754611783773
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo Frio",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -22.869501,
+ "long_x": -41.962188,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -41.89015627474056,
+ -22.759730815669258
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo San Diego",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -54.6406,
+ "long_x": -65.21365,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -65.21361243397877,
+ -54.64067962031842
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cabo Tres Puntas",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -47.237629,
+ "long_x": -65.774707,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -65.74439816328368,
+ -47.328778975372465
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cap Saint André",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -16.174457,
+ "long_x": 44.467405,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 44.46729576914623,
+ -16.174493096880923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape St. Lucia",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -28.552694,
+ "long_x": 32.367221,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 32.36732018320873,
+ -28.552666925005923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Cape St. Francis",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -34.171766,
+ "long_x": 24.817688,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 24.84143613032799,
+ -34.18861022316314
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Minamitori-shima",
+ "comment": null,
+ "name_alt": "Marcus I.",
+ "lat_y": 24.319813,
+ "long_x": 153.958899,
+ "region": "Seven seas (open ocean)",
+ "subregion": "North Pacific Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 153.95887291758373,
+ 24.319769598431577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Is. Martin Vaz",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -20.559422,
+ "long_x": -29.338439,
+ "region": "Seven seas (open ocean)",
+ "subregion": "Southern Atlantic Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -29.338429328510017,
+ -20.559502862505923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Rockall",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 58.163524,
+ "long_x": -12.408715,
+ "region": "Seven seas (open ocean)",
+ "subregion": "North Atlantic Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -12.408741828510017,
+ 58.16339752811908
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "I. de Cozumel",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 20.444687,
+ "long_x": -86.880555,
+ "region": "North America",
+ "subregion": null,
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -86.88060462147877,
+ 20.444708563275327
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 5,
+ "name": "Bermuda Islands",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 32.317339,
+ "long_x": -64.742895,
+ "region": "Seven seas (open ocean)",
+ "subregion": "North Atlantic Ocean",
+ "featureclass": "island"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -64.74290930897877,
+ 32.31726715702533
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Punta Galera",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 0.731221,
+ "long_x": -80.062205,
+ "region": "South America",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -80.06212317616627,
+ 0.731207586712827
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Cap Lopez",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -0.604761,
+ "long_x": 8.726423,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 8.727299789450319,
+ -0.615086490513119
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Cape Bobaomby",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -11.966598,
+ "long_x": 49.262904,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 49.26282799570873,
+ -11.966485284380923
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 4,
+ "name": "Cap Blanc",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 20.822108,
+ "long_x": -17.052856,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -17.052906867572517,
+ 20.822088934369077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Cape of Good Hope",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -34.307311,
+ "long_x": 18.441206,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 18.441294792583733,
+ -34.30718352656842
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Cape Palmas",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 4.373924,
+ "long_x": -7.457356,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -7.457386848041267,
+ 4.373968817181577
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Cape Verde",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 14.732312,
+ "long_x": -17.471776,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -17.471730109760017,
+ 14.732489324994077
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Cap Bon",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": 37.073954,
+ "long_x": 11.024061,
+ "region": "Africa",
+ "subregion": null,
+ "featureclass": "cape"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 11.024180534771233,
+ 37.07398102421283
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "Oceanic pole of inaccessibility",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -48.865032,
+ "long_x": -123.401986,
+ "region": "Seven seas (open ocean)",
+ "subregion": "South Pacific Ocean",
+ "featureclass": "pole"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -123.40202796132252,
+ -48.86504485469342
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "South Magnetic Pole 2005 (est)",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -48.865032,
+ "long_x": -123.401986,
+ "region": "Antarctica",
+ "subregion": "Southern Ocean",
+ "featureclass": "pole"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ 137.85425865977123,
+ -64.51824309688092
+ ]
+ }
+ },
+ {
+ "type": "Feature",
+ "properties": {
+ "scalerank": 3,
+ "name": "North Magnetic Pole 2005 (est)",
+ "comment": null,
+ "name_alt": null,
+ "lat_y": -48.865032,
+ "long_x": -123.401986,
+ "region": "Seven seas (open ocean)",
+ "subregion": "Arctic Ocean",
+ "featureclass": "pole"
+ },
+ "geometry": {
+ "type": "Point",
+ "coordinates": [
+ -114.40569007069752,
+ 82.71008942265033
+ ]
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/stories/MapAdaptor/components/data2.json b/stories/MapAdaptor/components/data2.json
new file mode 100644
index 0000000000..79e85caedc
--- /dev/null
+++ b/stories/MapAdaptor/components/data2.json
@@ -0,0 +1,6113 @@
+{
+ "type": "FeatureCollection",
+ "crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },
+ "features": [
+ { "type": "Feature", "properties": { "id": "ak16994521", "mag": 2.3, "time": 1507425650893, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.5129, 63.1016, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994519", "mag": 1.7, "time": 1507425289659, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.4048, 63.1224, 105.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994517", "mag": 1.6, "time": 1507424832518, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3597, 63.0781, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38021336", "mag": 1.42, "time": 1507423898710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.497, 34.299667, 7.64 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b2nn", "mag": 4.2, "time": 1507422626990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -87.6901, 12.0623, 46.41 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994510", "mag": 1.6, "time": 1507422449194, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.5053, 63.0719, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b2nb", "mag": 4.6, "time": 1507420784440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4576, -20.2873, 614.26 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994298", "mag": 2.4, "time": 1507419370097, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.789, 63.1725, 7.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905861", "mag": 1.39, "time": 1507418785100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.993164, 36.421833, 6.37 ] } },
+ { "type": "Feature", "properties": { "id": "ci38021304", "mag": 1.11, "time": 1507418426010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.0155, 33.656333, 12.37 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994293", "mag": 1.5, "time": 1507417256497, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.512, 63.0879, 10.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994287", "mag": 2.0, "time": 1507413903714, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.4378, 63.0933, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994285", "mag": 1.5, "time": 1507413670029, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.6538, 63.2272, 96.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994283", "mag": 1.4, "time": 1507413587442, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.5325, 63.0844, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994280", "mag": 1.3, "time": 1507413266231, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.4752, 61.8518, 54.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994278", "mag": 1.8, "time": 1507413195076, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8597, 61.6214, 50.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994274", "mag": 1.9, "time": 1507412827617, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.7142, 62.9656, 93.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994273", "mag": 1.2, "time": 1507411925999, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2484, 61.2705, 69.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994270", "mag": 2.0, "time": 1507411814209, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.0732, 65.5942, 14.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b2ly", "mag": 4.1, "time": 1507411448780, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -90.5445, 13.5146, 54.36 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905841", "mag": 1.38, "time": 1507411214450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.819504, 37.605499, 4.14 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905836", "mag": 1.4, "time": 1507410206440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.930168, 37.636833, -0.71 ] } },
+ { "type": "Feature", "properties": { "id": "ci38021272", "mag": 1.34, "time": 1507408122250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.509167, 34.1555, 16.34 ] } },
+ { "type": "Feature", "properties": { "id": "ci38021264", "mag": 1.0, "time": 1507407938100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.792167, 33.5115, 5.16 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993963", "mag": 1.4, "time": 1507407100665, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9126, 63.1812, 150.4 ] } },
+ { "type": "Feature", "properties": { "id": "hv61936851", "mag": 2.55, "time": 1507406278360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.078659, 19.374167, 2.15 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993960", "mag": 1.4, "time": 1507405129739, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3106, 61.5726, 26.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993952", "mag": 1.7, "time": 1507403679922, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.5846, 60.2607, 34.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci38021224", "mag": 1.04, "time": 1507401391710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.929, 34.254833, 18.27 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993752", "mag": 1.3, "time": 1507401212982, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.5065, 63.0847, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993746", "mag": 1.3, "time": 1507399350671, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.8929, 63.5257, 3.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b2jk", "mag": 4.6, "time": 1507398878400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -175.7258, -18.9821, 195.22 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993741", "mag": 1.6, "time": 1507398797233, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3473, 63.0775, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905766", "mag": 2.64, "time": 1507397278960, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.137497, 36.579834, 7.72 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993738", "mag": 1.4, "time": 1507396778206, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.1075, 61.8312, 71.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993736", "mag": 1.2, "time": 1507396542471, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3769, 63.0621, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b2ii", "mag": 4.3, "time": 1507395765330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.8319, 16.7195, 58.84 ] } },
+ { "type": "Feature", "properties": { "id": "uw61339006", "mag": 1.91, "time": 1507395622730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.689833, 47.049167, 5.38 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993732", "mag": 1.7, "time": 1507395602456, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.5283, 63.0785, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993720", "mag": 2.5, "time": 1507394741482, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.6683, 60.7696, 67.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993714", "mag": 1.6, "time": 1507394402896, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.7591, 61.6478, 30.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993710", "mag": 1.5, "time": 1507393418705, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3458, 63.0633, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993699", "mag": 1.6, "time": 1507392875390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.4669, 63.0675, 3.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993695", "mag": 1.3, "time": 1507392837463, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.5169, 63.083, 1.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993692", "mag": 2.3, "time": 1507392657193, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.4771, 63.0742, 4.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993486", "mag": 4.2, "time": 1507392435159, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.458, 63.1276, 14.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b2hz", "mag": 4.3, "time": 1507392287310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.9686, 16.6087, 69.65 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905751", "mag": 1.21, "time": 1507391530870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.023666, 37.605335, 1.97 ] } },
+ { "type": "Feature", "properties": { "id": "ci38021056", "mag": 1.95, "time": 1507390783500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.793833, 33.493, 3.65 ] } },
+ { "type": "Feature", "properties": { "id": "ci38021048", "mag": 1.02, "time": 1507388708760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.225, 34.0335, 0.39 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993303", "mag": 1.9, "time": 1507385638408, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0033, 63.2623, 0.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b2hc", "mag": 4.9, "time": 1507385606770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.3179, -30.4302, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993301", "mag": 2.1, "time": 1507383291943, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.1913, 58.5727, 85.2 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251607", "mag": 3.09, "time": 1507383200950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -113.140503, 38.030666, 7.29 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905716", "mag": 1.07, "time": 1507382878240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.765663, 38.789166, 2.09 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905711", "mag": 1.17, "time": 1507382428800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.678001, 37.621498, 4.39 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993140", "mag": 1.9, "time": 1507381096302, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.8813, 63.1738, 75.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993128", "mag": 1.6, "time": 1507378828395, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.531, 61.7978, 14.8 ] } },
+ { "type": "Feature", "properties": { "id": "hv61936621", "mag": 1.98, "time": 1507378497820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.423492, 19.223499, 34.62 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993119", "mag": 1.5, "time": 1507378014192, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -138.8317, 59.7754, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905681", "mag": 1.39, "time": 1507377675100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.793999, 38.8255, 2.24 ] } },
+ { "type": "Feature", "properties": { "id": "hv61936531", "mag": 2.66, "time": 1507377140600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.32016, 19.338667, 4.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16992960", "mag": 1.9, "time": 1507376759252, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -158.4264, 67.7636, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16992953", "mag": 2.1, "time": 1507376626801, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.5725, 59.8372, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b2fz", "mag": 4.1, "time": 1507372645200, "felt": 103, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -71.7814, -32.4981, 23.29 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608370", "mag": 1.3, "time": 1507370926907, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.9711, 36.3094, 7.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16992628", "mag": 1.5, "time": 1507369548317, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -163.8046, 65.9499, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16992625", "mag": 1.4, "time": 1507369466929, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.8309, 63.376, 82.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905641", "mag": 1.22, "time": 1507368529650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.724167, 38.760334, 1.16 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b2fc", "mag": 5.1, "time": 1507368374110, "felt": 13, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -77.9778, -1.6647, 147.34 ] } },
+ { "type": "Feature", "properties": { "id": "ak16992611", "mag": 2.1, "time": 1507366872675, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.3324, 62.9966, 88.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16992607", "mag": 1.8, "time": 1507366536698, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.4858, 64.7593, 11.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b2et", "mag": 4.9, "time": 1507365487800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.7469, -33.0092, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16992603", "mag": 2.2, "time": 1507364931625, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.8133, 59.8473, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020960", "mag": 1.0, "time": 1507363084310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.673833, 33.904333, 35.76 ] } },
+ { "type": "Feature", "properties": { "id": "hv61936261", "mag": 1.72, "time": 1507362853030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.382172, 19.23, 34.41 ] } },
+ { "type": "Feature", "properties": { "id": "ak16992451", "mag": 1.8, "time": 1507362228460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.427, 66.3947, 5.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020944", "mag": 1.0, "time": 1507362158010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.457667, 34.326, 2.73 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259564", "mag": 1.03, "time": 1507361004730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.529833, 46.865833, 9.91 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905606", "mag": 1.19, "time": 1507358854330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.791832, 38.834835, 1.65 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608387", "mag": 1.0, "time": 1507358249243, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9071, 38.405, 11.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020896", "mag": 1.89, "time": 1507358144340, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.793833, 33.486833, 4.21 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b2dx", "mag": 4.5, "time": 1507357181260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 130.1291, -6.3628, 156.49 ] } },
+ { "type": "Feature", "properties": { "id": "se60208171", "mag": 2.4, "time": 1507353902490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -83.749833, 36.150333, 14.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905576", "mag": 1.77, "time": 1507352706600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.900833, 36.327168, 6.31 ] } },
+ { "type": "Feature", "properties": { "id": "ak16992147", "mag": 1.4, "time": 1507351430424, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0276, 62.5667, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16992146", "mag": 1.8, "time": 1507351047849, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -138.5063, 59.957, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905556", "mag": 1.77, "time": 1507350586140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.792, 38.834835, 1.77 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259559", "mag": 1.46, "time": 1507350177430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.530833, 46.869333, 10.71 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b2d1", "mag": 4.7, "time": 1507347862040, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -69.504, -16.7961, 178.13 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905531", "mag": 1.48, "time": 1507346675870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.831169, 37.4585, 2.53 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259549", "mag": 1.08, "time": 1507345321240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.516333, 46.8755, 11.43 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905521", "mag": 1.46, "time": 1507345267910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.816666, 37.603832, 4.04 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020824", "mag": 2.12, "time": 1507344823940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.655333, 34.632, 5.34 ] } },
+ { "type": "Feature", "properties": { "id": "ak16991857", "mag": 2.3, "time": 1507344587124, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.8808, 51.3254, 31.7 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608359", "mag": 1.1, "time": 1507344387447, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.1285, 37.4041, 0.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905511", "mag": 1.27, "time": 1507344302520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.817169, 37.604168, 4.02 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b2cx", "mag": 4.9, "time": 1507343887900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 69.1471, -23.7671, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905496", "mag": 1.94, "time": 1507341324260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.101166, 40.842499, 6.01 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b2cc", "mag": 5.0, "time": 1507340745260, "felt": null, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 132.668, 1.1151, 7.01 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020800", "mag": 1.46, "time": 1507340726000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.462667, 33.466333, 5.78 ] } },
+ { "type": "Feature", "properties": { "id": "ak16991706", "mag": 1.7, "time": 1507339655320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.2596, 60.2328, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16991711", "mag": 1.6, "time": 1507339653625, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.2013, 60.2021, 10.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16991704", "mag": 1.7, "time": 1507338343941, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.7575, 62.4396, 50.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16991697", "mag": 2.1, "time": 1507336466527, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.3178, 60.5797, 88.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020768", "mag": 1.56, "time": 1507336119080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.460167, 34.3335, 2.89 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020760", "mag": 1.22, "time": 1507335982510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.468167, 34.333167, 2.87 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020752", "mag": 1.81, "time": 1507335765850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.793, 33.490333, 4.58 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020744", "mag": 1.76, "time": 1507335646140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.566333, 35.339667, 7.86 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b2c0", "mag": 5.3, "time": 1507335391250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.3171, -33.0297, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905461", "mag": 1.16, "time": 1507333007350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.795998, 38.826, 2.32 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608334", "mag": 1.1, "time": 1507331333919, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.1247, 37.3789, 8.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16991557", "mag": 1.4, "time": 1507331263084, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.2293, 64.9749, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b2ba", "mag": 4.4, "time": 1507331102840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 152.3636, -10.0109, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b2b9", "mag": 4.2, "time": 1507331091160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 73.3529, 39.6124, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16991437", "mag": 2.0, "time": 1507330383962, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.4583, 60.3395, 72.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b2av", "mag": 4.3, "time": 1507329021540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 138.9649, 43.0121, 217.94 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608329", "mag": 1.3, "time": 1507328136999, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.1198, 37.3861, 8.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020720", "mag": 1.45, "time": 1507327306610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.955667, 34.34, -0.29 ] } },
+ { "type": "Feature", "properties": { "id": "uw61338531", "mag": 1.37, "time": 1507326914640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.991667, 46.572333, -0.3 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608354", "mag": 1.0, "time": 1507326343697, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.747, 39.8477, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905451", "mag": 1.47, "time": 1507326329600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.753833, 39.8485, 6.72 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905441", "mag": 1.23, "time": 1507325408690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.127, 36.566667, 9.16 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b29t", "mag": 4.5, "time": 1507325144410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 145.6471, 17.7456, 196.33 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b2ab", "mag": 2.6, "time": 1507324395860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -108.8949, 32.7663, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905436", "mag": 1.41, "time": 1507323505830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.155667, 36.5565, 6.94 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020712", "mag": 1.19, "time": 1507323492150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.991, 32.578667, 2.62 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b289", "mag": 2.4, "time": 1507321230800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.7321, 36.481, 5.37 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905431", "mag": 1.0, "time": 1507321021480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.178833, 38.107, -0.02 ] } },
+ { "type": "Feature", "properties": { "id": "ak16991182", "mag": 1.0, "time": 1507320721326, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.1644, 62.2007, 15.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16991178", "mag": 1.8, "time": 1507320357991, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.5804, 63.1717, 121.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905426", "mag": 1.24, "time": 1507320241050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.688667, 37.5335, 6.91 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020680", "mag": 1.5, "time": 1507320090270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.516, 33.860833, 0.62 ] } },
+ { "type": "Feature", "properties": { "id": "ak16991069", "mag": 1.8, "time": 1507318145350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.6965, 59.7754, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b27a", "mag": 2.4, "time": 1507317641850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.2269, 36.6265, 5.07 ] } },
+ { "type": "Feature", "properties": { "id": "ak16991058", "mag": 2.6, "time": 1507317554328, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.3172, 63.6837, 3.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020656", "mag": 1.03, "time": 1507317548410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.646667, 36.148333, 0.93 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020648", "mag": 1.08, "time": 1507317476900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.1915, 35.0025, -0.87 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905416", "mag": 1.19, "time": 1507317386760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.803333, 37.457667, -0.31 ] } },
+ { "type": "Feature", "properties": { "id": "uw61338426", "mag": 1.65, "time": 1507316609360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.7105, 43.553333, 7.02 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259489", "mag": 1.66, "time": 1507316359200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.477167, 45.9945, -2.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020624", "mag": 1.22, "time": 1507316271630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.362, 32.941333, 10.15 ] } },
+ { "type": "Feature", "properties": { "id": "ak16991011", "mag": 2.0, "time": 1507315584886, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.9279, 62.7834, 4.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b26p", "mag": 4.7, "time": 1507315424010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 68.9568, -49.2119, 13.54 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251447", "mag": 2.18, "time": 1507314096180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.457, 42.633167, 4.91 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905411", "mag": 1.24, "time": 1507313481610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.962333, 37.920333, -0.33 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b260", "mag": 4.4, "time": 1507311862190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 86.7487, 30.0165, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020552", "mag": 1.28, "time": 1507311788210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.351667, 35.052833, -1.01 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b25h", "mag": 5.5, "time": 1507311683180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -15.5503, -35.3171, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990870", "mag": 1.8, "time": 1507310931075, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.9372, 62.1214, 48.9 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608306", "mag": 1.9, "time": 1507310059424, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.6177, 38.5802, 5.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b24c", "mag": 4.6, "time": 1507309684550, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 143.7841, 37.4191, 31.5 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259479", "mag": 1.25, "time": 1507309316470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5305, 46.867167, 12.62 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251412", "mag": 2.1, "time": 1507308318150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.460333, 42.602667, 6.75 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905346", "mag": 2.33, "time": 1507308237260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.803333, 37.457333, 0.99 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020512", "mag": 1.61, "time": 1507308155060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.2815, 35.633833, 6.15 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020480", "mag": 1.04, "time": 1507307612510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.314167, 34.0145, 2.75 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990671", "mag": 1.6, "time": 1507307067130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.0099, 66.2332, 1.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905326", "mag": 1.17, "time": 1507305678060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.706, 38.783667, 2.5 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259459", "mag": 0.95, "time": 1507305300890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5315, 46.8575, 12.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020408", "mag": 1.2, "time": 1507302977930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.019833, 33.876, -0.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990501", "mag": 2.8, "time": 1507302735109, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.2441, 60.1679, 148.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b20f", "mag": 5.4, "time": 1507301800580, "felt": 169, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 141.1969, 37.0997, 47.42 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990465", "mag": 1.7, "time": 1507301707708, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.519, 67.5663, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020392", "mag": 2.6, "time": 1507301676460, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.894167, 31.614, 5.89 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990463", "mag": 1.6, "time": 1507300956103, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.1925, 59.8037, 20.0 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251397", "mag": 1.18, "time": 1507300478100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.436333, 42.554833, 9.68 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608296", "mag": 1.1, "time": 1507299948387, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.9267, 39.4223, 8.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020376", "mag": 1.4, "time": 1507299919340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.476667, 35.752167, 2.24 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608295", "mag": 2.0, "time": 1507298898804, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9217, 38.4131, 8.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b1zv", "mag": 5.1, "time": 1507298433140, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 95.0977, 12.0039, 21.82 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990379", "mag": 2.0, "time": 1507296668722, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.4456, 63.3167, 112.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990317", "mag": 2.4, "time": 1507295355033, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.6485, 60.9026, 21.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905256", "mag": 1.69, "time": 1507295344860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.7755, 38.805167, 0.72 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020296", "mag": 0.98, "time": 1507294899000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.445, 34.226167, 12.35 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905246", "mag": 1.14, "time": 1507294685610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.797333, 38.813499, 2.36 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905241", "mag": 1.27, "time": 1507294429860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.806167, 38.822333, 1.56 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990306", "mag": 1.6, "time": 1507293337500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.164, 63.5211, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905231", "mag": 1.31, "time": 1507293268040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.600333, 38.771667, 0.05 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259449", "mag": 1.29, "time": 1507293189490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.557667, 46.894167, 9.91 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905226", "mag": 1.25, "time": 1507291334810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.798333, 37.565333, -0.35 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020256", "mag": 2.0, "time": 1507290973570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.757833, 34.172833, 6.62 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020240", "mag": 1.05, "time": 1507290356170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.355667, 35.822833, 16.75 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b1xz", "mag": 5.2, "time": 1507289341850, "felt": null, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 155.9405, -6.8684, 106.51 ] } },
+ { "type": "Feature", "properties": { "id": "uw61338256", "mag": 1.22, "time": 1507287741010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.509333, 45.6895, 9.57 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020232", "mag": 1.4, "time": 1507287412090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.8455, 34.000333, 9.47 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259444", "mag": 1.6, "time": 1507286758530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.5795, 44.259167, 3.88 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259434", "mag": 1.18, "time": 1507286693390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.322167, 43.681333, 9.95 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990167", "mag": 3.0, "time": 1507285562299, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.2949, 51.2318, 28.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990162", "mag": 3.2, "time": 1507285408267, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.0402, 65.2966, 0.1 ] } },
+ { "type": "Feature", "properties": { "id": "hv61935226", "mag": 1.78, "time": 1507284229580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.42366, 19.2805, 7.76 ] } },
+ { "type": "Feature", "properties": { "id": "hv61935131", "mag": 1.67, "time": 1507283791470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.248833, 18.876833, 12.183 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990109", "mag": 1.9, "time": 1507282869514, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.1519, 63.251, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b1xd", "mag": 4.4, "time": 1507281825250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 119.9639, -0.4925, 44.07 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990102", "mag": 1.6, "time": 1507281420124, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7545, 61.5105, 70.6 ] } },
+ { "type": "Feature", "properties": { "id": "hv61935091", "mag": 2.94, "time": 1507279304370, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.2205, 19.380333, 14.051 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608291", "mag": 1.6, "time": 1507279195578, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.2224, 39.4096, 5.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905186", "mag": 0.99, "time": 1507278858510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8245, 37.483833, 5.31 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b1v8", "mag": 6.0, "time": 1507276773110, "felt": 108, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 143.9537, 37.485, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251377", "mag": 1.43, "time": 1507274976970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.444, 42.660667, 5.95 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989976", "mag": 3.1, "time": 1507274375943, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.7235, 59.8808, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259414", "mag": 1.86, "time": 1507273645130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.997833, 47.455667, 1.73 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b1v0", "mag": 4.7, "time": 1507273552100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 146.6145, 13.8504, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989973", "mag": 1.3, "time": 1507272833815, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.7833, 64.8537, 19.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b2dh", "mag": 3.3, "time": 1507270603000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.92, 49.06, 22.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989967", "mag": 1.9, "time": 1507270303410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.3206, 61.7195, 41.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020152", "mag": 1.08, "time": 1507270230410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.557333, 32.948833, 3.78 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b1um", "mag": 2.7, "time": 1507269804040, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4493, 42.6517, 7.67 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905156", "mag": 1.79, "time": 1507269478010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.801167, 38.822, 2.67 ] } },
+ { "type": "Feature", "properties": { "id": "nc71107634", "mag": 1.13, "time": 1507269413290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.478167, 38.6015, 12.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b1un", "mag": 4.3, "time": 1507269388630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 178.4985, 51.6139, 71.76 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251357", "mag": 1.47, "time": 1507268672130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.455333, 42.652833, 2.92 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989960", "mag": 1.1, "time": 1507268319981, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.2116, 64.2744, 14.8 ] } },
+ { "type": "Feature", "properties": { "id": "hv61935031", "mag": 1.75, "time": 1507267817920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.428833, 19.329, 10.185 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905151", "mag": 1.08, "time": 1507267299070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.823167, 37.607, 4.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259404", "mag": 1.03, "time": 1507266753410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.532167, 46.873, 11.23 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b1u8", "mag": 4.6, "time": 1507265974560, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -64.1261, -17.5702, 36.33 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020112", "mag": 1.06, "time": 1507265623210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.434833, 33.0315, 3.46 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905146", "mag": 1.56, "time": 1507265461960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.7915, 38.8195, 1.42 ] } },
+ { "type": "Feature", "properties": { "id": "uw61338091", "mag": 1.62, "time": 1507265317630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.2, 47.583333, 23.03 ] } },
+ { "type": "Feature", "properties": { "id": "uw61338086", "mag": 1.33, "time": 1507265080940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.200333, 47.583833, 23.12 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251347", "mag": 1.61, "time": 1507264823080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.494833, 42.639667, 0.79 ] } },
+ { "type": "Feature", "properties": { "id": "nc71107639", "mag": 1.32, "time": 1507263429870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.9235, 39.599833, 20.91 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905131", "mag": 1.06, "time": 1507263391130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.831, 37.5295, 5.95 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905121", "mag": 1.41, "time": 1507263129660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.403, 38.364167, 8.42 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b1tr", "mag": 4.8, "time": 1507262599510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 151.9528, -10.3953, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989915", "mag": 1.5, "time": 1507260314998, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3718, 63.0764, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "uw61338061", "mag": 1.26, "time": 1507260032120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.744833, 47.490167, 16.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989910", "mag": 2.1, "time": 1507259762026, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.6057, 63.4194, 106.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905106", "mag": 1.0, "time": 1507258246340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.822, 38.814833, 1.61 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905101", "mag": 2.97, "time": 1507257072490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -125.777167, 41.2375, 7.51 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989906", "mag": 1.6, "time": 1507256091995, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.063, 65.8813, 12.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020032", "mag": 1.89, "time": 1507255962830, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.7975, 33.5, 5.36 ] } },
+ { "type": "Feature", "properties": { "id": "ci38020024", "mag": 1.53, "time": 1507255628970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.875167, 33.957, 3.47 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b1t0", "mag": 4.8, "time": 1507255428530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -25.496, 0.9934, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b1sv", "mag": 4.6, "time": 1507253577740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 152.1867, -9.9486, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251342", "mag": 1.12, "time": 1507252828550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.414167, 42.5485, 6.65 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905066", "mag": 0.98, "time": 1507251331760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9395, 37.636, 5.66 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608277", "mag": 1.5, "time": 1507251023072, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.857, 37.3396, 3.9 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251327", "mag": 1.16, "time": 1507250350380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.672333, 39.4485, 12.04 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989868", "mag": 1.6, "time": 1507249990990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.6081, 61.1327, 14.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci38019984", "mag": 1.38, "time": 1507249506910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.598667, 33.450667, 7.77 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608273", "mag": 1.0, "time": 1507249499810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.0539, 37.1082, 8.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci38019976", "mag": 1.92, "time": 1507249308880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.377167, 34.427, 9.46 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b1s9", "mag": 4.0, "time": 1507248914000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -71.348, -29.925, 48.8 ] } },
+ { "type": "Feature", "properties": { "id": "uw61337986", "mag": 1.12, "time": 1507245979370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.395167, 45.685667, -0.74 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905011", "mag": 2.81, "time": 1507244867710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8105, 37.472, 6.12 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905016", "mag": 1.36, "time": 1507244847860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.7825, 38.7915, 0.56 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259379", "mag": 0.99, "time": 1507244598420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.529, 46.871167, 12.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989827", "mag": 1.4, "time": 1507244539965, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.2289, 64.9761, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989825", "mag": 1.8, "time": 1507243916881, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.1245, 62.4971, 81.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905001", "mag": 1.65, "time": 1507243472580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.808, 38.822, 1.64 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904996", "mag": 2.14, "time": 1507243164460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.588667, 40.652333, 25.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989822", "mag": 1.5, "time": 1507242888109, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.857, 61.9122, 45.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b1rh", "mag": 4.6, "time": 1507242807430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 144.6063, 21.8848, 100.39 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989815", "mag": 2.5, "time": 1507240652193, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.192, 61.0044, 106.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989811", "mag": 1.8, "time": 1507240498324, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.939, 62.7658, 79.9 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251317", "mag": 1.66, "time": 1507240484300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.418167, 42.544333, 6.24 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b1px", "mag": 2.6, "time": 1507239146260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4355, 42.5495, 8.32 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259359", "mag": 1.17, "time": 1507238290040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.965, 43.357333, 5.92 ] } },
+ { "type": "Feature", "properties": { "id": "uw61337951", "mag": 2.3, "time": 1507238213550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.549833, 49.328833, -0.06 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989718", "mag": 1.4, "time": 1507237904044, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.5289, 61.2012, 0.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989717", "mag": 1.9, "time": 1507237796189, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.701, 59.032, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "uw61337946", "mag": 2.27, "time": 1507237659430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.817167, 47.392167, -0.46 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904961", "mag": 0.97, "time": 1507237420050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8365, 37.482833, 1.23 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989714", "mag": 1.7, "time": 1507235850265, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0124, 65.8954, 7.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci38019864", "mag": 1.0, "time": 1507235571440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.794167, 33.508667, 6.47 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259334", "mag": 1.45, "time": 1507235042560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.525667, 46.872833, 11.13 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989709", "mag": 1.6, "time": 1507234798667, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.3071, 63.3209, 6.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989702", "mag": 2.5, "time": 1507234198600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.414, 63.3343, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989701", "mag": 1.8, "time": 1507234162044, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0004, 65.8966, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989699", "mag": 1.7, "time": 1507234036518, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.6575, 60.1339, 106.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904941", "mag": 1.63, "time": 1507233857390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.810167, 38.8205, 2.04 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904936", "mag": 3.14, "time": 1507233758820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -127.192, 40.163167, 11.62 ] } },
+ { "type": "Feature", "properties": { "id": "hv61934246", "mag": 1.02, "time": 1507233403750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.289833, 19.374, 1.772 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989698", "mag": 1.7, "time": 1507233388591, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0126, 65.8742, 0.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989695", "mag": 1.9, "time": 1507232812188, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9865, 65.9098, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904926", "mag": 1.29, "time": 1507232594330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.837167, 37.504167, 0.07 ] } },
+ { "type": "Feature", "properties": { "id": "ci38019816", "mag": 1.31, "time": 1507231819600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.491, 33.846167, -0.48 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904891", "mag": 1.41, "time": 1507229918140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.104833, 37.324833, -0.31 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989694", "mag": 1.5, "time": 1507229700025, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.7663, 63.5209, 14.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904886", "mag": 2.03, "time": 1507229279930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.3835, 40.709833, 19.57 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989692", "mag": 1.6, "time": 1507228866480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0051, 65.8735, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904881", "mag": 1.48, "time": 1507228723050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.194667, 40.598333, 15.65 ] } },
+ { "type": "Feature", "properties": { "id": "ci38019744", "mag": 1.44, "time": 1507226134710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.072333, 33.020667, -0.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989683", "mag": 2.4, "time": 1507225956631, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.785, 60.8774, 34.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci38019728", "mag": 1.0, "time": 1507225418070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.720667, 36.004, 2.64 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904846", "mag": 1.87, "time": 1507224165330, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.8105, 38.821167, 1.64 ] } },
+ { "type": "Feature", "properties": { "id": "hv61934126", "mag": 1.58, "time": 1507223732510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.252167, 18.903833, 12.692 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989680", "mag": 2.5, "time": 1507223654781, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -163.5871, 67.3896, 1.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989626", "mag": 1.5, "time": 1507223506919, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.1613, 62.9421, 105.5 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251267", "mag": 1.3, "time": 1507222702710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.711, 37.088833, 8.72 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251262", "mag": 2.09, "time": 1507221444340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.413167, 42.600333, 6.09 ] } },
+ { "type": "Feature", "properties": { "id": "hv61934021", "mag": 1.71, "time": 1507221215150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.600174, 19.477667, 2.61 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259309", "mag": 0.99, "time": 1507220291830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.4755, 46.855833, 10.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904766", "mag": 1.2, "time": 1507219571830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.817667, 37.607833, 4.46 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b1ip", "mag": 4.3, "time": 1507219416430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 127.6953, -3.0506, 46.98 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989556", "mag": 1.8, "time": 1507219027423, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.1068, 64.723, 3.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904761", "mag": 1.28, "time": 1507218469040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.786667, 35.167, 4.77 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989554", "mag": 1.8, "time": 1507217831958, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.9487, 67.1103, 6.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38019560", "mag": 1.18, "time": 1507217071900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.2355, 35.399833, 11.83 ] } },
+ { "type": "Feature", "properties": { "id": "ld60143826", "mag": 1.25, "time": 1507215008870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -75.237833, 44.094, 4.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904741", "mag": 1.17, "time": 1507213799120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.883667, 37.539333, 2.63 ] } },
+ { "type": "Feature", "properties": { "id": "uw61314897", "mag": 1.26, "time": 1507213038640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.924167, 46.832167, 9.6 ] } },
+ { "type": "Feature", "properties": { "id": "hv61933821", "mag": 2.22, "time": 1507211808310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.427667, 19.767167, 23.499 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259289", "mag": 1.11, "time": 1507209951340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.482833, 46.8195, 2.22 ] } },
+ { "type": "Feature", "properties": { "id": "ci38019464", "mag": 2.55, "time": 1507209518050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.010667, 33.179667, 8.09 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251247", "mag": 1.23, "time": 1507208707300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.086833, 44.772167, 11.73 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989517", "mag": 1.3, "time": 1507208506436, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3491, 63.087, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38019448", "mag": 1.15, "time": 1507207944620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.294333, 34.679333, 2.44 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989485", "mag": 1.9, "time": 1507207780001, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -159.6654, 67.5326, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904706", "mag": 1.66, "time": 1507207659710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.798167, 38.793833, 3.66 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989482", "mag": 1.4, "time": 1507206716138, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.4807, 64.7367, 8.7 ] } },
+ { "type": "Feature", "properties": { "id": "uw61314867", "mag": 1.16, "time": 1507206461330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.192333, 47.183667, 14.42 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989481", "mag": 2.6, "time": 1507206068023, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.1435, 51.4576, 12.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904681", "mag": 2.64, "time": 1507204013350, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.8035, 38.791333, 3.29 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b1f7", "mag": 5.0, "time": 1507202248310, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 126.4874, 7.3643, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259279", "mag": 1.25, "time": 1507201170830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.476333, 44.006167, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989448", "mag": 1.0, "time": 1507200035021, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.9384, 64.5888, 18.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b1dj", "mag": 4.7, "time": 1507198268580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 49.1899, 31.277, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259274", "mag": 1.3, "time": 1507198163850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.318333, 46.1425, 12.9 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259269", "mag": 2.63, "time": 1507197824690, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.317333, 46.126333, 14.98 ] } },
+ { "type": "Feature", "properties": { "id": "ci38019328", "mag": 2.0, "time": 1507197738510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.290167, 34.678, 2.65 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b1da", "mag": 4.5, "time": 1507196589420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 178.5051, -25.068, 564.41 ] } },
+ { "type": "Feature", "properties": { "id": "ci38019312", "mag": 1.27, "time": 1507196570560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.412333, 35.621833, 7.71 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259264", "mag": 1.58, "time": 1507195834720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.989667, 43.0535, 5.98 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989416", "mag": 1.9, "time": 1507192569868, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.8165, 59.7884, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259259", "mag": 1.73, "time": 1507192054540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.3, 46.1355, 13.17 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989388", "mag": 2.2, "time": 1507191783280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.8358, 59.8781, 1.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b1c3", "mag": 5.4, "time": 1507191096920, "felt": 5, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -68.5742, -22.4118, 112.87 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904646", "mag": 2.52, "time": 1507190856940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.472, 40.616833, 21.52 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989386", "mag": 1.8, "time": 1507190760834, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.611, 63.1832, 11.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci37167708", "mag": 1.38, "time": 1507190349370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.7095, 33.2065, 10.46 ] } },
+ { "type": "Feature", "properties": { "id": "hv61933706", "mag": 1.21, "time": 1507190060680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.2125, 19.363, 1.776 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904641", "mag": 1.23, "time": 1507189755650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.236667, 37.334333, 8.36 ] } },
+ { "type": "Feature", "properties": { "id": "ci38019264", "mag": 1.99, "time": 1507188934660, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.2315, 32.416667, 18.41 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251227", "mag": 1.34, "time": 1507188766440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.442667, 42.578833, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259244", "mag": 1.28, "time": 1507188159830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.527833, 46.866167, 12.04 ] } },
+ { "type": "Feature", "properties": { "id": "hv61933701", "mag": 2.09, "time": 1507187842930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.470673, 19.211, 37.73 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904626", "mag": 0.96, "time": 1507187453970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.572333, 39.013167, -0.67 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251207", "mag": 1.35, "time": 1507187087800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.301167, 39.1075, 2.75 ] } },
+ { "type": "Feature", "properties": { "id": "ci38019256", "mag": 2.06, "time": 1507186145760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.372167, 33.358833, 11.42 ] } },
+ { "type": "Feature", "properties": { "id": "ci38019248", "mag": 1.49, "time": 1507186142240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.366, 33.357667, 11.67 ] } },
+ { "type": "Feature", "properties": { "id": "uw61314807", "mag": 1.16, "time": 1507185870880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.191167, 47.179833, 15.66 ] } },
+ { "type": "Feature", "properties": { "id": "se60045413", "mag": 1.81, "time": 1507185703120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -83.742167, 35.985167, 18.08 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904601", "mag": 0.95, "time": 1507185126040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.819, 37.603333, 3.65 ] } },
+ { "type": "Feature", "properties": { "id": "ci38019240", "mag": 1.25, "time": 1507185093960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.394, 35.618833, 8.88 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989380", "mag": 1.9, "time": 1507184561453, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3822, 60.6535, 53.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989379", "mag": 1.0, "time": 1507183395241, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.2677, 63.314, 4.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci38019200", "mag": 1.99, "time": 1507181070780, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.806833, 36.043833, 1.22 ] } },
+ { "type": "Feature", "properties": { "id": "ci38019192", "mag": 1.69, "time": 1507180426220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.807333, 36.043167, 1.21 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904556", "mag": 1.22, "time": 1507178909260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.7625, 38.821667, 1.49 ] } },
+ { "type": "Feature", "properties": { "id": "ci38019184", "mag": 1.33, "time": 1507178811140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.319833, 33.886333, 15.24 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989373", "mag": 2.2, "time": 1507178319160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0253, 59.7752, 99.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989370", "mag": 2.0, "time": 1507178108703, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9621, 62.3999, 67.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc71107619", "mag": 2.37, "time": 1507175814060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.793167, 38.814333, 3.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904521", "mag": 2.61, "time": 1507175806240, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.792, 38.813833, 3.02 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989344", "mag": 1.8, "time": 1507174164228, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.5816, 59.9877, 48.6 ] } },
+ { "type": "Feature", "properties": { "id": "uw61314692", "mag": 1.1, "time": 1507174062970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.048833, 48.836333, 3.53 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259229", "mag": 1.6, "time": 1507174016680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.526667, 46.874333, 12.15 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251182", "mag": 2.38, "time": 1507172461010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.415167, 42.5495, 8.84 ] } },
+ { "type": "Feature", "properties": { "id": "ci38019104", "mag": 1.08, "time": 1507172395710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.846167, 33.711167, 14.99 ] } },
+ { "type": "Feature", "properties": { "id": "uw61314677", "mag": 1.65, "time": 1507171780320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.027667, 48.845833, 0.9 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251177", "mag": 1.51, "time": 1507171597620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.880667, 37.041, 17.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904476", "mag": 1.12, "time": 1507171050970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.7565, 38.782501, 0.82 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904471", "mag": 1.34, "time": 1507170987390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.753167, 38.775667, 1.61 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989336", "mag": 1.2, "time": 1507169863981, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2568, 63.5162, 8.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904466", "mag": 1.16, "time": 1507169797040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.808667, 37.467667, 1.31 ] } },
+ { "type": "Feature", "properties": { "id": "ci37167548", "mag": 1.21, "time": 1507169669520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.3645, 33.350667, 11.33 ] } },
+ { "type": "Feature", "properties": { "id": "ci38019080", "mag": 1.35, "time": 1507169663590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.3545, 33.3525, 12.25 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989295", "mag": 4.3, "time": 1507169038804, "felt": 3, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ -152.901, 58.3623, 46.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci38019056", "mag": 2.12, "time": 1507167035520, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.805167, 36.042, 1.36 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989291", "mag": 1.7, "time": 1507165460879, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.1162, 61.3056, 37.1 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608181", "mag": 1.2, "time": 1507165236408, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.7192, 37.7977, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b190", "mag": 2.6, "time": 1507164698800, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.7663, 36.4461, 6.31 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989285", "mag": 2.3, "time": 1507164594638, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.5337, 60.8331, 35.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018992", "mag": 1.21, "time": 1507164594280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.435667, 33.033167, 6.13 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905406", "mag": 1.37, "time": 1507163603630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.975, 40.912333, 6.11 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989282", "mag": 2.6, "time": 1507162971426, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.8816, 53.7666, 69.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b185", "mag": 3.4, "time": 1507162321850, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.755, 36.45, 7.23 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018976", "mag": 1.34, "time": 1507162296820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.6665, 33.961333, 15.54 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904421", "mag": 1.81, "time": 1507162198800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -124.311667, 40.594833, 17.71 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989280", "mag": 2.0, "time": 1507162092700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -162.2549, 67.5542, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259214", "mag": 1.11, "time": 1507161815690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.529, 46.873667, 10.6 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608178", "mag": 1.2, "time": 1507161066465, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.8195, 37.303, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018944", "mag": 1.13, "time": 1507160279190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.801333, 36.0425, 0.57 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018936", "mag": 1.06, "time": 1507160033160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.352833, 33.1335, 7.01 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018928", "mag": 0.95, "time": 1507159919230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.758833, 33.67, 13.89 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989265", "mag": 2.4, "time": 1507159550480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7536, 62.8345, 98.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989262", "mag": 1.2, "time": 1507158170981, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.4466, 64.9696, 1.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989256", "mag": 2.1, "time": 1507157336866, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3316, 62.6072, 87.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b16h", "mag": 4.5, "time": 1507156394080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -66.7169, -23.9861, 195.32 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259199", "mag": 1.02, "time": 1507156049410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.531, 46.862667, 9.74 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989147", "mag": 1.8, "time": 1507155523233, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.2126, 62.1419, 50.6 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259194", "mag": 2.1, "time": 1507155343850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.326833, 46.116, 15.12 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b15z", "mag": 3.5, "time": 1507154804460, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.7425, 36.4507, 4.85 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989143", "mag": 1.6, "time": 1507154781579, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2414, 61.1185, 60.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018808", "mag": 0.95, "time": 1507153541570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.803667, 36.042, 1.12 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259184", "mag": 2.43, "time": 1507153540560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.529, 46.875, 11.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018800", "mag": 1.11, "time": 1507153075770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.805667, 36.044667, 1.33 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904366", "mag": 2.17, "time": 1507152989540, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.821833, 37.603167, 4.37 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904361", "mag": 2.03, "time": 1507152804460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.802, 38.819667, 3.31 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018776", "mag": 1.23, "time": 1507152409830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.796667, 33.506833, 4.99 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018760", "mag": 1.23, "time": 1507152333150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.805333, 36.044167, 1.08 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018752", "mag": 1.02, "time": 1507152229710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.803833, 36.0435, 1.58 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904356", "mag": 1.39, "time": 1507151361960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.986333, 37.451833, 11.44 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b152", "mag": 4.2, "time": 1507151144560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5193, 15.6807, 43.81 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259179", "mag": 1.09, "time": 1507150593920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.249667, 45.922167, -2.0 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608141", "mag": 1.4, "time": 1507150245096, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.5709, 37.2677, 5.8 ] } },
+ { "type": "Feature", "properties": { "id": "uw61314607", "mag": 2.13, "time": 1507149876900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.029167, 48.8415, 0.56 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989132", "mag": 3.2, "time": 1507149758758, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.904, 54.6732, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018704", "mag": 1.42, "time": 1507149228410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.937167, 32.9105, -0.2 ] } },
+ { "type": "Feature", "properties": { "id": "hv61932706", "mag": 2.34, "time": 1507148766410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.0805, 19.384667, 3.233 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018696", "mag": 1.43, "time": 1507148649160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.469333, 33.481, 7.42 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018688", "mag": 1.23, "time": 1507148125030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.7775, 34.859167, -1.14 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989124", "mag": 2.3, "time": 1507147085613, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.9048, 62.8046, 5.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989120", "mag": 1.9, "time": 1507146960353, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.3904, 61.7684, 33.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904326", "mag": 1.4, "time": 1507146844270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.835, 37.6255, 3.28 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018648", "mag": 1.34, "time": 1507146046240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.282833, 33.307, 10.02 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b12w", "mag": 4.1, "time": 1507145834470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -108.5682, 23.7468, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "uw61314577", "mag": 2.31, "time": 1507145284260, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -124.101667, 47.519667, 24.66 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989116", "mag": 2.0, "time": 1507144999479, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9792, 59.2967, 30.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904301", "mag": 1.44, "time": 1507144400690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.590333, 37.9535, 3.71 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904291", "mag": 0.97, "time": 1507144116270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.807335, 38.823166, 0.51 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018592", "mag": 0.98, "time": 1507144088190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.191, 34.995667, -0.84 ] } },
+ { "type": "Feature", "properties": { "id": "nc71107609", "mag": 1.42, "time": 1507143933230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8315, 37.459167, 2.81 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904286", "mag": 2.01, "time": 1507143903920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.127667, 36.540667, 3.02 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259164", "mag": 1.54, "time": 1507143801870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.466667, 46.003833, -2.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989114", "mag": 1.5, "time": 1507143799499, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2987, 62.9001, 136.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904276", "mag": 2.19, "time": 1507143670520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.125833, 36.539667, 3.42 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989112", "mag": 1.5, "time": 1507143346025, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.9517, 60.4284, 76.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989109", "mag": 1.6, "time": 1507142888288, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.4575, 68.4924, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us1000alvi", "mag": 4.8, "time": 1507142880510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 69.2314, -22.7343, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b11q", "mag": 4.3, "time": 1507142721780, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -95.0179, 16.6332, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608130", "mag": 2.0, "time": 1507142028227, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.6247, 38.6437, 2.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018568", "mag": 1.17, "time": 1507141815580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.480167, 33.8245, -0.64 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904241", "mag": 1.13, "time": 1507141805960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.843333, 37.550333, -1.19 ] } },
+ { "type": "Feature", "properties": { "id": "nc71107614", "mag": 1.26, "time": 1507141794500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.9105, 37.975, 2.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904226", "mag": 1.44, "time": 1507141566380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.839167, 37.554167, -0.37 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904231", "mag": 0.95, "time": 1507141526700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.848, 37.565167, -0.65 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989106", "mag": 1.6, "time": 1507141095901, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.5043, 63.2003, 100.7 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608125", "mag": 1.1, "time": 1507140434096, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.0698, 39.2152, 9.9 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251107", "mag": 2.02, "time": 1507140276970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.438667, 42.623, -0.06 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989101", "mag": 1.7, "time": 1507139784743, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.7521, 62.788, 15.0 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70236238", "mag": 1.83, "time": 1507139648960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.036, 37.001167, 5.77 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018464", "mag": 0.95, "time": 1507138418030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.469667, 34.0245, -0.75 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904196", "mag": 1.0, "time": 1507136805190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.407833, 36.764667, 10.33 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989095", "mag": 1.5, "time": 1507135541282, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.2816, 62.4313, 44.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018408", "mag": 1.57, "time": 1507134824880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.797167, 33.499, 4.25 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608107", "mag": 2.1, "time": 1507134616795, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9268, 38.3958, 7.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904171", "mag": 1.38, "time": 1507133031670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.614333, 36.881, 6.94 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904166", "mag": 2.71, "time": 1507132718170, "felt": 28, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.609333, 36.8815, 6.65 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989087", "mag": 1.4, "time": 1507131238883, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.032, 63.5134, 6.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0yw", "mag": 4.4, "time": 1507130270240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7831, 15.8774, 9.59 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989083", "mag": 2.0, "time": 1507129786603, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.5468, 62.9914, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989080", "mag": 1.7, "time": 1507129070012, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8528, 63.1143, 130.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b14r", "mag": 2.9, "time": 1507127377130, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -78.3466, -0.2479, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608088", "mag": 1.1, "time": 1507126739396, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.8623, 39.6344, 5.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0xy", "mag": 4.3, "time": 1507120048520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.219, 14.9246, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018272", "mag": 1.04, "time": 1507119983420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.979333, 33.952, 16.95 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018264", "mag": 1.21, "time": 1507118298180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.153667, 33.576, 12.56 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988954", "mag": 1.4, "time": 1507117165370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.0651, 59.0371, 113.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988951", "mag": 1.7, "time": 1507117164179, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7431, 61.7579, 50.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988955", "mag": 1.2, "time": 1507117137925, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.2404, 63.315, 3.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018256", "mag": 1.97, "time": 1507116401470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.047667, 33.9995, 14.99 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988947", "mag": 1.3, "time": 1507116091533, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.038, 61.8748, 115.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988943", "mag": 2.6, "time": 1507115904863, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -138.3287, 60.8439, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259149", "mag": 1.42, "time": 1507115359390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.520833, 46.866833, 12.33 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988941", "mag": 2.0, "time": 1507115138670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7265, 59.549, 35.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988937", "mag": 1.7, "time": 1507114508883, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.561, 63.6903, 125.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904051", "mag": 1.09, "time": 1507113834280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.793, 38.8355, 1.85 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018224", "mag": 1.17, "time": 1507113370200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.608833, 33.080833, 11.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904041", "mag": 1.12, "time": 1507113327750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.942, 36.506, 4.31 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251097", "mag": 2.09, "time": 1507111719760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.414333, 42.55, 7.34 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904031", "mag": 0.97, "time": 1507110773350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.365667, 36.7845, 3.47 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259134", "mag": 2.46, "time": 1507108546600, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.527833, 46.867833, 13.28 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018200", "mag": 1.17, "time": 1507108523230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.5975, 34.0275, 11.16 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904011", "mag": 1.65, "time": 1507108226290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.59, 39.034, 1.81 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988931", "mag": 1.6, "time": 1507107916290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.4053, 65.8348, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018192", "mag": 1.04, "time": 1507107119810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.243833, 34.561167, 7.55 ] } },
+ { "type": "Feature", "properties": { "id": "uw61337191", "mag": 1.11, "time": 1507106498380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.3995, 47.466167, 20.06 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988930", "mag": 1.5, "time": 1507105167087, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3314, 63.0932, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903991", "mag": 1.0, "time": 1507105008930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.831667, 37.479167, 7.18 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0vg", "mag": 4.8, "time": 1507102453200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.0265, 15.081, 39.52 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251092", "mag": 1.15, "time": 1507102301120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -113.109167, 37.453, 7.33 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903961", "mag": 0.99, "time": 1507102290690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.886, 37.634, 6.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903951", "mag": 1.13, "time": 1507102067530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.873, 37.655, 2.24 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988890", "mag": 2.1, "time": 1507101218109, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.6853, 59.7843, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903941", "mag": 1.93, "time": 1507099899370, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.174833, 36.7355, 8.83 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988888", "mag": 2.1, "time": 1507099796449, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.599, 58.1927, 18.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988886", "mag": 1.1, "time": 1507099794659, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.1044, 65.1213, 20.9 ] } },
+ { "type": "Feature", "properties": { "id": "hv61932126", "mag": 2.54, "time": 1507098254160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.471, 19.958167, 34.056 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018128", "mag": 1.48, "time": 1507095935630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.237333, 33.3585, 9.93 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988874", "mag": 2.0, "time": 1507095643589, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.4213, 59.0929, 75.6 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259124", "mag": 1.12, "time": 1507094472670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5195, 46.889167, 10.71 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0ue", "mag": 4.7, "time": 1507093737820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 145.7448, 18.3756, 172.11 ] } },
+ { "type": "Feature", "properties": { "id": "hv61932021", "mag": 1.47, "time": 1507093555340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.7645, 19.608333, 19.406 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251087", "mag": 1.84, "time": 1507092267430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.456667, 42.600833, 1.84 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988835", "mag": 1.4, "time": 1507091990426, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.8997, 62.5624, 2.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988834", "mag": 2.0, "time": 1507091511196, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.6239, 61.9391, 35.9 ] } },
+ { "type": "Feature", "properties": { "id": "hv61931981", "mag": 2.06, "time": 1507091217900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.6845, 18.778833, 34.132 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988831", "mag": 1.7, "time": 1507090320674, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.0205, 61.3011, 30.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988828", "mag": 1.6, "time": 1507090167802, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.1141, 63.8125, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018104", "mag": 0.97, "time": 1507089080620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.364, 33.395667, 5.23 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018096", "mag": 1.15, "time": 1507088756230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.118, 33.743333, 14.37 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0th", "mag": 5.0, "time": 1507087351060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.1517, -31.5827, 35.55 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903886", "mag": 1.89, "time": 1507087145860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.157333, 36.593167, 6.68 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903881", "mag": 1.09, "time": 1507086787130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.718666, 38.771667, 2.16 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0t5", "mag": 5.2, "time": 1507086128100, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -68.1988, -23.1056, 126.96 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608095", "mag": 1.8, "time": 1507085141975, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.2313, 37.1571, 11.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988758", "mag": 1.7, "time": 1507084302637, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.3056, 61.634, 42.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903856", "mag": 1.42, "time": 1507084182620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.847167, 37.6515, 3.01 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988756", "mag": 1.9, "time": 1507083972695, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.8168, 61.2547, 28.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018048", "mag": 1.01, "time": 1507081338310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.112167, 34.101167, 8.93 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259119", "mag": 1.6, "time": 1507080820140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.521833, 46.872833, 10.74 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259154", "mag": 1.65, "time": 1507080779330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5265, 46.876167, 11.17 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988720", "mag": 2.3, "time": 1507079042841, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.4064, 60.3952, 12.4 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608069", "mag": 1.7, "time": 1507077765338, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.5495, 40.2609, 8.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988717", "mag": 1.6, "time": 1507077365759, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3311, 63.2608, 0.8 ] } },
+ { "type": "Feature", "properties": { "id": "hv61931706", "mag": 1.47, "time": 1507077049100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.6385, 19.553667, 11.424 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018040", "mag": 0.98, "time": 1507076389190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.269, 34.0685, 15.7 ] } },
+ { "type": "Feature", "properties": { "id": "uw61337006", "mag": 0.96, "time": 1507074699210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.751333, 47.996333, 14.52 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0rt", "mag": 4.2, "time": 1507074238890, "felt": 7, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -82.7745, 8.5663, 30.59 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018024", "mag": 1.57, "time": 1507073295750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.681, 35.0345, -0.82 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988594", "mag": 2.0, "time": 1507073162743, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2617, 62.1345, 75.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988588", "mag": 1.3, "time": 1507072732101, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.2839, 61.0371, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "uw61336986", "mag": 1.86, "time": 1507072508440, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.616667, 48.275333, 6.9 ] } },
+ { "type": "Feature", "properties": { "id": "uw61336981", "mag": 1.89, "time": 1507072212820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.6095, 48.259, 5.47 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988584", "mag": 1.0, "time": 1507071678363, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3354, 64.9934, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903836", "mag": 1.12, "time": 1507071527650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.805, 38.822667, 2.85 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903831", "mag": 1.06, "time": 1507071133930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.808998, 38.823166, 1.74 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994062", "mag": 1.2, "time": 1507071050929, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8464, 63.0394, 121.6 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608062", "mag": 1.5, "time": 1507069440991, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.445, 37.5469, 5.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903806", "mag": 1.23, "time": 1507069427950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.739333, 38.805667, 1.44 ] } },
+ { "type": "Feature", "properties": { "id": "uw61336956", "mag": 1.0, "time": 1507069356480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.319167, 46.078167, -1.11 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988555", "mag": 2.0, "time": 1507069258013, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -164.1558, 67.7665, 10.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988552", "mag": 1.6, "time": 1507069137803, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.3107, 61.1448, 20.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0q2", "mag": 4.2, "time": 1507068153470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.2992, 15.6198, 60.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci38018000", "mag": 1.69, "time": 1507067212670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.446333, 34.153333, 6.34 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259099", "mag": 1.07, "time": 1507067005720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.4045, 43.682, 5.87 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988545", "mag": 1.7, "time": 1507066676846, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6733, 65.2302, 8.7 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608050", "mag": 1.7, "time": 1507066159273, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.0874, 39.024, 7.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017984", "mag": 1.71, "time": 1507065949300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.347667, 33.392, 3.2 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251062", "mag": 1.76, "time": 1507065772640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.412333, 42.583667, 5.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988519", "mag": 2.6, "time": 1507065657270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.2687, 57.0749, 82.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988491", "mag": 1.6, "time": 1507065428977, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -161.3929, 65.0131, 16.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988489", "mag": 1.2, "time": 1507065333200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.6212, 63.3407, 7.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988484", "mag": 2.3, "time": 1507065014972, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0452, 62.216, 67.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72905396", "mag": 1.11, "time": 1507064824530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.4595, 41.531833, 2.93 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251057", "mag": 2.05, "time": 1507064724100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.399, 42.521333, 8.16 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017976", "mag": 1.59, "time": 1507064335800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.445833, 34.1535, 6.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903776", "mag": 1.19, "time": 1507063701570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8805, 37.529167, 1.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0nr", "mag": 5.7, "time": 1507063144760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -49.3194, 13.4552, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903771", "mag": 2.49, "time": 1507062907080, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.767, 38.799167, 0.51 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988466", "mag": 1.3, "time": 1507062241011, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.5134, 62.1795, 23.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988439", "mag": 2.2, "time": 1507061510846, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.8761, 60.5934, 142.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0n8", "mag": 4.5, "time": 1507061510710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 166.7231, 55.3488, 28.06 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017952", "mag": 1.07, "time": 1507061299680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.4405, 34.156167, 8.27 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988437", "mag": 1.3, "time": 1507061230777, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.0856, 61.3457, 14.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988435", "mag": 1.5, "time": 1507060035702, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9837, 61.6046, 61.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903741", "mag": 1.18, "time": 1507059288800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.764831, 38.788502, -0.61 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017936", "mag": 1.69, "time": 1507059189120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.7955, 33.4895, 4.06 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994048", "mag": 1.6, "time": 1507059099655, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.6496, 59.6816, 88.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994047", "mag": 1.4, "time": 1507058879703, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.6613, 58.3127, 61.4 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608048", "mag": 1.1, "time": 1507058710135, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.9271, 40.1731, 13.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017912", "mag": 1.43, "time": 1507058424320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.440833, 34.1545, 6.88 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017904", "mag": 1.19, "time": 1507057846620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.1795, 35.002, -0.83 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017896", "mag": 1.26, "time": 1507057788590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.941667, 32.908, -0.33 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0lw", "mag": 5.2, "time": 1507057466210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -28.8364, -55.2702, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259069", "mag": 1.71, "time": 1507056294930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.503, 46.830333, 12.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988418", "mag": 1.8, "time": 1507056127213, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.6502, 57.4998, 47.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903726", "mag": 1.14, "time": 1507056074240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.84, 37.503833, 0.26 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988415", "mag": 1.4, "time": 1507055512017, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.8175, 61.6607, 28.4 ] } },
+ { "type": "Feature", "properties": { "id": "hv61931361", "mag": 2.65, "time": 1507055057800, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.324, 19.406667, 7.018 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017848", "mag": 1.04, "time": 1507054498390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.44, 34.157667, 8.94 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251037", "mag": 1.12, "time": 1507053937840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.424333, 42.592167, 6.15 ] } },
+ { "type": "Feature", "properties": { "id": "hv61931346", "mag": 2.16, "time": 1507053691890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.373667, 20.034833, 13.532 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259064", "mag": 1.12, "time": 1507053599620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.609167, 46.334833, -2.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988394", "mag": 1.6, "time": 1507052715999, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9718, 60.8946, 14.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988390", "mag": 1.9, "time": 1507052122028, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.3579, 61.0247, 111.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903716", "mag": 2.07, "time": 1507052014050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.787667, 37.598833, 5.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994042", "mag": 2.0, "time": 1507051700735, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.4244, 59.8428, 129.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0jm", "mag": 4.6, "time": 1507050191000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 140.1126, -2.5625, 21.57 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017808", "mag": 1.9, "time": 1507049580810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.445167, 33.264333, 2.22 ] } },
+ { "type": "Feature", "properties": { "id": "nn00608002", "mag": 1.2, "time": 1507049448566, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.2901, 37.8049, 7.5 ] } },
+ { "type": "Feature", "properties": { "id": "uu60251027", "mag": 1.41, "time": 1507048713320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.760333, 39.998667, 8.73 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988364", "mag": 1.1, "time": 1507048704427, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.9116, 61.1262, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988361", "mag": 1.8, "time": 1507048669896, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.1084, 64.9183, 18.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017800", "mag": 0.98, "time": 1507048261760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.446833, 34.154333, 7.94 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903676", "mag": 1.69, "time": 1507047264490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8285, 37.455833, 2.67 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903671", "mag": 1.3, "time": 1507047173830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.5795, 37.287833, 7.31 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017744", "mag": 1.05, "time": 1507046707770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.136833, 34.054167, 9.74 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903666", "mag": 2.58, "time": 1507046582120, "felt": 6, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.464333, 36.750833, 7.57 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988359", "mag": 1.4, "time": 1507045972022, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.1249, 62.9454, 112.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988358", "mag": 1.6, "time": 1507045690910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.2536, 60.0003, 13.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994035", "mag": 1.7, "time": 1507044159018, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.6674, 59.3569, 72.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988345", "mag": 2.7, "time": 1507043705635, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0117, 59.5043, 89.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903631", "mag": 1.33, "time": 1507043277890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.800667, 38.820167, 3.51 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994033", "mag": 1.6, "time": 1507043019584, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3814, 58.3192, 13.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988343", "mag": 2.7, "time": 1507042999732, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.3915, 51.6134, 9.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994031", "mag": 1.7, "time": 1507042763401, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.1107, 59.3023, 7.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994030", "mag": 1.3, "time": 1507042659104, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9147, 62.9235, 104.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994029", "mag": 1.6, "time": 1507042166290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0354, 59.6428, 85.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0gv", "mag": 2.1, "time": 1507041358070, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.8228, 36.4458, 4.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988332", "mag": 1.4, "time": 1507041247450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2842, 62.1118, 75.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017688", "mag": 1.7, "time": 1507041034810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.665167, 35.975833, 2.12 ] } },
+ { "type": "Feature", "properties": { "id": "hv61931251", "mag": 2.87, "time": 1507040757870, "felt": 6, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.370833, 20.027333, 12.259 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0gr", "mag": 4.6, "time": 1507040383740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 175.9616, -39.6706, 78.62 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903611", "mag": 1.04, "time": 1507039230370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.979333, 37.537333, 3.49 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988330", "mag": 1.8, "time": 1507038947118, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.8047, 53.5035, 24.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0k7", "mag": 2.6, "time": 1507038712390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.1971, 51.3674, 18.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0gm", "mag": 4.5, "time": 1507038514350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 94.7848, 25.0488, 74.86 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988328", "mag": 1.3, "time": 1507038483396, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.5284, 62.2253, 16.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994023", "mag": 1.9, "time": 1507038160436, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -162.9795, 54.3692, 39.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994021", "mag": 1.3, "time": 1507037424410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3659, 61.871, 45.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017640", "mag": 0.99, "time": 1507035054330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.962167, 34.044333, 11.19 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994019", "mag": 2.4, "time": 1507034930692, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -179.8074, 51.67, 77.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988323", "mag": 2.5, "time": 1507033401817, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -162.3851, 54.2478, 11.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988320", "mag": 1.8, "time": 1507033125169, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8594, 61.9955, 7.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903576", "mag": 1.25, "time": 1507033081250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.496833, 35.946833, 9.32 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988318", "mag": 1.5, "time": 1507032487878, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.705, 62.0401, 40.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903571", "mag": 1.19, "time": 1507032219730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.973167, 37.635667, 4.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988315", "mag": 1.6, "time": 1507031200996, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.1077, 57.8662, 5.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903561", "mag": 1.07, "time": 1507031172540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.802002, 38.825832, 2.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988314", "mag": 1.7, "time": 1507031152426, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.0389, 60.0214, 78.4 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259049", "mag": 2.51, "time": 1507030950500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.353833, 43.520167, 3.75 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903556", "mag": 1.59, "time": 1507030601280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.887667, 37.630333, 6.72 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017616", "mag": 1.23, "time": 1507030424420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.812833, 34.096833, 13.63 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017608", "mag": 1.47, "time": 1507030255050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.808167, 34.092333, 14.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903546", "mag": 1.09, "time": 1507029639750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.82267, 38.807835, 1.84 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988306", "mag": 2.7, "time": 1507027595732, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4068, 51.6479, 12.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903531", "mag": 1.14, "time": 1507027098870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.763168, 38.789001, 0.79 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988304", "mag": 1.4, "time": 1507026885090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.5708, 61.3679, 26.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994008", "mag": 1.6, "time": 1507025162686, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.958, 61.2532, 105.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16994007", "mag": 1.2, "time": 1507024176706, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.1195, 62.8909, 99.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988295", "mag": 2.1, "time": 1507023250156, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.3958, 51.6323, 10.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988294", "mag": 1.3, "time": 1507023225669, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7855, 61.7554, 59.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988292", "mag": 2.6, "time": 1507022763592, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.7772, 53.1343, 25.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988287", "mag": 1.2, "time": 1507022053291, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.872, 64.5325, 18.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988284", "mag": 1.3, "time": 1507021950836, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.929, 64.5216, 18.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988282", "mag": 1.4, "time": 1507021938525, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.8923, 58.4847, 8.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017544", "mag": 1.28, "time": 1507021318130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.791333, 33.687167, 16.23 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988279", "mag": 2.0, "time": 1507020554043, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2158, 61.698, 77.3 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259034", "mag": 1.18, "time": 1507020432130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.521333, 46.873, 11.92 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0fa", "mag": 4.2, "time": 1507019233190, "felt": 43, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -72.0212, -33.014, 17.65 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988271", "mag": 1.8, "time": 1507019136375, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.1655, 60.4739, 86.3 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250997", "mag": 1.69, "time": 1507019083210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.137833, 42.522333, -0.39 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993998", "mag": 1.8, "time": 1507018712322, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.0756, 60.1685, 13.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903491", "mag": 1.22, "time": 1507017869360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.486, 36.378, 5.97 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017536", "mag": 1.46, "time": 1507016252180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.479, 32.737333, 7.83 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988268", "mag": 1.4, "time": 1507015945802, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.0368, 61.1636, 0.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988267", "mag": 1.2, "time": 1507015806607, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.4998, 63.1031, 5.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017504", "mag": 1.41, "time": 1507014429310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.363333, 34.832, 3.07 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988254", "mag": 4.1, "time": 1507013968245, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -161.3923, 54.6037, 20.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988252", "mag": 1.7, "time": 1507013732258, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.7964, 59.8936, 15.8 ] } },
+ { "type": "Feature", "properties": { "id": "mb80259004", "mag": 1.07, "time": 1507013501160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.523, 46.877333, 10.49 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607998", "mag": 1.1, "time": 1507013301155, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.3199, 37.7813, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993990", "mag": 1.4, "time": 1507012650027, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.264, 62.5244, 86.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988247", "mag": 2.1, "time": 1507012115547, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4061, 51.6742, 14.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988245", "mag": 1.0, "time": 1507011961646, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.539, 63.1068, 11.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017496", "mag": 1.24, "time": 1507011934810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.013833, 33.662167, 11.95 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017488", "mag": 1.25, "time": 1507011688900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.047333, 33.171, 5.29 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993987", "mag": 1.9, "time": 1507011535768, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -175.4878, 51.73, 4.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993986", "mag": 2.3, "time": 1507011386112, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.3903, 51.6732, 5.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017472", "mag": 1.5, "time": 1507010945840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.936833, 33.147, 7.23 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988244", "mag": 1.2, "time": 1507010895307, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.6337, 63.3262, 13.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017464", "mag": 1.4, "time": 1507008876900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.4845, 32.748667, 13.78 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017456", "mag": 1.19, "time": 1507008741980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.783833, 33.267833, 11.48 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0ef", "mag": 4.9, "time": 1507008633680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.9398, 15.4089, 62.32 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258984", "mag": 1.01, "time": 1507006889790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.430667, 43.6785, 7.63 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258979", "mag": 1.31, "time": 1507006468040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5225, 46.871167, 10.98 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988238", "mag": 2.4, "time": 1507005858917, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -174.1659, 51.8129, 90.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993983", "mag": 1.4, "time": 1507004701069, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7077, 62.778, 79.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017432", "mag": 1.1, "time": 1507003677250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.790667, 33.485333, 4.63 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988237", "mag": 1.5, "time": 1507003090709, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.0237, 61.1529, 7.4 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258949", "mag": 1.2, "time": 1507002724530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.529833, 46.869, 10.38 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988235", "mag": 2.7, "time": 1507001740915, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -167.6571, 52.9982, 32.2 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607958", "mag": 1.2, "time": 1507001239948, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.3057, 38.4484, 5.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988229", "mag": 1.6, "time": 1506999699601, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.3039, 62.7285, 79.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988225", "mag": 1.7, "time": 1506999179710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.178, 66.888, 7.7 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258939", "mag": 1.1, "time": 1506998768510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.528833, 46.860333, 12.25 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988222", "mag": 2.7, "time": 1506998450736, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.4948, 53.5386, 57.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988221", "mag": 1.2, "time": 1506998296606, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3526, 63.268, 2.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988218", "mag": 1.0, "time": 1506997994823, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.5335, 53.8446, 6.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988217", "mag": 2.2, "time": 1506997972933, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.6125, 58.9289, 125.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903391", "mag": 1.03, "time": 1506997840780, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.847336, 38.829834, 1.06 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903396", "mag": 1.23, "time": 1506997715100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.315667, 37.487833, 3.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017400", "mag": 1.05, "time": 1506997467730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.334333, 33.346333, 9.65 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993974", "mag": 1.4, "time": 1506996608838, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2536, 62.5803, 93.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988215", "mag": 1.6, "time": 1506996320652, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.155, 61.9755, 70.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993972", "mag": 1.6, "time": 1506995513010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.7768, 60.1335, 76.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993971", "mag": 1.2, "time": 1506995387104, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.6738, 61.6682, 50.5 ] } },
+ { "type": "Feature", "properties": { "id": "hv61930601", "mag": 2.1, "time": 1506994522010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.565506, 19.795834, 15.58 ] } },
+ { "type": "Feature", "properties": { "id": "ak16993970", "mag": 1.1, "time": 1506994269143, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.0156, 64.7374, 10.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903381", "mag": 1.16, "time": 1506991878630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.803169, 38.824001, 2.33 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017368", "mag": 1.36, "time": 1506989712460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.168667, 34.0055, 13.99 ] } },
+ { "type": "Feature", "properties": { "id": "uw61336686", "mag": 1.47, "time": 1506988725560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.044167, 49.145, -1.01 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988200", "mag": 2.8, "time": 1506988653897, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6324, 61.3885, 39.1 ] } },
+ { "type": "Feature", "properties": { "id": "nm60207781", "mag": 1.99, "time": 1506988371180, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -89.444833, 36.088167, 13.18 ] } },
+ { "type": "Feature", "properties": { "id": "us2000az70", "mag": 4.7, "time": 1506987102640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 91.8995, 12.8626, 27.25 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017360", "mag": 1.72, "time": 1506986970860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.674, 35.035333, -0.82 ] } },
+ { "type": "Feature", "properties": { "id": "us2000azc7", "mag": 2.4, "time": 1506986577400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.6124, 36.8167, 5.123 ] } },
+ { "type": "Feature", "properties": { "id": "nm60207771", "mag": 1.11, "time": 1506984309110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -89.517167, 36.232667, 8.34 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017336", "mag": 1.0, "time": 1506984123180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.2705, 33.975833, 4.84 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903356", "mag": 1.77, "time": 1506983102870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.991833, 40.153833, 4.17 ] } },
+ { "type": "Feature", "properties": { "id": "uw61336646", "mag": 1.36, "time": 1506982150130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.4015, 46.173833, -0.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ayh7", "mag": 4.4, "time": 1506982074330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -68.7039, -22.2431, 108.4 ] } },
+ { "type": "Feature", "properties": { "id": "uw61336631", "mag": 1.27, "time": 1506980575160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.930333, 48.1035, -1.28 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aya0", "mag": 5.3, "time": 1506980277150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 167.7345, -19.4817, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903316", "mag": 1.65, "time": 1506979898940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.802, 38.824833, 2.33 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903311", "mag": 1.09, "time": 1506979301540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.531667, 37.139833, 8.93 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903306", "mag": 1.08, "time": 1506978484410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.444667, 36.959667, 6.72 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903301", "mag": 1.46, "time": 1506978005870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.351667, 39.5165, 4.32 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258889", "mag": 2.36, "time": 1506975888040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -113.9055, 47.358667, 13.73 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903286", "mag": 0.97, "time": 1506975385450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.946833, 37.590333, 0.28 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017200", "mag": 0.96, "time": 1506974805670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.503167, 33.8695, -0.36 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axzc", "mag": 2.8, "time": 1506974101570, "felt": 18, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -102.3612, 35.5909, 5.45 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903271", "mag": 2.25, "time": 1506973045100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.609167, 36.880667, 6.31 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258884", "mag": 1.4, "time": 1506972979050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5355, 46.8805, 12.28 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903261", "mag": 1.85, "time": 1506971674240, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.831833, 37.455667, 1.78 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017136", "mag": 1.08, "time": 1506971129830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.192, 34.993167, -0.84 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258874", "mag": 1.49, "time": 1506970982010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.4715, 45.995667, -2.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017120", "mag": 0.99, "time": 1506970881590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.649167, 35.932833, 2.94 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903251", "mag": 1.78, "time": 1506970847010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.308833, 40.750667, -0.79 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903246", "mag": 1.41, "time": 1506970631190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.932667, 35.639, 4.96 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903241", "mag": 1.21, "time": 1506970286520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.679167, 38.533833, 5.88 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017104", "mag": 1.66, "time": 1506970188840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.133167, 34.279, 6.09 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axxi", "mag": 4.6, "time": 1506969995010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 102.3915, -7.056, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258869", "mag": 1.46, "time": 1506969854670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.523167, 46.87, 10.71 ] } },
+ { "type": "Feature", "properties": { "id": "ci38017064", "mag": 1.26, "time": 1506968962060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.623333, 33.912167, 10.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903226", "mag": 0.96, "time": 1506968036980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.880333, 37.530667, 2.11 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axwl", "mag": 4.6, "time": 1506968031500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 94.5291, 21.4218, 96.74 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904986", "mag": 1.14, "time": 1506968001000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.718167, 40.935167, 12.07 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988088", "mag": 2.2, "time": 1506967247502, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.9366, 59.642, 98.9 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607868", "mag": 1.0, "time": 1506966403731, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.4944, 37.2386, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903211", "mag": 0.98, "time": 1506965951300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.833, 37.457667, 1.76 ] } },
+ { "type": "Feature", "properties": { "id": "ci37167228", "mag": 1.57, "time": 1506964185870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.4615, 34.328667, 3.74 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016984", "mag": 1.25, "time": 1506964183390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.466833, 34.3255, 4.39 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903196", "mag": 1.36, "time": 1506963756010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.827833, 37.456667, 2.57 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258854", "mag": 1.03, "time": 1506962682500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.528667, 46.8625, 13.48 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903176", "mag": 1.21, "time": 1506962394170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.827833, 37.457167, 2.28 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903166", "mag": 1.88, "time": 1506961834060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.827167, 37.4555, 1.91 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903156", "mag": 1.69, "time": 1506961396620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8265, 37.456333, 2.16 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903146", "mag": 3.02, "time": 1506961086740, "felt": 5, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.829, 37.453667, 2.61 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016888", "mag": 1.17, "time": 1506960224640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.0325, 33.879333, -0.97 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903131", "mag": 1.08, "time": 1506959715450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.371333, 35.706833, 1.86 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988071", "mag": 1.4, "time": 1506959208997, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -142.9837, 67.1697, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607854", "mag": 1.7, "time": 1506958960926, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -113.8425, 36.5559, 8.1 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250907", "mag": 2.05, "time": 1506957621760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4145, 42.546333, 7.87 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903111", "mag": 1.41, "time": 1506957279300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.997333, 36.462667, 5.69 ] } },
+ { "type": "Feature", "properties": { "id": "nm60207666", "mag": 2.19, "time": 1506957159610, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -89.8025, 36.5505, 12.47 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988065", "mag": 2.7, "time": 1506956391417, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.8151, 61.2492, 19.9 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258839", "mag": 1.19, "time": 1506955175250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.526167, 46.870333, 10.04 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axtv", "mag": 4.7, "time": 1506953290020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 127.1289, 2.6798, 25.66 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903096", "mag": 1.04, "time": 1506952925800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.822667, 37.513833, 8.22 ] } },
+ { "type": "Feature", "properties": { "id": "ak16987055", "mag": 1.1, "time": 1506952513029, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.2609, 64.6409, 14.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903081", "mag": 1.18, "time": 1506950851670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.751663, 38.832832, 0.68 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axtl", "mag": 4.7, "time": 1506950716850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 51.6372, 28.6895, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258829", "mag": 1.08, "time": 1506950613020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.524667, 46.868167, 9.75 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258824", "mag": 1.16, "time": 1506950147300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.523333, 46.866667, 11.08 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250902", "mag": 1.34, "time": 1506949268120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.084, 44.7795, 11.23 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258814", "mag": 1.19, "time": 1506949148400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.527333, 46.855833, 14.0 ] } },
+ { "type": "Feature", "properties": { "id": "hv61929981", "mag": 2.4, "time": 1506948942340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.592667, 19.465333, 0.033 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axsh", "mag": 2.6, "time": 1506947996150, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.5037, 36.2851, 3.93 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258799", "mag": 1.69, "time": 1506947507620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.527833, 46.869833, 10.17 ] } },
+ { "type": "Feature", "properties": { "id": "ak16987046", "mag": 1.5, "time": 1506947130357, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.1189, 63.1205, 16.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903071", "mag": 1.5, "time": 1506946592080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.885667, 36.3165, 6.48 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axs4", "mag": 4.3, "time": 1506946114440, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -61.2682, 13.209, 136.91 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axsa", "mag": 4.3, "time": 1506945001990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 176.4854, -37.3176, 354.86 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258789", "mag": 2.2, "time": 1506944699010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.533, 46.869833, 13.3 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250897", "mag": 1.6, "time": 1506943796070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.218667, 42.571667, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16986042", "mag": 1.3, "time": 1506943225411, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.912, 63.0196, 66.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16986039", "mag": 1.4, "time": 1506941366267, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.3257, 63.3321, 6.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016776", "mag": 1.44, "time": 1506940900650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.510667, 34.2985, 9.93 ] } },
+ { "type": "Feature", "properties": { "id": "hv61929926", "mag": 2.13, "time": 1506940825170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.524002, 19.919001, 20.11 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258769", "mag": 1.48, "time": 1506940203900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.33, 46.119833, 6.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axrm", "mag": 4.9, "time": 1506939736050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -88.2184, 12.3486, 35.55 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016768", "mag": 1.12, "time": 1506938746370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.067167, 34.208333, 2.04 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016760", "mag": 1.75, "time": 1506938502900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.064833, 34.207833, 2.06 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903041", "mag": 1.87, "time": 1506938425810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.908833, 36.368667, 8.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16985035", "mag": 1.7, "time": 1506938303105, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.1495, 63.1057, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016752", "mag": 1.08, "time": 1506938024070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.448833, 33.481, 8.33 ] } },
+ { "type": "Feature", "properties": { "id": "ak16985032", "mag": 1.1, "time": 1506937259442, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.8806, 64.6842, 6.7 ] } },
+ { "type": "Feature", "properties": { "id": "nm60207636", "mag": 1.71, "time": 1506936707930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -90.1365, 35.88, 10.55 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250892", "mag": 1.5, "time": 1506936161680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.480833, 42.384833, 5.67 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258764", "mag": 2.37, "time": 1506936112630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.534333, 46.8675, 13.36 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258759", "mag": 3.08, "time": 1506934838560, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.529167, 46.872333, 11.44 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016728", "mag": 1.01, "time": 1506934828760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.065667, 34.2065, 1.91 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axr0", "mag": 4.3, "time": 1506933668380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.8824, 16.708, 65.53 ] } },
+ { "type": "Feature", "properties": { "id": "ci37398445", "mag": 0.97, "time": 1506933339570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.460667, 34.332333, 5.88 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903031", "mag": 1.45, "time": 1506933218670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.812667, 38.805, 2.29 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0e8", "mag": 1.4, "time": 1506931958320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -71.32, 43.6653, 7.15 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250882", "mag": 1.44, "time": 1506931830720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4165, 42.520333, 8.15 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250877", "mag": 1.13, "time": 1506930804620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.414333, 42.544333, 7.62 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016688", "mag": 1.28, "time": 1506929655950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.003333, 33.1775, 4.99 ] } },
+ { "type": "Feature", "properties": { "id": "ak16985021", "mag": 2.3, "time": 1506927665686, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.5448, 63.1998, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16985020", "mag": 1.7, "time": 1506927499500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.4204, 67.3068, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258749", "mag": 1.94, "time": 1506926930660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.523333, 46.874, 11.51 ] } },
+ { "type": "Feature", "properties": { "id": "ak16985018", "mag": 1.1, "time": 1506926698712, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.829, 65.5759, 9.2 ] } },
+ { "type": "Feature", "properties": { "id": "hv61929841", "mag": 1.98, "time": 1506926298850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.412338, 19.245501, 33.84 ] } },
+ { "type": "Feature", "properties": { "id": "se60045313", "mag": 1.9, "time": 1506925923790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -82.894667, 34.9895, 0.16 ] } },
+ { "type": "Feature", "properties": { "id": "ak16984019", "mag": 1.1, "time": 1506925731082, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.5467, 65.155, 3.8 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258744", "mag": 1.32, "time": 1506925562230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.528833, 46.867167, 11.58 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016672", "mag": 0.97, "time": 1506925004450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.422833, 33.04, 10.21 ] } },
+ { "type": "Feature", "properties": { "id": "ak16984018", "mag": 1.4, "time": 1506924871383, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.2817, 61.9608, 23.3 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250872", "mag": 1.58, "time": 1506924776930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.033833, 38.600333, 7.01 ] } },
+ { "type": "Feature", "properties": { "id": "ak16984009", "mag": 3.0, "time": 1506924381290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.1032, 58.7701, 99.0 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250867", "mag": 1.58, "time": 1506924167170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.409667, 42.562167, 7.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axq4", "mag": 4.2, "time": 1506924037060, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 174.3565, -41.7636, 24.13 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016664", "mag": 1.49, "time": 1506923205850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.589167, 32.780833, 12.71 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016656", "mag": 2.39, "time": 1506923145240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.009833, 33.179833, 9.12 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axq3", "mag": 4.7, "time": 1506923126070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -179.4587, -21.8514, 582.95 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016648", "mag": 2.46, "time": 1506922959220, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.010167, 33.179, 8.89 ] } },
+ { "type": "Feature", "properties": { "id": "uw61336471", "mag": 3.25, "time": 1506922219710, "felt": 66, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.8935, 47.887833, 54.22 ] } },
+ { "type": "Feature", "properties": { "id": "nm60207631", "mag": 1.51, "time": 1506922179830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -89.527833, 36.243667, 7.74 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607885", "mag": 1.0, "time": 1506921346217, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.0518, 37.0814, 8.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axpv", "mag": 4.8, "time": 1506921205270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 72.4324, 38.1132, 115.18 ] } },
+ { "type": "Feature", "properties": { "id": "ak16983007", "mag": 1.4, "time": 1506919945331, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.5212, 66.5767, 2.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902986", "mag": 1.91, "time": 1506919685230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.524833, 35.967333, 10.71 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axpm", "mag": 2.2, "time": 1506919604410, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.5118, 36.9048, 4.52 ] } },
+ { "type": "Feature", "properties": { "id": "uw61336446", "mag": 1.27, "time": 1506919122930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.245667, 46.345833, 7.97 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016584", "mag": 2.31, "time": 1506918555650, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.7985, 33.500167, 5.3 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250862", "mag": 1.41, "time": 1506917347110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.411167, 42.640167, -1.04 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016576", "mag": 1.0, "time": 1506916919110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.43, 33.028833, 3.21 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016568", "mag": 1.08, "time": 1506916645840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.048333, 33.2415, 5.47 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250857", "mag": 1.42, "time": 1506916237980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.446167, 42.608333, 6.68 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016552", "mag": 1.32, "time": 1506915577280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.482167, 35.754, 3.27 ] } },
+ { "type": "Feature", "properties": { "id": "hv61929701", "mag": 2.26, "time": 1506915466040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.021835, 19.397499, 0.02 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axp9", "mag": 2.5, "time": 1506915178660, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.5196, 36.2819, 4.38 ] } },
+ { "type": "Feature", "properties": { "id": "ak16982006", "mag": 3.4, "time": 1506913363596, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.9176, 55.7636, 20.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axp5", "mag": 2.7, "time": 1506913350820, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5073, 46.8582, 10.64 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258724", "mag": 1.27, "time": 1506912496350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -113.017333, 44.484667, 7.23 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902956", "mag": 1.67, "time": 1506912463450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.4705, 40.704167, 17.1 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250847", "mag": 1.01, "time": 1506911908120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.418333, 42.516667, 6.74 ] } },
+ { "type": "Feature", "properties": { "id": "ak16982001", "mag": 1.1, "time": 1506909373983, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.8167, 61.2439, 26.6 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250837", "mag": 1.18, "time": 1506909364560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.411833, 42.520667, 7.35 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258714", "mag": 1.56, "time": 1506908562340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.523167, 46.872833, 12.04 ] } },
+ { "type": "Feature", "properties": { "id": "ak16981996", "mag": 1.3, "time": 1506908205944, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.5285, 63.1691, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16982000", "mag": 1.4, "time": 1506908156528, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.6012, 59.5948, 56.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axnx", "mag": 2.6, "time": 1506907742490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4159, 42.5178, 6.97 ] } },
+ { "type": "Feature", "properties": { "id": "ak16981992", "mag": 1.8, "time": 1506907678571, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.2312, 63.3329, 7.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902936", "mag": 1.52, "time": 1506905787330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.426, 38.404, 7.4 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250827", "mag": 1.35, "time": 1506905780190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4175, 42.518833, 6.5 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250822", "mag": 1.43, "time": 1506905571670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.422333, 42.512667, 7.8 ] } },
+ { "type": "Feature", "properties": { "id": "hv61929496", "mag": 1.71, "time": 1506905364520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.584503, 19.484333, 2.03 ] } },
+ { "type": "Feature", "properties": { "id": "ak16981986", "mag": 1.5, "time": 1506903663272, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.7914, 61.5177, 34.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016496", "mag": 1.6, "time": 1506903468250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.793667, 33.502333, 5.16 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016488", "mag": 1.3, "time": 1506903227250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.5175, 34.2865, 7.02 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607841", "mag": 2.5, "time": 1506901760242, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.7954, 37.1971, 7.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902911", "mag": 2.66, "time": 1506901676700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -124.506167, 40.3085, 21.45 ] } },
+ { "type": "Feature", "properties": { "id": "ak16981979", "mag": 2.0, "time": 1506901404559, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6022, 63.105, 120.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990868", "mag": 2.0, "time": 1506900397361, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.1198, 58.9916, 108.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16980981", "mag": 1.3, "time": 1506899671796, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -138.1479, 60.8928, 4.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016456", "mag": 1.6, "time": 1506899253540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.2755, 33.976333, 5.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902901", "mag": 1.02, "time": 1506898875730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.810165, 38.816834, 1.1 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258679", "mag": 1.05, "time": 1506897817900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.525833, 46.891833, 12.84 ] } },
+ { "type": "Feature", "properties": { "id": "ak16980976", "mag": 1.1, "time": 1506897164997, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.9167, 60.5402, 8.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16980971", "mag": 1.8, "time": 1506896659586, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.1362, 61.9345, 11.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16980968", "mag": 2.0, "time": 1506896402168, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.9985, 65.5166, 15.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16980965", "mag": 1.5, "time": 1506895579977, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.6538, 59.9364, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016448", "mag": 1.52, "time": 1506895319020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.830833, 33.712, 16.9 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70236163", "mag": 2.36, "time": 1506894257160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.905833, 36.996333, 9.62 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990861", "mag": 1.1, "time": 1506893923115, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.3425, 61.0789, 57.8 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607826", "mag": 1.4, "time": 1506893733690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.6519, 39.1963, 5.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16980964", "mag": 1.2, "time": 1506892711109, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.8709, 61.4311, 46.5 ] } },
+ { "type": "Feature", "properties": { "id": "uw61336341", "mag": 1.82, "time": 1506892129610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.567667, 49.3235, -1.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990859", "mag": 1.9, "time": 1506891719402, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.8509, 57.8862, 54.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16980963", "mag": 1.2, "time": 1506891059795, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.5477, 60.1976, 34.8 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258669", "mag": 1.06, "time": 1506890613170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.515667, 46.8785, 11.55 ] } },
+ { "type": "Feature", "properties": { "id": "ak16980956", "mag": 2.1, "time": 1506890459542, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -164.2618, 53.748, 49.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16980945", "mag": 1.5, "time": 1506890359030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.5485, 59.782, 2.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16980939", "mag": 2.7, "time": 1506890337968, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.2691, 59.2151, 55.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16980943", "mag": 2.0, "time": 1506890332904, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.1083, 61.5648, 11.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axlg", "mag": 2.5, "time": 1506890067740, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -96.7952, 35.9855, 3.13 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902871", "mag": 1.2, "time": 1506890044550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.619333, 36.969667, 5.21 ] } },
+ { "type": "Feature", "properties": { "id": "ak16980936", "mag": 1.3, "time": 1506889965804, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.4052, 62.336, 46.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16980933", "mag": 1.6, "time": 1506888599699, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -174.5246, 51.8512, 19.4 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258664", "mag": 1.08, "time": 1506888514540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.525167, 46.889833, 12.19 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902866", "mag": 1.72, "time": 1506888000180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.3795, 40.710333, 18.86 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axkq", "mag": 3.3, "time": 1506887023210, "felt": 9, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.4467, 36.1992, 5.42 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axkh", "mag": 4.4, "time": 1506885748640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.3923, 15.6065, 68.63 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axkg", "mag": 4.7, "time": 1506885628670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 131.0709, 30.4016, 52.09 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902851", "mag": 1.6, "time": 1506885379850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.806167, 38.816833, 2.01 ] } },
+ { "type": "Feature", "properties": { "id": "ak16979941", "mag": 1.1, "time": 1506885213719, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2184, 62.3649, 80.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902846", "mag": 1.16, "time": 1506883965960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.676, 37.612, 3.61 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607803", "mag": 1.2, "time": 1506883429003, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.7983, 37.0626, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990850", "mag": 1.4, "time": 1506881346159, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.4695, 60.2829, 104.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902836", "mag": 1.01, "time": 1506881205680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.800835, 38.831833, 1.97 ] } },
+ { "type": "Feature", "properties": { "id": "ak16979936", "mag": 1.1, "time": 1506880968876, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.7414, 62.1039, 54.0 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607807", "mag": 1.1, "time": 1506880810251, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.1156, 38.2725, 9.6 ] } },
+ { "type": "Feature", "properties": { "id": "hv61928951", "mag": 2.13, "time": 1506880210700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.408493, 19.198166, 32.85 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607796", "mag": 1.4, "time": 1506880150990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.7769, 37.082, 5.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16979932", "mag": 1.3, "time": 1506879650012, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.5344, 59.9497, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16979928", "mag": 1.4, "time": 1506878561352, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.7881, 59.4532, 86.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axj4", "mag": 4.9, "time": 1506877281250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.6588, -24.2867, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "uw61336301", "mag": 1.08, "time": 1506877137600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.289333, 46.525667, 12.49 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axiu", "mag": 4.8, "time": 1506876485410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -76.1816, -45.7692, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902831", "mag": 2.39, "time": 1506876142050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8365, 37.5015, 0.38 ] } },
+ { "type": "Feature", "properties": { "id": "ak16978937", "mag": 1.2, "time": 1506875682364, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.0123, 63.225, 1.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990844", "mag": 1.0, "time": 1506875638383, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.3476, 60.399, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16978936", "mag": 1.3, "time": 1506875438694, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.1025, 62.0191, 64.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990842", "mag": 1.6, "time": 1506873845866, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -173.7815, 51.9812, 27.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16977948", "mag": 2.0, "time": 1506871550948, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.142, 60.236, 132.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axi9", "mag": 4.2, "time": 1506870604300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.8183, -18.2769, 600.28 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902801", "mag": 1.08, "time": 1506869234490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.736333, 37.427833, 11.17 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902796", "mag": 0.97, "time": 1506869005720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.80983, 38.822666, 2.38 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902791", "mag": 1.02, "time": 1506868646100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.018, 37.4345, 4.76 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axi8", "mag": 4.5, "time": 1506868536330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 92.3426, 12.898, 30.37 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902781", "mag": 1.48, "time": 1506867941180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.033833, 37.4125, 0.87 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axhz", "mag": 4.5, "time": 1506867628470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 142.306, 40.1598, 57.26 ] } },
+ { "type": "Feature", "properties": { "id": "uw61336271", "mag": 1.68, "time": 1506867619960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.078833, 44.103667, -0.53 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990839", "mag": 1.7, "time": 1506867169462, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.3848, 56.4945, 79.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axhv", "mag": 5.0, "time": 1506866880330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -174.5287, -22.8028, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16976960", "mag": 1.2, "time": 1506866784677, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.7487, 60.0824, 8.2 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250707", "mag": 2.06, "time": 1506866738590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.447833, 42.650333, 2.93 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258644", "mag": 1.07, "time": 1506866437550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.525833, 46.866, 11.8 ] } },
+ { "type": "Feature", "properties": { "id": "hv61928751", "mag": 1.73, "time": 1506865813980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.633499, 19.408501, 4.16 ] } },
+ { "type": "Feature", "properties": { "id": "ak16976951", "mag": 1.0, "time": 1506864160172, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.909, 58.2689, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16976949", "mag": 1.0, "time": 1506864011046, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.6138, 60.5977, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990832", "mag": 1.4, "time": 1506863730810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.1725, 60.1804, 135.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16975974", "mag": 1.1, "time": 1506862307453, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.3672, 61.3015, 47.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axhf", "mag": 4.6, "time": 1506862144080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 91.9129, 12.7332, 25.97 ] } },
+ { "type": "Feature", "properties": { "id": "ak16975970", "mag": 1.3, "time": 1506861392092, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -157.0328, 59.3749, 6.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16975965", "mag": 1.4, "time": 1506860447567, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.3802, 59.7999, 122.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16975961", "mag": 1.9, "time": 1506860241377, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.3702, 58.1855, 1.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016296", "mag": 0.97, "time": 1506860065660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.200333, 33.034167, 6.74 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902736", "mag": 1.01, "time": 1506859858880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.793999, 38.812668, 3.13 ] } },
+ { "type": "Feature", "properties": { "id": "ak16975960", "mag": 2.0, "time": 1506859830456, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -175.5366, 51.4282, 50.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16974988", "mag": 1.1, "time": 1506859403703, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.7216, 57.888, 61.0 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607763", "mag": 2.0, "time": 1506858283945, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.6834, 40.0949, 13.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16974986", "mag": 1.5, "time": 1506857978595, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.6219, 59.7494, 10.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016272", "mag": 1.31, "time": 1506857701950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.46, 34.330833, 3.08 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258619", "mag": 1.22, "time": 1506857080460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.509667, 46.908167, 15.76 ] } },
+ { "type": "Feature", "properties": { "id": "ak16974980", "mag": 2.0, "time": 1506856935435, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4679, 51.6302, 13.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16974977", "mag": 1.7, "time": 1506856591674, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.0171, 58.9928, 112.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990818", "mag": 1.6, "time": 1506856352544, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.6069, 60.035, 157.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902701", "mag": 1.04, "time": 1506856284600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.718, 38.742333, 1.86 ] } },
+ { "type": "Feature", "properties": { "id": "ak16974975", "mag": 1.2, "time": 1506856083450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.5011, 64.299, 14.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16974972", "mag": 1.5, "time": 1506855936313, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.5182, 59.9216, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016224", "mag": 1.28, "time": 1506855241040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.731167, 33.649, 12.54 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990815", "mag": 2.8, "time": 1506854643419, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 179.4705, 51.8814, 165.3 ] } },
+ { "type": "Feature", "properties": { "id": "hv61928636", "mag": 2.82, "time": 1506854300970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.485667, 20.355333, 14.282 ] } },
+ { "type": "Feature", "properties": { "id": "ak16974969", "mag": 1.4, "time": 1506854297360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.6332, 59.9863, 7.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902676", "mag": 1.69, "time": 1506853476410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.984, 37.5295, 2.12 ] } },
+ { "type": "Feature", "properties": { "id": "ak16973994", "mag": 1.0, "time": 1506853292474, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.0636, 62.2825, 41.1 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607794", "mag": 1.1, "time": 1506852962371, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9213, 38.3646, 5.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016200", "mag": 1.06, "time": 1506852815200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.791833, 33.502167, 4.66 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axgb", "mag": 5.1, "time": 1506852415110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -176.6916, -24.4751, 87.71 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016192", "mag": 1.27, "time": 1506852211900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.464167, 36.311167, 0.93 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990809", "mag": 1.3, "time": 1506851397558, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.4428, 58.7981, 124.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16973987", "mag": 1.3, "time": 1506850332700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.1498, 59.6631, 104.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902646", "mag": 1.37, "time": 1506850223860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.452, 37.402167, 4.64 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axfz", "mag": 4.0, "time": 1506849733290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.8612, 14.9405, 53.39 ] } },
+ { "type": "Feature", "properties": { "id": "ak16973981", "mag": 1.6, "time": 1506849720561, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.2003, 60.1713, 129.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16973012", "mag": 1.1, "time": 1506849332753, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.7558, 59.8604, 10.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axfu", "mag": 4.4, "time": 1506848263400, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.7814, 18.4858, 79.09 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016176", "mag": 1.75, "time": 1506848220800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.651333, 35.934333, 2.81 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016160", "mag": 1.37, "time": 1506846375610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.908333, 35.5955, 1.49 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990805", "mag": 2.5, "time": 1506845582617, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -169.7071, 51.7987, 13.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16972044", "mag": 1.1, "time": 1506843571095, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.4859, 61.0501, 21.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axfi", "mag": 4.1, "time": 1506843463030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -77.5019, -1.5006, 197.35 ] } },
+ { "type": "Feature", "properties": { "id": "ak16972038", "mag": 1.5, "time": 1506842124989, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.6539, 62.7976, 71.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16972036", "mag": 1.2, "time": 1506841940900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8258, 61.6968, 61.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258604", "mag": 1.59, "time": 1506841735050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.459167, 46.866, 10.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016112", "mag": 1.44, "time": 1506840801230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.2085, 34.452833, 11.88 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70236143", "mag": 1.72, "time": 1506840567300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.7785, 37.328333, 4.35 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990799", "mag": 1.1, "time": 1506840419377, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.7218, 59.2315, 9.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16971064", "mag": 2.6, "time": 1506838204059, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.5055, 59.3191, 8.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axek", "mag": 3.2, "time": 1506836917300, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.7711, 36.4532, 6.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16970116", "mag": 2.7, "time": 1506836847043, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.9474, 62.6019, 6.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902586", "mag": 1.42, "time": 1506836822020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8205, 37.604, 4.13 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902581", "mag": 1.71, "time": 1506836766960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8205, 37.604333, 4.0 ] } },
+ { "type": "Feature", "properties": { "id": "hv61928476", "mag": 1.81, "time": 1506836276760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.631836, 19.188999, 0.89 ] } },
+ { "type": "Feature", "properties": { "id": "ak16970114", "mag": 1.3, "time": 1506835946408, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.345, 60.1863, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250622", "mag": 2.13, "time": 1506835247610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.578, 38.7305, -0.01 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axe4", "mag": 4.2, "time": 1506834536440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 146.1269, -6.2836, 59.98 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axdz", "mag": 4.1, "time": 1506833874150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -85.5987, 9.126, 39.13 ] } },
+ { "type": "Feature", "properties": { "id": "ak16970083", "mag": 2.0, "time": 1506833288717, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.6914, 61.3678, 29.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16969148", "mag": 1.9, "time": 1506832174570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -175.9412, 51.6192, 50.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16969146", "mag": 1.0, "time": 1506831622152, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.577, 62.7735, 79.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016048", "mag": 1.04, "time": 1506831472900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.833167, 33.669167, 16.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci38016040", "mag": 1.1, "time": 1506831149410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.485, 36.3695, 1.6 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258549", "mag": 1.59, "time": 1506830710300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5235, 46.889833, 13.14 ] } },
+ { "type": "Feature", "properties": { "id": "hv61928346", "mag": 2.95, "time": 1506829826670, "felt": 21, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.095333, 19.715167, 33.794 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990790", "mag": 1.0, "time": 1506829471423, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.2898, 60.1429, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902546", "mag": 1.45, "time": 1506828244030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.157167, 36.626, 8.14 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258544", "mag": 1.11, "time": 1506828010380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.526333, 46.871, 10.92 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902531", "mag": 1.44, "time": 1506827498200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.228833, 36.619333, 4.82 ] } },
+ { "type": "Feature", "properties": { "id": "ak16968180", "mag": 2.0, "time": 1506827492404, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.739, 61.1833, 86.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axpk", "mag": 1.6, "time": 1506827393900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -70.9053, 41.6481, 6.51 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015992", "mag": 1.15, "time": 1506827015230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.3845, 35.111667, 5.93 ] } },
+ { "type": "Feature", "properties": { "id": "hv61928261", "mag": 2.05, "time": 1506825377030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.476502, 19.216, 37.47 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990784", "mag": 1.4, "time": 1506825243899, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -174.2232, 51.7576, 46.6 ] } },
+ { "type": "Feature", "properties": { "id": "uw61336131", "mag": 1.16, "time": 1506825168050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.9095, 48.316167, 1.09 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258539", "mag": 1.53, "time": 1506824807150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.528833, 46.877, 11.86 ] } },
+ { "type": "Feature", "properties": { "id": "ak16967237", "mag": 1.8, "time": 1506824784256, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.7866, 53.1332, 25.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990782", "mag": 2.0, "time": 1506823956350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -173.6834, 51.2465, 35.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990781", "mag": 1.3, "time": 1506823856677, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.521, 59.9658, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902506", "mag": 1.22, "time": 1506821920520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.7125, 37.351167, 7.83 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axct", "mag": 5.1, "time": 1506821726490, "felt": 125, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -73.1491, 7.5135, 142.73 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015920", "mag": 1.75, "time": 1506821149880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.354833, 33.961167, 5.95 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axcn", "mag": 4.9, "time": 1506821107970, "felt": 24, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 140.5685, 36.9167, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990780", "mag": 2.5, "time": 1506821107760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -169.8117, 51.8357, 61.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015912", "mag": 1.0, "time": 1506820492420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.119167, 33.9365, 14.07 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990779", "mag": 1.3, "time": 1506819992776, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.8841, 57.2184, 46.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990778", "mag": 1.0, "time": 1506819499573, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.4019, 63.1122, 97.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902491", "mag": 1.79, "time": 1506819103020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.939, 37.635333, 5.76 ] } },
+ { "type": "Feature", "properties": { "id": "ak16966268", "mag": 1.8, "time": 1506818601975, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.9252, 60.1498, 112.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16966264", "mag": 1.5, "time": 1506818511725, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4432, 51.7288, 13.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16966263", "mag": 2.1, "time": 1506818242272, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.7041, 52.7581, 14.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990774", "mag": 1.5, "time": 1506818099252, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4546, 51.7076, 6.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16990772", "mag": 2.7, "time": 1506817440647, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -169.6939, 51.8802, 15.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axc3", "mag": 4.5, "time": 1506817163710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 126.9456, 7.2071, 68.13 ] } },
+ { "type": "Feature", "properties": { "id": "ak16965336", "mag": 1.9, "time": 1506816635445, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.9899, 60.0896, 71.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16965329", "mag": 1.2, "time": 1506816385660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3486, 64.9885, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axbx", "mag": 4.3, "time": 1506816328880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -169.9474, 51.9828, 27.38 ] } },
+ { "type": "Feature", "properties": { "id": "hv61928136", "mag": 2.02, "time": 1506816129630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.123672, 19.313999, 2.22 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250512", "mag": 2.38, "time": 1506814998100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.459167, 42.663667, 2.14 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axbj", "mag": 3.2, "time": 1506814776660, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4566, 42.652, 6.15 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axba", "mag": 2.8, "time": 1506814745510, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4606, 42.6545, 4.98 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axb6", "mag": 2.7, "time": 1506814557760, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.473, 42.6754, 3.19 ] } },
+ { "type": "Feature", "properties": { "id": "ak16964389", "mag": 1.2, "time": 1506813911112, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.5092, 62.3699, 51.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015880", "mag": 1.87, "time": 1506813831910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.455333, 34.324167, 2.96 ] } },
+ { "type": "Feature", "properties": { "id": "us2000axas", "mag": 5.5, "time": 1506813329570, "felt": null, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 128.5426, 3.9405, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16964388", "mag": 1.6, "time": 1506812976279, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.5291, 59.2674, 85.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989805", "mag": 1.4, "time": 1506812398891, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.7509, 60.014, 105.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16964387", "mag": 1.0, "time": 1506812112182, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.1116, 62.3522, 7.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16964380", "mag": 1.0, "time": 1506811899089, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.6933, 62.6659, 6.2 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607730", "mag": 1.0, "time": 1506811774166, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.9049, 37.2915, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607738", "mag": 1.0, "time": 1506811292528, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.8999, 37.2878, 3.1 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607737", "mag": 1.1, "time": 1506811240125, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.9056, 37.279, 6.4 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607728", "mag": 1.1, "time": 1506811230164, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.9061, 37.2885, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250442", "mag": 2.43, "time": 1506810599500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4515, 42.661, 2.56 ] } },
+ { "type": "Feature", "properties": { "id": "ak16963468", "mag": 1.2, "time": 1506810291866, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.5204, 63.352, 8.1 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607721", "mag": 1.4, "time": 1506807445148, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.6755, 40.2201, 8.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16963443", "mag": 1.1, "time": 1506806484011, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3476, 61.4217, 25.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16963413", "mag": 2.3, "time": 1506806152613, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -144.0067, 60.9307, 14.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16962501", "mag": 4.2, "time": 1506806106026, "felt": 17, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ -152.2422, 59.621, 83.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989798", "mag": 1.1, "time": 1506805696616, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.7955, 61.7318, 98.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax9r", "mag": 4.7, "time": 1506805651800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 139.9751, 27.653, 485.8 ] } },
+ { "type": "Feature", "properties": { "id": "uw61335981", "mag": 1.82, "time": 1506805100680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.056833, 48.412333, 50.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902471", "mag": 2.5, "time": 1506804691550, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.2745, 38.558167, 6.21 ] } },
+ { "type": "Feature", "properties": { "id": "nc71107604", "mag": 0.96, "time": 1506804690650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.780167, 35.5105, 3.92 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015856", "mag": 1.0, "time": 1506804008820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.791, 33.512, 6.24 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax9d", "mag": 4.1, "time": 1506803686610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 122.7108, -8.0939, 216.64 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax9h", "mag": 3.5, "time": 1506803627030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -68.5125, 17.7855, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "hv61927906", "mag": 3.49, "time": 1506803617560, "felt": 9, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.469, 19.209667, 35.947 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax99", "mag": 4.7, "time": 1506802488710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 143.8145, 21.6564, 64.59 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015848", "mag": 1.38, "time": 1506802371860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.363167, 33.357333, 10.38 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902466", "mag": 1.77, "time": 1506801988210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.781, 38.796667, 3.44 ] } },
+ { "type": "Feature", "properties": { "id": "ak16962490", "mag": 1.1, "time": 1506800090127, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.1783, 59.7871, 69.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16962484", "mag": 1.5, "time": 1506799366659, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6852, 63.5864, 3.0 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607710", "mag": 1.2, "time": 1506799171022, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.1362, 38.2888, 10.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16962480", "mag": 3.0, "time": 1506798820424, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.1572, 55.8639, 11.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989794", "mag": 1.9, "time": 1506798785904, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -176.2132, 52.0688, 7.4 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258414", "mag": 1.87, "time": 1506798465250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.525333, 46.872833, 11.78 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax8b", "mag": 2.5, "time": 1506797682590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4618, 42.6659, 3.65 ] } },
+ { "type": "Feature", "properties": { "id": "ak16962476", "mag": 1.4, "time": 1506797627539, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.5093, 61.3123, 6.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16961588", "mag": 1.1, "time": 1506797036668, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.7901, 63.2441, 12.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0d3", "mag": 4.1, "time": 1506796297940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.8027, 15.4984, 19.41 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015776", "mag": 1.28, "time": 1506796206280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.89, 34.349167, 2.93 ] } },
+ { "type": "Feature", "properties": { "id": "ak16961586", "mag": 2.0, "time": 1506795961720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.8619, 51.4801, 41.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16961585", "mag": 1.1, "time": 1506795458511, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.5581, 61.5616, 72.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015752", "mag": 1.52, "time": 1506795424490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.160667, 34.4365, 4.43 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax7s", "mag": 4.8, "time": 1506795349220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.9189, 16.1602, 51.93 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904876", "mag": 1.25, "time": 1506795206390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.484167, 40.699167, 11.98 ] } },
+ { "type": "Feature", "properties": { "id": "ak16961582", "mag": 1.1, "time": 1506794436503, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.6079, 60.1354, 9.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16961580", "mag": 1.1, "time": 1506794299451, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.5942, 60.1565, 7.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16961575", "mag": 1.6, "time": 1506793157002, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.119, 51.4689, 25.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax76", "mag": 4.9, "time": 1506789944160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -90.9767, 1.0533, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902376", "mag": 1.84, "time": 1506788771420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.8085, 38.817833, 3.12 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902381", "mag": 1.19, "time": 1506788628860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.3415, 37.8225, -0.07 ] } },
+ { "type": "Feature", "properties": { "id": "ak16960680", "mag": 2.9, "time": 1506788491228, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 179.9778, 51.4147, 57.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989782", "mag": 1.1, "time": 1506788345464, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.7866, 57.4545, 53.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902371", "mag": 1.16, "time": 1506786770930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.691, 38.7405, 1.44 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax6w", "mag": 2.6, "time": 1506785489440, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.5446, 36.2305, 5.63 ] } },
+ { "type": "Feature", "properties": { "id": "ak16959801", "mag": 1.0, "time": 1506785312713, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7001, 61.542, 58.2 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258389", "mag": 1.27, "time": 1506783781070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.531167, 46.8685, 11.42 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015696", "mag": 2.28, "time": 1506783542670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.492667, 34.216, 5.74 ] } },
+ { "type": "Feature", "properties": { "id": "ak16959795", "mag": 1.6, "time": 1506783111232, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.5985, 59.916, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902346", "mag": 1.53, "time": 1506782817930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.249667, 37.864833, 5.03 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902336", "mag": 1.34, "time": 1506782106540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.819833, 37.603833, 4.12 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015672", "mag": 1.46, "time": 1506781658250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.2715, 34.059333, 15.26 ] } },
+ { "type": "Feature", "properties": { "id": "uw61335861", "mag": 1.05, "time": 1506780581040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.452333, 48.382667, 22.31 ] } },
+ { "type": "Feature", "properties": { "id": "hv61927751", "mag": 2.29, "time": 1506780487200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.627833, 19.405333, 3.602 ] } },
+ { "type": "Feature", "properties": { "id": "ak16958915", "mag": 1.1, "time": 1506779690755, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.5599, 60.3017, 2.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16958913", "mag": 1.2, "time": 1506779388174, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.6949, 63.8592, 1.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989774", "mag": 1.1, "time": 1506778517082, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.4836, 62.981, 94.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015648", "mag": 1.53, "time": 1506777358020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.461667, 34.329167, 3.88 ] } },
+ { "type": "Feature", "properties": { "id": "ak16958909", "mag": 1.8, "time": 1506777347886, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -159.2124, 67.8158, 1.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015640", "mag": 2.0, "time": 1506777335770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.658167, 31.867, 1.78 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015616", "mag": 1.28, "time": 1506776191250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.768833, 33.326833, 12.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16958907", "mag": 1.2, "time": 1506775842000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.4069, 62.3275, 86.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902306", "mag": 1.41, "time": 1506775748110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.82, 37.605333, 4.33 ] } },
+ { "type": "Feature", "properties": { "id": "ak16958905", "mag": 2.0, "time": 1506775349934, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -163.7202, 67.3687, 4.2 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607651", "mag": 1.2, "time": 1506775034180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8976, 38.3688, 7.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16958026", "mag": 2.8, "time": 1506774114627, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -163.7286, 67.3815, 8.4 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250312", "mag": 2.59, "time": 1506774047790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.635, 37.764167, 13.14 ] } },
+ { "type": "Feature", "properties": { "id": "ak16958023", "mag": 1.6, "time": 1506773722633, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6494, 63.1022, 115.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989768", "mag": 1.6, "time": 1506773709105, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.8697, 59.0106, 105.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902286", "mag": 1.55, "time": 1506773378420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.898833, 37.522667, 12.57 ] } },
+ { "type": "Feature", "properties": { "id": "ld60143701", "mag": 0.98, "time": 1506773153350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -74.5095, 40.809333, 11.51 ] } },
+ { "type": "Feature", "properties": { "id": "ak16958020", "mag": 1.2, "time": 1506771142867, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.0654, 62.1893, 8.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16957154", "mag": 1.4, "time": 1506770413805, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.3117, 61.0872, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015552", "mag": 1.58, "time": 1506769732230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.155, 34.5615, 2.13 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989763", "mag": 1.5, "time": 1506768979985, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.1722, 60.0493, 117.8 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250297", "mag": 1.97, "time": 1506768169440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4255, 42.547, 7.49 ] } },
+ { "type": "Feature", "properties": { "id": "ak16957134", "mag": 1.5, "time": 1506768169245, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.9682, 61.4708, 39.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax5m", "mag": 5.2, "time": 1506767402460, "felt": null, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 128.7797, 1.8973, 37.67 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989760", "mag": 1.1, "time": 1506766077754, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.8184, 60.0072, 67.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902251", "mag": 1.22, "time": 1506766057090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.800833, 38.792667, 2.88 ] } },
+ { "type": "Feature", "properties": { "id": "ak16956252", "mag": 1.6, "time": 1506765146662, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3164, 61.6465, 25.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax55", "mag": 4.4, "time": 1506764918800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.0971, 15.3765, 35.53 ] } },
+ { "type": "Feature", "properties": { "id": "ak16956250", "mag": 3.1, "time": 1506764602367, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.3876, 51.6362, 13.1 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250277", "mag": 1.1, "time": 1506764348800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.411333, 38.962833, -1.36 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902211", "mag": 2.24, "time": 1506763678540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.1355, 37.688333, 25.77 ] } },
+ { "type": "Feature", "properties": { "id": "ak16955383", "mag": 2.0, "time": 1506763079790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.7222, 59.2509, 16.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16955380", "mag": 1.1, "time": 1506762584802, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.0664, 61.8814, 35.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902196", "mag": 1.37, "time": 1506761418100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.7435, 38.788, 0.74 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax4r", "mag": 2.5, "time": 1506761330980, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.5543, 36.2286, 1.38 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015488", "mag": 1.48, "time": 1506761301510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.3055, 33.255167, 10.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015480", "mag": 1.54, "time": 1506760683740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.638333, 33.165167, 2.88 ] } },
+ { "type": "Feature", "properties": { "id": "ak16955371", "mag": 2.5, "time": 1506760322340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -179.9144, 51.2732, 19.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902186", "mag": 1.08, "time": 1506759358360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.750832, 38.806835, 0.69 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902176", "mag": 1.52, "time": 1506758934270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.270833, 39.463167, 6.67 ] } },
+ { "type": "Feature", "properties": { "id": "ak16955365", "mag": 2.3, "time": 1506758896299, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -173.4581, 50.7723, 29.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16955363", "mag": 1.2, "time": 1506758873795, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2563, 61.2042, 65.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902161", "mag": 1.43, "time": 1506758269830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.820833, 37.604167, 3.89 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902151", "mag": 1.08, "time": 1506757752200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.095167, 36.564333, 8.65 ] } },
+ { "type": "Feature", "properties": { "id": "ak16954507", "mag": 1.7, "time": 1506757551919, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -176.4734, 51.7808, 63.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16954502", "mag": 1.5, "time": 1506757337943, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.7203, 60.1564, 96.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16954501", "mag": 1.2, "time": 1506757146790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.0463, 62.4859, 12.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16954494", "mag": 1.2, "time": 1506755657374, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.4986, 59.9398, 15.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989746", "mag": 1.4, "time": 1506755147399, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -176.4214, 51.6622, 47.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902146", "mag": 1.49, "time": 1506754443300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.7965, 38.821167, 2.97 ] } },
+ { "type": "Feature", "properties": { "id": "ak16953640", "mag": 1.8, "time": 1506754020475, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3389, 63.5229, 14.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015432", "mag": 1.45, "time": 1506753848290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.784, 34.512167, 18.77 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902141", "mag": 1.71, "time": 1506753528720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9575, 37.590333, -0.13 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax3z", "mag": 5.0, "time": 1506753276470, "felt": 12, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 178.7893, -37.146, 51.02 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax3x", "mag": 4.0, "time": 1506752562800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.1802, 15.1606, 44.16 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax3v", "mag": 5.5, "time": 1506752076970, "felt": 45, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 105.0015, 32.3196, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902116", "mag": 1.62, "time": 1506750865330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.599667, 37.407833, 9.53 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015368", "mag": 1.67, "time": 1506750508810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.076333, 36.188833, 2.55 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258359", "mag": 1.02, "time": 1506750398880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -113.9725, 47.5955, 16.81 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax3j", "mag": 2.7, "time": 1506750040910, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.2913, 46.8038, 7.79 ] } },
+ { "type": "Feature", "properties": { "id": "ak16952767", "mag": 1.8, "time": 1506749904921, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.3454, 60.3536, 81.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16952766", "mag": 2.3, "time": 1506749189648, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -169.3954, 52.6671, 7.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax39", "mag": 4.5, "time": 1506748759440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 146.5825, -6.071, 46.79 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902081", "mag": 1.59, "time": 1506748525170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.82, 37.603833, 3.81 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989740", "mag": 1.2, "time": 1506747601510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7455, 63.2374, 127.9 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250227", "mag": 1.55, "time": 1506747254170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.416167, 42.576, 7.87 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989738", "mag": 2.1, "time": 1506746345789, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -176.3938, 52.2402, 166.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax2y", "mag": 2.0, "time": 1506744973730, "felt": 15, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -103.5373, 31.4264, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax2z", "mag": 4.2, "time": 1506744770640, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 56.8179, 27.8699, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16951924", "mag": 1.9, "time": 1506744732618, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0884, 59.736, 45.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72902041", "mag": 1.11, "time": 1506744250250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.833, 37.493667, -0.44 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989735", "mag": 1.2, "time": 1506741220731, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9578, 61.9828, 69.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16951083", "mag": 2.6, "time": 1506741030111, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.6653, 59.3044, 110.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989733", "mag": 1.9, "time": 1506739580500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.7167, 57.5293, 92.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax2n", "mag": 4.5, "time": 1506739554570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 136.7409, -3.3243, 53.79 ] } },
+ { "type": "Feature", "properties": { "id": "ak16951081", "mag": 1.2, "time": 1506738073140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.643, 59.7863, 2.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015232", "mag": 1.78, "time": 1506737478680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.242833, 34.689, 2.49 ] } },
+ { "type": "Feature", "properties": { "id": "nm60207556", "mag": 1.6, "time": 1506737274410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -89.540333, 36.441167, 8.74 ] } },
+ { "type": "Feature", "properties": { "id": "ak16951079", "mag": 1.0, "time": 1506737168134, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.6248, 59.7789, 3.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989730", "mag": 1.0, "time": 1506736917340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.3855, 61.2392, 35.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16951077", "mag": 2.7, "time": 1506736523109, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -175.4182, 51.6603, 65.4 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607629", "mag": 1.3, "time": 1506736488217, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.2269, 38.6102, 7.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989728", "mag": 1.8, "time": 1506734962617, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.4354, 59.672, 120.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax2c", "mag": 4.2, "time": 1506734849800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.1267, 15.2552, 35.18 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015192", "mag": 1.59, "time": 1506734841110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.231333, 34.69, 2.26 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901986", "mag": 1.53, "time": 1506733264430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.820667, 37.604833, 4.25 ] } },
+ { "type": "Feature", "properties": { "id": "ak16950243", "mag": 1.5, "time": 1506732735872, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.8027, 59.8685, 4.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989726", "mag": 1.2, "time": 1506732275435, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.7993, 62.6213, 100.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b217", "mag": 4.4, "time": 1506731641840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.5238, -17.429, 578.55 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901976", "mag": 1.18, "time": 1506731621270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.821, 37.608667, 4.18 ] } },
+ { "type": "Feature", "properties": { "id": "ak16950242", "mag": 1.2, "time": 1506731391196, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.6362, 63.7125, 120.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989723", "mag": 1.7, "time": 1506730448510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.6879, 60.1242, 106.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015160", "mag": 1.92, "time": 1506730343820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.0465, 33.1715, 3.57 ] } },
+ { "type": "Feature", "properties": { "id": "ak16950224", "mag": 2.7, "time": 1506729701559, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.9689, 62.8827, 10.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015152", "mag": 2.71, "time": 1506729570740, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.046167, 33.172833, 9.13 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989254", "mag": 1.6, "time": 1506729481572, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -174.2839, 51.9212, 67.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16950219", "mag": 1.3, "time": 1506729013003, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.9672, 64.4141, 9.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16950216", "mag": 1.6, "time": 1506728300228, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.1933, 61.9028, 3.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax17", "mag": 4.7, "time": 1506727132760, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 120.696, 13.6996, 135.75 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949390", "mag": 2.0, "time": 1506727039137, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.6767, 61.5138, 15.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949386", "mag": 1.2, "time": 1506726713734, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3628, 64.9795, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901936", "mag": 1.7, "time": 1506726391160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.822, 37.604667, 4.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015128", "mag": 1.14, "time": 1506725917420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.794167, 33.499833, 4.55 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax0h", "mag": 4.3, "time": 1506725523560, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -72.9693, 6.7514, 162.39 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901926", "mag": 1.27, "time": 1506725219450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.819667, 37.6045, 3.92 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989247", "mag": 1.4, "time": 1506725194385, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2194, 60.3483, 70.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901921", "mag": 1.68, "time": 1506724972140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.7985, 38.0515, 10.15 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0b0", "mag": 4.2, "time": 1506724750370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.7775, 14.8225, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awzq", "mag": 4.2, "time": 1506724590080, "felt": 7, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -72.1967, -31.7027, 34.99 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250212", "mag": 1.71, "time": 1506723678770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.33, 44.419, 8.43 ] } },
+ { "type": "Feature", "properties": { "id": "ak16948452", "mag": 1.0, "time": 1506723638356, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.5236, 61.0736, 4.6 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250207", "mag": 0.97, "time": 1506723591620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.331, 44.419667, 7.85 ] } },
+ { "type": "Feature", "properties": { "id": "ak16948450", "mag": 2.2, "time": 1506723243356, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.3899, 51.6225, 6.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989243", "mag": 1.8, "time": 1506723039650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.6224, 58.8526, 127.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015088", "mag": 2.26, "time": 1506722552150, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.2355, 34.1175, 22.24 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awz1", "mag": 4.9, "time": 1506721850800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.0878, 15.2008, 58.14 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awyk", "mag": 3.0, "time": 1506721368710, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -126.71, 43.4329, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awyj", "mag": 2.5, "time": 1506721170670, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -96.8727, 36.4662, 8.25 ] } },
+ { "type": "Feature", "properties": { "id": "ak16948433", "mag": 1.1, "time": 1506720878279, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3481, 63.5145, 7.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015064", "mag": 1.38, "time": 1506720751740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.9775, 33.998333, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901896", "mag": 1.79, "time": 1506720632350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.822, 37.604667, 3.82 ] } },
+ { "type": "Feature", "properties": { "id": "ak16948427", "mag": 2.1, "time": 1506720336314, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.3588, 61.6517, 20.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901891", "mag": 2.87, "time": 1506720104700, "felt": 12, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.352667, 38.643167, 5.77 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax7e", "mag": 2.5, "time": 1506719402880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.5572, 49.4225, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awxt", "mag": 4.4, "time": 1506718802820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.8406, 16.1453, 55.29 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901871", "mag": 1.92, "time": 1506717945880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.878667, 37.535, 2.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015016", "mag": 1.05, "time": 1506717237070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.142333, 33.336167, -0.44 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awx6", "mag": 4.7, "time": 1506717060150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.3377, 14.7629, 21.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901856", "mag": 1.02, "time": 1506716541140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.722, 38.777668, 1.65 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258329", "mag": 1.68, "time": 1506716143860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.210167, 46.588333, 0.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989238", "mag": 1.6, "time": 1506715318085, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.6762, 51.2251, 46.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci38015000", "mag": 1.05, "time": 1506715194050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.174667, 33.223167, -0.31 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989237", "mag": 1.3, "time": 1506715107803, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4109, 51.6654, 14.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989236", "mag": 1.8, "time": 1506714300796, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -173.0656, 51.6073, 13.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16946778", "mag": 1.8, "time": 1506713921345, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0358, 59.8156, 103.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awvi", "mag": 4.7, "time": 1506713408290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.8244, 14.6951, 25.26 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awvc", "mag": 5.3, "time": 1506713101350, "felt": 5, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 160.0808, 53.2159, 47.81 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901811", "mag": 1.13, "time": 1506712684050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.839833, 37.5695, 1.15 ] } },
+ { "type": "Feature", "properties": { "id": "ci38014936", "mag": 1.22, "time": 1506711284740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.962833, 36.582167, 5.17 ] } },
+ { "type": "Feature", "properties": { "id": "ak16945947", "mag": 1.1, "time": 1506711226973, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.7372, 61.7159, 11.2 ] } },
+ { "type": "Feature", "properties": { "id": "uw61335536", "mag": 1.21, "time": 1506711131520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.5445, 46.492667, -1.15 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901801", "mag": 1.03, "time": 1506711093580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.840332, 38.841, 1.28 ] } },
+ { "type": "Feature", "properties": { "id": "ci38014904", "mag": 1.27, "time": 1506710840540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.351833, 35.050333, -1.01 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901786", "mag": 1.25, "time": 1506710565410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.638, 38.771, 3.08 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901781", "mag": 1.14, "time": 1506710562310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.813333, 37.477, 10.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax1j", "mag": 2.6, "time": 1506708957540, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -126.9812, 40.4991, 10.41 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250167", "mag": 1.43, "time": 1506708811550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.408333, 42.627833, 0.01 ] } },
+ { "type": "Feature", "properties": { "id": "ak16945940", "mag": 2.2, "time": 1506708598408, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.1805, 65.8694, 11.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awu0", "mag": 4.4, "time": 1506708535930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -71.7041, -29.9428, 24.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989230", "mag": 1.2, "time": 1506708266694, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.5133, 51.924, 29.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901741", "mag": 0.97, "time": 1506707146210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.823167, 37.608833, 3.97 ] } },
+ { "type": "Feature", "properties": { "id": "ak16945938", "mag": 1.3, "time": 1506706984307, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -161.5563, 65.3108, 1.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16945133", "mag": 1.4, "time": 1506706312872, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.5157, 60.0338, 76.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16945129", "mag": 1.8, "time": 1506705516485, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.4094, 62.2086, 43.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901691", "mag": 1.19, "time": 1506705001740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.819833, 37.604, 4.23 ] } },
+ { "type": "Feature", "properties": { "id": "ak16945122", "mag": 2.7, "time": 1506704480054, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.3979, 51.6138, 9.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16945116", "mag": 1.6, "time": 1506703818483, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7333, 62.8722, 95.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901686", "mag": 1.37, "time": 1506703671060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.763167, 38.815, 1.59 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989222", "mag": 1.3, "time": 1506703480244, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.9223, 60.0784, 5.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aws4", "mag": 4.2, "time": 1506703454020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.2978, -24.5018, 178.46 ] } },
+ { "type": "Feature", "properties": { "id": "ak16945111", "mag": 1.4, "time": 1506703443591, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.3415, 60.1469, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aws9", "mag": 2.8, "time": 1506703434610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.561, 46.8309, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16945098", "mag": 2.9, "time": 1506703414975, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -176.2265, 52.0599, 4.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901676", "mag": 1.08, "time": 1506702827030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8685, 37.573667, 2.96 ] } },
+ { "type": "Feature", "properties": { "id": "ci38014752", "mag": 1.38, "time": 1506702364640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.9525, 33.161667, 8.71 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901666", "mag": 2.1, "time": 1506702098440, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.822, 37.604167, 4.23 ] } },
+ { "type": "Feature", "properties": { "id": "hv61926636", "mag": 2.18, "time": 1506702014920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.601833, 20.052667, 34.47 ] } },
+ { "type": "Feature", "properties": { "id": "ak16944301", "mag": 1.2, "time": 1506702004530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.4859, 61.9357, 38.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awn9", "mag": 4.6, "time": 1506701320270, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 30.6565, 36.9513, 89.38 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901651", "mag": 1.66, "time": 1506701302480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.628333, 36.892667, -0.13 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awp8", "mag": 5.0, "time": 1506701291670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 143.8294, 21.3911, 69.37 ] } },
+ { "type": "Feature", "properties": { "id": "ak16944298", "mag": 1.9, "time": 1506700558070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.3591, 59.6184, 107.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16944296", "mag": 1.5, "time": 1506699999652, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.347, 60.6887, 39.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16944295", "mag": 2.3, "time": 1506699741265, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -174.4266, 51.6803, 2.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16944283", "mag": 3.0, "time": 1506699614700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.523, 51.6975, 12.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989214", "mag": 1.4, "time": 1506699333969, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.5572, 51.8006, 17.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16944280", "mag": 1.6, "time": 1506699330322, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.4554, 63.4968, 4.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awju", "mag": 4.4, "time": 1506698634990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.674, 15.7931, 74.04 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901616", "mag": 1.45, "time": 1506698546300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.190833, 36.066, 9.01 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901611", "mag": 1.16, "time": 1506698374110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.820167, 37.606167, 4.24 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250142", "mag": 1.31, "time": 1506698139210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.502167, 42.0255, -0.68 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989212", "mag": 1.5, "time": 1506697780188, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.1692, 61.0412, 92.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901601", "mag": 1.58, "time": 1506697356900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8215, 37.603833, 3.81 ] } },
+ { "type": "Feature", "properties": { "id": "ak16944278", "mag": 1.3, "time": 1506696524699, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.2498, 63.4064, 80.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16943485", "mag": 1.7, "time": 1506695993154, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.7332, 58.8106, 5.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16943478", "mag": 1.7, "time": 1506695477590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.7502, 58.8134, 7.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awj3", "mag": 2.5, "time": 1506695343600, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.0981, 36.3324, 6.543 ] } },
+ { "type": "Feature", "properties": { "id": "ak16943471", "mag": 2.5, "time": 1506695221683, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.9597, 58.9824, 104.1 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250137", "mag": 1.65, "time": 1506694436450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.506667, 42.031167, 2.68 ] } },
+ { "type": "Feature", "properties": { "id": "ak16943466", "mag": 1.3, "time": 1506694161233, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3879, 63.5817, 1.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989205", "mag": 2.0, "time": 1506693991548, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -176.2136, 52.0676, 4.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901566", "mag": 2.08, "time": 1506693960730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.862333, 37.5625, 4.47 ] } },
+ { "type": "Feature", "properties": { "id": "ak16943439", "mag": 1.3, "time": 1506693558920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.0206, 61.729, 33.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci38014568", "mag": 2.51, "time": 1506693023860, "felt": 13, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.270167, 33.67, 4.47 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awib", "mag": 5.0, "time": 1506692997440, "felt": 13, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 67.9437, 39.8728, 20.04 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901551", "mag": 1.74, "time": 1506692955010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.821167, 37.605667, 4.05 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901546", "mag": 2.76, "time": 1506692724780, "felt": 8, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.822, 37.606167, 4.07 ] } },
+ { "type": "Feature", "properties": { "id": "ak16942648", "mag": 1.5, "time": 1506692473989, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.3697, 60.1847, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250132", "mag": 1.79, "time": 1506692243980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.431, 42.543833, 7.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258279", "mag": 1.06, "time": 1506691959070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.531833, 46.8625, 13.38 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901536", "mag": 1.82, "time": 1506691724930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.821, 37.605667, 4.02 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607504", "mag": 1.8, "time": 1506690215490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.7002, 37.7048, 16.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16942645", "mag": 2.8, "time": 1506689890335, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -176.2102, 52.0495, 4.8 ] } },
+ { "type": "Feature", "properties": { "id": "hv61926461", "mag": 1.62, "time": 1506689375520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.457667, 19.1075, 28.777 ] } },
+ { "type": "Feature", "properties": { "id": "ci38014488", "mag": 1.71, "time": 1506688966950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.030167, 36.589833, 2.83 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250122", "mag": 1.68, "time": 1506688495310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.410833, 42.548333, 8.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci38014464", "mag": 1.51, "time": 1506688363340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.292833, 33.924, 11.12 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250117", "mag": 1.2, "time": 1506688147640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.451, 42.651167, 3.75 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607501", "mag": 1.5, "time": 1506687351344, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.1244, 38.2711, 14.1 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258269", "mag": 1.01, "time": 1506686927230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -113.712667, 47.670333, 12.54 ] } },
+ { "type": "Feature", "properties": { "id": "hv61926436", "mag": 2.78, "time": 1506686302190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.030667, 19.839833, 12.705 ] } },
+ { "type": "Feature", "properties": { "id": "ak16941853", "mag": 1.9, "time": 1506685697166, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.2959, 57.1271, 73.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awh4", "mag": 4.5, "time": 1506685520260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.0117, 15.1312, 54.94 ] } },
+ { "type": "Feature", "properties": { "id": "ak16941849", "mag": 1.4, "time": 1506685238756, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.2101, 65.8679, 9.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awh2", "mag": 3.2, "time": 1506684953300, "felt": 21, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -105.3739, 35.8708, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901446", "mag": 1.81, "time": 1506683864270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8685, 37.5745, 2.94 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989195", "mag": 2.8, "time": 1506683238639, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -170.2168, 53.4134, 215.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16941846", "mag": 2.8, "time": 1506683013276, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4342, 51.6411, 13.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci38014408", "mag": 1.09, "time": 1506682934740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.248167, 34.684167, 3.67 ] } },
+ { "type": "Feature", "properties": { "id": "ci38014400", "mag": 1.41, "time": 1506682423780, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.6475, 32.295833, 17.59 ] } },
+ { "type": "Feature", "properties": { "id": "uw61335391", "mag": 1.31, "time": 1506682259150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.713833, 45.779, 4.47 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607493", "mag": 1.3, "time": 1506681999912, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.1157, 38.2921, 8.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awgp", "mag": 4.0, "time": 1506681630910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -168.1308, 51.5953, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38014376", "mag": 2.27, "time": 1506680323320, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.236167, 34.686333, 2.51 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901411", "mag": 1.72, "time": 1506679482310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.821833, 37.606833, 4.18 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250092", "mag": 1.5, "time": 1506678952480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.408833, 42.556667, 7.57 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901396", "mag": 1.23, "time": 1506677982920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.0275, 36.556333, 6.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci38014304", "mag": 1.52, "time": 1506677845800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.798333, 33.502667, 4.26 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250087", "mag": 1.18, "time": 1506677776470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.772667, 41.2685, 12.53 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awgf", "mag": 4.7, "time": 1506677102490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 143.7467, 21.3618, 39.87 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989192", "mag": 1.2, "time": 1506676690210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.7405, 63.338, 95.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci38014288", "mag": 1.53, "time": 1506676635710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.671, 33.215333, 3.29 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901376", "mag": 1.15, "time": 1506676399250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.721832, 38.776001, 1.56 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901366", "mag": 1.25, "time": 1506676178310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.838167, 37.489833, 1.0 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607489", "mag": 1.9, "time": 1506676166910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.2245, 38.4923, 40.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989191", "mag": 1.8, "time": 1506675279572, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.0102, 58.492, 85.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989190", "mag": 1.3, "time": 1506674952846, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.1298, 60.9057, 47.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awfl", "mag": 4.4, "time": 1506674809710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.929, 14.9856, 43.22 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250082", "mag": 1.77, "time": 1506674053050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.7785, 38.186667, 4.92 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989188", "mag": 1.8, "time": 1506673945397, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -176.291, 51.5518, 1.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16940268", "mag": 1.1, "time": 1506673847917, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.1687, 63.2488, 4.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901291", "mag": 1.25, "time": 1506673221590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.898667, 37.523167, 12.92 ] } },
+ { "type": "Feature", "properties": { "id": "ak16940267", "mag": 1.0, "time": 1506672847451, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.5017, 66.1069, 17.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci38014192", "mag": 1.18, "time": 1506671965070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.4335, 34.163833, 7.61 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awf5", "mag": 4.2, "time": 1506671826720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 90.3467, 33.9272, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607584", "mag": 1.4, "time": 1506671521193, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.1177, 38.2758, 11.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci38014184", "mag": 2.46, "time": 1506671466000, "felt": 7, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.978833, 33.994167, 4.88 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607484", "mag": 1.8, "time": 1506671441804, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.1188, 38.2704, 11.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901256", "mag": 1.15, "time": 1506670814700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.8105, 38.808833, 0.67 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901241", "mag": 1.25, "time": 1506670284580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.989667, 36.427667, 2.31 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901231", "mag": 1.07, "time": 1506669441060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.540833, 37.406667, 8.01 ] } },
+ { "type": "Feature", "properties": { "id": "uw61335361", "mag": 1.94, "time": 1506668594230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.733667, 47.824, 24.16 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awej", "mag": 4.2, "time": 1506668295660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 55.3123, 28.2886, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901196", "mag": 0.96, "time": 1506668052570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.571833, 36.012667, 3.67 ] } },
+ { "type": "Feature", "properties": { "id": "ak16940266", "mag": 1.2, "time": 1506668048758, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.5877, 62.1976, 22.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901186", "mag": 1.14, "time": 1506667805720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.848167, 37.6535, 2.83 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901176", "mag": 1.25, "time": 1506667100210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.838333, 37.506167, 0.64 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901171", "mag": 2.27, "time": 1506666779210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.835333, 37.507167, -1.01 ] } },
+ { "type": "Feature", "properties": { "id": "ak16940265", "mag": 1.4, "time": 1506666562961, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.3945, 61.6303, 33.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16940263", "mag": 1.0, "time": 1506666497414, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.1712, 62.2695, 52.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901166", "mag": 1.28, "time": 1506666202970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.834167, 37.5065, 0.53 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awe6", "mag": 2.6, "time": 1506666160200, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -96.6816, 35.8653, 6.569 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607469", "mag": 1.0, "time": 1506665961601, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.5308, 38.52, 7.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci38014104", "mag": 1.28, "time": 1506665954550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.982833, 33.1725, 3.45 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989182", "mag": 1.1, "time": 1506665936336, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.485, 62.1641, 22.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901156", "mag": 2.23, "time": 1506665326530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8385, 37.505167, 1.37 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901146", "mag": 3.34, "time": 1506665130490, "felt": 5, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8355, 37.5055, 1.65 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989181", "mag": 1.9, "time": 1506664620963, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -168.5107, 52.4839, 24.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901116", "mag": 1.16, "time": 1506664498090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.824833, 37.605667, 4.02 ] } },
+ { "type": "Feature", "properties": { "id": "ak16939483", "mag": 1.1, "time": 1506663985990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.9358, 61.1521, 6.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901106", "mag": 1.19, "time": 1506663736480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.78717, 38.829334, 1.02 ] } },
+ { "type": "Feature", "properties": { "id": "nm60207436", "mag": 1.74, "time": 1506663708600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -89.653833, 36.539667, 9.66 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awdv", "mag": 4.5, "time": 1506663030100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -179.5233, -24.0812, 546.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16939475", "mag": 1.7, "time": 1506662432885, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8708, 60.1234, 43.7 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250077", "mag": 1.14, "time": 1506662404800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.55, 41.1085, 19.56 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901046", "mag": 1.46, "time": 1506661869950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.846833, 37.647833, 3.02 ] } },
+ { "type": "Feature", "properties": { "id": "ci38013856", "mag": 2.0, "time": 1506660542280, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.978, 33.995, 4.89 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989177", "mag": 1.2, "time": 1506660008320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.4686, 63.102, 104.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16945113", "mag": 2.3, "time": 1506659927913, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.0654, 53.6407, 46.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awd5", "mag": 5.0, "time": 1506659595610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.1021, 14.8894, 24.04 ] } },
+ { "type": "Feature", "properties": { "id": "nc72901021", "mag": 1.62, "time": 1506659436560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.826833, 38.814, 1.76 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awd1", "mag": 3.0, "time": 1506658713990, "felt": 5, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -96.6968, 35.8549, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258249", "mag": 2.26, "time": 1506658662520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.514, 46.840833, 13.41 ] } },
+ { "type": "Feature", "properties": { "id": "ci38013816", "mag": 1.03, "time": 1506658457830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.02, 34.015, 13.93 ] } },
+ { "type": "Feature", "properties": { "id": "ak16938672", "mag": 1.1, "time": 1506657671332, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.311, 64.8546, 17.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awcv", "mag": 5.6, "time": 1506657622320, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.0465, 14.9039, 21.66 ] } },
+ { "type": "Feature", "properties": { "id": "ak16945097", "mag": 2.0, "time": 1506657417279, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.3696, 53.5031, 41.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900986", "mag": 1.05, "time": 1506657208460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.835833, 37.502333, -0.01 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70235973", "mag": 1.64, "time": 1506657154290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.887333, 37.201833, 5.03 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900981", "mag": 1.98, "time": 1506656801880, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.8045, 38.832333, 1.64 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900976", "mag": 1.12, "time": 1506656629400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.758667, 38.793499, 0.77 ] } },
+ { "type": "Feature", "properties": { "id": "ci38013768", "mag": 1.6, "time": 1506656062720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.976, 33.995833, 3.45 ] } },
+ { "type": "Feature", "properties": { "id": "ak16937888", "mag": 1.8, "time": 1506653782695, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9369, 62.1991, 64.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989171", "mag": 1.9, "time": 1506653188688, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 178.5129, 51.845, 110.0 ] } },
+ { "type": "Feature", "properties": { "id": "hv61925851", "mag": 0.95, "time": 1506653113010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.463667, 19.481, 6.56 ] } },
+ { "type": "Feature", "properties": { "id": "ci38013744", "mag": 1.0, "time": 1506653104110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.302333, 34.099, 15.05 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awce", "mag": 4.4, "time": 1506652310280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 141.7803, 35.9821, 42.36 ] } },
+ { "type": "Feature", "properties": { "id": "ci38013736", "mag": 2.07, "time": 1506652304260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.259833, 32.454333, 2.17 ] } },
+ { "type": "Feature", "properties": { "id": "ci38013720", "mag": 2.39, "time": 1506651375080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.569, 31.324, 4.82 ] } },
+ { "type": "Feature", "properties": { "id": "ci38013712", "mag": 1.12, "time": 1506651359620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.924833, 33.976167, 6.34 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607452", "mag": 1.0, "time": 1506651336185, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.1923, 35.5727, 11.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci38013704", "mag": 0.97, "time": 1506651243970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.7885, 33.494833, 5.39 ] } },
+ { "type": "Feature", "properties": { "id": "ci38013688", "mag": 1.05, "time": 1506650990920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.791167, 33.5105, 6.09 ] } },
+ { "type": "Feature", "properties": { "id": "ak16937883", "mag": 2.4, "time": 1506650514315, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -174.9834, 51.7396, 25.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900931", "mag": 1.16, "time": 1506649983200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.720497, 38.775501, 1.87 ] } },
+ { "type": "Feature", "properties": { "id": "ak16937869", "mag": 2.6, "time": 1506649468698, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8838, 61.8075, 66.1 ] } },
+ { "type": "Feature", "properties": { "id": "uu60013219", "mag": 1.32, "time": 1506648472160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.687, 41.150667, 12.61 ] } },
+ { "type": "Feature", "properties": { "id": "uu60250062", "mag": 2.53, "time": 1506648435990, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.936667, 38.921333, 10.59 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awbw", "mag": 4.5, "time": 1506648405500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -169.976, 52.0498, 29.97 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awbq", "mag": 4.9, "time": 1506648161110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -170.1717, 52.3421, 33.24 ] } },
+ { "type": "Feature", "properties": { "id": "ak16937823", "mag": 1.0, "time": 1506648034498, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.0631, 63.4906, 4.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989160", "mag": 1.6, "time": 1506646713769, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.579, 51.7059, 15.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900911", "mag": 1.15, "time": 1506646505210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.834333, 37.504, -0.73 ] } },
+ { "type": "Feature", "properties": { "id": "ci38013672", "mag": 2.61, "time": 1506646378780, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.570333, 31.324667, 4.82 ] } },
+ { "type": "Feature", "properties": { "id": "ak16937047", "mag": 1.0, "time": 1506646107258, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.4881, 63.0417, 2.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16937045", "mag": 1.9, "time": 1506646058692, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.135, 67.8468, 16.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900906", "mag": 1.03, "time": 1506645880090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.876831, 38.8405, 2.17 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900886", "mag": 1.63, "time": 1506645570060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.818333, 38.816667, 2.21 ] } },
+ { "type": "Feature", "properties": { "id": "ci38013656", "mag": 2.24, "time": 1506645489800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.313, 34.094167, 17.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci38013632", "mag": 1.51, "time": 1506645195410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.7955, 33.502667, 3.76 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900876", "mag": 1.03, "time": 1506644780060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.818, 37.470667, 1.87 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900871", "mag": 1.62, "time": 1506644672730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.585667, 37.234667, 6.49 ] } },
+ { "type": "Feature", "properties": { "id": "ak16937041", "mag": 1.3, "time": 1506644621941, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.3267, 62.8222, 57.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16937039", "mag": 1.7, "time": 1506644576562, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.2144, 60.0462, 13.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16937037", "mag": 1.1, "time": 1506644052798, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.3512, 58.196, 2.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989154", "mag": 1.6, "time": 1506643362489, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.3692, 51.6466, 12.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16937036", "mag": 1.4, "time": 1506643250597, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.7379, 61.4006, 18.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awbb", "mag": 4.9, "time": 1506643017480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 144.7489, 19.052, 30.59 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989677", "mag": 1.5, "time": 1506642839250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.8862, 61.8988, 105.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16936268", "mag": 1.2, "time": 1506642106483, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.9604, 62.3327, 42.9 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607431", "mag": 1.9, "time": 1506641437450, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.5187, 36.978, 7.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900841", "mag": 1.93, "time": 1506641348540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.821, 37.606667, 4.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900846", "mag": 1.13, "time": 1506641325970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.818833, 37.608333, 4.24 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904266", "mag": 0.96, "time": 1506641269180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.0985, 41.357, -1.69 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989674", "mag": 1.6, "time": 1506641141934, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.9034, 59.5213, 94.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awa2", "mag": 4.4, "time": 1506640604400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -175.6403, 51.5228, 41.23 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607821", "mag": 1.1, "time": 1506640364409, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9062, 38.3722, 8.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aw9p", "mag": 5.4, "time": 1506640275740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -179.7911, -24.8725, 440.96 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b1wl", "mag": 4.8, "time": 1506639694670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 127.5676, 1.0849, 4.38 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aw9e", "mag": 4.7, "time": 1506639688220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 133.3331, 2.9053, 15.04 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989671", "mag": 1.7, "time": 1506639639127, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.3134, 59.6717, 111.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16936241", "mag": 2.5, "time": 1506639635527, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.1768, 68.4586, 17.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900821", "mag": 1.1, "time": 1506639127150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.834833, 37.500333, -1.77 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aw90", "mag": 5.1, "time": 1506638831750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.5949, -34.0499, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aw8l", "mag": 4.3, "time": 1506638537770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 130.4998, -6.5326, 108.74 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900811", "mag": 2.32, "time": 1506638416610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.1135, 35.6885, 5.91 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900806", "mag": 1.35, "time": 1506638081190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.878833, 37.534, 2.41 ] } },
+ { "type": "Feature", "properties": { "id": "uw61335056", "mag": 1.84, "time": 1506638058160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.417833, 45.624333, -1.28 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258209", "mag": 1.37, "time": 1506637878310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.521333, 46.910833, 10.76 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935473", "mag": 1.9, "time": 1506637576311, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -158.5454, 67.5431, 1.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935469", "mag": 2.0, "time": 1506637236181, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.4826, 58.8115, 4.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989667", "mag": 2.0, "time": 1506636836791, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.4008, 59.8707, 143.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989666", "mag": 1.1, "time": 1506636594038, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2636, 62.56, 91.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900796", "mag": 1.35, "time": 1506636488490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.710833, 38.743, 2.06 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935467", "mag": 1.1, "time": 1506635722873, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.2148, 64.8337, 24.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989663", "mag": 1.2, "time": 1506634878192, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0761, 62.868, 105.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aw7x", "mag": 3.3, "time": 1506634428280, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 19.9413, 39.9063, 10.29 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989662", "mag": 1.3, "time": 1506634090975, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8044, 63.1677, 125.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b1wj", "mag": 4.0, "time": 1506633989680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 150.778, 49.1768, 363.15 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935454", "mag": 2.6, "time": 1506633516577, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9288, 61.8846, 49.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935459", "mag": 2.8, "time": 1506633516034, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7041, 61.8689, 59.8 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607410", "mag": 2.0, "time": 1506633382650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9234, 38.4032, 7.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935451", "mag": 1.7, "time": 1506632963331, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.6029, 62.2054, 19.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci38013352", "mag": 1.79, "time": 1506632691350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.990833, 33.765333, 14.42 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607723", "mag": 1.0, "time": 1506632347835, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.1182, 38.2802, 11.5 ] } },
+ { "type": "Feature", "properties": { "id": "hv61925221", "mag": 1.37, "time": 1506631999030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.430333, 19.4155, 3.336 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935443", "mag": 2.3, "time": 1506631969817, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.484, 61.7831, 31.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aw54", "mag": 2.4, "time": 1506631716330, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.3897, 35.6755, 5.86 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aw51", "mag": 4.7, "time": 1506631326570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 129.2381, -7.2814, 142.87 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989658", "mag": 1.3, "time": 1506630830832, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.5815, 63.2958, 125.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935439", "mag": 1.8, "time": 1506629924653, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.1989, 60.9639, 35.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci38013336", "mag": 1.94, "time": 1506629828900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.131167, 32.218833, 17.71 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989656", "mag": 1.2, "time": 1506629660078, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0033, 63.1036, 120.6 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258194", "mag": 1.36, "time": 1506628850530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.525833, 46.870167, 10.85 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989655", "mag": 1.6, "time": 1506628609513, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.2274, 59.9548, 119.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989654", "mag": 1.5, "time": 1506627145969, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.4925, 59.606, 72.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900741", "mag": 1.19, "time": 1506626419400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.631667, 36.039167, 2.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989653", "mag": 1.4, "time": 1506626367074, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.3296, 60.9023, 42.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aw2q", "mag": 4.9, "time": 1506625864960, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -84.1381, 3.222, 33.2 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249967", "mag": 1.41, "time": 1506625553170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.457167, 42.614667, 6.24 ] } },
+ { "type": "Feature", "properties": { "id": "ak16933835", "mag": 2.9, "time": 1506625397763, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -171.0327, 52.1592, 53.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci38013288", "mag": 1.11, "time": 1506625160340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.118167, 33.2435, 12.25 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989651", "mag": 1.3, "time": 1506624662212, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.6565, 62.7268, 75.5 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607390", "mag": 1.2, "time": 1506624316884, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.0954, 35.994, 9.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16933797", "mag": 2.1, "time": 1506623643983, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.596, 60.994, 73.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16933794", "mag": 1.9, "time": 1506623613173, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.8361, 62.7886, 1.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci38013264", "mag": 1.24, "time": 1506622262550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.530333, 35.347, 5.41 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989648", "mag": 1.6, "time": 1506621791811, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.5986, 59.752, 76.2 ] } },
+ { "type": "Feature", "properties": { "id": "hv61924821", "mag": 2.4, "time": 1506621499160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.122167, 19.331, 7.032 ] } },
+ { "type": "Feature", "properties": { "id": "ak16933793", "mag": 1.6, "time": 1506621344909, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.8725, 59.9048, 16.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900701", "mag": 1.21, "time": 1506621263930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.129833, 36.62, 9.54 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258169", "mag": 1.95, "time": 1506620957630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.495833, 46.896167, 10.98 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989646", "mag": 1.2, "time": 1506620810224, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.5002, 61.5482, 31.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900691", "mag": 1.44, "time": 1506620029980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.995833, 39.427167, 0.18 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989645", "mag": 1.5, "time": 1506619134173, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0379, 60.1776, 121.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci38013232", "mag": 1.17, "time": 1506618737450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.792167, 33.506833, 5.73 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avzh", "mag": 4.6, "time": 1506618485320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 127.5691, 2.1483, 97.53 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avzb", "mag": 4.9, "time": 1506617586500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 120.0401, 6.0164, 50.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16933018", "mag": 1.2, "time": 1506617374262, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7645, 61.7278, 64.1 ] } },
+ { "type": "Feature", "properties": { "id": "hv61924676", "mag": 1.37, "time": 1506617124930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.142167, 19.3215, 5.152 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989643", "mag": 1.6, "time": 1506616564611, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.8062, 60.4189, 2.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989642", "mag": 1.4, "time": 1506615776447, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.9273, 61.5228, 95.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989641", "mag": 1.3, "time": 1506615666771, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.3551, 60.8947, 43.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avyw", "mag": 2.7, "time": 1506615478140, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4394, 42.5767, 8.98 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900646", "mag": 1.38, "time": 1506615468050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.0045, 36.4415, 0.06 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989640", "mag": 1.3, "time": 1506615161794, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.0408, 63.589, 132.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989639", "mag": 1.2, "time": 1506615119980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.3231, 63.0526, 91.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16933017", "mag": 2.0, "time": 1506614678900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.3488, 68.1439, 6.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989637", "mag": 2.0, "time": 1506614163379, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.1177, 57.8245, 115.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900616", "mag": 1.97, "time": 1506613917930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.833833, 37.506167, 0.46 ] } },
+ { "type": "Feature", "properties": { "id": "ak16933016", "mag": 1.5, "time": 1506613537003, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.1247, 62.197, 80.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900606", "mag": 1.53, "time": 1506612805340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.996667, 39.425333, 0.77 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989634", "mag": 1.6, "time": 1506612409300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.4495, 58.785, 109.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989633", "mag": 1.3, "time": 1506612360069, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.6854, 61.515, 2.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avy5", "mag": 2.4, "time": 1506612136390, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.1391, 37.351, 10.96 ] } },
+ { "type": "Feature", "properties": { "id": "ak16932254", "mag": 1.6, "time": 1506612041072, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.9819, 62.3692, 40.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avxu", "mag": 2.3, "time": 1506611699680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.3926, 36.3885, 15.33 ] } },
+ { "type": "Feature", "properties": { "id": "ak16932252", "mag": 1.4, "time": 1506611616543, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.7975, 61.8375, 20.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900586", "mag": 1.03, "time": 1506611392120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.821335, 38.808834, 2.14 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900581", "mag": 1.68, "time": 1506611003850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.995167, 39.428167, 0.76 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900571", "mag": 3.21, "time": 1506610414710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -127.1635, 40.137833, 15.62 ] } },
+ { "type": "Feature", "properties": { "id": "ak16932251", "mag": 2.9, "time": 1506610104421, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -174.9091, 51.7632, 40.8 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249947", "mag": 1.1, "time": 1506608975840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.421333, 42.593667, 5.84 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900556", "mag": 1.09, "time": 1506608575910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.821333, 37.6065, 3.9 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249942", "mag": 1.52, "time": 1506608341480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.415667, 42.591167, 5.46 ] } },
+ { "type": "Feature", "properties": { "id": "ak16932247", "mag": 2.1, "time": 1506608150712, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.4995, 59.282, 98.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989627", "mag": 1.2, "time": 1506607597338, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.5495, 63.4604, 104.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989625", "mag": 1.6, "time": 1506607488149, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.3463, 61.0393, 106.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16932246", "mag": 1.4, "time": 1506606933995, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.1075, 61.1056, 49.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16932241", "mag": 2.4, "time": 1506606217414, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.3566, 59.8225, 132.2 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607373", "mag": 1.4, "time": 1506605920785, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.4887, 38.6992, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989622", "mag": 1.0, "time": 1506605668248, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.09, 62.8911, 77.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16932239", "mag": 1.5, "time": 1506605540122, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.5382, 63.0052, 72.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900531", "mag": 1.45, "time": 1506605237980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.023333, 37.519667, 2.73 ] } },
+ { "type": "Feature", "properties": { "id": "uw61334636", "mag": 1.41, "time": 1506604992060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.905, 48.235833, 11.65 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989620", "mag": 1.1, "time": 1506604766781, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.9752, 64.7557, 17.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900521", "mag": 1.23, "time": 1506604242090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.078, 37.663333, 7.74 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989619", "mag": 1.3, "time": 1506603071727, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.42, 61.0462, 108.0 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249937", "mag": 2.05, "time": 1506602964450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.440333, 42.584, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16931481", "mag": 1.0, "time": 1506601991313, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.596, 66.821, 3.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989616", "mag": 1.3, "time": 1506601744056, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.1565, 57.9069, 53.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989615", "mag": 1.2, "time": 1506601651411, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3908, 68.9058, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16931479", "mag": 1.4, "time": 1506601472327, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.4079, 61.6728, 40.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16931477", "mag": 1.1, "time": 1506601302752, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8998, 65.8646, 6.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900496", "mag": 1.36, "time": 1506601178090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.88, 37.535, 2.88 ] } },
+ { "type": "Feature", "properties": { "id": "ak16931475", "mag": 1.2, "time": 1506600842484, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.174, 61.7151, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900446", "mag": 2.75, "time": 1506598677940, "felt": 11, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.825333, 38.840167, 1.73 ] } },
+ { "type": "Feature", "properties": { "id": "ak16930710", "mag": 2.2, "time": 1506598490657, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.4189, 62.1612, 87.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avvw", "mag": 5.3, "time": 1506598185690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 140.558, 28.7786, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989610", "mag": 1.2, "time": 1506597726479, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.1805, 63.0271, 90.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900431", "mag": 1.92, "time": 1506596753080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.485667, 38.5015, 5.55 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989609", "mag": 1.5, "time": 1506596722964, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.1313, 51.5863, 44.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16930709", "mag": 1.4, "time": 1506596180091, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9834, 61.0931, 56.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16930708", "mag": 3.1, "time": 1506595515294, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 176.7195, 51.6195, 25.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989606", "mag": 1.5, "time": 1506595427986, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.5238, 51.5739, 68.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900416", "mag": 1.17, "time": 1506594935360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.096, 36.553167, 9.44 ] } },
+ { "type": "Feature", "properties": { "id": "ak16930706", "mag": 1.2, "time": 1506593895889, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.338, 63.1851, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38012984", "mag": 1.12, "time": 1506593315340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.6855, 35.838833, 4.14 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900391", "mag": 1.49, "time": 1506592222290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.823333, 37.607, 4.05 ] } },
+ { "type": "Feature", "properties": { "id": "ak16930705", "mag": 1.1, "time": 1506591630653, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.3689, 61.3755, 23.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci38012952", "mag": 1.31, "time": 1506591135600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.834333, 32.734667, 5.37 ] } },
+ { "type": "Feature", "properties": { "id": "hv61924526", "mag": 1.45, "time": 1506590418070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.421333, 19.392167, 9.534 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900381", "mag": 1.63, "time": 1506590284210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.2205, 38.063167, 9.05 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avu4", "mag": 4.4, "time": 1506589563580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -66.6261, -23.7242, 196.73 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989602", "mag": 2.7, "time": 1506589434755, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -170.4192, 52.1877, 22.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci38012928", "mag": 1.18, "time": 1506589107820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.7675, 33.325167, 12.65 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989601", "mag": 1.5, "time": 1506589104993, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4957, 51.6758, 15.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16929945", "mag": 2.3, "time": 1506588754779, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.7058, 62.131, 34.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16929940", "mag": 2.6, "time": 1506588542400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.6191, 66.8364, 10.5 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607351", "mag": 1.4, "time": 1506588343442, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9118, 38.3801, 6.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16929936", "mag": 2.0, "time": 1506587984225, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.4437, 61.9903, 29.6 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258129", "mag": 1.62, "time": 1506587784100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.525167, 46.868167, 10.62 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900351", "mag": 1.19, "time": 1506586386820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.880833, 37.536333, 3.07 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avte", "mag": 4.7, "time": 1506586379850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 117.1706, -10.7291, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avtg", "mag": 5.3, "time": 1506586316130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 145.2449, 20.2657, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16929174", "mag": 2.3, "time": 1506586272361, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.7694, 61.6101, 47.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900346", "mag": 1.18, "time": 1506586053100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.823, 37.610167, 4.21 ] } },
+ { "type": "Feature", "properties": { "id": "uw61334586", "mag": 2.19, "time": 1506585933680, "felt": 9, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.6315, 48.074, -0.77 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607345", "mag": 1.8, "time": 1506585602623, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.6237, 38.7874, 8.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16929171", "mag": 1.6, "time": 1506585414754, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.1681, 58.2365, 0.7 ] } },
+ { "type": "Feature", "properties": { "id": "hv61924441", "mag": 1.7, "time": 1506585350220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.865167, 19.430333, 13.243 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900326", "mag": 1.41, "time": 1506585322460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.751, 38.783, 2.58 ] } },
+ { "type": "Feature", "properties": { "id": "ak16929167", "mag": 2.4, "time": 1506585219017, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.0108, 65.3932, 8.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16929164", "mag": 1.6, "time": 1506585151006, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.7632, 61.6155, 48.1 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607342", "mag": 1.4, "time": 1506584922597, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.6325, 38.7911, 6.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16929162", "mag": 1.5, "time": 1506584839080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.6957, 59.8727, 1.2 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258114", "mag": 1.59, "time": 1506584469140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.525167, 46.867333, 10.81 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258109", "mag": 1.16, "time": 1506584073450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.53, 46.878167, 13.02 ] } },
+ { "type": "Feature", "properties": { "id": "ci38012872", "mag": 1.17, "time": 1506583959450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.817833, 34.8665, 6.68 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989588", "mag": 1.8, "time": 1506583466047, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.2642, 60.2053, 132.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awdi", "mag": 1.5, "time": 1506583342200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -69.1659, 45.241, 4.82 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avsq", "mag": 4.8, "time": 1506582689240, "felt": 6, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 141.4054, 37.4649, 44.08 ] } },
+ { "type": "Feature", "properties": { "id": "ak16928412", "mag": 1.8, "time": 1506582059678, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -159.6189, 67.5652, 16.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16928397", "mag": 2.0, "time": 1506580602424, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.1188, 61.1485, 13.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16928399", "mag": 1.1, "time": 1506580596261, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.8057, 66.0421, 6.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900281", "mag": 1.14, "time": 1506579131440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.88, 37.5365, 3.19 ] } },
+ { "type": "Feature", "properties": { "id": "ak16928394", "mag": 1.6, "time": 1506578908430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.0895, 61.7515, 17.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci38012840", "mag": 0.96, "time": 1506578825230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.767667, 36.025167, 1.05 ] } },
+ { "type": "Feature", "properties": { "id": "ci38012832", "mag": 1.0, "time": 1506578679490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.884833, 33.846833, 11.18 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249902", "mag": 1.26, "time": 1506578472190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.285833, 41.514167, 1.58 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249897", "mag": 1.56, "time": 1506578161990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4205, 42.5195, 5.83 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989578", "mag": 1.2, "time": 1506577617968, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.0285, 60.9615, 99.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16927642", "mag": 2.5, "time": 1506576956542, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.4519, 60.4702, 49.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16927639", "mag": 1.1, "time": 1506575989243, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.9371, 64.4345, 12.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avrg", "mag": 4.2, "time": 1506575321430, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.9228, 16.6784, 58.25 ] } },
+ { "type": "Feature", "properties": { "id": "ak16927634", "mag": 1.4, "time": 1506574806948, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9601, 61.6771, 57.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avr9", "mag": 3.0, "time": 1506574593800, "felt": 16, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -96.8025, 35.9915, 5.225 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900251", "mag": 1.08, "time": 1506573201460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.876833, 37.531833, 2.55 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989573", "mag": 1.0, "time": 1506573124099, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.1846, 68.5953, 17.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900241", "mag": 2.37, "time": 1506572664450, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8255, 37.454833, 2.13 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900236", "mag": 1.11, "time": 1506572038110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.088333, 36.5915, 6.51 ] } },
+ { "type": "Feature", "properties": { "id": "ak16927631", "mag": 2.2, "time": 1506572029624, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 178.6248, 51.535, 13.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989570", "mag": 1.3, "time": 1506571605724, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.1124, 61.418, 10.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avr1", "mag": 2.8, "time": 1506571358890, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.1712, 37.3741, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avqw", "mag": 3.2, "time": 1506571014630, "felt": 6, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.1535, 37.3739, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avr2", "mag": 4.9, "time": 1506570988200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 151.8102, -5.2471, 64.55 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900206", "mag": 1.12, "time": 1506569953990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.878833, 37.5315, 2.34 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900201", "mag": 1.78, "time": 1506569868050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.191167, 36.174833, 16.31 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258089", "mag": 0.96, "time": 1506568483250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5215, 46.872833, 14.45 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900166", "mag": 1.94, "time": 1506568350160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.970833, 36.399167, 0.33 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900156", "mag": 1.95, "time": 1506567041430, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8805, 37.535167, 2.92 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607321", "mag": 1.0, "time": 1506566989487, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.0173, 39.5809, 8.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci38012696", "mag": 1.54, "time": 1506566359150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.3855, 33.309667, 7.18 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926883", "mag": 1.4, "time": 1506564828219, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7449, 64.3314, 9.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926881", "mag": 1.6, "time": 1506563449576, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.7299, 60.5992, 21.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avqf", "mag": 3.5, "time": 1506563003590, "felt": 11, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -1.5206, 47.8948, 7.47 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avq4", "mag": 3.4, "time": 1506562916490, "felt": 8, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -83.8862, 9.972, 12.77 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926876", "mag": 1.5, "time": 1506562750811, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2038, 62.3276, 80.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989563", "mag": 2.4, "time": 1506562282380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -174.5433, 52.3165, 175.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci38012648", "mag": 1.44, "time": 1506561221540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.9255, 33.975833, 5.98 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989561", "mag": 1.2, "time": 1506560682030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.3529, 60.5442, 7.3 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249877", "mag": 2.9, "time": 1506560508370, "felt": 9, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.946, 38.905, 8.36 ] } },
+ { "type": "Feature", "properties": { "id": "ci38012624", "mag": 1.0, "time": 1506559691050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.812, 36.016833, 1.28 ] } },
+ { "type": "Feature", "properties": { "id": "ci38012616", "mag": 1.66, "time": 1506559333880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.939667, 33.686667, 9.17 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926874", "mag": 1.3, "time": 1506559196699, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.5701, 61.4562, 64.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900121", "mag": 1.32, "time": 1506558055260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.2635, 39.396667, 0.45 ] } },
+ { "type": "Feature", "properties": { "id": "ak16989559", "mag": 1.0, "time": 1506557933118, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.9128, 61.7015, 46.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci38012608", "mag": 1.47, "time": 1506557437030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.089667, 35.6985, 2.41 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900106", "mag": 1.15, "time": 1506556889810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.794, 38.821167, 2.63 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607313", "mag": 1.3, "time": 1506556883650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.1041, 37.378, 3.6 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258084", "mag": 1.57, "time": 1506556538250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.526333, 46.874833, 14.66 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607310", "mag": 1.6, "time": 1506556172753, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.059, 37.1112, 7.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926873", "mag": 1.3, "time": 1506556116361, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.4042, 53.8015, 12.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900096", "mag": 1.12, "time": 1506556022400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.731667, 38.760166, 1.18 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988195", "mag": 1.9, "time": 1506555035171, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0633, 60.0089, 114.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avn9", "mag": 4.2, "time": 1506555004800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 119.4365, -8.2451, 154.02 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900086", "mag": 1.16, "time": 1506554882180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.738335, 38.755333, 0.36 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926134", "mag": 1.1, "time": 1506554881350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.2845, 60.8545, 21.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988193", "mag": 1.0, "time": 1506554670593, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.1097, 62.4437, 13.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926036", "mag": 1.3, "time": 1506554241873, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.6125, 61.555, 35.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900081", "mag": 1.22, "time": 1506554024900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.832, 37.5385, 4.78 ] } },
+ { "type": "Feature", "properties": { "id": "ci38012576", "mag": 1.27, "time": 1506553539380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.392833, 34.878667, 4.66 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926028", "mag": 1.6, "time": 1506553116940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -159.5885, 67.5732, 17.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci38012568", "mag": 1.61, "time": 1506552976740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.758833, 33.666667, 13.28 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926026", "mag": 1.6, "time": 1506552344260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.6143, 63.0496, 5.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988188", "mag": 1.0, "time": 1506552342400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.0102, 64.7419, 2.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926025", "mag": 1.7, "time": 1506551886678, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4287, 51.666, 13.3 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249842", "mag": 1.14, "time": 1506551770950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.297667, 41.517833, 3.93 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926021", "mag": 1.0, "time": 1506550963839, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.7318, 63.2463, 16.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci38012528", "mag": 1.36, "time": 1506549674520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.792167, 33.505667, 5.04 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avlw", "mag": 4.5, "time": 1506549399140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 123.4716, 24.998, 125.83 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988184", "mag": 1.9, "time": 1506549387020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.4366, 51.4823, 54.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900041", "mag": 1.15, "time": 1506549261590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.745331, 38.788502, 0.88 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249832", "mag": 1.22, "time": 1506548944800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.294333, 41.516333, 2.01 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avm6", "mag": 4.7, "time": 1506548861390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 140.5824, 28.7476, 33.11 ] } },
+ { "type": "Feature", "properties": { "id": "hv61923721", "mag": 1.68, "time": 1506548248460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.233167, 19.411667, 26.335 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988183", "mag": 1.1, "time": 1506547027410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.5065, 62.8856, 85.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988182", "mag": 1.3, "time": 1506546817449, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3499, 60.4052, 65.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avkb", "mag": 4.8, "time": 1506546638200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 140.5529, 28.769, 38.59 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avk0", "mag": 4.4, "time": 1506545901120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -73.9242, -10.8691, 104.23 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900011", "mag": 1.24, "time": 1506545494440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.7435, 38.775167, 0.33 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258059", "mag": 1.99, "time": 1506545099310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.533833, 46.865333, 12.52 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988181", "mag": 1.9, "time": 1506544970602, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.5993, 58.8739, 125.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc71107599", "mag": 1.73, "time": 1506544649060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.852333, 36.770333, 5.22 ] } },
+ { "type": "Feature", "properties": { "id": "nc72900001", "mag": 1.02, "time": 1506544641500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.307333, 35.890833, 9.61 ] } },
+ { "type": "Feature", "properties": { "id": "uw61334351", "mag": 1.62, "time": 1506543856900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.103667, 46.818167, -0.37 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avim", "mag": 4.5, "time": 1506542712990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -71.6095, -15.1614, 131.74 ] } },
+ { "type": "Feature", "properties": { "id": "ak16924547", "mag": 1.3, "time": 1506542654107, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.6538, 61.2784, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899976", "mag": 1.46, "time": 1506542639270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.024, 37.520333, 2.59 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988179", "mag": 1.4, "time": 1506542327610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.9637, 61.5729, 96.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988178", "mag": 1.2, "time": 1506541938004, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.1366, 60.2787, 53.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16924544", "mag": 1.5, "time": 1506541523210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.1298, 59.8511, 15.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16924540", "mag": 3.0, "time": 1506540667871, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -179.8525, 51.0507, 13.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16924539", "mag": 1.3, "time": 1506540652841, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -138.178, 61.5488, 2.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci38012400", "mag": 0.98, "time": 1506540581720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.481833, 33.471167, 13.16 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988174", "mag": 1.1, "time": 1506540333948, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.501, 61.2429, 47.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci38012384", "mag": 1.3, "time": 1506539422810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.197, 34.992, -0.84 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258049", "mag": 1.59, "time": 1506539240620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.472833, 46.002167, -2.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899931", "mag": 1.55, "time": 1506538588360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.4435, 38.569833, 7.29 ] } },
+ { "type": "Feature", "properties": { "id": "ci38012368", "mag": 1.32, "time": 1506538425860, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.193167, 34.018167, 9.75 ] } },
+ { "type": "Feature", "properties": { "id": "ci38012360", "mag": 1.78, "time": 1506537986730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.929, 33.395, 16.07 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258044", "mag": 1.34, "time": 1506537974910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.524833, 46.870667, 11.9 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258039", "mag": 1.67, "time": 1506537644220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.525, 46.873167, 11.84 ] } },
+ { "type": "Feature", "properties": { "id": "ci38012352", "mag": 1.26, "time": 1506537396500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.313333, 35.0755, -0.97 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988173", "mag": 2.5, "time": 1506536259670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.2174, 55.267, 28.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16923724", "mag": 1.8, "time": 1506535852212, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.5095, 57.4219, 64.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38012280", "mag": 1.04, "time": 1506535593850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.8595, 37.1805, -1.52 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258024", "mag": 1.14, "time": 1506535428310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.542833, 46.867, 15.39 ] } },
+ { "type": "Feature", "properties": { "id": "ak16923723", "mag": 1.8, "time": 1506535251777, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.8081, 59.8933, 18.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899896", "mag": 1.43, "time": 1506534720980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.1055, 37.325167, -0.31 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607242", "mag": 1.3, "time": 1506533616061, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.8105, 37.3086, 1.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16922991", "mag": 1.3, "time": 1506533488405, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0074, 62.0045, 73.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16922987", "mag": 1.8, "time": 1506533174170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.1276, 62.1421, 107.7 ] } },
+ { "type": "Feature", "properties": { "id": "mb80258019", "mag": 1.36, "time": 1506533071220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.9895, 46.553167, -2.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38012256", "mag": 1.4, "time": 1506532727840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.796333, 33.501667, 4.58 ] } },
+ { "type": "Feature", "properties": { "id": "ak16922978", "mag": 3.9, "time": 1506532451736, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.5261, 52.9317, 19.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16922973", "mag": 1.3, "time": 1506532279574, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.0546, 62.1579, 12.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16922968", "mag": 2.2, "time": 1506532267245, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0431, 59.4743, 92.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16922975", "mag": 1.9, "time": 1506532266486, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.1368, 59.6598, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16922963", "mag": 1.1, "time": 1506530768012, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.1018, 64.1209, 3.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16924550", "mag": 2.4, "time": 1506530256430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.6494, 52.9731, 12.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avec", "mag": 2.6, "time": 1506529974600, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.0737, 44.3257, 12.14 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899871", "mag": 1.08, "time": 1506529473980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.836, 37.569167, 1.23 ] } },
+ { "type": "Feature", "properties": { "id": "ci38012176", "mag": 1.03, "time": 1506529247980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.795833, 33.502, 4.86 ] } },
+ { "type": "Feature", "properties": { "id": "ak16922238", "mag": 1.6, "time": 1506529055903, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.7065, 67.422, 11.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899866", "mag": 1.85, "time": 1506528932600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.995833, 39.432667, 3.11 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ave0", "mag": 4.1, "time": 1506528488760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 119.9926, -7.5373, 611.74 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avdr", "mag": 4.1, "time": 1506527126210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 129.0234, -7.2935, 121.06 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899831", "mag": 1.23, "time": 1506526130580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.231667, 35.611, 3.55 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988160", "mag": 1.6, "time": 1506525379416, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.9254, 58.9648, 66.9 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257999", "mag": 1.8, "time": 1506524825390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.533333, 46.866, 13.41 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899816", "mag": 1.11, "time": 1506524218360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.989167, 37.558167, 1.34 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988159", "mag": 1.2, "time": 1506524092965, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.7404, 58.8609, 4.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci38012112", "mag": 1.73, "time": 1506523530510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.417833, 34.440833, 0.65 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899796", "mag": 0.95, "time": 1506523499180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8715, 37.492667, 3.48 ] } },
+ { "type": "Feature", "properties": { "id": "ak16921504", "mag": 1.8, "time": 1506522635679, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3466, 59.8103, 47.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988157", "mag": 1.5, "time": 1506522267480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.561, 57.6875, 76.6 ] } },
+ { "type": "Feature", "properties": { "id": "uw61311512", "mag": 1.06, "time": 1506522173600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.941333, 47.1825, 15.72 ] } },
+ { "type": "Feature", "properties": { "id": "ak16920785", "mag": 2.4, "time": 1506522058371, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.3316, 56.7652, 41.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16920784", "mag": 1.4, "time": 1506521703637, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.533, 60.0761, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "hv61923421", "mag": 1.78, "time": 1506521436470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.401167, 19.199167, 32.961 ] } },
+ { "type": "Feature", "properties": { "id": "ak16920775", "mag": 2.0, "time": 1506520826084, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.649, 61.9693, 57.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16920772", "mag": 2.0, "time": 1506520439615, "felt": 0, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.2196, 59.6108, 85.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16920758", "mag": 2.9, "time": 1506520230887, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.3755, 61.9643, 42.4 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257989", "mag": 1.28, "time": 1506520220400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5215, 46.870167, 11.81 ] } },
+ { "type": "Feature", "properties": { "id": "ak16920757", "mag": 1.0, "time": 1506520046138, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.5503, 65.1678, 11.6 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607209", "mag": 1.5, "time": 1506519994705, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.7233, 40.1708, 10.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci38012040", "mag": 1.13, "time": 1506519953180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.935333, 34.4565, 9.26 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899776", "mag": 1.01, "time": 1506519567480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.840667, 37.5315, -1.51 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899766", "mag": 1.77, "time": 1506519075660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.243667, 39.398333, 12.87 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899761", "mag": 1.35, "time": 1506518981970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.745833, 38.784333, 1.01 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avce", "mag": 2.7, "time": 1506518011840, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.555, 46.8463, 8.48 ] } },
+ { "type": "Feature", "properties": { "id": "ak16920754", "mag": 2.5, "time": 1506517941863, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 179.4288, 51.3519, 42.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16920753", "mag": 1.2, "time": 1506517783977, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.1318, 60.4494, 8.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16920743", "mag": 2.6, "time": 1506516302533, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.0235, 61.6238, 41.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988145", "mag": 1.2, "time": 1506515748862, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9213, 61.1389, 61.5 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257979", "mag": 1.95, "time": 1506514222430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.528667, 46.869667, 13.01 ] } },
+ { "type": "Feature", "properties": { "id": "ak16920741", "mag": 1.4, "time": 1506513863630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.4582, 62.4107, 39.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16920740", "mag": 2.1, "time": 1506513265227, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -168.2773, 65.177, 2.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16920737", "mag": 1.4, "time": 1506513028050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.1779, 58.0206, 30.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16920020", "mag": 1.9, "time": 1506512934355, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -135.4027, 59.1963, 7.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16920019", "mag": 1.3, "time": 1506511124207, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.9174, 59.9564, 76.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011952", "mag": 1.07, "time": 1506511069520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.789667, 33.489167, 5.35 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257974", "mag": 1.33, "time": 1506510967360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.526833, 46.881, 13.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avaw", "mag": 2.7, "time": 1506509852090, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -103.2764, 31.1697, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899726", "mag": 1.29, "time": 1506508915160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.809, 38.828833, 0.37 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899721", "mag": 1.52, "time": 1506508865060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.074167, 36.490333, 6.54 ] } },
+ { "type": "Feature", "properties": { "id": "ak16920017", "mag": 1.5, "time": 1506508671618, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.664, 59.7325, 12.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899716", "mag": 1.33, "time": 1506507368050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.621833, 36.9715, 5.05 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988138", "mag": 1.5, "time": 1506506488102, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.3194, 60.198, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899711", "mag": 1.1, "time": 1506506346060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.830667, 37.480333, -1.14 ] } },
+ { "type": "Feature", "properties": { "id": "ak16920009", "mag": 1.7, "time": 1506506054796, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.8154, 59.9932, 104.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988136", "mag": 1.4, "time": 1506505999692, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.1528, 59.8387, 71.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16920005", "mag": 1.7, "time": 1506505194635, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.0126, 61.1428, 12.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16920003", "mag": 1.3, "time": 1506504555844, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.6373, 60.4592, 9.8 ] } },
+ { "type": "Feature", "properties": { "id": "hv61923186", "mag": 1.49, "time": 1506503971290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.2035, 19.597167, 24.581 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607200", "mag": 1.3, "time": 1506503935311, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.2622, 38.0846, 9.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000av9q", "mag": 3.0, "time": 1506503712310, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -103.2693, 31.1511, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899701", "mag": 1.06, "time": 1506503394340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.819167, 37.604333, 4.32 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257964", "mag": 1.06, "time": 1506503136100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.529667, 46.8705, 10.5 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249807", "mag": 1.65, "time": 1506503101030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.067, 42.665833, 6.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011904", "mag": 1.21, "time": 1506502961890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.0485, 33.171333, 5.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000av9i", "mag": 4.2, "time": 1506502867800, "felt": 8, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -71.3374, -29.45, 38.77 ] } },
+ { "type": "Feature", "properties": { "id": "ak16919291", "mag": 2.0, "time": 1506502630723, "felt": 6, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -135.4344, 59.1851, 6.2 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249797", "mag": 1.72, "time": 1506502497570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.061667, 42.664667, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011896", "mag": 1.37, "time": 1506502201400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.052, 33.172, 6.03 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011880", "mag": 1.16, "time": 1506501606110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.542667, 32.944667, 6.67 ] } },
+ { "type": "Feature", "properties": { "id": "us2000av94", "mag": 4.6, "time": 1506500888720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 54.1871, 28.1091, 45.31 ] } },
+ { "type": "Feature", "properties": { "id": "ak16919288", "mag": 1.0, "time": 1506500817789, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.4269, 65.2147, 15.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988130", "mag": 2.0, "time": 1506500078029, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 179.5053, 51.0555, 12.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc71107564", "mag": 1.29, "time": 1506499044330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.570833, 38.927167, 9.62 ] } },
+ { "type": "Feature", "properties": { "id": "us2000av8z", "mag": 4.3, "time": 1506498944880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -179.1801, -21.2747, 610.22 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899666", "mag": 1.1, "time": 1506498551180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8395, 37.568167, 1.44 ] } },
+ { "type": "Feature", "properties": { "id": "ak16918579", "mag": 1.9, "time": 1506498372082, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.5535, 59.8103, 129.5 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70235883", "mag": 1.79, "time": 1506498339870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.776167, 37.332333, 4.84 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899656", "mag": 1.07, "time": 1506497879900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.818169, 38.816334, 2.44 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988128", "mag": 1.7, "time": 1506497626569, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.5074, 58.9707, 125.1 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607194", "mag": 1.4, "time": 1506496907372, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.0035, 38.4922, 2.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16918577", "mag": 2.4, "time": 1506495198173, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -175.3064, 51.5599, 38.1 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607192", "mag": 1.3, "time": 1506495045147, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.1202, 38.2811, 9.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16917880", "mag": 1.4, "time": 1506494125518, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.4062, 59.5783, 46.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011824", "mag": 2.15, "time": 1506493452570, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.377, 34.425667, 6.94 ] } },
+ { "type": "Feature", "properties": { "id": "ak16917877", "mag": 1.0, "time": 1506493181446, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.74, 66.8722, 13.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988124", "mag": 2.0, "time": 1506492309885, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -179.6222, 51.5723, 70.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16917874", "mag": 1.0, "time": 1506491782705, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.3009, 62.1686, 20.4 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70235878", "mag": 1.72, "time": 1506491740260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.966167, 37.277667, 3.84 ] } },
+ { "type": "Feature", "properties": { "id": "ak16917871", "mag": 2.2, "time": 1506491690990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.227, 67.4203, 2.2 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257949", "mag": 1.15, "time": 1506491507770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.53, 46.8695, 10.41 ] } },
+ { "type": "Feature", "properties": { "id": "ak16917866", "mag": 2.4, "time": 1506491501818, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.2772, 62.1792, 19.3 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70235873", "mag": 2.14, "time": 1506491075330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.886, 37.201833, 5.78 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257939", "mag": 1.58, "time": 1506490489800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.536833, 46.867667, 13.76 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607189", "mag": 1.5, "time": 1506490367737, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.114, 38.2859, 6.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011800", "mag": 2.36, "time": 1506490230430, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.3735, 34.4205, 2.68 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011808", "mag": 1.19, "time": 1506490229680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.296833, 33.257333, 11.15 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899631", "mag": 1.3, "time": 1506489660140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.492333, 37.643167, 10.59 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011776", "mag": 1.48, "time": 1506489097510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.050333, 33.1715, 3.79 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011760", "mag": 1.09, "time": 1506488442000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.1045, 34.032667, 6.24 ] } },
+ { "type": "Feature", "properties": { "id": "ak16917162", "mag": 1.2, "time": 1506488287570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.7916, 59.8749, 12.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16917160", "mag": 1.7, "time": 1506488119627, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.8594, 59.8596, 52.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011736", "mag": 1.35, "time": 1506488015210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.011667, 33.275333, 2.98 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011728", "mag": 1.28, "time": 1506487875520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.796667, 33.492, 4.46 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011720", "mag": 2.62, "time": 1506487715700, "felt": 25, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.372333, 34.4215, 3.6 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249762", "mag": 1.11, "time": 1506487228770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.7735, 44.765667, 7.75 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899586", "mag": 2.03, "time": 1506485795570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.784333, 38.836667, 1.36 ] } },
+ { "type": "Feature", "properties": { "id": "us2000av7z", "mag": 5.3, "time": 1506485581610, "felt": 2, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 139.7504, -3.5926, 60.39 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607179", "mag": 1.2, "time": 1506485505469, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.6245, 38.788, 6.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000av80", "mag": 5.0, "time": 1506485392430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -43.5388, 28.7234, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000av7x", "mag": 2.7, "time": 1506485373140, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -103.2078, 31.1233, 1.49 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899571", "mag": 1.02, "time": 1506485084470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.004333, 37.796167, 1.79 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988118", "mag": 1.8, "time": 1506483937222, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.399, 51.7067, 17.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16916451", "mag": 1.9, "time": 1506483073029, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0454, 59.6347, 103.9 ] } },
+ { "type": "Feature", "properties": { "id": "uw61311302", "mag": 2.23, "time": 1506482912030, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.555, 44.547167, 12.72 ] } },
+ { "type": "Feature", "properties": { "id": "uw61311297", "mag": 1.11, "time": 1506482481740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.683, 45.372667, -1.63 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011704", "mag": 1.57, "time": 1506482455900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.519833, 32.888, 10.14 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988116", "mag": 2.0, "time": 1506482397355, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.3801, 51.6434, 13.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899551", "mag": 1.76, "time": 1506481720510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.880667, 38.659333, 5.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16915757", "mag": 1.4, "time": 1506480400030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.6852, 64.9151, 3.6 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607173", "mag": 1.2, "time": 1506479979561, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.4858, 38.7006, 5.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000av7a", "mag": 2.7, "time": 1506479406560, "felt": 8, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.8806, 37.2184, 2.69 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988114", "mag": 1.6, "time": 1506479371570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 179.3827, 51.4303, 27.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011664", "mag": 1.8, "time": 1506478585030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.628167, 35.076167, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16915754", "mag": 2.0, "time": 1506478364486, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.3878, 61.6649, 31.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16915750", "mag": 1.2, "time": 1506477958824, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.6683, 62.8518, 73.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16915745", "mag": 1.8, "time": 1506477442438, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.6565, 53.4796, 20.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000av70", "mag": 4.7, "time": 1506476740040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -68.4332, -21.409, 120.07 ] } },
+ { "type": "Feature", "properties": { "id": "ak16915060", "mag": 1.3, "time": 1506476367132, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7491, 63.2266, 126.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000av6x", "mag": 4.7, "time": 1506475551840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 126.6287, 4.6053, 83.93 ] } },
+ { "type": "Feature", "properties": { "id": "ak16915057", "mag": 2.4, "time": 1506475504238, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.2738, 57.0675, 69.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011648", "mag": 2.25, "time": 1506474971480, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.7765, 33.325667, 11.63 ] } },
+ { "type": "Feature", "properties": { "id": "nm60207341", "mag": 1.82, "time": 1506473928680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -89.549667, 36.4815, 9.25 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988107", "mag": 1.9, "time": 1506471772798, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4471, 51.7337, 16.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988106", "mag": 1.6, "time": 1506471697831, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.0762, 58.2594, 21.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b1dn", "mag": 4.3, "time": 1506471581400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 142.4161, 40.39, 49.52 ] } },
+ { "type": "Feature", "properties": { "id": "ak16915048", "mag": 1.6, "time": 1506471507429, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7558, 60.1282, 31.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16914368", "mag": 1.9, "time": 1506469962223, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.0546, 60.9937, 12.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000av6e", "mag": 4.8, "time": 1506469452030, "felt": 11, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 145.0971, 14.1324, 113.77 ] } },
+ { "type": "Feature", "properties": { "id": "ak16914364", "mag": 1.0, "time": 1506469276260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.0231, 64.8914, 16.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011608", "mag": 1.21, "time": 1506468838030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.792667, 33.506, 6.88 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949369", "mag": 1.0, "time": 1506468623879, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.2412, 61.8508, 14.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899501", "mag": 0.98, "time": 1506468157640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.873833, 37.624833, 2.99 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011600", "mag": 1.67, "time": 1506468079690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.679333, 35.033667, -0.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b02y", "mag": 4.2, "time": 1506467949880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.2432, 15.0466, 41.01 ] } },
+ { "type": "Feature", "properties": { "id": "ak16914361", "mag": 1.9, "time": 1506467622189, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.6178, 65.1477, 10.9 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257914", "mag": 1.23, "time": 1506467597640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.632, 46.8715, 5.29 ] } },
+ { "type": "Feature", "properties": { "id": "ak16914358", "mag": 1.0, "time": 1506466926514, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3996, 64.9811, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16914359", "mag": 1.0, "time": 1506466913331, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.0673, 63.4886, 10.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899481", "mag": 1.12, "time": 1506466887280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.808502, 38.832001, 1.23 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949365", "mag": 1.7, "time": 1506466403289, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.9009, 59.9001, 97.4 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607152", "mag": 1.1, "time": 1506466364846, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.6252, 38.7877, 5.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000av5w", "mag": 4.8, "time": 1506465046570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -11.6494, -2.0113, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "uw61311237", "mag": 2.77, "time": 1506464518680, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.953167, 44.251833, 24.14 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011536", "mag": 1.75, "time": 1506464439110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.304167, 33.253667, 10.84 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011520", "mag": 1.59, "time": 1506463692350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.216, 33.010333, 6.85 ] } },
+ { "type": "Feature", "properties": { "id": "us2000av56", "mag": 4.2, "time": 1506463598300, "felt": 37, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -72.2376, -31.7843, 7.09 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607136", "mag": 2.8, "time": 1506462799119, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.6217, 38.7826, 6.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011488", "mag": 1.81, "time": 1506462726380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.750667, 33.516333, 3.18 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899441", "mag": 2.97, "time": 1506462683270, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -127.0155, 40.263833, 11.96 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949362", "mag": 1.6, "time": 1506462418457, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0128, 59.6612, 95.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949359", "mag": 1.6, "time": 1506461654966, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.3493, 59.8886, 123.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000av40", "mag": 5.4, "time": 1506461346270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -179.9476, -23.5856, 538.01 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899416", "mag": 1.3, "time": 1506461324290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.810333, 38.8215, 0.97 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257904", "mag": 0.95, "time": 1506461125950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.496, 46.8605, 16.29 ] } },
+ { "type": "Feature", "properties": { "id": "ak16913020", "mag": 1.1, "time": 1506460729533, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0111, 65.8632, 12.1 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257894", "mag": 1.08, "time": 1506460594630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.515167, 43.545833, 12.83 ] } },
+ { "type": "Feature", "properties": { "id": "ak16913017", "mag": 1.8, "time": 1506459899986, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.56, 59.8031, 16.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16913011", "mag": 1.9, "time": 1506459063460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.6788, 61.3357, 16.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899391", "mag": 1.35, "time": 1506458512440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.735333, 38.789833, 1.23 ] } },
+ { "type": "Feature", "properties": { "id": "hv61922451", "mag": 1.7, "time": 1506458350950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.471167, 19.227667, 34.865 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899386", "mag": 1.89, "time": 1506458341570, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.609667, 36.888333, 1.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000av31", "mag": 5.8, "time": 1506457331560, "felt": 45, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 142.4059, 40.3206, 36.04 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949355", "mag": 1.3, "time": 1506457099270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.1826, 62.1538, 80.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000av2y", "mag": 2.6, "time": 1506456843780, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.9668, 37.2773, 4.05 ] } },
+ { "type": "Feature", "properties": { "id": "ak16912327", "mag": 2.1, "time": 1506456421978, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.8619, 59.5574, 79.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16912325", "mag": 1.6, "time": 1506456406002, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.0714, 61.2493, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16912323", "mag": 1.4, "time": 1506455786083, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6417, 63.0711, 110.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899366", "mag": 1.19, "time": 1506455697960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.989167, 35.677333, -0.35 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257869", "mag": 1.78, "time": 1506455523560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.4975, 46.900667, 11.16 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899361", "mag": 1.14, "time": 1506455417130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.6625, 36.100833, 0.94 ] } },
+ { "type": "Feature", "properties": { "id": "uw61311182", "mag": 1.51, "time": 1506454723910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.398833, 46.488167, 17.99 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011384", "mag": 1.37, "time": 1506454231340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.897333, 32.7725, -0.37 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257864", "mag": 1.46, "time": 1506454190410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.413167, 45.912833, -2.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011376", "mag": 1.05, "time": 1506454146060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.797167, 33.509, 6.71 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607108", "mag": 1.0, "time": 1506454067433, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.4885, 38.5144, 10.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16912305", "mag": 1.2, "time": 1506453243306, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.4352, 61.6115, 33.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000av22", "mag": 5.4, "time": 1506452898220, "felt": null, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 132.7412, 1.2169, 17.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899341", "mag": 0.98, "time": 1506452133100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.783165, 38.837833, 0.59 ] } },
+ { "type": "Feature", "properties": { "id": "us2000av1t", "mag": 4.3, "time": 1506452028320, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.6352, 16.5993, 104.33 ] } },
+ { "type": "Feature", "properties": { "id": "ak16911656", "mag": 1.1, "time": 1506451444842, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9798, 65.8633, 10.8 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257849", "mag": 1.17, "time": 1506451369960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.531667, 46.869333, 10.26 ] } },
+ { "type": "Feature", "properties": { "id": "ak16911652", "mag": 1.7, "time": 1506451256386, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.2303, 62.9438, 64.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899331", "mag": 1.39, "time": 1506451169180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.46, 37.983333, -0.05 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949348", "mag": 1.2, "time": 1506450622498, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9789, 62.4498, 80.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899311", "mag": 1.66, "time": 1506450429900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.811, 38.812, 2.48 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011328", "mag": 1.82, "time": 1506450379870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.7965, 33.5035, 6.49 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011320", "mag": 1.66, "time": 1506450370460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.948, 35.292167, 17.31 ] } },
+ { "type": "Feature", "properties": { "id": "hv61922336", "mag": 3.25, "time": 1506450097970, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.231, 19.290833, 8.96 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949347", "mag": 1.4, "time": 1506449901001, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.1914, 59.4295, 70.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011304", "mag": 1.2, "time": 1506449584430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.813667, 36.025833, 1.31 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011296", "mag": 0.98, "time": 1506449444340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.8115, 36.028167, 0.41 ] } },
+ { "type": "Feature", "properties": { "id": "ak16911638", "mag": 2.2, "time": 1506449441975, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.1385, 62.9479, 63.9 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257844", "mag": 1.11, "time": 1506448956940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.532, 46.8605, 12.58 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949345", "mag": 1.5, "time": 1506448347584, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.8207, 61.1514, 89.2 ] } },
+ { "type": "Feature", "properties": { "id": "uw61311142", "mag": 1.41, "time": 1506448094510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.884, 43.419667, -0.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899291", "mag": 1.2, "time": 1506447644460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.291667, 36.660333, 3.36 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949344", "mag": 2.0, "time": 1506446368069, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -161.7955, 55.6327, 123.4 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257839", "mag": 1.6, "time": 1506446229250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.530333, 46.872167, 11.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949343", "mag": 1.8, "time": 1506445879278, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.0092, 56.5802, 60.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16910871", "mag": 2.2, "time": 1506445763160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.3757, 60.912, 119.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16910870", "mag": 1.2, "time": 1506445355025, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.837, 62.5503, 9.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949340", "mag": 1.4, "time": 1506445236601, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.4629, 59.6817, 72.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16910864", "mag": 1.6, "time": 1506444383456, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.3694, 61.142, 20.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16910865", "mag": 1.1, "time": 1506444338515, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.0798, 62.3953, 8.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16910858", "mag": 2.0, "time": 1506443746387, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.5248, 63.5317, 72.7 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249707", "mag": 1.38, "time": 1506443129640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.442, 42.558833, 7.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011192", "mag": 1.03, "time": 1506442702510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.823833, 33.4855, 7.53 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899266", "mag": 1.49, "time": 1506442696750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.809833, 37.472833, 3.95 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257829", "mag": 1.46, "time": 1506441830940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.498, 46.901167, 10.66 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903841", "mag": 1.48, "time": 1506440751200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.182167, 40.8515, 3.06 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249692", "mag": 1.82, "time": 1506439249930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.139833, 42.7365, 4.13 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011112", "mag": 2.13, "time": 1506439108770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.289833, 33.302833, 10.93 ] } },
+ { "type": "Feature", "properties": { "id": "us2000auyd", "mag": 2.6, "time": 1506439089180, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4364, 42.61, 9.35 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899236", "mag": 2.73, "time": 1506439073310, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.821, 37.6035, 4.3 ] } },
+ { "type": "Feature", "properties": { "id": "hv61922126", "mag": 1.89, "time": 1506438530250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.504837, 19.188499, 37.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16910217", "mag": 1.3, "time": 1506438468368, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.3857, 61.4705, 26.0 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249677", "mag": 1.01, "time": 1506437975140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.090667, 41.940333, 4.24 ] } },
+ { "type": "Feature", "properties": { "id": "ak16909586", "mag": 1.8, "time": 1506436541694, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.9329, 61.1528, 1.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16909585", "mag": 1.5, "time": 1506436508165, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -138.6533, 59.6178, 1.5 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249672", "mag": 1.15, "time": 1506436401660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.9865, 44.768833, 6.31 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949332", "mag": 2.7, "time": 1506436259231, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 177.8212, 50.3055, 25.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949331", "mag": 1.5, "time": 1506435973793, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -157.5906, 57.0801, 1.8 ] } },
+ { "type": "Feature", "properties": { "id": "hv61922056", "mag": 1.6, "time": 1506435671030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.617667, 19.403833, 11.352 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899211", "mag": 1.32, "time": 1506435393920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.617833, 36.045, 5.05 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949330", "mag": 2.3, "time": 1506435252977, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -164.7207, 53.0759, 5.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000auxj", "mag": 4.2, "time": 1506434841590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -71.3743, -28.3432, 19.86 ] } },
+ { "type": "Feature", "properties": { "id": "ak16909580", "mag": 1.0, "time": 1506433271780, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.9281, 62.7345, 65.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011056", "mag": 2.34, "time": 1506433147890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.097167, 32.109167, 21.13 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011048", "mag": 1.64, "time": 1506433002700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.275333, 33.9755, 2.98 ] } },
+ { "type": "Feature", "properties": { "id": "ak16909574", "mag": 2.4, "time": 1506432197049, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.1982, 63.4664, 63.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899196", "mag": 2.34, "time": 1506431642070, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.2285, 36.1555, 11.25 ] } },
+ { "type": "Feature", "properties": { "id": "ci38011032", "mag": 1.31, "time": 1506431195640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.599833, 33.196, 3.24 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949325", "mag": 1.3, "time": 1506430179945, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.5507, 57.5978, 9.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16908944", "mag": 1.5, "time": 1506430094548, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7286, 62.9807, 109.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949323", "mag": 1.4, "time": 1506429667875, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -132.545, 57.8313, 1.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16908941", "mag": 1.9, "time": 1506428870068, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.9939, 51.4819, 42.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949321", "mag": 2.3, "time": 1506428515529, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -179.9246, 51.994, 156.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000auwv", "mag": 4.8, "time": 1506428086930, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -74.1449, -37.4108, 11.74 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949320", "mag": 1.7, "time": 1506428031233, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.8671, 57.0274, 77.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899171", "mag": 1.37, "time": 1506428015870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.786167, 37.594333, 4.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949319", "mag": 1.6, "time": 1506427960144, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0976, 58.7839, 68.4 ] } },
+ { "type": "Feature", "properties": { "id": "hv61921941", "mag": 1.75, "time": 1506427855790, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.293667, 19.364833, 29.473 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257779", "mag": 1.22, "time": 1506426612780, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.524667, 46.871167, 11.47 ] } },
+ { "type": "Feature", "properties": { "id": "ak16908309", "mag": 2.6, "time": 1506426273590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0017, 63.0698, 125.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16908307", "mag": 1.4, "time": 1506425656703, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.0459, 60.021, 7.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899161", "mag": 1.33, "time": 1506425143350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.737833, 38.803333, 1.75 ] } },
+ { "type": "Feature", "properties": { "id": "us2000auwh", "mag": 4.6, "time": 1506424969320, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 168.1159, -17.1048, 50.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16908306", "mag": 1.2, "time": 1506424570466, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.412, 53.8051, 14.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16908302", "mag": 1.9, "time": 1506424147684, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.7411, 59.5065, 69.7 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249657", "mag": 1.69, "time": 1506424086980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.4815, 38.756167, 9.29 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257774", "mag": 1.11, "time": 1506422972160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.387167, 44.8185, 11.24 ] } },
+ { "type": "Feature", "properties": { "id": "ak16908296", "mag": 1.6, "time": 1506420872410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.9572, 61.1571, 5.2 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607058", "mag": 1.0, "time": 1506420232880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8963, 38.401, 10.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949310", "mag": 1.6, "time": 1506419827018, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.2644, 60.0718, 129.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899136", "mag": 1.49, "time": 1506419498990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.041333, 37.633667, -1.57 ] } },
+ { "type": "Feature", "properties": { "id": "ak16908294", "mag": 1.4, "time": 1506419088568, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.8181, 63.4737, 2.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949308", "mag": 1.7, "time": 1506418915220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.9641, 60.3111, 134.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010936", "mag": 1.35, "time": 1506418490150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.104333, 34.0325, 5.61 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899131", "mag": 1.28, "time": 1506417966210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.931833, 37.595833, 0.06 ] } },
+ { "type": "Feature", "properties": { "id": "ak16908292", "mag": 1.7, "time": 1506417940616, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.8017, 59.9121, 74.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16908290", "mag": 1.7, "time": 1506417796960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.402, 60.1704, 11.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949304", "mag": 1.7, "time": 1506416080631, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.871, 57.3937, 48.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949303", "mag": 1.2, "time": 1506415360742, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6564, 63.2669, 130.1 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607053", "mag": 3.4, "time": 1506415206305, "felt": 7, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8949, 38.3653, 6.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899106", "mag": 1.38, "time": 1506414957350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.0225, 37.5205, 2.13 ] } },
+ { "type": "Feature", "properties": { "id": "us2000auvr", "mag": 4.4, "time": 1506414806850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -77.3187, -5.8706, 42.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899101", "mag": 1.35, "time": 1506414495100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.810667, 37.473333, 3.46 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0x1", "mag": 4.0, "time": 1506414428310, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 115.4547, -8.3437, 7.77 ] } },
+ { "type": "Feature", "properties": { "id": "ak16907660", "mag": 2.5, "time": 1506414139904, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.2525, 63.3098, 5.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000auvl", "mag": 4.9, "time": 1506413746400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 178.8693, -24.5502, 549.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16907657", "mag": 1.7, "time": 1506413744657, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.558, 61.3722, 73.1 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607084", "mag": 1.1, "time": 1506413686395, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8996, 38.399, 10.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ax0p", "mag": 3.0, "time": 1506413645840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -162.222, 52.6448, 36.78 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010856", "mag": 1.11, "time": 1506413205840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.4375, 33.438833, 9.57 ] } },
+ { "type": "Feature", "properties": { "id": "ak16907655", "mag": 1.3, "time": 1506412718967, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.6643, 61.4913, 19.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16907652", "mag": 1.7, "time": 1506412362070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.6643, 61.6414, 22.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16907651", "mag": 1.5, "time": 1506411582373, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.2404, 59.9305, 72.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949296", "mag": 1.3, "time": 1506411274342, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.6597, 58.8354, 4.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899096", "mag": 1.03, "time": 1506410824310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.914, 37.573833, -1.62 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899091", "mag": 1.42, "time": 1506410795100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.807833, 38.8245, 2.94 ] } },
+ { "type": "Feature", "properties": { "id": "ak16907650", "mag": 2.0, "time": 1506410193440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -135.8603, 66.702, 16.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949292", "mag": 1.6, "time": 1506409745435, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.82, 59.4363, 78.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16907646", "mag": 1.1, "time": 1506408445621, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.778, 62.2517, 10.2 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249632", "mag": 2.87, "time": 1506407470180, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.651333, 44.820667, 6.96 ] } },
+ { "type": "Feature", "properties": { "id": "ak16907641", "mag": 2.2, "time": 1506407401881, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.1721, 59.3036, 66.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949289", "mag": 1.7, "time": 1506406926287, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.737, 59.5006, 82.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010824", "mag": 1.17, "time": 1506406440560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.498833, 34.926833, 12.29 ] } },
+ { "type": "Feature", "properties": { "id": "us2000auv4", "mag": 4.9, "time": 1506404788280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 101.3356, -5.7378, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000auv3", "mag": 5.0, "time": 1506404673850, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -66.5505, -21.3378, 232.1 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257744", "mag": 1.03, "time": 1506404152920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.522667, 46.9085, 12.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000auuz", "mag": 4.6, "time": 1506404004140, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.9602, 15.0621, 55.84 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949287", "mag": 1.5, "time": 1506403834555, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.1229, 59.9191, 124.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899076", "mag": 0.97, "time": 1506403715720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.825667, 37.454833, 1.23 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899066", "mag": 0.96, "time": 1506402794840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.798332, 38.824833, 2.56 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257739", "mag": 1.14, "time": 1506402535080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5275, 46.880667, 10.59 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010800", "mag": 1.46, "time": 1506401555090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.061, 34.207167, 1.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010792", "mag": 1.16, "time": 1506401392950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.064333, 34.207333, 2.74 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607042", "mag": 1.5, "time": 1506400440104, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.0413, 37.0804, 8.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16906991", "mag": 2.7, "time": 1506400345749, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.4106, 60.9055, 24.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000autd", "mag": 6.4, "time": 1506399600760, "felt": 2, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ -176.9366, -23.7135, 98.07 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257724", "mag": 1.75, "time": 1506399115590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.525167, 46.8815, 10.93 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949284", "mag": 1.4, "time": 1506398641123, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.643, 58.8409, 11.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949283", "mag": 1.3, "time": 1506398319488, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.6304, 58.8355, 8.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16906355", "mag": 2.3, "time": 1506398227222, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.8611, 62.7984, 13.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899031", "mag": 1.73, "time": 1506396860580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.823667, 37.455333, 2.55 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899036", "mag": 1.13, "time": 1506396779490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.764167, 38.956, 1.48 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249592", "mag": 1.7, "time": 1506396582400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.943167, 39.753833, 3.39 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949281", "mag": 1.5, "time": 1506396506568, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.7269, 58.5151, 73.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16906353", "mag": 1.3, "time": 1506396340348, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2988, 62.3609, 81.6 ] } },
+ { "type": "Feature", "properties": { "id": "uw61310902", "mag": 1.38, "time": 1506395899750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.737167, 47.576333, 17.19 ] } },
+ { "type": "Feature", "properties": { "id": "ak16906350", "mag": 2.1, "time": 1506395022337, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.6717, 59.8577, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70235803", "mag": 1.67, "time": 1506394171170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.620667, 37.161167, 4.48 ] } },
+ { "type": "Feature", "properties": { "id": "nc72899026", "mag": 1.36, "time": 1506393508660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.823833, 37.4545, 2.28 ] } },
+ { "type": "Feature", "properties": { "id": "ak16906345", "mag": 1.8, "time": 1506393385073, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.5638, 59.8105, 0.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16906344", "mag": 1.2, "time": 1506393361198, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.4631, 62.5638, 3.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16906343", "mag": 1.2, "time": 1506392589335, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.2072, 61.6959, 2.7 ] } },
+ { "type": "Feature", "properties": { "id": "uw61310887", "mag": 1.1, "time": 1506392466960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.9235, 46.755833, 4.01 ] } },
+ { "type": "Feature", "properties": { "id": "ak16906342", "mag": 1.8, "time": 1506392061053, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.9619, 58.719, 83.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16906341", "mag": 1.1, "time": 1506391622110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.393, 62.6136, 80.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905725", "mag": 2.0, "time": 1506390933341, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.6474, 61.5055, 2.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aus0", "mag": 5.1, "time": 1506390162180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.2892, -18.0618, 578.88 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905719", "mag": 1.0, "time": 1506388357140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.8119, 61.2841, 12.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16949271", "mag": 1.1, "time": 1506387919524, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.616, 62.8641, 85.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avl1", "mag": 4.1, "time": 1506387869490, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -68.2679, -38.2792, 18.61 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905595", "mag": 1.0, "time": 1506387645089, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.7961, 60.4358, 8.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aur8", "mag": 3.9, "time": 1506387254290, "felt": 6, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -77.6296, -12.1347, 37.62 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905592", "mag": 1.5, "time": 1506385892986, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6406, 61.6796, 57.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905589", "mag": 1.7, "time": 1506385708409, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.0359, 62.3774, 41.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898986", "mag": 1.94, "time": 1506385192120, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.759667, 38.955667, 4.16 ] } },
+ { "type": "Feature", "properties": { "id": "nn00607067", "mag": 1.1, "time": 1506385008302, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.0721, 39.3599, 7.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0hk", "mag": 4.4, "time": 1506383865610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 130.4109, -4.9919, 96.04 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0hl", "mag": 4.5, "time": 1506383851620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 3.755, 79.5651, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905583", "mag": 2.0, "time": 1506383021414, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.7759, 59.8203, 3.6 ] } },
+ { "type": "Feature", "properties": { "id": "hv61921341", "mag": 2.37, "time": 1506382999970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.826167, 19.509167, 12.397 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898971", "mag": 1.13, "time": 1506382612420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.7125, 38.7455, 1.45 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898966", "mag": 1.63, "time": 1506382205240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.579, 36.013, 4.29 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010640", "mag": 1.0, "time": 1506381899530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.792667, 33.508833, 4.84 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010624", "mag": 1.86, "time": 1506381762630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.681667, 35.033833, -0.82 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898956", "mag": 1.13, "time": 1506381482700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.320667, 37.6445, 0.55 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257694", "mag": 1.58, "time": 1506381447950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.523833, 46.872833, 11.66 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0hj", "mag": 4.3, "time": 1506380384190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 115.85, -10.6682, 39.69 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010616", "mag": 1.42, "time": 1506380222440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.0935, 33.013167, -0.56 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898946", "mag": 1.13, "time": 1506379343550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.7885, 38.832167, 1.97 ] } },
+ { "type": "Feature", "properties": { "id": "ld60143416", "mag": 1.71, "time": 1506378906690, "felt": 170, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -74.513833, 40.798667, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988709", "mag": 1.6, "time": 1506378800677, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.4035, 60.0163, 139.3 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257689", "mag": 1.5, "time": 1506378570060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.528833, 46.865833, 11.47 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aunr", "mag": 2.5, "time": 1506378435420, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.154, 37.3519, 3.31 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988708", "mag": 1.0, "time": 1506378350972, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.034, 64.3489, 10.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aunh", "mag": 5.0, "time": 1506377223500, "felt": null, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 124.3318, 0.8223, 219.8 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249557", "mag": 1.72, "time": 1506377199600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.460833, 42.646667, 2.74 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0hh", "mag": 4.3, "time": 1506376802200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.4659, -19.6395, 545.66 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905558", "mag": 1.3, "time": 1506376658938, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.4807, 65.756, 6.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010544", "mag": 1.52, "time": 1506375768450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.792333, 33.492, 4.2 ] } },
+ { "type": "Feature", "properties": { "id": "uw61333756", "mag": 1.11, "time": 1506375211030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.748833, 46.851167, 1.54 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010536", "mag": 1.15, "time": 1506374622610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.200667, 33.034833, 4.46 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898906", "mag": 1.32, "time": 1506373159300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.887667, 37.572333, 1.73 ] } },
+ { "type": "Feature", "properties": { "id": "ak16904952", "mag": 1.2, "time": 1506373039217, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.2776, 63.8003, 116.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16904950", "mag": 1.1, "time": 1506372955267, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.1161, 63.268, 1.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898901", "mag": 1.01, "time": 1506372828820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.791667, 37.454333, 7.33 ] } },
+ { "type": "Feature", "properties": { "id": "ak16904346", "mag": 1.5, "time": 1506372342933, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.0547, 61.007, 13.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010512", "mag": 1.25, "time": 1506372237980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.492167, 33.822333, -0.52 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010488", "mag": 3.1, "time": 1506371483300, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.220833, 32.220833, 20.46 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aulg", "mag": 5.9, "time": 1506371363480, "felt": null, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 152.7133, -6.2113, 5.98 ] } },
+ { "type": "Feature", "properties": { "id": "hv61921136", "mag": 1.72, "time": 1506370768560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.421333, 19.223333, 34.311 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257664", "mag": 1.07, "time": 1506370613150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.526, 46.868, 10.18 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aukx", "mag": 2.6, "time": 1506370456500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -99.1495, 36.4119, 5.948 ] } },
+ { "type": "Feature", "properties": { "id": "us2000auky", "mag": 4.2, "time": 1506370103510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 107.7299, -5.8793, 306.63 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257659", "mag": 1.44, "time": 1506369980640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.530333, 46.8795, 12.77 ] } },
+ { "type": "Feature", "properties": { "id": "ak16904319", "mag": 1.4, "time": 1506369740689, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.5073, 60.0082, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16904318", "mag": 1.1, "time": 1506369510333, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.5651, 61.4244, 63.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16904316", "mag": 1.1, "time": 1506368211425, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.7001, 61.5145, 4.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aukb", "mag": 4.3, "time": 1506368143480, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -127.1586, 40.3587, 11.36 ] } },
+ { "type": "Feature", "properties": { "id": "ak16904315", "mag": 1.2, "time": 1506367996393, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.8124, 59.8382, 15.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898871", "mag": 1.41, "time": 1506367887720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.785167, 38.8375, 1.88 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988695", "mag": 2.2, "time": 1506366990125, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 179.3689, 51.4218, 56.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci37166748", "mag": 1.04, "time": 1506366454300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.018667, 33.163167, -0.77 ] } },
+ { "type": "Feature", "properties": { "id": "hv61921056", "mag": 2.06, "time": 1506366154290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.950667, 19.540833, 15.491 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903722", "mag": 2.0, "time": 1506365944635, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.478, 51.697, 15.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010408", "mag": 1.27, "time": 1506365436790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.4445, 35.5745, 10.25 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010416", "mag": 1.17, "time": 1506365362690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.862667, 34.343333, -1.71 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249527", "mag": 1.29, "time": 1506365138370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.712833, 41.8725, 4.98 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903609", "mag": 2.1, "time": 1506365025587, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8085, 63.1578, 132.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010400", "mag": 1.04, "time": 1506364534100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.790833, 33.495667, 4.4 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606969", "mag": 1.1, "time": 1506364516065, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.689, 40.0864, 4.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903599", "mag": 2.5, "time": 1506364456407, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.8848, 59.5329, 96.9 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257649", "mag": 1.4, "time": 1506364202040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5255, 46.866667, 10.23 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898846", "mag": 1.62, "time": 1506364136870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.781833, 36.209, 7.55 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903591", "mag": 1.5, "time": 1506363943453, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.7347, 60.3302, 112.7 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257644", "mag": 1.05, "time": 1506363692190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.525167, 46.8665, 10.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010376", "mag": 1.42, "time": 1506363664230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.792667, 33.4945, 4.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aufz", "mag": 5.1, "time": 1506363043200, "felt": null, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 106.3876, -5.9298, 150.05 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898836", "mag": 1.32, "time": 1506362896010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.104, 37.324, -0.31 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903584", "mag": 1.0, "time": 1506362694028, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -138.2167, 63.9342, 1.9 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257639", "mag": 1.36, "time": 1506362284340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.615667, 46.316833, -2.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903579", "mag": 2.0, "time": 1506362237262, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.1637, 59.6819, 106.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898821", "mag": 1.99, "time": 1506361978590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.778667, 36.215667, 8.08 ] } },
+ { "type": "Feature", "properties": { "id": "us2000auf8", "mag": 3.0, "time": 1506361091820, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -127.3303, 40.4414, 11.43 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010336", "mag": 2.11, "time": 1506360496580, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.797167, 33.486667, 3.04 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988686", "mag": 1.5, "time": 1506360479843, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -174.7769, 51.9886, 24.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010328", "mag": 1.51, "time": 1506359920880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.977, 33.995333, 18.14 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988684", "mag": 1.6, "time": 1506359020522, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.4355, 59.7613, 127.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898791", "mag": 1.48, "time": 1506357667280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.679333, 40.288667, 4.66 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898786", "mag": 1.55, "time": 1506357321970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.322, 35.752333, 11.93 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898781", "mag": 1.12, "time": 1506356229990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.811333, 38.794833, 2.79 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010256", "mag": 1.04, "time": 1506354566340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.858833, 33.8575, 16.19 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010272", "mag": 2.41, "time": 1506354509850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.9285, 31.688833, 11.63 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257609", "mag": 1.3, "time": 1506354504500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.534667, 46.896, 11.48 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257604", "mag": 1.12, "time": 1506354406140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.531833, 46.867, 11.31 ] } },
+ { "type": "Feature", "properties": { "id": "ak16902391", "mag": 1.7, "time": 1506354336298, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8601, 62.0271, 60.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16902390", "mag": 1.1, "time": 1506354175816, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.3984, 60.1663, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16901812", "mag": 1.4, "time": 1506353222973, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.1565, 60.3908, 0.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16901813", "mag": 1.3, "time": 1506353183037, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.6264, 58.8255, 1.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16901809", "mag": 2.0, "time": 1506352267382, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.0949, 59.636, 10.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aucr", "mag": 4.6, "time": 1506352047620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 167.4691, -14.8531, 132.07 ] } },
+ { "type": "Feature", "properties": { "id": "ak16901806", "mag": 1.8, "time": 1506351538258, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.8449, 59.8126, 1.3 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257594", "mag": 0.98, "time": 1506349616550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.521333, 46.870833, 11.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010208", "mag": 1.21, "time": 1506348868740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.552, 33.526167, 13.79 ] } },
+ { "type": "Feature", "properties": { "id": "ak16901226", "mag": 1.1, "time": 1506348768479, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2671, 59.9538, 54.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aubr", "mag": 4.6, "time": 1506348737440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 167.0258, -12.6224, 229.97 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010200", "mag": 1.19, "time": 1506348702870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.953833, 34.8405, 11.97 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aubf", "mag": 4.4, "time": 1506348571430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.1777, 15.5423, 60.99 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898721", "mag": 1.03, "time": 1506348240990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.838333, 38.837334, 1.55 ] } },
+ { "type": "Feature", "properties": { "id": "ak16901214", "mag": 2.7, "time": 1506348231637, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.0448, 63.3492, 76.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aub9", "mag": 4.3, "time": 1506347727000, "felt": 65, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -71.99, -32.683, 24.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898706", "mag": 1.78, "time": 1506347531490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.838, 38.837833, 1.83 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010176", "mag": 0.96, "time": 1506346983830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.271667, 33.976667, 5.12 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aubt", "mag": 4.7, "time": 1506346771440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 178.6657, -38.3887, 23.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988672", "mag": 1.9, "time": 1506346449512, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.0765, 51.5898, 46.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16901206", "mag": 2.2, "time": 1506346185448, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.7016, 61.5212, 15.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16901204", "mag": 1.6, "time": 1506346082012, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.4545, 63.1289, 110.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898686", "mag": 1.5, "time": 1506345854120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.787167, 36.211667, 7.46 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988669", "mag": 1.8, "time": 1506344531244, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.2595, 53.699, 44.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16901203", "mag": 1.5, "time": 1506343558401, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.1793, 57.6776, 1.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898666", "mag": 1.04, "time": 1506343096950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.862667, 37.613167, 7.06 ] } },
+ { "type": "Feature", "properties": { "id": "ak16900637", "mag": 2.0, "time": 1506342621159, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.2424, 60.321, 83.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010152", "mag": 1.32, "time": 1506342413630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.241667, 34.439, 7.98 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aua8", "mag": 4.6, "time": 1506342291600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -71.282, -28.2916, 30.33 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898661", "mag": 1.86, "time": 1506342035450, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.000167, 36.431, -0.28 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010136", "mag": 1.46, "time": 1506341314650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.559, 35.341833, 7.37 ] } },
+ { "type": "Feature", "properties": { "id": "ak16900622", "mag": 1.0, "time": 1506340661643, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.7013, 64.8764, 7.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0h7", "mag": 4.2, "time": 1506340490190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 138.5087, 34.8799, 210.56 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898636", "mag": 1.46, "time": 1506340210490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.256667, 36.100167, 9.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0hp", "mag": 4.2, "time": 1506340162430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4582, -17.8551, 595.96 ] } },
+ { "type": "Feature", "properties": { "id": "us2000au9u", "mag": 4.6, "time": 1506340077990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4978, -17.9975, 539.99 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988664", "mag": 1.8, "time": 1506339965395, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4489, 51.676, 14.4 ] } },
+ { "type": "Feature", "properties": { "id": "hv61920741", "mag": 2.06, "time": 1506339899560, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.473667, 19.201667, 36.657 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010120", "mag": 0.99, "time": 1506339434380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.471167, 34.247833, 12.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16900621", "mag": 1.0, "time": 1506338627047, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.3115, 62.9535, 74.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898616", "mag": 2.36, "time": 1506338018430, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.938333, 37.838667, 4.07 ] } },
+ { "type": "Feature", "properties": { "id": "hv61920671", "mag": 1.81, "time": 1506336741780, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.023667, 19.815, 11.479 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257584", "mag": 1.42, "time": 1506336624590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.521667, 46.869333, 11.15 ] } },
+ { "type": "Feature", "properties": { "id": "ak16900062", "mag": 1.8, "time": 1506336050720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.8893, 60.3211, 15.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010104", "mag": 1.06, "time": 1506335970890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.7915, 33.506667, 6.39 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898601", "mag": 0.95, "time": 1506335637390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.6475, 37.476667, 8.18 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898596", "mag": 1.23, "time": 1506335593850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.2805, 36.094, 6.76 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898591", "mag": 1.04, "time": 1506335405570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.839333, 38.843166, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000au8v", "mag": 4.9, "time": 1506334920720, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 139.9741, -3.5898, 72.65 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606909", "mag": 1.4, "time": 1506334911790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.943, 37.551, 8.3 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257579", "mag": 1.3, "time": 1506333510580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.523833, 46.872333, 11.79 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257574", "mag": 0.99, "time": 1506333384010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.523, 46.875167, 11.91 ] } },
+ { "type": "Feature", "properties": { "id": "us2000au8b", "mag": 5.0, "time": 1506332531610, "felt": null, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 154.0023, -5.3939, 63.28 ] } },
+ { "type": "Feature", "properties": { "id": "ak16899481", "mag": 1.2, "time": 1506332463619, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.8097, 60.337, 8.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16899478", "mag": 2.7, "time": 1506332457083, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.9674, 51.7565, 11.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16899480", "mag": 2.7, "time": 1506332456973, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.9649, 51.7427, 10.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898561", "mag": 1.34, "time": 1506332073270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.401667, 37.650667, 3.17 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257569", "mag": 2.91, "time": 1506332057970, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.525833, 46.879333, 11.49 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606905", "mag": 1.5, "time": 1506331668203, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9249, 38.3947, 7.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010072", "mag": 1.11, "time": 1506331415690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.790167, 33.497667, 5.47 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988657", "mag": 1.9, "time": 1506331001341, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4079, 51.6208, 15.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16899468", "mag": 1.4, "time": 1506330891437, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3579, 60.2131, 58.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16899467", "mag": 1.1, "time": 1506330692323, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.4142, 68.5865, 13.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16899465", "mag": 1.0, "time": 1506330113229, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.991, 61.1695, 1.9 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606904", "mag": 2.5, "time": 1506329813575, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.1098, 39.0988, 9.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16899462", "mag": 1.3, "time": 1506329610880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.9036, 64.8595, 12.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010048", "mag": 1.15, "time": 1506329091670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.815, 33.9555, 13.94 ] } },
+ { "type": "Feature", "properties": { "id": "us2000au7c", "mag": 3.5, "time": 1506329082460, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5238, 46.8486, 10.68 ] } },
+ { "type": "Feature", "properties": { "id": "ci38010040", "mag": 1.01, "time": 1506328796420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.568, 35.1735, 8.56 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606901", "mag": 1.2, "time": 1506328748981, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8911, 38.3811, 7.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16898909", "mag": 1.4, "time": 1506327817672, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.2932, 60.6736, 39.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988651", "mag": 1.6, "time": 1506327629626, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.8348, 59.5881, 89.7 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249397", "mag": 2.17, "time": 1506327209020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.448333, 38.993, -0.41 ] } },
+ { "type": "Feature", "properties": { "id": "ak16898901", "mag": 1.1, "time": 1506326924743, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.6407, 58.3143, 7.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000au6h", "mag": 4.7, "time": 1506326546500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 129.4008, -4.8417, 219.24 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249392", "mag": 1.79, "time": 1506326456200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.448, 42.620667, 6.55 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70235773", "mag": 2.04, "time": 1506326285610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.968667, 37.281833, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000au5z", "mag": 4.4, "time": 1506325840560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.7801, 14.8764, 57.41 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898491", "mag": 0.95, "time": 1506325310440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.818667, 37.478667, 0.05 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898486", "mag": 1.27, "time": 1506324949470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8175, 37.479333, 0.19 ] } },
+ { "type": "Feature", "properties": { "id": "ak16898346", "mag": 2.1, "time": 1506324898662, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -160.5224, 64.5882, 8.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000au5p", "mag": 4.4, "time": 1506324432650, "felt": 5, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -71.5244, -30.022, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000au5l", "mag": 4.5, "time": 1506324225060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.1793, 15.5215, 66.49 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898461", "mag": 1.64, "time": 1506323849520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.818167, 37.478667, 0.73 ] } },
+ { "type": "Feature", "properties": { "id": "us2000au5i", "mag": 4.6, "time": 1506323785060, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 106.9645, -8.3755, 34.69 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898456", "mag": 1.01, "time": 1506323761220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.818833, 37.478167, 0.69 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606939", "mag": 1.6, "time": 1506320868071, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.5993, 41.6963, 11.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988646", "mag": 1.6, "time": 1506320845663, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.7721, 59.5535, 80.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci38009968", "mag": 1.23, "time": 1506320510170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.738333, 33.655, 17.08 ] } },
+ { "type": "Feature", "properties": { "id": "us2000au57", "mag": 5.0, "time": 1506320285610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -25.7407, -59.0289, 23.15 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606937", "mag": 1.7, "time": 1506320281288, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.604, 41.7004, 6.9 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257544", "mag": 1.02, "time": 1506320165840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.538333, 46.891333, 11.64 ] } },
+ { "type": "Feature", "properties": { "id": "ak16897784", "mag": 1.7, "time": 1506319825200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.9967, 59.5158, 86.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16897782", "mag": 1.0, "time": 1506319406475, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.2438, 65.7781, 4.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16897779", "mag": 1.8, "time": 1506318873463, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.4148, 69.0584, 10.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898431", "mag": 2.32, "time": 1506318557110, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.909, 37.334167, 8.51 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898406", "mag": 1.9, "time": 1506317549980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.705833, 39.697, 8.09 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988640", "mag": 1.4, "time": 1506317208929, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.0479, 57.5544, 76.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988639", "mag": 1.2, "time": 1506316463527, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9489, 61.4034, 66.1 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606934", "mag": 1.4, "time": 1506315296099, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.8855, 37.2234, 7.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000b0hn", "mag": 4.2, "time": 1506314791590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -27.4466, -60.0959, 87.69 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898391", "mag": 0.97, "time": 1506314750800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.80867, 38.800999, 1.95 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898386", "mag": 2.07, "time": 1506314732630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.810833, 38.797667, 3.49 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898381", "mag": 1.3, "time": 1506314425330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.1325, 38.050167, 2.51 ] } },
+ { "type": "Feature", "properties": { "id": "ak16897226", "mag": 1.1, "time": 1506314336648, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.1369, 63.4162, 5.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000au3u", "mag": 4.3, "time": 1506313752770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7839, 15.5489, 36.62 ] } },
+ { "type": "Feature", "properties": { "id": "ak16897223", "mag": 1.5, "time": 1506313722965, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.5906, 61.3427, 45.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16897221", "mag": 1.1, "time": 1506313193707, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.457, 63.4294, 4.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988635", "mag": 1.2, "time": 1506312840546, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.0928, 61.1303, 26.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988634", "mag": 1.1, "time": 1506312758288, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.7179, 62.8463, 7.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898366", "mag": 1.09, "time": 1506312288130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.797501, 38.824165, 1.31 ] } },
+ { "type": "Feature", "properties": { "id": "ak16897219", "mag": 1.1, "time": 1506311801540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.8303, 63.2243, 16.3 ] } },
+ { "type": "Feature", "properties": { "id": "uw61333436", "mag": 1.41, "time": 1506311554000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.943833, 48.589333, 4.05 ] } },
+ { "type": "Feature", "properties": { "id": "ak16896672", "mag": 2.4, "time": 1506311539840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6826, 63.2689, 133.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci38009904", "mag": 1.71, "time": 1506311193160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.813167, 34.048833, 13.41 ] } },
+ { "type": "Feature", "properties": { "id": "ak16896671", "mag": 1.0, "time": 1506310652342, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.6095, 62.9432, 11.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci38009840", "mag": 1.15, "time": 1506308854410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.765333, 33.325667, 12.51 ] } },
+ { "type": "Feature", "properties": { "id": "ak16896670", "mag": 1.3, "time": 1506308756498, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.6787, 59.995, 9.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16896669", "mag": 1.3, "time": 1506308490557, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.667, 59.9936, 9.8 ] } },
+ { "type": "Feature", "properties": { "id": "hv61920451", "mag": 2.11, "time": 1506307247260, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.050167, 19.765, 47.26 ] } },
+ { "type": "Feature", "properties": { "id": "ak16896663", "mag": 1.7, "time": 1506306347139, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.57, 59.4416, 74.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16896659", "mag": 1.5, "time": 1506306011000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.5629, 61.3391, 37.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16896656", "mag": 1.3, "time": 1506306004481, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.1978, 60.2569, 10.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16896653", "mag": 1.8, "time": 1506305432732, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.6915, 61.3592, 87.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988622", "mag": 2.2, "time": 1506305398552, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -162.4539, 55.424, 127.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898321", "mag": 0.97, "time": 1506303023560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.821, 37.470667, 1.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci38009824", "mag": 1.77, "time": 1506302722490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.721333, 32.171167, -0.08 ] } },
+ { "type": "Feature", "properties": { "id": "us2000au34", "mag": 4.2, "time": 1506301011430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.6458, 15.9582, 41.89 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898311", "mag": 1.53, "time": 1506300409700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.760333, 38.787333, 2.66 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898316", "mag": 1.17, "time": 1506300389070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.902833, 37.434167, 1.61 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249337", "mag": 1.05, "time": 1506300187150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.028, 44.797667, 10.68 ] } },
+ { "type": "Feature", "properties": { "id": "ak16896106", "mag": 1.8, "time": 1506299319432, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0832, 61.9049, 66.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16895566", "mag": 1.9, "time": 1506298140072, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.9051, 57.7026, 76.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16988619", "mag": 1.6, "time": 1506298131890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.9559, 60.0816, 113.8 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606884", "mag": 1.4, "time": 1506297047630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.0863, 37.3768, 7.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000au2t", "mag": 4.6, "time": 1506295898530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 130.3868, 31.2471, 159.23 ] } },
+ { "type": "Feature", "properties": { "id": "us2000au2s", "mag": 4.7, "time": 1506295771740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.3651, 15.6767, 54.03 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249317", "mag": 2.04, "time": 1506295039370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.424667, 42.575667, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935438", "mag": 1.4, "time": 1506294396969, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.934, 60.3588, 65.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898291", "mag": 1.5, "time": 1506294312930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.799167, 37.544833, 8.63 ] } },
+ { "type": "Feature", "properties": { "id": "ak16895561", "mag": 1.1, "time": 1506294004090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.0019, 62.1675, 14.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16895559", "mag": 1.7, "time": 1506293152617, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9808, 60.2626, 58.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898281", "mag": 1.51, "time": 1506291814030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.123, 38.044833, 2.62 ] } },
+ { "type": "Feature", "properties": { "id": "ak16895553", "mag": 2.2, "time": 1506291209658, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.9667, 58.2749, 2.3 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249297", "mag": 2.2, "time": 1506289719780, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.027, 44.7975, 11.07 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898251", "mag": 1.06, "time": 1506289376180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.80867, 38.824501, 1.89 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606863", "mag": 1.6, "time": 1506289302497, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.1188, 37.3786, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16895018", "mag": 1.1, "time": 1506289187928, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.5309, 62.2207, 4.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898246", "mag": 1.11, "time": 1506288942820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8205, 37.474667, -0.27 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898241", "mag": 1.11, "time": 1506288826190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.819667, 37.477167, 0.62 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935433", "mag": 1.6, "time": 1506288360789, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.4754, 58.4123, 46.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935432", "mag": 2.5, "time": 1506287912932, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -164.0291, 52.8069, 25.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16895001", "mag": 2.4, "time": 1506287325387, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.3822, 59.9552, 133.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc71107574", "mag": 1.82, "time": 1506286958930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.1525, 38.965833, 3.75 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898236", "mag": 1.93, "time": 1506286874150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.849, 36.277667, 7.52 ] } },
+ { "type": "Feature", "properties": { "id": "ak16894980", "mag": 2.3, "time": 1506286457929, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.5039, 61.3116, 7.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000au0x", "mag": 4.1, "time": 1506285951620, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 137.7689, 33.0106, 343.06 ] } },
+ { "type": "Feature", "properties": { "id": "ak16894459", "mag": 1.4, "time": 1506285529465, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.7694, 59.8585, 7.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16894458", "mag": 3.5, "time": 1506285383201, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4213, 51.6336, 12.0 ] } },
+ { "type": "Feature", "properties": { "id": "hv61919931", "mag": 1.61, "time": 1506285094170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.2325, 19.4085, 26.679 ] } },
+ { "type": "Feature", "properties": { "id": "nm60207286", "mag": 1.46, "time": 1506284271340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -89.900667, 36.601833, 4.15 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898226", "mag": 1.94, "time": 1506284238360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.819, 37.476167, 0.74 ] } },
+ { "type": "Feature", "properties": { "id": "hv61919891", "mag": 2.03, "time": 1506284234210, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.278503, 19.407, 0.61 ] } },
+ { "type": "Feature", "properties": { "id": "us2000au0l", "mag": 5.0, "time": 1506283809180, "felt": 1, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 102.0863, -3.3959, 96.97 ] } },
+ { "type": "Feature", "properties": { "id": "ak16894448", "mag": 1.6, "time": 1506283718319, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.1504, 61.1564, 63.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898216", "mag": 1.02, "time": 1506283590520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.826836, 38.841167, 1.21 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898211", "mag": 1.57, "time": 1506283158900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.113333, 38.042667, 2.45 ] } },
+ { "type": "Feature", "properties": { "id": "ak16894439", "mag": 2.3, "time": 1506283079762, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -179.7022, 51.6829, 87.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898206", "mag": 1.24, "time": 1506283017210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.777, 35.512, 0.74 ] } },
+ { "type": "Feature", "properties": { "id": "ci38009648", "mag": 0.95, "time": 1506282824500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.909333, 33.494, 13.21 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898196", "mag": 1.08, "time": 1506282126770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.81, 38.806833, 2.17 ] } },
+ { "type": "Feature", "properties": { "id": "ak16893920", "mag": 1.6, "time": 1506281844692, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.421, 62.907, 126.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898191", "mag": 1.6, "time": 1506281467240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.010167, 37.8015, 1.31 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898186", "mag": 2.26, "time": 1506281041390, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8185, 37.474833, -0.18 ] } },
+ { "type": "Feature", "properties": { "id": "uw61333306", "mag": 1.11, "time": 1506280827540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.812333, 48.284667, 12.62 ] } },
+ { "type": "Feature", "properties": { "id": "ci38009608", "mag": 1.3, "time": 1506280518180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.038, 33.0905, 2.11 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898176", "mag": 2.1, "time": 1506280314320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.818333, 37.475833, 0.78 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935422", "mag": 1.6, "time": 1506280296755, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.7731, 59.4501, 75.7 ] } },
+ { "type": "Feature", "properties": { "id": "hv61919726", "mag": 1.9, "time": 1506279270940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.4185, 19.110833, 41.621 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935421", "mag": 1.7, "time": 1506279143123, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.5363, 51.7438, 15.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16893907", "mag": 2.1, "time": 1506278978748, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.4135, 66.1088, 7.6 ] } },
+ { "type": "Feature", "properties": { "id": "uw61333296", "mag": 1.51, "time": 1506278869250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.581833, 47.593, 24.95 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898171", "mag": 1.13, "time": 1506278629370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.543167, 38.264833, 8.24 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606834", "mag": 1.5, "time": 1506278416314, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.885, 38.3509, 8.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci38009568", "mag": 1.23, "time": 1506278315340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.492333, 35.604833, 5.99 ] } },
+ { "type": "Feature", "properties": { "id": "ak16893391", "mag": 2.3, "time": 1506277628203, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -163.1998, 53.9184, 4.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16893390", "mag": 1.1, "time": 1506277025981, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.1933, 68.4549, 18.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16893388", "mag": 1.5, "time": 1506276710660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -144.3135, 68.0219, 2.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935416", "mag": 1.8, "time": 1506276357546, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -179.0551, 51.7225, 6.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898146", "mag": 1.54, "time": 1506276015270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.810333, 38.836, 1.98 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606827", "mag": 1.3, "time": 1506274049277, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.6642, 36.4428, 7.2 ] } },
+ { "type": "Feature", "properties": { "id": "uw61333281", "mag": 2.14, "time": 1506273261550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.502167, 49.447833, -0.06 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atz0", "mag": 4.3, "time": 1506273226630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -66.369, -22.6476, 261.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci38009520", "mag": 2.39, "time": 1506272765060, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.032333, 33.096333, 9.36 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898121", "mag": 1.18, "time": 1506272385880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.880667, 37.538167, 3.63 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atyw", "mag": 4.9, "time": 1506272236140, "felt": 49, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 27.2871, 36.912, 8.66 ] } },
+ { "type": "Feature", "properties": { "id": "uw61333276", "mag": 0.97, "time": 1506272212660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.677, 48.245, 8.69 ] } },
+ { "type": "Feature", "properties": { "id": "ci38009504", "mag": 1.59, "time": 1506272197880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.0285, 33.096, 10.24 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935414", "mag": 1.3, "time": 1506271871925, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3105, 62.8907, 109.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16892357", "mag": 1.5, "time": 1506271104455, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.2217, 60.9895, 43.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16892356", "mag": 1.0, "time": 1506270748541, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.7754, 66.4015, 0.3 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606816", "mag": 1.3, "time": 1506270455535, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.3547, 38.3427, 11.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16892349", "mag": 2.1, "time": 1506269387778, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.9052, 64.2272, 113.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16892348", "mag": 1.2, "time": 1506269350233, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.0305, 61.1531, 0.9 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249237", "mag": 1.72, "time": 1506268839820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -108.899, 38.3125, 1.61 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898066", "mag": 2.26, "time": 1506268374330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.820667, 37.604333, 4.11 ] } },
+ { "type": "Feature", "properties": { "id": "hv61919541", "mag": 2.2, "time": 1506268362680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.553, 19.106833, 58.134 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898071", "mag": 1.35, "time": 1506268343880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.978833, 37.602333, 0.75 ] } },
+ { "type": "Feature", "properties": { "id": "uw61333251", "mag": 0.99, "time": 1506267835060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.7565, 46.8405, 0.46 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249227", "mag": 1.55, "time": 1506267791100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.045667, 38.595, 10.17 ] } },
+ { "type": "Feature", "properties": { "id": "nc72898046", "mag": 1.31, "time": 1506267662950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.359333, 36.063833, 13.03 ] } },
+ { "type": "Feature", "properties": { "id": "uw61333241", "mag": 1.02, "time": 1506266858960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.7535, 46.835833, -0.06 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atyb", "mag": 4.2, "time": 1506265370020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.9623, 16.5258, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16891829", "mag": 1.1, "time": 1506265012702, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.7832, 60.3293, 15.0 ] } },
+ { "type": "Feature", "properties": { "id": "uw61333221", "mag": 2.23, "time": 1506264885990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -124.458, 41.843167, 29.32 ] } },
+ { "type": "Feature", "properties": { "id": "ci38009392", "mag": 2.47, "time": 1506263949730, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.965667, 33.074, 3.01 ] } },
+ { "type": "Feature", "properties": { "id": "ak16891827", "mag": 1.6, "time": 1506263040480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.0762, 68.8735, 7.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935406", "mag": 1.9, "time": 1506262994682, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.4328, 58.9133, 119.1 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249217", "mag": 1.98, "time": 1506261948290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -108.8955, 38.308167, 2.5 ] } },
+ { "type": "Feature", "properties": { "id": "uw61333201", "mag": 1.01, "time": 1506261154820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.757333, 46.836833, 0.83 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606861", "mag": 1.0, "time": 1506260845911, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9076, 39.4306, 7.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16891323", "mag": 1.6, "time": 1506260101784, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.2725, 63.8369, 122.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935404", "mag": 1.9, "time": 1506259949572, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -175.9271, 51.4777, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16891318", "mag": 1.4, "time": 1506258938436, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.1228, 60.1784, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935403", "mag": 1.5, "time": 1506258927685, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.537, 59.7654, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awkh", "mag": 4.5, "time": 1506257940620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -176.6787, -21.4068, 6.58 ] } },
+ { "type": "Feature", "properties": { "id": "ci38009360", "mag": 1.01, "time": 1506257616920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.6935, 33.4475, 13.86 ] } },
+ { "type": "Feature", "properties": { "id": "hv61919476", "mag": 2.71, "time": 1506257049620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.326172, 19.400499, 6.36 ] } },
+ { "type": "Feature", "properties": { "id": "us2000azwe", "mag": 4.0, "time": 1506256906900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.0503, 15.0164, 47.05 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935402", "mag": 1.3, "time": 1506256449894, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.1247, 62.5252, 67.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atx8", "mag": 4.5, "time": 1506256396240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -95.2151, 16.4456, 23.74 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awke", "mag": 4.3, "time": 1506254896510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -99.7664, -36.2005, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atx1", "mag": 4.3, "time": 1506253816940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.8221, 15.5422, 39.51 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897966", "mag": 1.94, "time": 1506252917940, "felt": 0, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.353833, 38.334333, 8.17 ] } },
+ { "type": "Feature", "properties": { "id": "ak16890316", "mag": 1.9, "time": 1506251419309, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.7084, 53.1628, 25.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935399", "mag": 2.2, "time": 1506251253254, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.9705, 58.4119, 157.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awkb", "mag": 4.4, "time": 1506250943050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.3134, -22.0133, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38009336", "mag": 1.4, "time": 1506250687150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.573, 33.198833, 3.26 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935398", "mag": 1.7, "time": 1506250678217, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.541, 51.1205, 34.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci37166588", "mag": 1.39, "time": 1506250675520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.547333, 33.281167, 1.13 ] } },
+ { "type": "Feature", "properties": { "id": "ci38009328", "mag": 1.47, "time": 1506250567750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.565833, 33.2015, 2.63 ] } },
+ { "type": "Feature", "properties": { "id": "us2000azw4", "mag": 4.0, "time": 1506250079340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.2354, 15.2643, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897961", "mag": 1.0, "time": 1506249470110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.771164, 38.839333, 1.45 ] } },
+ { "type": "Feature", "properties": { "id": "ak16890295", "mag": 3.1, "time": 1506249009854, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.4939, 58.556, 142.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci38009320", "mag": 1.29, "time": 1506248967650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.577833, 33.1915, 3.45 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awka", "mag": 4.5, "time": 1506248797510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 101.4422, -3.5379, 76.33 ] } },
+ { "type": "Feature", "properties": { "id": "ak16889805", "mag": 1.1, "time": 1506248542391, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6804, 65.8304, 4.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16889804", "mag": 1.4, "time": 1506248465317, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.0578, 61.0579, 16.4 ] } },
+ { "type": "Feature", "properties": { "id": "hv61919431", "mag": 2.09, "time": 1506248237750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.282165, 19.41, 0.97 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atwe", "mag": 5.8, "time": 1506247572180, "felt": 12, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.0996, 15.3335, 55.04 ] } },
+ { "type": "Feature", "properties": { "id": "ak16889794", "mag": 1.8, "time": 1506247473558, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.2731, 60.4252, 19.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16889792", "mag": 1.2, "time": 1506245981072, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.4789, 61.3979, 20.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935392", "mag": 2.2, "time": 1506245821194, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -176.1457, 52.299, 147.0 ] } },
+ { "type": "Feature", "properties": { "id": "uw61333151", "mag": 1.32, "time": 1506245720210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.3825, 46.455, 17.05 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atw1", "mag": 4.3, "time": 1506245575860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -86.8213, 11.9773, 72.06 ] } },
+ { "type": "Feature", "properties": { "id": "ak16889787", "mag": 1.5, "time": 1506245559319, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.1034, 61.6735, 30.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897941", "mag": 1.12, "time": 1506245298510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.880333, 37.529333, 3.01 ] } },
+ { "type": "Feature", "properties": { "id": "ak16889785", "mag": 1.4, "time": 1506245231368, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.6899, 61.5181, 15.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atvx", "mag": 4.0, "time": 1506245211400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -95.2276, 16.4152, 5.52 ] } },
+ { "type": "Feature", "properties": { "id": "ak16889300", "mag": 1.5, "time": 1506244274159, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0562, 62.8873, 108.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16889299", "mag": 1.7, "time": 1506243971468, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -142.0331, 60.0823, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16889298", "mag": 1.2, "time": 1506242695770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7525, 61.9971, 13.3 ] } },
+ { "type": "Feature", "properties": { "id": "hv61919256", "mag": 2.47, "time": 1506242595490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.234167, 19.416667, 25.716 ] } },
+ { "type": "Feature", "properties": { "id": "ak16889296", "mag": 1.5, "time": 1506242565319, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7169, 65.857, 21.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897921", "mag": 1.06, "time": 1506242001250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8435, 37.469667, 2.92 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897911", "mag": 2.08, "time": 1506241606310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.552333, 36.824833, 5.39 ] } },
+ { "type": "Feature", "properties": { "id": "ak16888862", "mag": 1.4, "time": 1506241109945, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2949, 62.9113, 106.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci38009280", "mag": 1.11, "time": 1506240906400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.0385, 33.996167, 14.68 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atvi", "mag": 2.6, "time": 1506240803150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4513, 42.6043, 5.23 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atvl", "mag": 4.0, "time": 1506239983840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.9034, 16.4793, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16888812", "mag": 1.7, "time": 1506239643860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.1541, 59.6562, 69.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935382", "mag": 1.8, "time": 1506239506704, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.5249, 57.6124, 45.4 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257374", "mag": 1.2, "time": 1506238135570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.523333, 46.868, 11.76 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606790", "mag": 1.5, "time": 1506237560657, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.1999, 42.1841, 0.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atv2", "mag": 4.3, "time": 1506236966640, "felt": 7, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -71.864, -35.1565, 48.32 ] } },
+ { "type": "Feature", "properties": { "id": "ak16888374", "mag": 1.9, "time": 1506236724000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8397, 62.9467, 106.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16888373", "mag": 1.0, "time": 1506236683719, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.1115, 61.3903, 3.2 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249142", "mag": 1.26, "time": 1506236544020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.028333, 44.8, 10.63 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897871", "mag": 1.79, "time": 1506236124510, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.845333, 35.541667, 5.98 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897866", "mag": 2.12, "time": 1506235870210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.3545, 38.341333, 8.25 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935379", "mag": 1.6, "time": 1506235725999, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -176.5436, 51.4418, 21.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atuj", "mag": 4.6, "time": 1506235179700, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -75.5466, -14.3043, 33.52 ] } },
+ { "type": "Feature", "properties": { "id": "nc72903821", "mag": 1.02, "time": 1506234997060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.948167, 41.046333, 9.53 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897856", "mag": 1.71, "time": 1506234937540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8185, 37.471333, 1.25 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935378", "mag": 1.3, "time": 1506234863595, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9435, 61.261, 59.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci38009240", "mag": 0.99, "time": 1506234721960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.828167, 33.977667, 16.65 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935377", "mag": 3.3, "time": 1506234648623, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -173.3164, 50.4387, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16888327", "mag": 1.1, "time": 1506234051194, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.0067, 67.8619, 3.3 ] } },
+ { "type": "Feature", "properties": { "id": "hv61919146", "mag": 1.76, "time": 1506233551670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.438667, 19.110833, 40.565 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897836", "mag": 1.19, "time": 1506233494190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.879667, 37.536833, 3.32 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897831", "mag": 1.19, "time": 1506233212800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.880167, 37.536833, 3.36 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935375", "mag": 1.1, "time": 1506232927752, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.625, 63.077, 2.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16887898", "mag": 1.9, "time": 1506232339124, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4442, 51.588, 12.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atud", "mag": 4.6, "time": 1506232184760, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 122.3102, 23.9217, 19.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16887893", "mag": 1.8, "time": 1506231025885, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.6676, 61.5229, 16.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000attv", "mag": 3.2, "time": 1506230915380, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4686, 42.6086, 5.28 ] } },
+ { "type": "Feature", "properties": { "id": "ci38009080", "mag": 1.1, "time": 1506230493370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.65, 35.937333, 3.69 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897801", "mag": 1.86, "time": 1506230402950, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.880833, 37.5355, 3.17 ] } },
+ { "type": "Feature", "properties": { "id": "us2000attk", "mag": 4.4, "time": 1506229834430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.9698, 16.526, 14.16 ] } },
+ { "type": "Feature", "properties": { "id": "ak16887845", "mag": 2.2, "time": 1506229788458, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3609, 60.3798, 13.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci38009064", "mag": 2.54, "time": 1506229471590, "felt": 15, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.708833, 34.611167, -0.32 ] } },
+ { "type": "Feature", "properties": { "id": "ak16887419", "mag": 2.5, "time": 1506228712730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.1558, 57.6827, 0.6 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249092", "mag": 1.45, "time": 1506228417670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.041833, 38.6065, 7.11 ] } },
+ { "type": "Feature", "properties": { "id": "uu60013144", "mag": 2.65, "time": 1506227971910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.063667, 38.596667, 13.4 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249087", "mag": 3.34, "time": 1506227924130, "felt": 52, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.056, 38.615, 7.09 ] } },
+ { "type": "Feature", "properties": { "id": "ci38009040", "mag": 1.66, "time": 1506227707260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.754667, 32.691333, 7.72 ] } },
+ { "type": "Feature", "properties": { "id": "ak16887417", "mag": 1.4, "time": 1506227635748, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.4813, 59.9807, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "hv61919026", "mag": 1.76, "time": 1506225952210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.284164, 19.394167, 2.71 ] } },
+ { "type": "Feature", "properties": { "id": "hv61918996", "mag": 1.99, "time": 1506224898090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.28067, 19.403999, 1.29 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atsq", "mag": 4.1, "time": 1506223896740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -69.2705, -18.0175, 148.09 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935368", "mag": 2.3, "time": 1506222958411, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -176.4834, 51.3236, 13.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16886952", "mag": 1.2, "time": 1506222874628, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.387, 59.9979, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nm60207271", "mag": 1.17, "time": 1506222175440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -89.522833, 36.477167, 7.22 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897746", "mag": 1.28, "time": 1506221915120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.720833, 38.788, 2.34 ] } },
+ { "type": "Feature", "properties": { "id": "ak16886490", "mag": 1.1, "time": 1506220290807, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.3418, 62.9812, 77.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atse", "mag": 4.6, "time": 1506220200040, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -71.2801, -27.8834, 30.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935365", "mag": 1.8, "time": 1506220032447, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.1268, 57.8123, 70.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897736", "mag": 1.07, "time": 1506219512840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8245, 37.478833, 1.34 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935364", "mag": 2.4, "time": 1506219397177, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -169.8092, 52.1986, 20.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897726", "mag": 2.48, "time": 1506219108260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -125.023333, 40.3465, 9.33 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atsa", "mag": 4.2, "time": 1506218615340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.8425, 16.574, 39.83 ] } },
+ { "type": "Feature", "properties": { "id": "ak16935363", "mag": 1.0, "time": 1506217950145, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.5769, 68.6004, 0.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897701", "mag": 1.48, "time": 1506217326030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.819333, 37.475, -0.04 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897696", "mag": 1.19, "time": 1506216792400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.125, 36.5355, 3.43 ] } },
+ { "type": "Feature", "properties": { "id": "ak16886371", "mag": 2.1, "time": 1506216606733, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 179.8852, 51.4616, 53.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atrn", "mag": 3.8, "time": 1506215497620, "felt": 67, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.1371, 36.3727, 2.82 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897686", "mag": 2.17, "time": 1506215076790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.141167, 36.555, 2.89 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008976", "mag": 1.32, "time": 1506215071310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.450333, 34.2865, 7.66 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atrk", "mag": 5.0, "time": 1506214584220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 161.7808, -10.6598, 47.61 ] } },
+ { "type": "Feature", "properties": { "id": "ak16885992", "mag": 2.0, "time": 1506214179876, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6803, 63.2188, 129.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008968", "mag": 1.0, "time": 1506214163490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.8005, 33.996, 18.05 ] } },
+ { "type": "Feature", "properties": { "id": "ak16885991", "mag": 1.4, "time": 1506214156491, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.6167, 63.06, 7.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16885975", "mag": 2.0, "time": 1506213434632, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.5807, 63.0643, 7.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16885911", "mag": 1.9, "time": 1506213142249, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.5965, 63.0635, 4.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atre", "mag": 4.4, "time": 1506212946200, "felt": 13, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -88.7877, 12.9849, 60.16 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897676", "mag": 1.44, "time": 1506212851640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.836167, 37.574667, 1.65 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008928", "mag": 1.02, "time": 1506212597460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.178333, 33.195833, 6.76 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008920", "mag": 1.07, "time": 1506212251010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.430333, 34.0525, 9.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16885578", "mag": 1.8, "time": 1506211566495, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.6255, 61.4518, 71.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16885576", "mag": 1.5, "time": 1506211049943, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.5978, 61.5229, 17.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16885547", "mag": 1.3, "time": 1506210780241, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.6346, 63.8335, 106.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16885533", "mag": 1.6, "time": 1506209676573, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.5334, 61.8507, 43.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897656", "mag": 1.03, "time": 1506208996140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.7145, 38.772667, 2.47 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008912", "mag": 1.4, "time": 1506208905320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.801167, 33.9745, 17.62 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008904", "mag": 1.35, "time": 1506208456300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.924333, 33.9845, 4.74 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atqq", "mag": 4.5, "time": 1506207994550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.9873, 16.6593, 8.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16885149", "mag": 1.0, "time": 1506207804984, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3702, 64.9969, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "uu60249057", "mag": 2.12, "time": 1506207074140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.304, 44.720667, 6.11 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897646", "mag": 1.23, "time": 1506206872800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.735333, 38.787167, 1.28 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atq4", "mag": 4.6, "time": 1506204121620, "felt": 194, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -71.616, -33.7421, 44.72 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008864", "mag": 1.58, "time": 1506203611410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.609, 33.181333, 2.86 ] } },
+ { "type": "Feature", "properties": { "id": "ak16884706", "mag": 3.1, "time": 1506202930250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 178.1771, 51.8267, 132.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atpq", "mag": 4.9, "time": 1506201617890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 124.82, 7.5438, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atpp", "mag": 4.9, "time": 1506201494980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 124.8199, 7.5946, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16884645", "mag": 1.0, "time": 1506201077397, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.96, 64.7531, 1.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atpb", "mag": 5.7, "time": 1506199628760, "felt": 53, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 124.8736, 7.6285, 31.39 ] } },
+ { "type": "Feature", "properties": { "id": "ak16884300", "mag": 2.8, "time": 1506199486287, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -169.6652, 52.5903, 67.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897611", "mag": 1.26, "time": 1506199458450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.821667, 37.604333, 4.01 ] } },
+ { "type": "Feature", "properties": { "id": "ak16884298", "mag": 1.2, "time": 1506198439700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.5445, 59.7818, 0.1 ] } },
+ { "type": "Feature", "properties": { "id": "uw61332966", "mag": 1.38, "time": 1506197756870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.684333, 48.248, 9.29 ] } },
+ { "type": "Feature", "properties": { "id": "ak16884247", "mag": 2.2, "time": 1506197594492, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.0461, 51.8485, 92.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16883936", "mag": 1.0, "time": 1506196999226, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.8099, 64.7452, 10.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008816", "mag": 1.2, "time": 1506196919720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.403833, 34.223333, 11.34 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897586", "mag": 2.51, "time": 1506196446140, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -124.396167, 40.494333, 25.08 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897566", "mag": 2.07, "time": 1506194792800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.835833, 37.572667, 1.63 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897561", "mag": 1.83, "time": 1506194678430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8365, 37.574, 1.71 ] } },
+ { "type": "Feature", "properties": { "id": "ak16883864", "mag": 2.8, "time": 1506194224396, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -175.8992, 51.3293, 31.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16883866", "mag": 1.0, "time": 1506193955730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.8833, 59.8983, 14.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897541", "mag": 1.74, "time": 1506193009290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.820833, 37.6045, 4.22 ] } },
+ { "type": "Feature", "properties": { "id": "ak16883553", "mag": 1.2, "time": 1506192900100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.4017, 65.5315, 14.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16883554", "mag": 1.2, "time": 1506192680980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -157.0611, 67.1099, 2.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atnx", "mag": 2.6, "time": 1506192601240, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4214, 42.5566, 9.03 ] } },
+ { "type": "Feature", "properties": { "id": "ak16883552", "mag": 1.1, "time": 1506192410113, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.197, 60.3011, 0.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897531", "mag": 2.28, "time": 1506191594770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.821667, 37.604, 4.22 ] } },
+ { "type": "Feature", "properties": { "id": "us2000augr", "mag": 4.5, "time": 1506191531170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -138.4442, -11.942, 15.62 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008760", "mag": 1.23, "time": 1506190682920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.415167, 33.1465, 4.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008752", "mag": 1.14, "time": 1506190401470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.972, 33.217167, 7.81 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897521", "mag": 1.68, "time": 1506190013010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.811833, 38.821167, 1.49 ] } },
+ { "type": "Feature", "properties": { "id": "ak16883482", "mag": 1.4, "time": 1506189726896, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.742, 64.4224, 18.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16923786", "mag": 2.7, "time": 1506189654902, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -163.1544, 53.4208, 25.6 ] } },
+ { "type": "Feature", "properties": { "id": "hv61918336", "mag": 2.94, "time": 1506189242240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.611167, 19.4215, 2.482 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atn1", "mag": 4.4, "time": 1506188901480, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 125.1457, 7.0739, 96.15 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897511", "mag": 1.1, "time": 1506188786860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.7965, 37.484667, 7.75 ] } },
+ { "type": "Feature", "properties": { "id": "ak16883178", "mag": 2.9, "time": 1506188673480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.5715, 58.1668, 7.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16923784", "mag": 1.7, "time": 1506187667099, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.6425, 60.6215, 67.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atms", "mag": 5.0, "time": 1506187553100, "felt": 30, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -68.9096, -30.7535, 117.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008720", "mag": 1.14, "time": 1506187127550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.4515, 34.231833, 12.91 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897476", "mag": 2.49, "time": 1506186613660, "felt": 6, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.3425, 36.714, -0.57 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897471", "mag": 1.19, "time": 1506186452260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.773834, 38.833832, 1.91 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008696", "mag": 1.09, "time": 1506186268310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.848333, 36.183167, 3.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008688", "mag": 1.35, "time": 1506185983910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.845167, 36.179667, 2.43 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897466", "mag": 1.85, "time": 1506185948480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.807, 38.052667, 0.81 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atmg", "mag": 4.4, "time": 1506185133990, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 71.1291, 36.4703, 91.01 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atmf", "mag": 4.5, "time": 1506184783190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -69.21, -28.772, 131.62 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897451", "mag": 1.44, "time": 1506184758630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.9955, 36.407667, 6.86 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008672", "mag": 2.68, "time": 1506184689590, "felt": 16, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.8015, 33.498333, 5.63 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008664", "mag": 1.11, "time": 1506184563870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.261167, 34.006833, 14.43 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atmc", "mag": 2.7, "time": 1506184527900, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4447, 42.5711, 9.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atma", "mag": 4.4, "time": 1506183893420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7171, 16.8156, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897441", "mag": 1.31, "time": 1506183491090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.606833, 37.170833, 12.95 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897436", "mag": 1.56, "time": 1506183390100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.606833, 37.198667, 10.68 ] } },
+ { "type": "Feature", "properties": { "id": "ak16882778", "mag": 2.6, "time": 1506183338101, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -157.6342, 57.1033, 9.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16923782", "mag": 2.0, "time": 1506182696586, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.8058, 59.0921, 75.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16882769", "mag": 3.1, "time": 1506182496691, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -173.0149, 52.3026, 176.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atm1", "mag": 4.3, "time": 1506182042160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 62.7519, 26.1798, 45.69 ] } },
+ { "type": "Feature", "properties": { "id": "ak16882474", "mag": 1.9, "time": 1506181429544, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7141, 61.0689, 15.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16882473", "mag": 1.1, "time": 1506181415825, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.5959, 60.5708, 14.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897426", "mag": 1.24, "time": 1506180532690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.623667, 37.188167, 10.74 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008584", "mag": 1.58, "time": 1506180105990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.444, 33.030667, 2.87 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atlk", "mag": 3.8, "time": 1506180000610, "felt": 14, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4292, 42.5433, 9.91 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atlf", "mag": 4.2, "time": 1506179194220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -95.0107, 16.603, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257194", "mag": 1.15, "time": 1506178837080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.525833, 46.886, 12.66 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606739", "mag": 1.0, "time": 1506178325112, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.0924, 40.2311, 5.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008536", "mag": 1.59, "time": 1506177881730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.795667, 33.495667, 3.67 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atkr", "mag": 4.9, "time": 1506177106540, "felt": 5, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.8831, 16.6905, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atku", "mag": 4.2, "time": 1506176872070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.97, 16.7939, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897386", "mag": 1.06, "time": 1506176360420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.811667, 38.818667, 2.57 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008512", "mag": 2.34, "time": 1506176315810, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.0575, 34.503333, 8.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atkn", "mag": 4.4, "time": 1506176300040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -95.1269, 16.7434, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16882104", "mag": 1.1, "time": 1506175629079, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.8075, 60.3407, 9.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897361", "mag": 0.96, "time": 1506174820850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.612, 37.392833, 13.92 ] } },
+ { "type": "Feature", "properties": { "id": "ak16881826", "mag": 2.5, "time": 1506174802909, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.6324, 58.8539, 123.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008496", "mag": 1.78, "time": 1506174424760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.817167, 34.867667, 4.67 ] } },
+ { "type": "Feature", "properties": { "id": "ak16881795", "mag": 1.1, "time": 1506173527174, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.8881, 64.8661, 12.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atke", "mag": 5.1, "time": 1506173434140, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 120.8176, 13.6704, 193.27 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atk8", "mag": 4.8, "time": 1506173052110, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.9123, 16.7308, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16881771", "mag": 1.2, "time": 1506172200912, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.8726, 64.8605, 11.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16881749", "mag": 1.6, "time": 1506171778198, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.8844, 64.8563, 10.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atjy", "mag": 4.3, "time": 1506171499860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 129.9043, -2.9658, 44.93 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248857", "mag": 1.35, "time": 1506171338590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.890833, 37.000833, 18.28 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atjv", "mag": 6.1, "time": 1506171182420, "felt": 203, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.9509, 16.7732, 9.62 ] } },
+ { "type": "Feature", "properties": { "id": "ak16881467", "mag": 1.4, "time": 1506170949832, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.8768, 64.9158, 8.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16881459", "mag": 1.7, "time": 1506170669236, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.6941, 64.6752, 17.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16881453", "mag": 1.5, "time": 1506170369239, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.9047, 64.8585, 16.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atjm", "mag": 4.6, "time": 1506169519350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 142.1923, 31.1823, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avhc", "mag": 2.6, "time": 1506167877970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -175.84, 52.2553, 189.02 ] } },
+ { "type": "Feature", "properties": { "id": "ak16881171", "mag": 2.3, "time": 1506167030162, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -175.8612, 51.6605, 44.9 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248832", "mag": 1.05, "time": 1506167017860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.340667, 40.274333, 3.24 ] } },
+ { "type": "Feature", "properties": { "id": "us2000augc", "mag": 4.6, "time": 1506166612290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 154.9573, -5.8521, 181.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16881170", "mag": 1.2, "time": 1506166372386, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.7852, 62.5649, 5.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16881168", "mag": 1.3, "time": 1506166038103, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.5567, 63.2977, 0.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897346", "mag": 1.79, "time": 1506165696260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.112333, 37.231, 6.72 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avha", "mag": 3.4, "time": 1506165671380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -170.4308, 52.2784, 36.52 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008448", "mag": 1.41, "time": 1506165347360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.561667, 32.957167, 8.78 ] } },
+ { "type": "Feature", "properties": { "id": "ak16881165", "mag": 1.3, "time": 1506165145820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.3968, 60.1913, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16881154", "mag": 1.7, "time": 1506164474729, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.4355, 60.0468, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16923760", "mag": 1.5, "time": 1506164269172, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.3627, 51.5307, 19.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atis", "mag": 5.8, "time": 1506163088980, "felt": 26, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.1625, 15.6979, 74.22 ] } },
+ { "type": "Feature", "properties": { "id": "ak16880880", "mag": 2.0, "time": 1506162923314, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.4514, 58.8323, 121.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16880879", "mag": 1.5, "time": 1506162509845, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.4379, 59.9894, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897331", "mag": 1.09, "time": 1506162381540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.827, 37.610667, 4.37 ] } },
+ { "type": "Feature", "properties": { "id": "ak16880874", "mag": 1.6, "time": 1506161778674, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.9513, 62.6833, 55.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16880872", "mag": 2.2, "time": 1506161709130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.2999, 57.8298, 119.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16880868", "mag": 1.9, "time": 1506161335096, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.0011, 60.342, 8.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16880864", "mag": 1.5, "time": 1506160533641, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2829, 64.8808, 8.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897316", "mag": 1.12, "time": 1506160300400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.288667, 36.670833, 2.66 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ati0", "mag": 4.5, "time": 1506158356450, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -77.7746, 9.1385, 52.29 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897301", "mag": 3.32, "time": 1506157219710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -127.0845, 40.348333, 11.62 ] } },
+ { "type": "Feature", "properties": { "id": "uw61332771", "mag": 1.35, "time": 1506157207660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.313333, 47.606333, 8.75 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897271", "mag": 1.14, "time": 1506156362630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.254167, 36.643167, 6.03 ] } },
+ { "type": "Feature", "properties": { "id": "ak16880667", "mag": 1.1, "time": 1506155808049, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.5764, 61.5311, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ati7", "mag": 3.5, "time": 1506155357560, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 129.0524, 41.3116, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atht", "mag": 4.7, "time": 1506154802240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 152.0272, 44.3731, 31.79 ] } },
+ { "type": "Feature", "properties": { "id": "ak16880659", "mag": 1.0, "time": 1506154668324, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -142.1159, 65.4383, 3.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16880589", "mag": 2.0, "time": 1506153946841, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.6279, 61.5946, 79.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897246", "mag": 1.31, "time": 1506153823970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.762, 38.794, 0.72 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008352", "mag": 1.63, "time": 1506153604550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.4425, 33.0265, 5.8 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606675", "mag": 1.2, "time": 1506152057931, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9167, 38.4054, 10.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16880394", "mag": 3.6, "time": 1506152017544, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -170.3853, 52.2081, 31.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16923747", "mag": 1.9, "time": 1506151958661, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4175, 51.6761, 16.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008344", "mag": 1.48, "time": 1506151638300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.324167, 33.310833, 12.5 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248802", "mag": 2.41, "time": 1506151450100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.419667, 42.565833, 9.15 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ath8", "mag": 4.1, "time": 1506151137510, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.2976, 15.8203, 61.65 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897236", "mag": 1.32, "time": 1506151113910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.898167, 37.524833, 12.73 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ath6", "mag": 4.1, "time": 1506150769430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.3958, 15.2768, 10.51 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008328", "mag": 1.27, "time": 1506150100050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.200167, 33.893167, 7.86 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606672", "mag": 1.5, "time": 1506150086518, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.2696, 38.2952, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000augd", "mag": 4.4, "time": 1506150000550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 144.8812, 20.1804, 76.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008320", "mag": 1.19, "time": 1506149119830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.9395, 33.982167, 4.39 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atgz", "mag": 4.2, "time": 1506149095090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -87.0247, 10.6523, 19.49 ] } },
+ { "type": "Feature", "properties": { "id": "ak16880326", "mag": 2.0, "time": 1506149068802, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.0613, 61.3779, 34.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ath2", "mag": 4.7, "time": 1506149033340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 129.7584, -3.0863, 34.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16880327", "mag": 1.1, "time": 1506149006055, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.2865, 68.6023, 13.4 ] } },
+ { "type": "Feature", "properties": { "id": "uw61332671", "mag": 1.77, "time": 1506147857710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.281667, 47.7015, 25.73 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897231", "mag": 2.11, "time": 1506147638730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.6555, 36.061833, 9.09 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aug5", "mag": 4.5, "time": 1506146537200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -179.8683, -24.2891, 524.27 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008296", "mag": 1.25, "time": 1506146485640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.616, 33.586167, 13.04 ] } },
+ { "type": "Feature", "properties": { "id": "ak16880116", "mag": 1.8, "time": 1506145682289, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -142.2213, 66.2475, 7.6 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606730", "mag": 1.3, "time": 1506145648978, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.1876, 38.2127, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008288", "mag": 1.58, "time": 1506145525140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.4415, 32.5255, 16.12 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606667", "mag": 1.5, "time": 1506145236843, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.917, 38.3346, 11.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atgp", "mag": 4.5, "time": 1506143865490, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -74.7175, 9.7486, 52.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000athl", "mag": 4.4, "time": 1506143271620, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 108.9322, -8.2399, 66.53 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897216", "mag": 1.88, "time": 1506142958730, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.9835, 40.89, 15.76 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897211", "mag": 1.17, "time": 1506142616000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.827667, 38.837166, 1.66 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897201", "mag": 0.95, "time": 1506142430900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.848, 38.839168, 2.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897191", "mag": 1.9, "time": 1506141940330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.177333, 40.264333, 3.77 ] } },
+ { "type": "Feature", "properties": { "id": "ak16879870", "mag": 2.3, "time": 1506141876996, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.6246, 59.199, 103.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16879869", "mag": 1.3, "time": 1506141297637, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.7807, 60.3298, 7.0 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606723", "mag": 1.0, "time": 1506140560559, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.2867, 38.4929, 10.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008224", "mag": 0.95, "time": 1506140386650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.208667, 33.3405, 11.26 ] } },
+ { "type": "Feature", "properties": { "id": "ak16879830", "mag": 1.4, "time": 1506140318328, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2827, 60.4409, 47.8 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606722", "mag": 1.2, "time": 1506140002001, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9021, 38.3867, 7.8 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606720", "mag": 1.1, "time": 1506139980519, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.2929, 38.489, 10.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897176", "mag": 1.78, "time": 1506139907070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.285333, 38.488, 8.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897171", "mag": 1.19, "time": 1506139518870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.735336, 38.790001, 1.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897166", "mag": 2.9, "time": 1506138206720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -126.992667, 40.335333, 11.62 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atgc", "mag": 4.2, "time": 1506137667560, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.9729, 15.6003, 33.69 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897161", "mag": 3.28, "time": 1506137168410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -127.014, 40.471167, 11.62 ] } },
+ { "type": "Feature", "properties": { "id": "ak16879595", "mag": 2.4, "time": 1506137087441, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.8458, 58.348, 0.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16923736", "mag": 1.3, "time": 1506135643558, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.0957, 61.7127, 43.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16879403", "mag": 1.0, "time": 1506135058360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.4982, 63.0889, 5.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16923734", "mag": 2.5, "time": 1506133328382, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -161.4425, 54.2787, 25.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16879357", "mag": 2.6, "time": 1506132937319, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.3477, 59.8339, 130.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16879346", "mag": 2.2, "time": 1506132165090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.4939, 67.7172, 16.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16879344", "mag": 2.6, "time": 1506132016431, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -161.1196, 54.9637, 82.8 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606656", "mag": 1.3, "time": 1506130971840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.3283, 38.6945, 9.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897141", "mag": 2.05, "time": 1506130087910, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -124.4195, 40.470333, 27.65 ] } },
+ { "type": "Feature", "properties": { "id": "ak16879132", "mag": 1.4, "time": 1506129632041, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.0373, 62.0301, 10.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atfh", "mag": 2.6, "time": 1506129518070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4417, 42.5563, 10.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897136", "mag": 1.16, "time": 1506129465180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.888333, 36.006167, 8.34 ] } },
+ { "type": "Feature", "properties": { "id": "ak16879131", "mag": 1.2, "time": 1506128472934, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.7081, 62.2652, 36.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897126", "mag": 2.19, "time": 1506127820390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.640167, 36.048667, 19.79 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aug3", "mag": 4.3, "time": 1506127768780, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 130.2316, -6.5899, 129.05 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atfc", "mag": 4.4, "time": 1506126533850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4878, -17.8955, 579.93 ] } },
+ { "type": "Feature", "properties": { "id": "ak16878940", "mag": 1.3, "time": 1506126488960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.4306, 62.433, 39.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16923727", "mag": 1.8, "time": 1506125768611, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.7156, 59.1725, 89.1 ] } },
+ { "type": "Feature", "properties": { "id": "uw61332606", "mag": 1.37, "time": 1506125724350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.8475, 47.767167, 17.62 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atf6", "mag": 4.6, "time": 1506125651480, "felt": 34, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 74.5944, 34.2131, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16923726", "mag": 1.0, "time": 1506125523162, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.4554, 62.0263, 40.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926133", "mag": 2.1, "time": 1506124308750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.1191, 56.3855, 12.5 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606641", "mag": 1.1, "time": 1506124233235, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9048, 38.3823, 7.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atex", "mag": 5.3, "time": 1506124170400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 141.0234, 31.3473, 31.02 ] } },
+ { "type": "Feature", "properties": { "id": "ak16878728", "mag": 1.1, "time": 1506123741185, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3949, 64.9801, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "uw61332586", "mag": 1.03, "time": 1506123697550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.176833, 48.224167, 9.44 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926129", "mag": 1.4, "time": 1506123469629, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -135.8468, 66.6906, 13.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16878722", "mag": 1.4, "time": 1506123273253, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -142.5552, 60.2789, 8.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awr8", "mag": 4.2, "time": 1506122891910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 144.1488, -4.6487, 111.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ateh", "mag": 4.9, "time": 1506122747420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 159.6233, -7.7533, 37.28 ] } },
+ { "type": "Feature", "properties": { "id": "uw61332576", "mag": 1.22, "time": 1506122597830, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.362, 45.695667, -0.73 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926127", "mag": 1.8, "time": 1506122331683, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.4507, 53.4966, 5.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897116", "mag": 3.91, "time": 1506122239050, "felt": 60, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -124.417333, 40.495333, 26.88 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897111", "mag": 2.5, "time": 1506122222600, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.119, 36.5365, 3.92 ] } },
+ { "type": "Feature", "properties": { "id": "ak16878700", "mag": 1.8, "time": 1506121093447, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.734, 61.0547, 12.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awr7", "mag": 4.8, "time": 1506120979560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -35.8191, 7.4851, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257104", "mag": 0.96, "time": 1506120805630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.649833, 45.463833, 2.97 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008136", "mag": 1.88, "time": 1506120529920, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.8015, 33.496833, 4.18 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897096", "mag": 1.12, "time": 1506120001160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.939167, 37.600667, 1.08 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awra", "mag": 4.0, "time": 1506119896150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 128.7982, -5.8817, 310.41 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926125", "mag": 2.1, "time": 1506118947000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.1588, 60.2166, 143.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008120", "mag": 1.02, "time": 1506118476380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.0015, 34.316333, 6.69 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897091", "mag": 1.46, "time": 1506118411060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.8605, 39.795333, 0.38 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926124", "mag": 1.8, "time": 1506118096316, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.2941, 60.3659, 4.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897081", "mag": 1.12, "time": 1506117239720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.262833, 36.6425, 4.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897086", "mag": 2.87, "time": 1506117196030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -126.983667, 40.3995, 16.96 ] } },
+ { "type": "Feature", "properties": { "id": "hv61917311", "mag": 1.89, "time": 1506116007530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.434662, 19.227833, 33.59 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926123", "mag": 1.1, "time": 1506115983704, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.6992, 61.5094, 7.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926121", "mag": 1.9, "time": 1506115445859, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.1112, 60.0903, 117.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926120", "mag": 1.1, "time": 1506115334031, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0777, 62.5847, 77.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awr9", "mag": 4.3, "time": 1506115308090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.1151, -17.7862, 593.28 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926119", "mag": 2.3, "time": 1506114986922, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.0025, 54.0581, 74.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926118", "mag": 1.7, "time": 1506114971248, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.8129, 59.8684, 52.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897066", "mag": 0.96, "time": 1506114595240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.793999, 38.820167, 2.73 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atdb", "mag": 2.4, "time": 1506114466770, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.7172, 36.3761, 4.22 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926117", "mag": 2.5, "time": 1506113979958, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -158.1399, 56.7494, 112.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16878294", "mag": 1.9, "time": 1506113817766, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.1371, 60.4549, 78.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16878292", "mag": 1.4, "time": 1506113608674, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.3651, 61.5158, 28.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16878288", "mag": 2.0, "time": 1506113191350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.6595, 59.6404, 74.9 ] } },
+ { "type": "Feature", "properties": { "id": "hv61917256", "mag": 1.43, "time": 1506112916300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.825667, 19.312167, 8.904 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atcg", "mag": 3.0, "time": 1506112409690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -126.6543, 40.4678, 10.42 ] } },
+ { "type": "Feature", "properties": { "id": "ak16878117", "mag": 1.1, "time": 1506111493188, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.4364, 62.2279, 3.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16878112", "mag": 1.8, "time": 1506111203565, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.6978, 58.82, 10.8 ] } },
+ { "type": "Feature", "properties": { "id": "nm60207231", "mag": 0.97, "time": 1506111124010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -89.499167, 36.239, 6.94 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atbf", "mag": 5.7, "time": 1506109815030, "felt": 112, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ -126.8342, 40.4144, 11.01 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606606", "mag": 1.7, "time": 1506109275519, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.0338, 40.677, 7.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897011", "mag": 1.34, "time": 1506108443760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.041, 35.58, -0.28 ] } },
+ { "type": "Feature", "properties": { "id": "ak16877921", "mag": 1.1, "time": 1506108429374, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.752, 61.522, 5.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008072", "mag": 1.35, "time": 1506108266330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.202333, 34.987667, -0.83 ] } },
+ { "type": "Feature", "properties": { "id": "nc72897001", "mag": 1.91, "time": 1506107768510, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.7205, 38.773333, 1.82 ] } },
+ { "type": "Feature", "properties": { "id": "ak16877871", "mag": 1.9, "time": 1506107175373, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.7465, 59.9075, 2.4 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257054", "mag": 1.62, "time": 1506107025590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.474333, 46.006833, -2.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16877869", "mag": 1.6, "time": 1506107008752, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.4734, 63.1712, 116.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci38008032", "mag": 1.22, "time": 1506106977520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.345, 35.0535, -1.01 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atab", "mag": 4.5, "time": 1506106483030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 163.2943, 54.9226, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896976", "mag": 1.19, "time": 1506105877560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.816833, 37.4545, 1.72 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896966", "mag": 1.64, "time": 1506105469690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.945833, 41.046833, 10.15 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896961", "mag": 1.88, "time": 1506105394080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.951833, 41.047667, 13.46 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926108", "mag": 2.2, "time": 1506105113528, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.5222, 56.3354, 50.1 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248707", "mag": 1.68, "time": 1506104631990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.397333, 42.534833, 3.76 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007992", "mag": 1.55, "time": 1506104354710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.9245, 35.899167, 6.51 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926107", "mag": 1.2, "time": 1506103639337, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.7358, 61.509, 12.2 ] } },
+ { "type": "Feature", "properties": { "id": "hv61917106", "mag": 1.63, "time": 1506102792120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.303667, 18.980667, 12.732 ] } },
+ { "type": "Feature", "properties": { "id": "ak16877700", "mag": 1.7, "time": 1506102481165, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.8203, 53.8611, 6.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16877698", "mag": 1.6, "time": 1506102300688, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.8262, 53.8452, 5.6 ] } },
+ { "type": "Feature", "properties": { "id": "uw61332361", "mag": 1.6, "time": 1506102282810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.8865, 47.171, 14.87 ] } },
+ { "type": "Feature", "properties": { "id": "ak16877680", "mag": 1.9, "time": 1506102017646, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.8735, 62.7643, 9.8 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248702", "mag": 1.26, "time": 1506101951970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.430167, 42.589833, 6.39 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926103", "mag": 2.3, "time": 1506101692988, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -175.9282, 51.3815, 44.4 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248697", "mag": 2.15, "time": 1506100947090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4775, 42.630333, 2.79 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926102", "mag": 1.9, "time": 1506100904987, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.2736, 59.4158, 101.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16877679", "mag": 1.1, "time": 1506100453436, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.9781, 63.2957, 76.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257039", "mag": 1.48, "time": 1506100139660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.555833, 46.892333, 9.34 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007944", "mag": 1.7, "time": 1506100079090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.656667, 34.638, 3.99 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248692", "mag": 1.13, "time": 1506099922660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.408833, 42.514, 6.63 ] } },
+ { "type": "Feature", "properties": { "id": "ak16877641", "mag": 3.4, "time": 1506099810694, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.7965, 62.8041, 16.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896921", "mag": 1.1, "time": 1506099607680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.816333, 38.808833, 2.84 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896916", "mag": 3.01, "time": 1506099251650, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -125.362167, 40.3915, 25.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16877640", "mag": 1.4, "time": 1506099120563, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -142.4377, 69.5097, 14.2 ] } },
+ { "type": "Feature", "properties": { "id": "hv61917081", "mag": 2.14, "time": 1506099100410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.043667, 19.653667, 42.069 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926098", "mag": 1.7, "time": 1506099097278, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.9448, 59.8191, 95.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci37166268", "mag": 1.03, "time": 1506097971820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.496667, 33.561167, -0.73 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007912", "mag": 1.01, "time": 1506097946840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.406, 33.502167, 13.49 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926097", "mag": 1.6, "time": 1506097726880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.164, 62.5769, 121.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896896", "mag": 0.95, "time": 1506097561860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.062, 35.522667, 1.15 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248682", "mag": 1.11, "time": 1506097353810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.413333, 42.546167, 4.8 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248677", "mag": 1.32, "time": 1506097004840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.424667, 42.595, 4.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896881", "mag": 1.04, "time": 1506096955860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.874667, 37.619833, 8.25 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896886", "mag": 3.06, "time": 1506096897270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -127.211833, 40.581333, 16.62 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248672", "mag": 1.72, "time": 1506096443230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.447833, 42.59, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007888", "mag": 1.36, "time": 1506095052550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.7965, 33.495167, 4.57 ] } },
+ { "type": "Feature", "properties": { "id": "ak16877477", "mag": 1.5, "time": 1506094830892, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.0265, 62.027, 12.7 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248667", "mag": 1.93, "time": 1506094359510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4395, 42.584333, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606574", "mag": 1.6, "time": 1506094148428, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9043, 38.3654, 6.9 ] } },
+ { "type": "Feature", "properties": { "id": "hv61917031", "mag": 1.65, "time": 1506094079130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.279333, 18.952333, 12.363 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248662", "mag": 2.05, "time": 1506093605010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.456167, 42.602333, 3.17 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at3w", "mag": 2.6, "time": 1506093461490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.4231, 36.6952, 7.14 ] } },
+ { "type": "Feature", "properties": { "id": "ak16877317", "mag": 1.7, "time": 1506093374261, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3603, 60.6882, 68.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926094", "mag": 2.1, "time": 1506093004583, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -162.8719, 54.5409, 50.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16877316", "mag": 1.4, "time": 1506092949248, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -158.2867, 67.5064, 1.5 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606471", "mag": 1.3, "time": 1506092280598, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.1113, 38.2958, 6.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awqu", "mag": 4.3, "time": 1506092048390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 121.5573, 18.5841, 62.16 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926092", "mag": 1.3, "time": 1506091602226, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.7703, 57.7311, 11.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16877311", "mag": 1.7, "time": 1506091080231, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.9318, 61.3129, 6.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awqt", "mag": 4.5, "time": 1506090800020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -179.4373, -23.752, 560.01 ] } },
+ { "type": "Feature", "properties": { "id": "nc72904206", "mag": 1.3, "time": 1506089865090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.585167, 40.4755, 15.05 ] } },
+ { "type": "Feature", "properties": { "id": "uw61309452", "mag": 2.05, "time": 1506089062880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.375333, 45.841833, -0.74 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926090", "mag": 1.6, "time": 1506088685970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.6016, 61.227, 75.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16877153", "mag": 1.3, "time": 1506088314826, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.7156, 61.5096, 6.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007840", "mag": 1.07, "time": 1506088185480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.7945, 33.498167, 6.09 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896831", "mag": 1.6, "time": 1506088032960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.772667, 38.806833, -0.28 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896826", "mag": 1.03, "time": 1506088021950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.822502, 38.836666, -0.75 ] } },
+ { "type": "Feature", "properties": { "id": "ak16877151", "mag": 1.7, "time": 1506087613938, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.3362, 62.1574, 11.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awqs", "mag": 4.3, "time": 1506087606500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 179.5624, -22.5585, 578.14 ] } },
+ { "type": "Feature", "properties": { "id": "ak16877148", "mag": 1.9, "time": 1506087297503, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.1731, 59.963, 87.7 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606565", "mag": 1.4, "time": 1506087185810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.2162, 38.2627, 3.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at3c", "mag": 4.4, "time": 1506086932700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 127.2264, -0.3969, 83.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at3j", "mag": 4.5, "time": 1506086850810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.4418, -19.1856, 573.86 ] } },
+ { "type": "Feature", "properties": { "id": "ak16877147", "mag": 1.0, "time": 1506086078366, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0434, 64.7457, 4.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16876989", "mag": 2.3, "time": 1506085118552, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.6021, 60.5947, 0.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896781", "mag": 1.59, "time": 1506084858350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.773167, 38.807167, -0.05 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926084", "mag": 2.4, "time": 1506084692420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 178.7372, 51.5859, 56.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896771", "mag": 1.74, "time": 1506084487230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.771667, 38.808833, 0.14 ] } },
+ { "type": "Feature", "properties": { "id": "ak16876986", "mag": 1.4, "time": 1506084219307, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.7611, 61.5102, 5.3 ] } },
+ { "type": "Feature", "properties": { "id": "hv61916896", "mag": 1.74, "time": 1506083571850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.465667, 19.190833, 35.257 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007816", "mag": 1.33, "time": 1506082333690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.362833, 33.373333, 6.28 ] } },
+ { "type": "Feature", "properties": { "id": "ak16876984", "mag": 1.5, "time": 1506082188790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.7152, 61.5125, 7.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16876981", "mag": 1.8, "time": 1506082118329, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.7017, 61.5113, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16876980", "mag": 2.2, "time": 1506081950238, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.1633, 59.909, 114.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007792", "mag": 1.19, "time": 1506081499660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.503333, 35.304167, 5.36 ] } },
+ { "type": "Feature", "properties": { "id": "ak16876977", "mag": 1.9, "time": 1506081250212, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.1121, 59.2751, 8.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16876978", "mag": 1.2, "time": 1506081151639, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.9729, 61.6318, 32.9 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257019", "mag": 1.05, "time": 1506080783790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.526167, 46.879833, 10.93 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896746", "mag": 1.05, "time": 1506079850700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.73983, 38.763668, 1.53 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896741", "mag": 1.1, "time": 1506078851480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.806, 38.8165, 3.19 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248647", "mag": 1.45, "time": 1506078497740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.445, 42.561833, 8.05 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926075", "mag": 1.9, "time": 1506078386128, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.8777, 58.9992, 112.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16876823", "mag": 1.1, "time": 1506078261719, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.8636, 62.788, 13.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16876821", "mag": 1.4, "time": 1506077123303, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.923, 64.7739, 2.3 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606454", "mag": 2.6, "time": 1506077002610, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.5007, 36.7388, 7.5 ] } },
+ { "type": "Feature", "properties": { "id": "mb80257004", "mag": 1.43, "time": 1506075410640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5235, 46.871, 11.97 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896721", "mag": 1.39, "time": 1506074864460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.841333, 38.844167, 1.9 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606522", "mag": 1.1, "time": 1506074180637, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8235, 38.8303, 13.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007728", "mag": 1.52, "time": 1506073924220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.848, 36.181833, 2.23 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926070", "mag": 1.6, "time": 1506073391784, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -144.2241, 61.5539, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16876665", "mag": 1.6, "time": 1506072332786, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.3288, 63.1852, 90.1 ] } },
+ { "type": "Feature", "properties": { "id": "hv61916851", "mag": 2.09, "time": 1506072148400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.868333, 20.063333, 23.409 ] } },
+ { "type": "Feature", "properties": { "id": "ak16876664", "mag": 1.4, "time": 1506072136495, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.5912, 61.9919, 28.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926067", "mag": 1.3, "time": 1506071322182, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.632, 62.4195, 64.2 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248637", "mag": 1.3, "time": 1506070695930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.437167, 42.637667, 5.25 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at26", "mag": 4.5, "time": 1506070497460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 127.9846, 3.8293, 107.48 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926066", "mag": 1.6, "time": 1506069293924, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.7084, 58.832, 2.4 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248632", "mag": 2.03, "time": 1506068604640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -108.901833, 38.286167, 1.02 ] } },
+ { "type": "Feature", "properties": { "id": "ak16876662", "mag": 1.9, "time": 1506067828515, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.4502, 59.8034, 55.7 ] } },
+ { "type": "Feature", "properties": { "id": "nm60044913", "mag": 2.21, "time": 1506067533090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -92.239, 35.7905, 11.33 ] } },
+ { "type": "Feature", "properties": { "id": "ak16876658", "mag": 3.5, "time": 1506066694779, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -159.9518, 54.8173, 3.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896676", "mag": 1.45, "time": 1506066561830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.764833, 38.786167, 0.53 ] } },
+ { "type": "Feature", "properties": { "id": "uw61309412", "mag": 1.49, "time": 1506066402670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -124.402833, 49.2735, 17.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896671", "mag": 1.2, "time": 1506066223530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8225, 37.524667, 2.51 ] } },
+ { "type": "Feature", "properties": { "id": "ak16876647", "mag": 1.9, "time": 1506065065953, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.1147, 59.229, 11.0 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248627", "mag": 1.79, "time": 1506064954410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.417833, 42.575667, 8.31 ] } },
+ { "type": "Feature", "properties": { "id": "ak16876640", "mag": 1.0, "time": 1506063798789, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.9184, 63.4232, 6.1 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256994", "mag": 1.71, "time": 1506063538810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.338833, 46.125333, 6.03 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at1d", "mag": 4.4, "time": 1506062755300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 151.9837, 45.5973, 22.46 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606510", "mag": 1.0, "time": 1506062740733, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9097, 38.416, 7.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16876497", "mag": 2.9, "time": 1506062332060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -158.4396, 55.4155, 7.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16876499", "mag": 1.5, "time": 1506062314773, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.1276, 62.6705, 84.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926058", "mag": 2.5, "time": 1506062164434, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -163.9814, 52.5733, 21.3 ] } },
+ { "type": "Feature", "properties": { "id": "hv61916751", "mag": 1.88, "time": 1506061487210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.4615, 19.287167, 7.924 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926055", "mag": 2.4, "time": 1506060569450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.4546, 56.5041, 6.6 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248622", "mag": 1.34, "time": 1506060334660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.447833, 42.622833, 5.33 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606434", "mag": 1.2, "time": 1506060248714, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8235, 38.8296, 13.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007696", "mag": 1.17, "time": 1506059325210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.648333, 35.934, 3.86 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007680", "mag": 1.8, "time": 1506058671480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.570833, 35.360833, 4.84 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at0m", "mag": 5.5, "time": 1506058424310, "felt": 37, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -108.7724, 23.5614, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at0v", "mag": 4.5, "time": 1506056644580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 159.4959, 54.788, 131.21 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256984", "mag": 1.12, "time": 1506056537920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5285, 46.885167, 14.05 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926054", "mag": 1.3, "time": 1506056097918, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.7519, 60.0539, 56.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16876343", "mag": 1.1, "time": 1506055943779, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.827, 62.7929, 14.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896616", "mag": 2.0, "time": 1506055463630, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.788667, 37.456333, 7.66 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926049", "mag": 2.0, "time": 1506055458648, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.9681, 59.782, 98.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at08", "mag": 4.7, "time": 1506054886300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -11.1483, -6.3489, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896606", "mag": 0.97, "time": 1506054333450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.821833, 37.5205, 2.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aszw", "mag": 4.2, "time": 1506054023580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 26.2553, 39.1304, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896586", "mag": 1.98, "time": 1506053997570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.883167, 37.538333, 2.49 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007648", "mag": 1.64, "time": 1506053954570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.797167, 33.495167, 4.61 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896591", "mag": 1.12, "time": 1506053943320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.789333, 37.455, 7.99 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aszh", "mag": 2.9, "time": 1506053328020, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -96.682, 35.846, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16876210", "mag": 1.2, "time": 1506052567199, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.7614, 63.1414, 9.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16876208", "mag": 1.0, "time": 1506051888104, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3642, 64.8396, 21.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16876202", "mag": 2.8, "time": 1506051238210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.6975, 59.8426, 2.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007640", "mag": 1.04, "time": 1506050700240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.074333, 32.868, 9.32 ] } },
+ { "type": "Feature", "properties": { "id": "ak16876199", "mag": 1.6, "time": 1506050508752, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.1502, 60.9709, 20.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16876069", "mag": 1.7, "time": 1506048854655, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6692, 62.5598, 11.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16876067", "mag": 2.1, "time": 1506048427026, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.7111, 59.884, 14.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896561", "mag": 1.78, "time": 1506048332800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.779667, 37.392333, -2.31 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896556", "mag": 1.29, "time": 1506047940540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.0265, 36.559833, 6.76 ] } },
+ { "type": "Feature", "properties": { "id": "ak16926041", "mag": 2.5, "time": 1506047556201, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -174.992, 51.8656, 16.5 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248522", "mag": 1.34, "time": 1506047158170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.026833, 44.7755, 7.13 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256979", "mag": 1.73, "time": 1506043831850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.558333, 46.402, 3.35 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896531", "mag": 1.92, "time": 1506043357560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.780833, 37.389167, -2.29 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256969", "mag": 2.09, "time": 1506042441670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.930333, 44.292833, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875940", "mag": 1.1, "time": 1506041862266, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0885, 63.2553, 2.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awqf", "mag": 4.2, "time": 1506041406940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 165.3116, -15.6295, 57.06 ] } },
+ { "type": "Feature", "properties": { "id": "us2000asyh", "mag": 4.6, "time": 1506041280550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 149.2095, 43.8815, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70235693", "mag": 1.82, "time": 1506040783670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.6825, 37.184, 4.37 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007600", "mag": 2.86, "time": 1506040660680, "felt": 13, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.171833, 34.730667, 1.72 ] } },
+ { "type": "Feature", "properties": { "id": "hv61916496", "mag": 1.7, "time": 1506040069030, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.755667, 19.862667, 13.433 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awqd", "mag": 4.6, "time": 1506040066970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 90.3605, 2.1475, 15.02 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875841", "mag": 1.4, "time": 1506039676822, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.7004, 63.8605, 6.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000atbx", "mag": 2.6, "time": 1506039659260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5671, 46.8969, 11.48 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avmv", "mag": 2.8, "time": 1506039531410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.0769, 52.3761, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256959", "mag": 1.07, "time": 1506038377030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.445667, 43.5435, 11.24 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007584", "mag": 1.19, "time": 1506037977370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.764667, 33.324167, 13.64 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875834", "mag": 1.4, "time": 1506037872803, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.518, 61.5639, 31.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896516", "mag": 1.31, "time": 1506037721390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.669, 37.2905, 3.04 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256954", "mag": 1.13, "time": 1506037549780, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.4995, 46.8705, 10.41 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awq8", "mag": 4.4, "time": 1506037384370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 144.5809, 38.0785, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875828", "mag": 2.4, "time": 1506037110228, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.8706, 62.7902, 14.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875826", "mag": 1.7, "time": 1506036232042, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.4937, 61.5906, 31.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000asx4", "mag": 2.7, "time": 1506036218800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.5127, 36.2915, 7.461 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007544", "mag": 3.0, "time": 1506035447270, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.397167, 32.383, 12.07 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007552", "mag": 1.61, "time": 1506035381320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.115667, 34.625667, -1.28 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875823", "mag": 1.6, "time": 1506035182231, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.5062, 64.6747, 9.2 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248487", "mag": 2.1, "time": 1506035003920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.420167, 42.525833, 7.93 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256939", "mag": 1.72, "time": 1506034952670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5215, 46.8665, 11.26 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875817", "mag": 1.5, "time": 1506034226408, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -167.0329, 53.5528, 17.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awq7", "mag": 4.3, "time": 1506034167940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -179.929, -23.7349, 550.89 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896506", "mag": 1.29, "time": 1506033952800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.821, 38.814833, 2.36 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875815", "mag": 1.5, "time": 1506033878487, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.5575, 60.0344, 58.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875810", "mag": 1.2, "time": 1506033325458, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.4889, 59.8624, 47.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875800", "mag": 1.4, "time": 1506032434891, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.7482, 66.977, 12.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875653", "mag": 4.2, "time": 1506032120973, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.8756, 62.7831, 20.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896496", "mag": 1.85, "time": 1506031741740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.5285, 36.803333, 3.27 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896486", "mag": 1.45, "time": 1506031445490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.526667, 36.809667, 4.3 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256934", "mag": 2.12, "time": 1506031400210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.9225, 44.303333, 10.34 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256929", "mag": 1.26, "time": 1506030770930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.747833, 45.079167, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007528", "mag": 1.87, "time": 1506030349230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.650167, 35.935333, 2.69 ] } },
+ { "type": "Feature", "properties": { "id": "hv61916321", "mag": 2.02, "time": 1506029779130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.552333, 19.137667, 49.513 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007520", "mag": 1.21, "time": 1506029730430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.157, 33.634167, -0.52 ] } },
+ { "type": "Feature", "properties": { "id": "hv61916316", "mag": 1.88, "time": 1506029586250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.419833, 19.099167, 42.057 ] } },
+ { "type": "Feature", "properties": { "id": "hv61916311", "mag": 1.76, "time": 1506029522880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.437167, 19.160333, 37.287 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606376", "mag": 1.1, "time": 1506029276288, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.9551, 40.0739, 10.9 ] } },
+ { "type": "Feature", "properties": { "id": "hv61916301", "mag": 1.85, "time": 1506029141190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.439167, 19.1175, 39.677 ] } },
+ { "type": "Feature", "properties": { "id": "ci37166108", "mag": 1.81, "time": 1506028904370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.241667, 32.920333, 11.27 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007512", "mag": 1.83, "time": 1506028897230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.241167, 32.916667, 7.87 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875651", "mag": 1.4, "time": 1506028324426, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.8843, 61.2141, 1.8 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606357", "mag": 2.6, "time": 1506028168100, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.6985, 39.7645, 7.3 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606355", "mag": 1.1, "time": 1506027762688, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.189, 38.4602, 2.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007480", "mag": 1.75, "time": 1506026384090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.371167, 35.054, 8.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875645", "mag": 1.7, "time": 1506026360117, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.75, 60.0811, 100.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896461", "mag": 1.53, "time": 1506026136260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.827333, 38.841167, 1.96 ] } },
+ { "type": "Feature", "properties": { "id": "ak16911613", "mag": 1.9, "time": 1506025569386, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.0904, 58.6739, 124.2 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70235678", "mag": 2.5, "time": 1506025487250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.888333, 37.204167, 6.25 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007472", "mag": 1.24, "time": 1506025368620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.488667, 33.850333, -0.48 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ass7", "mag": 4.8, "time": 1506025352080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.8962, 15.2536, 65.44 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007464", "mag": 1.18, "time": 1506025134310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.882167, 33.977333, 19.48 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875518", "mag": 1.7, "time": 1506024448536, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.5203, 61.3055, 10.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000asr5", "mag": 2.8, "time": 1506024284460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4191, 42.5686, 11.52 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007448", "mag": 1.54, "time": 1506024073190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.493667, 33.846667, -0.48 ] } },
+ { "type": "Feature", "properties": { "id": "us2000asqw", "mag": 4.5, "time": 1506023938000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -69.359, -24.593, 89.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896441", "mag": 0.97, "time": 1506023932370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.818337, 38.807335, 2.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16911611", "mag": 2.0, "time": 1506023546957, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -163.8314, 53.8887, 16.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875513", "mag": 2.1, "time": 1506022669821, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.6752, 67.929, 13.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875511", "mag": 1.6, "time": 1506022479067, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0122, 60.6265, 55.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896431", "mag": 1.59, "time": 1506022296440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.821333, 37.606, 4.18 ] } },
+ { "type": "Feature", "properties": { "id": "us2000asq8", "mag": 4.5, "time": 1506022120080, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 57.3957, 30.689, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875508", "mag": 2.8, "time": 1506022088454, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.5339, 56.4471, 34.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875497", "mag": 2.8, "time": 1506021225649, "felt": 5, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.3633, 62.2263, 8.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875489", "mag": 2.0, "time": 1506019153622, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.5458, 60.2285, 104.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007432", "mag": 0.97, "time": 1506018755920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.4305, 33.027167, 7.61 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896416", "mag": 1.32, "time": 1506018676310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.105167, 37.325333, -0.31 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875470", "mag": 3.4, "time": 1506018115237, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3313, 62.0747, 82.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007408", "mag": 1.52, "time": 1506017937430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.240833, 33.339, 3.36 ] } },
+ { "type": "Feature", "properties": { "id": "ci37165948", "mag": 1.22, "time": 1506017934430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.238, 33.341, 5.25 ] } },
+ { "type": "Feature", "properties": { "id": "ak16911603", "mag": 2.2, "time": 1506016859139, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.198, 56.7455, 55.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896411", "mag": 1.56, "time": 1506016054120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.955667, 36.390833, 1.45 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ask8", "mag": 5.2, "time": 1506015812780, "felt": 1, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 153.792, -5.2273, 42.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875367", "mag": 1.0, "time": 1506015790628, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.3293, 61.4367, 9.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896401", "mag": 1.29, "time": 1506015349390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.136833, 36.591, 7.95 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896396", "mag": 1.65, "time": 1506015154000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.830667, 38.841833, 1.92 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875364", "mag": 1.7, "time": 1506014707392, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.9511, 61.182, 6.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000asjm", "mag": 4.1, "time": 1506014582020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.1412, 14.9651, 31.77 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896391", "mag": 1.65, "time": 1506014547620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.522667, 37.119333, 6.68 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896386", "mag": 2.74, "time": 1506013969600, "felt": 15, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.523, 37.119333, 7.11 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248457", "mag": 1.24, "time": 1506013292240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.416833, 42.5455, 6.54 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896381", "mag": 1.42, "time": 1506013025480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.7985, 38.024167, 4.23 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875337", "mag": 1.5, "time": 1506012889205, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.8562, 59.8876, 14.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875335", "mag": 1.5, "time": 1506012588856, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -142.43, 69.5255, 6.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875333", "mag": 1.4, "time": 1506012078477, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -144.7448, 65.4677, 16.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000asj3", "mag": 4.4, "time": 1506011673160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 94.8925, 24.9992, 82.35 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875233", "mag": 2.0, "time": 1506011166366, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.0389, 62.6945, 1.1 ] } },
+ { "type": "Feature", "properties": { "id": "hv61916021", "mag": 1.65, "time": 1506010758380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.606333, 19.988, 0.02 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896356", "mag": 1.08, "time": 1506008853280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.736, 38.789501, 1.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007344", "mag": 1.64, "time": 1506006904290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.040833, 34.932167, 7.95 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248432", "mag": 1.93, "time": 1506005934630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -108.899167, 38.2825, 1.23 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896351", "mag": 1.05, "time": 1506005402280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.872833, 37.542167, 5.65 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875225", "mag": 2.6, "time": 1506004864279, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -157.7558, 56.7802, 85.5 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606271", "mag": 1.4, "time": 1506004765898, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9071, 38.404, 8.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16911592", "mag": 1.8, "time": 1506004687871, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.776, 59.9457, 96.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875224", "mag": 1.0, "time": 1506004284441, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.1472, 58.225, 2.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000asgp", "mag": 3.1, "time": 1506004160400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4287, 42.5341, 7.73 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875128", "mag": 1.2, "time": 1506003424957, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.1414, 61.9718, 7.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875123", "mag": 2.2, "time": 1506003380008, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.406, 61.1636, 56.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875122", "mag": 1.5, "time": 1506003168025, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.6121, 60.6288, 27.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000asgl", "mag": 4.5, "time": 1506003018350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 150.7163, -5.3996, 143.64 ] } },
+ { "type": "Feature", "properties": { "id": "ak16911587", "mag": 2.0, "time": 1506002992795, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -161.2107, 54.658, 25.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875121", "mag": 1.3, "time": 1506002287075, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7877, 63.0935, 115.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875120", "mag": 1.3, "time": 1506002190951, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.3702, 60.2093, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896346", "mag": 1.58, "time": 1506001285170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.046, 37.631, -2.49 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875118", "mag": 1.5, "time": 1506001054310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.4947, 65.9329, 9.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875115", "mag": 1.2, "time": 1506000273641, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.8273, 59.8914, 16.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875114", "mag": 1.0, "time": 1505999744527, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.927, 63.1123, 88.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875113", "mag": 1.0, "time": 1505999509220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.8959, 53.8648, 4.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896326", "mag": 1.49, "time": 1505998900750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.040833, 37.6325, -1.69 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896316", "mag": 1.09, "time": 1505998199150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.854333, 37.553667, -1.13 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896306", "mag": 1.43, "time": 1505997631810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.009333, 37.578833, 2.18 ] } },
+ { "type": "Feature", "properties": { "id": "nm60207176", "mag": 1.81, "time": 1505997033100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -89.530833, 36.304833, 9.49 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875021", "mag": 1.2, "time": 1505996145934, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.8383, 65.938, 13.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875018", "mag": 1.2, "time": 1505995669198, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.912, 65.5133, 9.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896296", "mag": 1.47, "time": 1505995317350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.196833, 37.9145, 9.67 ] } },
+ { "type": "Feature", "properties": { "id": "nm60207166", "mag": 1.64, "time": 1505994488630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -89.4975, 36.289667, 7.47 ] } },
+ { "type": "Feature", "properties": { "id": "us2000asex", "mag": 4.8, "time": 1505994269370, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.2903, 15.7805, 100.11 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606244", "mag": 1.4, "time": 1505993181062, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.2534, 40.7726, 2.5 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248402", "mag": 1.76, "time": 1505993050130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.834, 37.5, 12.34 ] } },
+ { "type": "Feature", "properties": { "id": "ak16911577", "mag": 1.8, "time": 1505992688210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.7102, 59.2193, 101.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896276", "mag": 1.87, "time": 1505990638730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.821833, 38.807833, 2.57 ] } },
+ { "type": "Feature", "properties": { "id": "ak16911575", "mag": 1.4, "time": 1505990312220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.1289, 60.9457, 91.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007296", "mag": 1.16, "time": 1505989019560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.893333, 33.8875, 12.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874826", "mag": 2.4, "time": 1505988598717, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.0672, 60.3368, 3.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874821", "mag": 3.9, "time": 1505988559362, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.0266, 58.0197, 4.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000asdx", "mag": 3.2, "time": 1505987188740, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4339, 42.5809, 9.51 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896231", "mag": 1.31, "time": 1505985984190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.7595, 39.290333, 11.74 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874817", "mag": 1.2, "time": 1505985541058, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7623, 63.2246, 123.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896221", "mag": 1.81, "time": 1505985066080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8215, 37.605333, 4.11 ] } },
+ { "type": "Feature", "properties": { "id": "ak16911571", "mag": 1.2, "time": 1505984945428, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6774, 60.3679, 51.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000astb", "mag": 3.2, "time": 1505984479950, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 30.4877, 39.7496, 7.26 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874735", "mag": 1.1, "time": 1505984351439, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.1345, 61.0202, 12.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874733", "mag": 1.8, "time": 1505984244290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -144.6331, 69.6221, 10.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16911567", "mag": 1.4, "time": 1505983878943, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.6066, 58.3406, 70.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874730", "mag": 1.6, "time": 1505983557544, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6496, 63.2391, 128.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874715", "mag": 3.0, "time": 1505983090867, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.9585, 60.2394, 134.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874713", "mag": 1.8, "time": 1505982752561, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3398, 60.0395, 62.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874708", "mag": 1.6, "time": 1505981986749, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.5434, 62.0196, 9.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007280", "mag": 1.01, "time": 1505981662400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.966, 33.952667, 12.57 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896186", "mag": 1.8, "time": 1505981520300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.764333, 38.786167, 0.23 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874635", "mag": 1.2, "time": 1505980470681, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.9567, 61.1836, 3.9 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256854", "mag": 1.19, "time": 1505980355400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.540333, 46.865833, 13.58 ] } },
+ { "type": "Feature", "properties": { "id": "hv61915846", "mag": 2.23, "time": 1505980220010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.471833, 19.187167, 6.497 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896176", "mag": 1.82, "time": 1505979900900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.789167, 37.455, 8.23 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874613", "mag": 2.5, "time": 1505979347188, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.6995, 61.302, 18.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896141", "mag": 1.44, "time": 1505978529860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.0545, 37.976333, 16.99 ] } },
+ { "type": "Feature", "properties": { "id": "us2000asd1", "mag": 4.8, "time": 1505977959710, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -73.683, -37.9104, 6.87 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896116", "mag": 1.08, "time": 1505977815960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.784164, 38.838165, 0.65 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007272", "mag": 1.44, "time": 1505977166870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.235667, 34.473, 10.66 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874540", "mag": 1.8, "time": 1505976691446, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.5178, 59.5615, 114.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007264", "mag": 1.35, "time": 1505976496140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.8585, 33.885833, 13.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874539", "mag": 1.4, "time": 1505975897075, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.7553, 60.3904, 17.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16911557", "mag": 1.9, "time": 1505975896384, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.7415, 56.6876, 60.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874533", "mag": 2.4, "time": 1505975550653, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -160.4341, 54.7916, 41.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874531", "mag": 1.6, "time": 1505973877209, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0439, 60.1347, 121.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896081", "mag": 0.98, "time": 1505973711190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.775002, 38.797669, 2.77 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896076", "mag": 2.49, "time": 1505973410410, "felt": 16, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.785833, 37.46, 8.35 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874465", "mag": 1.3, "time": 1505973344875, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -138.0133, 60.1082, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16911553", "mag": 1.4, "time": 1505972962694, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3138, 59.699, 53.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16911552", "mag": 1.2, "time": 1505972745844, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.4845, 60.1615, 61.1 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606219", "mag": 1.3, "time": 1505972571887, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.1193, 38.2806, 9.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16911551", "mag": 1.8, "time": 1505972563999, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.15, 51.5531, 43.8 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606295", "mag": 1.0, "time": 1505972403264, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.6227, 38.8065, 14.1 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248342", "mag": 1.16, "time": 1505971839680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.427333, 42.584333, 6.41 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874458", "mag": 1.0, "time": 1505971795387, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.1789, 60.7931, 15.4 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606215", "mag": 1.1, "time": 1505970724921, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9138, 38.4144, 3.9 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606292", "mag": 1.2, "time": 1505969821916, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9096, 38.3591, 10.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874386", "mag": 2.2, "time": 1505966674333, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.1806, 62.1688, 58.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874381", "mag": 1.5, "time": 1505966192127, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -158.3423, 67.4818, 11.5 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606289", "mag": 1.1, "time": 1505965897622, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.612, 39.7777, 13.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874378", "mag": 1.4, "time": 1505965635289, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.6084, 59.8249, 2.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007240", "mag": 1.33, "time": 1505964848260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.392833, 34.0695, 3.63 ] } },
+ { "type": "Feature", "properties": { "id": "uw61309117", "mag": 1.41, "time": 1505964727680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.537333, 45.623, 3.45 ] } },
+ { "type": "Feature", "properties": { "id": "us2000asac", "mag": 2.3, "time": 1505963189900, "felt": 8, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.6319, 35.02, 3.66 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896016", "mag": 1.0, "time": 1505962244660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.777664, 38.821335, 1.62 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874313", "mag": 1.6, "time": 1505961692924, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.4015, 58.981, 9.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896006", "mag": 2.63, "time": 1505961234600, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.778, 38.822333, 1.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874294", "mag": 1.4, "time": 1505960998663, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.7592, 62.4966, 63.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16911541", "mag": 1.2, "time": 1505959763113, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.0959, 69.101, 9.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72896001", "mag": 2.06, "time": 1505958864360, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.541, 35.984333, 10.27 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007216", "mag": 1.05, "time": 1505958019680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.250167, 34.038167, 14.18 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874254", "mag": 3.1, "time": 1505957941327, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 178.4863, 51.2677, 13.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874229", "mag": 1.1, "time": 1505957058757, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.7027, 61.7499, 26.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874215", "mag": 1.1, "time": 1505956445202, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.6955, 63.1111, 9.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007208", "mag": 1.4, "time": 1505955985550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.416, 33.868667, 14.65 ] } },
+ { "type": "Feature", "properties": { "id": "hv61915531", "mag": 1.72, "time": 1505955195430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.279833, 19.405667, 1.328 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874182", "mag": 2.0, "time": 1505954859125, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.6742, 63.0988, 11.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000as95", "mag": 4.5, "time": 1505954623610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.9506, -18.3191, 525.15 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874180", "mag": 1.0, "time": 1505954368489, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.6875, 63.1114, 10.6 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256829", "mag": 1.22, "time": 1505954178230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.729167, 46.9255, 15.18 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007192", "mag": 2.27, "time": 1505953985850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.389333, 34.875667, 4.87 ] } },
+ { "type": "Feature", "properties": { "id": "ak16911531", "mag": 3.1, "time": 1505953036619, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.8238, 52.2316, 212.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874133", "mag": 1.9, "time": 1505952707526, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.3476, 61.7239, 1.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895971", "mag": 2.7, "time": 1505952459520, "felt": 25, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.065833, 37.977333, 16.12 ] } },
+ { "type": "Feature", "properties": { "id": "us2000as7z", "mag": 5.0, "time": 1505952320920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -175.3417, -18.3348, 223.14 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874122", "mag": 1.3, "time": 1505952267890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -161.1071, 68.0646, 14.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874119", "mag": 1.3, "time": 1505952216610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9186, 60.9563, 9.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000as7r", "mag": 5.7, "time": 1505951964840, "felt": 7, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 113.0028, -6.141, 588.64 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007168", "mag": 1.0, "time": 1505951908320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.513, 33.929833, 3.12 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874078", "mag": 1.5, "time": 1505949607121, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.307, 64.9865, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895936", "mag": 2.34, "time": 1505948330470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.830833, 38.8385, 2.22 ] } },
+ { "type": "Feature", "properties": { "id": "us2000as71", "mag": 4.4, "time": 1505948258880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -70.8955, -19.9851, 13.88 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007144", "mag": 2.26, "time": 1505947525530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.600667, 32.8185, 11.77 ] } },
+ { "type": "Feature", "properties": { "id": "us2000as6n", "mag": 4.7, "time": 1505946967130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 148.002, -5.1396, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16874025", "mag": 1.8, "time": 1505946583777, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.5728, 63.1811, 118.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000as5y", "mag": 5.2, "time": 1505945844590, "felt": null, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 147.9821, -5.1384, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000as5x", "mag": 5.9, "time": 1505945616140, "felt": null, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 147.8337, -5.11, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873995", "mag": 1.3, "time": 1505944353830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.7194, 63.0772, 10.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895916", "mag": 1.33, "time": 1505944123270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8235, 37.532, 3.23 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903715", "mag": 1.5, "time": 1505944050318, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.7597, 60.286, 105.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873983", "mag": 1.6, "time": 1505944038560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.2822, 60.1956, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873980", "mag": 1.5, "time": 1505943645116, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.7128, 62.2758, 1.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895911", "mag": 1.05, "time": 1505943458060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.817497, 38.818165, 1.98 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256764", "mag": 1.19, "time": 1505942553810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.3355, 46.855167, 12.51 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873969", "mag": 1.0, "time": 1505941809382, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.8648, 61.3084, 14.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903709", "mag": 1.3, "time": 1505940388991, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.1675, 59.8496, 11.5 ] } },
+ { "type": "Feature", "properties": { "id": "hv61915241", "mag": 2.0, "time": 1505940250470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.695496, 19.176666, 1.78 ] } },
+ { "type": "Feature", "properties": { "id": "uw61309057", "mag": 2.31, "time": 1505940000150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.92, 47.376, -0.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873814", "mag": 1.4, "time": 1505938885178, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.4385, 61.7606, 10.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873808", "mag": 1.1, "time": 1505938683669, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.6592, 62.5852, 59.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895876", "mag": 1.45, "time": 1505938357840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.59, 36.021667, 3.05 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873804", "mag": 1.4, "time": 1505938263457, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.3926, 60.1466, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000as2f", "mag": 6.4, "time": 1505938189810, "felt": 16, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 169.0947, -18.7978, 200.19 ] } },
+ { "type": "Feature", "properties": { "id": "hv61915206", "mag": 2.51, "time": 1505938077390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.033667, 19.2375, 39.578 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007104", "mag": 1.0, "time": 1505937649230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.0765, 32.813833, -0.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873801", "mag": 2.0, "time": 1505937512139, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.8359, 53.871, 5.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000as1w", "mag": 2.5, "time": 1505937361300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.0579, 36.6187, 5.828 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873782", "mag": 1.2, "time": 1505936869830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.8873, 62.1092, 41.4 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256709", "mag": 1.79, "time": 1505935321500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.451, 43.543667, 10.41 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606121", "mag": 1.5, "time": 1505934916827, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.1139, 37.3666, 2.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007096", "mag": 1.15, "time": 1505934203280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.751, 34.839333, -1.28 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606180", "mag": 1.3, "time": 1505934149532, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.1164, 38.3161, 11.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895851", "mag": 1.27, "time": 1505934073910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.592833, 39.610333, 2.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873739", "mag": 2.2, "time": 1505933777306, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.4033, 69.0735, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873736", "mag": 1.7, "time": 1505933267549, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.2132, 61.1317, 38.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007072", "mag": 2.71, "time": 1505931747440, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.389167, 32.380167, 15.18 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895826", "mag": 1.69, "time": 1505931012940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.428333, 36.582667, 0.68 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248192", "mag": 1.44, "time": 1505930780280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.474333, 42.6455, 0.08 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895816", "mag": 2.1, "time": 1505929719570, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.9675, 40.890167, 14.69 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873728", "mag": 1.2, "time": 1505929479491, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.582, 62.6618, 78.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873142", "mag": 1.5, "time": 1505927860541, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2216, 61.5685, 73.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895806", "mag": 3.65, "time": 1505927408630, "felt": 119, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.983667, 40.891333, 16.86 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895796", "mag": 3.18, "time": 1505926479240, "felt": 56, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.546833, 36.829167, 3.48 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873012", "mag": 1.4, "time": 1505926389012, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.6968, 59.7895, 4.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arxv", "mag": 6.1, "time": 1505925436360, "felt": 102, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 144.6601, 37.9814, 11.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16872904", "mag": 1.0, "time": 1505925010295, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.5787, 62.1577, 21.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arxl", "mag": 5.3, "time": 1505924711310, "felt": null, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 118.8822, -10.1961, 10.84 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arxs", "mag": 4.4, "time": 1505923365600, "felt": 13, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 135.4357, 33.9578, 44.93 ] } },
+ { "type": "Feature", "properties": { "id": "ak16872233", "mag": 1.2, "time": 1505923328725, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.1746, 60.1861, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007024", "mag": 0.95, "time": 1505922246000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.593333, 34.202833, 4.57 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arwt", "mag": 4.9, "time": 1505921548830, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 166.9265, -14.913, 39.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arwd", "mag": 2.4, "time": 1505921250610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.783, 37.3255, 5.27 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awnu", "mag": 4.6, "time": 1505921168060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -28.7481, 43.6321, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248182", "mag": 1.14, "time": 1505920908550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.455667, 42.606, 5.92 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arw1", "mag": 4.4, "time": 1505920105280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 70.9001, 36.5943, 194.83 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awp1", "mag": 4.1, "time": 1505919984040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -82.8639, 5.1272, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903689", "mag": 2.1, "time": 1505918855154, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -157.5285, 56.3302, 52.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16871415", "mag": 1.5, "time": 1505918684626, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.5508, 61.18, 5.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arvu", "mag": 5.0, "time": 1505918528120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.1207, -17.9346, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38007016", "mag": 1.44, "time": 1505918468750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.514, 33.93, 3.08 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895731", "mag": 2.2, "time": 1505918095770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -124.179, 40.2545, 10.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arvi", "mag": 5.3, "time": 1505917796770, "felt": 41, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 121.7572, 23.2931, 22.03 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895726", "mag": 2.76, "time": 1505917745400, "felt": 8, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -124.182833, 40.246333, 11.38 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248172", "mag": 2.13, "time": 1505916637780, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4155, 42.592833, 6.06 ] } },
+ { "type": "Feature", "properties": { "id": "ak16870720", "mag": 2.0, "time": 1505915942888, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.6193, 67.4066, 12.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16870653", "mag": 1.8, "time": 1505915336300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.2998, 61.7353, 47.3 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256619", "mag": 1.37, "time": 1505914951120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.527333, 46.886167, 13.87 ] } },
+ { "type": "Feature", "properties": { "id": "ci38006992", "mag": 1.47, "time": 1505914753140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.453667, 34.324833, 9.66 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895721", "mag": 2.38, "time": 1505913728570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.6465, 36.06, 20.18 ] } },
+ { "type": "Feature", "properties": { "id": "ci38006968", "mag": 1.06, "time": 1505913698350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.79, 36.101, 8.43 ] } },
+ { "type": "Feature", "properties": { "id": "ci38006952", "mag": 2.21, "time": 1505911740560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.197667, 32.419333, 10.66 ] } },
+ { "type": "Feature", "properties": { "id": "ak16869931", "mag": 1.0, "time": 1505911683814, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.0983, 64.9958, 11.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16869929", "mag": 1.1, "time": 1505910877864, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.9571, 64.0729, 125.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arkq", "mag": 5.0, "time": 1505910355700, "felt": 1, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 132.5848, 1.0854, 36.12 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248167", "mag": 1.05, "time": 1505910339650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.078167, 44.806167, 7.81 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arkf", "mag": 2.7, "time": 1505910255780, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4578, 42.6105, 7.92 ] } },
+ { "type": "Feature", "properties": { "id": "hv61914931", "mag": 1.25, "time": 1505910251630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.624833, 19.4175, 3.162 ] } },
+ { "type": "Feature", "properties": { "id": "ak16869355", "mag": 1.3, "time": 1505910194393, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.4867, 61.3624, 40.7 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248157", "mag": 1.62, "time": 1505909926720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.418333, 42.6315, 2.43 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606071", "mag": 1.9, "time": 1505909820104, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.6351, 40.2652, 7.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci38006936", "mag": 1.08, "time": 1505907735210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.542167, 33.157167, 16.18 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895696", "mag": 1.65, "time": 1505907470630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.887667, 39.9645, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248147", "mag": 1.97, "time": 1505907452270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.426833, 42.575667, 8.53 ] } },
+ { "type": "Feature", "properties": { "id": "hv61914886", "mag": 2.38, "time": 1505907343420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.275162, 19.410833, 10.08 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903676", "mag": 1.3, "time": 1505907050579, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.6927, 60.366, 14.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16869212", "mag": 1.1, "time": 1505906705387, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.0351, 61.9136, 37.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895691", "mag": 1.89, "time": 1505906617690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.802667, 36.023667, 14.48 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903672", "mag": 2.7, "time": 1505906309964, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.8205, 51.5611, 26.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895686", "mag": 1.58, "time": 1505906251960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.257833, 39.404167, 3.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16868636", "mag": 1.1, "time": 1505905797402, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.4101, 61.9294, 46.0 ] } },
+ { "type": "Feature", "properties": { "id": "nm60207096", "mag": 1.74, "time": 1505905515890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -89.502, 36.239333, 7.22 ] } },
+ { "type": "Feature", "properties": { "id": "ak16868555", "mag": 1.6, "time": 1505904607416, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.81, 59.8821, 7.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arj1", "mag": 4.7, "time": 1505903968940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.4191, 15.2723, 57.48 ] } },
+ { "type": "Feature", "properties": { "id": "ci38006912", "mag": 1.07, "time": 1505903473810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.495167, 35.975167, 6.03 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248142", "mag": 1.89, "time": 1505903157450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.424333, 42.560333, 7.63 ] } },
+ { "type": "Feature", "properties": { "id": "ak16868496", "mag": 2.0, "time": 1505903116550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.9125, 61.7794, 102.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16868494", "mag": 1.5, "time": 1505903092907, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.2214, 61.9475, 35.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903665", "mag": 1.3, "time": 1505902710790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.7292, 62.9468, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16867924", "mag": 1.2, "time": 1505902608214, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.7213, 59.8967, 2.1 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606156", "mag": 1.0, "time": 1505901862661, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.6593, 38.6914, 6.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895661", "mag": 1.05, "time": 1505901620810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.810837, 38.818668, 2.51 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903662", "mag": 1.0, "time": 1505901509250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.8825, 63.8483, 113.3 ] } },
+ { "type": "Feature", "properties": { "id": "hv61914831", "mag": 1.76, "time": 1505901369660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.477661, 19.182333, 34.15 ] } },
+ { "type": "Feature", "properties": { "id": "ak16867848", "mag": 1.1, "time": 1505900653451, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.4004, 63.1493, 5.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arir", "mag": 3.7, "time": 1505900227020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -160.1086, 55.2931, 60.27 ] } },
+ { "type": "Feature", "properties": { "id": "uw61331666", "mag": 1.1, "time": 1505898593660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.672, 48.548667, -0.01 ] } },
+ { "type": "Feature", "properties": { "id": "ci38006880", "mag": 2.13, "time": 1505898547760, "felt": 137, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.512, 33.929167, 3.06 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arig", "mag": 4.9, "time": 1505898116470, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 141.0335, 30.5728, 51.74 ] } },
+ { "type": "Feature", "properties": { "id": "ak16867217", "mag": 1.6, "time": 1505898082784, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.4786, 59.9819, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16867146", "mag": 1.1, "time": 1505897266615, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -142.8777, 60.4396, 4.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci38006872", "mag": 1.46, "time": 1505897209710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.797667, 33.493667, 4.26 ] } },
+ { "type": "Feature", "properties": { "id": "ak16867139", "mag": 2.2, "time": 1505896599575, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3632, 62.9389, 110.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895641", "mag": 1.43, "time": 1505896494260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.840333, 37.569333, 1.25 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903656", "mag": 1.6, "time": 1505896455015, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.6591, 59.7355, 84.3 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248127", "mag": 1.21, "time": 1505896112670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.409833, 42.577333, 5.18 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248122", "mag": 1.04, "time": 1505896073990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.420167, 42.597, 5.54 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ari7", "mag": 2.8, "time": 1505895800120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4288, 42.5861, 7.69 ] } },
+ { "type": "Feature", "properties": { "id": "hv61914791", "mag": 2.56, "time": 1505895324160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.2775, 19.387833, 2.782 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248112", "mag": 2.6, "time": 1505895001440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.426333, 42.581333, 7.79 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903653", "mag": 1.4, "time": 1505894006715, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.1734, 57.6592, 5.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895626", "mag": 1.53, "time": 1505893505020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.731, 35.610333, 5.63 ] } },
+ { "type": "Feature", "properties": { "id": "ak16866448", "mag": 1.5, "time": 1505893091784, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2468, 62.4591, 77.3 ] } },
+ { "type": "Feature", "properties": { "id": "uu60013094", "mag": 1.81, "time": 1505893039830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.445667, 42.595833, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci38006824", "mag": 1.12, "time": 1505893038610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.764667, 36.027, 1.93 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248107", "mag": 1.76, "time": 1505893022850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.440667, 42.600667, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "hv61914781", "mag": 1.67, "time": 1505892711130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.6165, 19.4305, 3.542 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903651", "mag": 3.0, "time": 1505892680068, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -160.4523, 53.0789, 11.0 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248102", "mag": 1.36, "time": 1505892622540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.435667, 42.589167, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16866421", "mag": 1.6, "time": 1505892318030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3481, 59.8279, 3.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16866396", "mag": 2.2, "time": 1505891995067, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -162.4096, 54.4777, 11.3 ] } },
+ { "type": "Feature", "properties": { "id": "hv61914776", "mag": 1.93, "time": 1505891884110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.875167, 19.494, 13.771 ] } },
+ { "type": "Feature", "properties": { "id": "ak16866395", "mag": 1.1, "time": 1505891525159, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.5895, 59.7855, 1.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16865784", "mag": 1.7, "time": 1505890304255, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.8219, 63.9434, 110.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903645", "mag": 1.5, "time": 1505889690090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.8317, 59.5969, 83.3 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248092", "mag": 1.25, "time": 1505889314510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4045, 42.559, 7.09 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903644", "mag": 1.6, "time": 1505888156227, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.1233, 56.6112, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903642", "mag": 1.1, "time": 1505887874395, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.5943, 62.8332, 79.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arhc", "mag": 2.7, "time": 1505887339310, "felt": 5, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -96.7528, 35.56, 6.78 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606041", "mag": 1.5, "time": 1505886348191, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.1044, 37.3927, 2.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16865084", "mag": 2.3, "time": 1505886195952, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -142.96, 68.8119, 5.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16865080", "mag": 1.0, "time": 1505886128688, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -144.8653, 65.3778, 3.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16865073", "mag": 2.0, "time": 1505885821473, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.5664, 57.7913, 90.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16865048", "mag": 1.0, "time": 1505885371718, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.9661, 63.2402, 5.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arh1", "mag": 5.3, "time": 1505885168970, "felt": 29, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -71.3157, -16.2747, 92.59 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arha", "mag": 4.8, "time": 1505884561830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 148.9933, 44.304, 47.06 ] } },
+ { "type": "Feature", "properties": { "id": "ak16865027", "mag": 1.7, "time": 1505884405432, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.8016, 59.167, 62.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903636", "mag": 2.1, "time": 1505884147575, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -159.2848, 54.6322, 28.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16864392", "mag": 1.4, "time": 1505881969592, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.3599, 61.7927, 48.0 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606034", "mag": 1.2, "time": 1505881284660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8997, 38.3821, 8.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903634", "mag": 1.9, "time": 1505881021363, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.3362, 59.9873, 134.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16864345", "mag": 1.4, "time": 1505880564938, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.7317, 59.9227, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16864341", "mag": 1.9, "time": 1505880299039, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2295, 62.4633, 79.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903630", "mag": 1.6, "time": 1505878577379, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.2105, 59.7151, 108.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci38006744", "mag": 1.15, "time": 1505878429650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.3295, 36.066833, 4.96 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248077", "mag": 1.22, "time": 1505878406660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.422667, 42.523667, 7.06 ] } },
+ { "type": "Feature", "properties": { "id": "ci38006752", "mag": 1.09, "time": 1505878374600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.328333, 36.063333, 2.53 ] } },
+ { "type": "Feature", "properties": { "id": "ak16863731", "mag": 2.4, "time": 1505878347669, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.1296, 60.1348, 9.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903628", "mag": 1.7, "time": 1505878317110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.2703, 59.8732, 126.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16863732", "mag": 1.2, "time": 1505878286762, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.9406, 59.985, 1.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci38006736", "mag": 1.86, "time": 1505878275980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.331167, 36.0625, 4.96 ] } },
+ { "type": "Feature", "properties": { "id": "ci37165628", "mag": 1.61, "time": 1505878262700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.3305, 36.062833, 2.62 ] } },
+ { "type": "Feature", "properties": { "id": "ak16863728", "mag": 1.3, "time": 1505878130865, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3801, 60.7066, 4.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000argd", "mag": 4.6, "time": 1505878085370, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.8719, 16.1444, 48.73 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248072", "mag": 2.35, "time": 1505878084670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.423167, 42.581333, 8.05 ] } },
+ { "type": "Feature", "properties": { "id": "ak16863729", "mag": 2.5, "time": 1505878081761, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4258, 51.6886, 13.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895536", "mag": 1.94, "time": 1505877892960, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.286167, 36.776667, 10.03 ] } },
+ { "type": "Feature", "properties": { "id": "ci38006720", "mag": 1.07, "time": 1505877439420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.752, 33.713, 15.96 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248067", "mag": 1.47, "time": 1505877309800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.445, 42.617667, 6.11 ] } },
+ { "type": "Feature", "properties": { "id": "ci38006712", "mag": 1.07, "time": 1505875949770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.750333, 33.961833, 15.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awn6", "mag": 4.0, "time": 1505875623990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 179.7511, -25.3193, 527.05 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arfw", "mag": 4.9, "time": 1505875330110, "felt": 12, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 174.3444, -41.5073, 24.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arfs", "mag": 4.9, "time": 1505875055560, "felt": 8, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -90.9075, 14.5711, 178.93 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017263000", "mag": 2.75, "time": 1505873919890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -66.3401, 18.9298, 12.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16863060", "mag": 1.9, "time": 1505873560207, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.1132, 59.1631, 57.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895516", "mag": 1.58, "time": 1505873402400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.522667, 35.964833, 7.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arf6", "mag": 2.7, "time": 1505873292330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.6365, 59.7836, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arfq", "mag": 2.8, "time": 1505872583380, "felt": 5, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -2.1386, 37.4306, 7.84 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895506", "mag": 1.14, "time": 1505872092600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.103, 36.606333, 9.92 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arel", "mag": 6.1, "time": 1505871807940, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 162.614, -50.7145, 19.83 ] } },
+ { "type": "Feature", "properties": { "id": "ak16862483", "mag": 2.0, "time": 1505871449331, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.323, 61.0377, 13.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16862466", "mag": 1.1, "time": 1505870969313, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.0763, 60.3456, 0.4 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256529", "mag": 1.31, "time": 1505870488260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.528, 46.8965, 11.33 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895486", "mag": 1.47, "time": 1505870467130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.586, 36.020333, 4.08 ] } },
+ { "type": "Feature", "properties": { "id": "us2000are4", "mag": 4.5, "time": 1505868292650, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 141.5418, -3.912, 43.33 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248037", "mag": 2.04, "time": 1505868182810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.450167, 42.612833, 6.23 ] } },
+ { "type": "Feature", "properties": { "id": "uu60248032", "mag": 1.14, "time": 1505868031480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.415833, 42.508, 5.93 ] } },
+ { "type": "Feature", "properties": { "id": "us2000are1", "mag": 2.5, "time": 1505867820700, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.7971, 36.457, 5.777 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895456", "mag": 1.52, "time": 1505867731230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.668833, 37.291667, 4.46 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ardv", "mag": 5.0, "time": 1505866095740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 57.4066, 30.7208, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903617", "mag": 1.9, "time": 1505866055349, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.744, 56.8763, 33.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903616", "mag": 1.8, "time": 1505865710189, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -159.5947, 55.8757, 101.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16903615", "mag": 1.8, "time": 1505865589920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0266, 60.2087, 122.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ass3", "mag": 2.5, "time": 1505864736500, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.8008, 36.4519, 6.233 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256499", "mag": 1.38, "time": 1505864394760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.407833, 45.589, 4.43 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arcp", "mag": 3.0, "time": 1505863612870, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4223, 42.5909, 9.63 ] } },
+ { "type": "Feature", "properties": { "id": "uw61331476", "mag": 1.93, "time": 1505863558820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.772333, 46.652333, -0.79 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arcv", "mag": 4.6, "time": 1505863376420, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 123.9102, 6.3611, 38.14 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arck", "mag": 2.6, "time": 1505863101700, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.9891, 36.9623, 5.329 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arch", "mag": 4.6, "time": 1505862692240, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.8625, 16.2348, 45.26 ] } },
+ { "type": "Feature", "properties": { "id": "uw61331461", "mag": 1.43, "time": 1505862649350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.194333, 46.983167, -0.67 ] } },
+ { "type": "Feature", "properties": { "id": "ak16861101", "mag": 1.0, "time": 1505862438423, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3714, 64.9781, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arca", "mag": 4.7, "time": 1505862303600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 179.4478, -36.2513, 47.77 ] } },
+ { "type": "Feature", "properties": { "id": "ak16860573", "mag": 1.3, "time": 1505861271657, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6706, 62.0713, 0.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arbk", "mag": 2.4, "time": 1505861097180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4595, 42.608, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aray", "mag": 3.2, "time": 1505859699230, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.7506, 36.4396, 1.92 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arar", "mag": 2.6, "time": 1505859474460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.7831, 36.4511, 2.64 ] } },
+ { "type": "Feature", "properties": { "id": "ci38006608", "mag": 0.96, "time": 1505859334750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.475333, 33.486667, 14.73 ] } },
+ { "type": "Feature", "properties": { "id": "uu60247982", "mag": 1.65, "time": 1505858965080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.420667, 42.524833, 7.59 ] } },
+ { "type": "Feature", "properties": { "id": "ak16859929", "mag": 1.1, "time": 1505857928856, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.6104, 61.9413, 2.9 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605999", "mag": 1.5, "time": 1505856979033, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.7943, 38.658, 7.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875936", "mag": 1.7, "time": 1505856840827, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.652, 53.3989, 20.0 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606301", "mag": 1.4, "time": 1505856837357, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.7768, 38.66, 6.5 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606300", "mag": 1.4, "time": 1505856822494, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.7817, 38.6647, 4.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16859863", "mag": 1.4, "time": 1505856383099, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.06, 61.1692, 19.6 ] } },
+ { "type": "Feature", "properties": { "id": "uu60247972", "mag": 1.74, "time": 1505856071750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4475, 42.619, 6.05 ] } },
+ { "type": "Feature", "properties": { "id": "ak16859852", "mag": 1.7, "time": 1505856067799, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -135.5801, 68.0241, 10.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16859850", "mag": 1.3, "time": 1505856055065, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2245, 61.5244, 4.3 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605994", "mag": 1.2, "time": 1505855929391, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.1076, 37.3659, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ar96", "mag": 4.9, "time": 1505855599810, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5112, 15.3218, 46.64 ] } },
+ { "type": "Feature", "properties": { "id": "ci38006584", "mag": 1.62, "time": 1505855343650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.8445, 36.1795, 2.3 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605990", "mag": 1.4, "time": 1505855191998, "felt": 6, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.3633, 38.1896, 5.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16859325", "mag": 2.3, "time": 1505854928991, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9168, 61.6291, 63.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895401", "mag": 1.19, "time": 1505854923520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.721832, 38.778832, 1.61 ] } },
+ { "type": "Feature", "properties": { "id": "ak16859316", "mag": 1.9, "time": 1505854153817, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.2675, 59.6779, 106.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ar87", "mag": 4.0, "time": 1505854089550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -69.0339, -20.6057, 107.88 ] } },
+ { "type": "Feature", "properties": { "id": "ak16859309", "mag": 2.3, "time": 1505853828556, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.9751, 62.3114, 2.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16859297", "mag": 2.2, "time": 1505853447611, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.476, 59.9101, 122.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16859290", "mag": 3.0, "time": 1505853445730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -158.8511, 55.6543, 46.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16859292", "mag": 3.6, "time": 1505853411703, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.4847, 57.8969, 244.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895391", "mag": 2.22, "time": 1505852777640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.194167, 40.744, 31.83 ] } },
+ { "type": "Feature", "properties": { "id": "uu60247942", "mag": 1.28, "time": 1505852539380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.439833, 42.608667, 6.41 ] } },
+ { "type": "Feature", "properties": { "id": "ak16859266", "mag": 1.1, "time": 1505852431345, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.5411, 60.0259, 13.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ar6z", "mag": 5.2, "time": 1505852287190, "felt": 32, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 141.7668, 37.2998, 35.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ar6y", "mag": 5.2, "time": 1505852058100, "felt": null, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 150.8423, -5.5637, 99.91 ] } },
+ { "type": "Feature", "properties": { "id": "ak16859257", "mag": 1.1, "time": 1505851589002, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.171, 64.5345, 7.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci38006552", "mag": 1.38, "time": 1505851374120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.498833, 33.866667, -0.49 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895381", "mag": 1.43, "time": 1505851273540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.729333, 36.3275, 5.22 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875922", "mag": 1.3, "time": 1505850452543, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.3232, 58.1622, 6.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875921", "mag": 2.9, "time": 1505849966730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -170.4901, 52.1476, 24.6 ] } },
+ { "type": "Feature", "properties": { "id": "uu60247932", "mag": 1.44, "time": 1505849337250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.421, 42.579, 5.88 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875920", "mag": 1.3, "time": 1505849251567, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.6328, 59.921, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16858730", "mag": 1.2, "time": 1505848519202, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.9009, 61.545, 3.9 ] } },
+ { "type": "Feature", "properties": { "id": "hv61914226", "mag": 1.85, "time": 1505848191950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.283829, 19.389834, 2.69 ] } },
+ { "type": "Feature", "properties": { "id": "ci38006520", "mag": 1.05, "time": 1505847392530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.7695, 36.0195, 2.35 ] } },
+ { "type": "Feature", "properties": { "id": "ci38006512", "mag": 1.61, "time": 1505847142180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.767, 36.0195, 2.27 ] } },
+ { "type": "Feature", "properties": { "id": "ci38006496", "mag": 3.65, "time": 1505846743780, "felt": 24, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.769833, 36.019333, 1.78 ] } },
+ { "type": "Feature", "properties": { "id": "hv61914191", "mag": 1.84, "time": 1505846559260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.249161, 19.378334, 1.88 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875918", "mag": 2.8, "time": 1505846556982, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.8186, 52.0581, 213.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895351", "mag": 1.32, "time": 1505846239310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.104167, 37.325333, -0.31 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895341", "mag": 2.76, "time": 1505846072870, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.359001, 36.981335, 8.57 ] } },
+ { "type": "Feature", "properties": { "id": "ci38006480", "mag": 3.19, "time": 1505846053020, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.767333, 36.019, 1.55 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895286", "mag": 1.33, "time": 1505844883780, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.572167, 35.430667, -0.58 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ar1y", "mag": 4.6, "time": 1505844881000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -74.1913, -37.2281, 5.95 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ar20", "mag": 7.1, "time": 1505844878420, "felt": 2048, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.4952, 18.5539, 51.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16858135", "mag": 1.6, "time": 1505844133798, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -157.026, 67.0927, 3.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766871", "mag": 1.54, "time": 1505844053390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.846, 36.179167, 2.24 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766863", "mag": 1.44, "time": 1505843932610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.768, 36.018667, 1.61 ] } },
+ { "type": "Feature", "properties": { "id": "nm60207061", "mag": 1.72, "time": 1505843783380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -89.646167, 36.5445, 7.49 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aqyy", "mag": 4.5, "time": 1505843446640, "felt": 5, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -72.6161, -31.7548, 29.84 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70235603", "mag": 1.89, "time": 1505842614490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.682, 37.184833, 3.97 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895271", "mag": 1.15, "time": 1505841330820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.259833, 36.753, 11.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aqxe", "mag": 4.6, "time": 1505841149400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 128.1444, -7.5033, 158.11 ] } },
+ { "type": "Feature", "properties": { "id": "uu60247882", "mag": 1.62, "time": 1505841064700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.426167, 42.5295, 8.11 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895256", "mag": 1.32, "time": 1505840661480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.598167, 36.752, -0.32 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766807", "mag": 2.45, "time": 1505840210530, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.766, 36.02, 1.86 ] } },
+ { "type": "Feature", "properties": { "id": "uu60247877", "mag": 2.11, "time": 1505840158690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.448833, 42.606, 3.56 ] } },
+ { "type": "Feature", "properties": { "id": "ak16857619", "mag": 2.1, "time": 1505840007502, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.8949, 63.2912, 101.6 ] } },
+ { "type": "Feature", "properties": { "id": "uu60247872", "mag": 1.62, "time": 1505839724910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.458833, 42.607, 3.95 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aqvm", "mag": 2.7, "time": 1505839542100, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.469, 42.6077, 7.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895246", "mag": 1.35, "time": 1505839417090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.485667, 35.221333, 6.04 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875914", "mag": 1.9, "time": 1505839174472, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.4077, 58.8832, 118.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766791", "mag": 1.22, "time": 1505838919650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.3645, 33.1855, 10.21 ] } },
+ { "type": "Feature", "properties": { "id": "ak16857617", "mag": 1.6, "time": 1505838902519, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -142.9995, 67.1881, 4.7 ] } },
+ { "type": "Feature", "properties": { "id": "uu60247852", "mag": 2.07, "time": 1505838746530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4455, 42.613833, 1.76 ] } },
+ { "type": "Feature", "properties": { "id": "ak16857602", "mag": 1.1, "time": 1505837962181, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.5253, 60.121, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16857600", "mag": 1.9, "time": 1505837841567, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.1883, 53.9422, 44.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895231", "mag": 2.9, "time": 1505837729840, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.833667, 37.507667, 1.79 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ary5", "mag": 2.9, "time": 1505837727410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4431, 42.6149, 4.8 ] } },
+ { "type": "Feature", "properties": { "id": "uu60247822", "mag": 2.11, "time": 1505837448870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.455167, 42.616, 1.41 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aqtm", "mag": 3.1, "time": 1505837140170, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4706, 42.6154, 8.81 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875909", "mag": 2.2, "time": 1505836969879, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4914, 51.7473, 9.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16857094", "mag": 1.1, "time": 1505836528626, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.6176, 61.14, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875907", "mag": 1.5, "time": 1505835821169, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.259, 60.5626, 90.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aqsj", "mag": 2.6, "time": 1505835755980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.5135, 36.2854, 4.17 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aqsk", "mag": 2.5, "time": 1505835732030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4724, 42.6121, 4.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16857093", "mag": 2.6, "time": 1505835424846, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4652, 51.7084, 16.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aqsh", "mag": 3.0, "time": 1505835309120, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4508, 42.6064, 4.14 ] } },
+ { "type": "Feature", "properties": { "id": "ak16857091", "mag": 1.3, "time": 1505835219788, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.0197, 66.1072, 6.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aqs7", "mag": 3.5, "time": 1505834833670, "felt": 21, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4429, 42.6135, 8.34 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aqwu", "mag": 2.5, "time": 1505834816200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.7965, 36.4516, 6.125 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875904", "mag": 1.6, "time": 1505834730734, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.9141, 57.1404, 29.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766767", "mag": 1.14, "time": 1505834129200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.763833, 36.020667, 1.88 ] } },
+ { "type": "Feature", "properties": { "id": "ak16857088", "mag": 1.5, "time": 1505834082762, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.0429, 60.6104, 77.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aqrc", "mag": 4.8, "time": 1505832575280, "felt": null, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 178.0168, 52.0275, 131.51 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875901", "mag": 1.4, "time": 1505831619582, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -137.534, 58.7008, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766711", "mag": 1.96, "time": 1505831425050, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.765667, 36.018833, 1.51 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766703", "mag": 1.15, "time": 1505831411750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.764833, 36.019667, 1.65 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aqqm", "mag": 4.5, "time": 1505831278930, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -72.4084, -31.8109, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16856556", "mag": 1.3, "time": 1505831243282, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.7313, 59.8087, 0.9 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606015", "mag": 1.3, "time": 1505831170459, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8959, 38.3975, 10.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16856551", "mag": 1.9, "time": 1505831042494, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.6819, 63.0946, 10.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875898", "mag": 1.7, "time": 1505829915600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.2865, 59.7628, 116.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16856544", "mag": 1.6, "time": 1505829548541, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.3607, 61.0755, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895191", "mag": 1.4, "time": 1505828746900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.799667, 38.815333, 3.57 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895181", "mag": 1.21, "time": 1505828239020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.96, 37.587, -0.68 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017262003", "mag": 3.12, "time": 1505828003180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.596, 19.2688, 38.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aqpx", "mag": 5.1, "time": 1505827570500, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 53.9953, 27.9548, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895166", "mag": 2.1, "time": 1505827334280, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.801333, 38.709667, 3.88 ] } },
+ { "type": "Feature", "properties": { "id": "ak16856036", "mag": 1.5, "time": 1505826795043, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.9795, 61.8762, 43.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16856032", "mag": 1.6, "time": 1505825636722, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.1838, 62.582, 3.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766679", "mag": 0.96, "time": 1505825558280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.804167, 33.865333, 14.31 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aqp7", "mag": 4.4, "time": 1505825308910, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -78.7564, -2.1725, 112.59 ] } },
+ { "type": "Feature", "properties": { "id": "ak16856030", "mag": 3.0, "time": 1505825190453, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -179.1381, 51.2155, 7.2 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605924", "mag": 1.0, "time": 1505824470372, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.0787, 37.3317, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16856028", "mag": 1.3, "time": 1505824029137, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.5369, 59.9737, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16856023", "mag": 1.7, "time": 1505823902403, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.0502, 66.1255, 9.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16856015", "mag": 2.2, "time": 1505823557445, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.013, 66.1279, 12.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16856014", "mag": 1.1, "time": 1505823327376, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3053, 64.2153, 8.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16856012", "mag": 1.2, "time": 1505823307912, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.2687, 63.3135, 1.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16856011", "mag": 2.3, "time": 1505823122176, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -161.4683, 54.3778, 12.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895111", "mag": 1.33, "time": 1505822407460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.809833, 38.802, 3.64 ] } },
+ { "type": "Feature", "properties": { "id": "nm60207021", "mag": 3.8, "time": 1505821648710, "felt": 1485, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -87.909833, 38.423833, 11.68 ] } },
+ { "type": "Feature", "properties": { "id": "ak16855511", "mag": 1.6, "time": 1505821526245, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -144.7265, 65.4529, 0.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875885", "mag": 2.4, "time": 1505821066912, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -170.3853, 52.1246, 33.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895086", "mag": 1.5, "time": 1505820901510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.811333, 38.8115, 2.81 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605917", "mag": 1.0, "time": 1505819713127, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.0296, 37.3121, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766663", "mag": 1.51, "time": 1505819310540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.197333, 34.085167, 9.45 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875884", "mag": 2.8, "time": 1505819249763, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -171.074, 52.1917, 55.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aqlv", "mag": 4.4, "time": 1505818453350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -72.3742, -31.7199, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16855501", "mag": 3.4, "time": 1505818346973, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.7971, 56.0595, 12.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16855500", "mag": 2.9, "time": 1505817985167, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 178.3494, 51.1124, 9.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895061", "mag": 1.78, "time": 1505817758790, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.178833, 36.5795, 5.08 ] } },
+ { "type": "Feature", "properties": { "id": "nc72895056", "mag": 2.12, "time": 1505817518530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.177333, 36.582833, 3.53 ] } },
+ { "type": "Feature", "properties": { "id": "uu60247712", "mag": 1.36, "time": 1505817061570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.018167, 44.796, 9.74 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875881", "mag": 1.6, "time": 1505816115601, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.2511, 57.9599, 9.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16855499", "mag": 1.3, "time": 1505815877713, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.8298, 61.5636, 56.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16855498", "mag": 2.3, "time": 1505815751742, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -168.7444, 52.8226, 62.9 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017262002", "mag": 3.05, "time": 1505815582890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.7015, 19.0933, 25.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875878", "mag": 2.3, "time": 1505815056638, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 178.6299, 51.8122, 76.9 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017262001", "mag": 3.03, "time": 1505814906490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.723, 19.2006, 9.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aqkv", "mag": 3.1, "time": 1505814230020, "felt": 19, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -96.8094, 35.9883, 6.72 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605909", "mag": 2.0, "time": 1505812861822, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.0799, 37.3335, 2.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766575", "mag": 1.76, "time": 1505810653690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.489167, 32.91, 3.69 ] } },
+ { "type": "Feature", "properties": { "id": "hv61913891", "mag": 1.46, "time": 1505809604540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.2385, 19.383667, 3.069 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awmg", "mag": 4.7, "time": 1505809455110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 162.925, -10.7783, 56.21 ] } },
+ { "type": "Feature", "properties": { "id": "us2000asy2", "mag": 3.0, "time": 1505809273830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -167.747, 56.8207, 54.24 ] } },
+ { "type": "Feature", "properties": { "id": "ak16855496", "mag": 1.1, "time": 1505809181592, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.6103, 61.758, 29.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766567", "mag": 2.63, "time": 1505808839560, "felt": 8, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.053, 33.079333, 9.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16854995", "mag": 1.3, "time": 1505808496915, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -142.3955, 61.6352, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awn2", "mag": 4.8, "time": 1505807930800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.8135, 15.201, 45.46 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aqji", "mag": 5.5, "time": 1505807596650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.0446, 15.1414, 38.74 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875872", "mag": 2.1, "time": 1505807457953, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -179.2219, 51.3226, 34.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894976", "mag": 1.17, "time": 1505806773770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.792335, 38.809666, 2.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766551", "mag": 1.92, "time": 1505806527540, "felt": 28, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.473833, 34.086, 9.44 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605996", "mag": 1.0, "time": 1505804591858, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.786, 38.6641, 4.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aqiw", "mag": 4.9, "time": 1505804582700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5541, 15.6968, 62.85 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894951", "mag": 2.38, "time": 1505803512250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.804667, 38.658333, -1.93 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aqim", "mag": 4.9, "time": 1505803059440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 162.5306, -11.0433, 31.53 ] } },
+ { "type": "Feature", "properties": { "id": "ak16858212", "mag": 1.9, "time": 1505803043301, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.8602, 60.3455, 116.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16854482", "mag": 1.5, "time": 1505802327547, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.6967, 63.0934, 11.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766535", "mag": 3.61, "time": 1505802044370, "felt": 9002, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.475667, 34.086667, 10.48 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766527", "mag": 1.21, "time": 1505801932130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.774833, 34.169667, 4.09 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875868", "mag": 1.8, "time": 1505801903580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 178.8368, 51.4427, 38.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16854479", "mag": 1.1, "time": 1505801695119, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.7029, 61.7782, 46.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875866", "mag": 1.4, "time": 1505801525136, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.4992, 53.7654, 79.0 ] } },
+ { "type": "Feature", "properties": { "id": "uw61331061", "mag": 2.06, "time": 1505797453620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -124.194667, 46.453167, 40.56 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766503", "mag": 1.67, "time": 1505797300060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.486333, 32.916167, 3.75 ] } },
+ { "type": "Feature", "properties": { "id": "ak16854474", "mag": 1.9, "time": 1505797038222, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0668, 60.2297, 58.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16853980", "mag": 1.1, "time": 1505796127101, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.3206, 62.3117, 31.2 ] } },
+ { "type": "Feature", "properties": { "id": "uw61330981", "mag": 1.13, "time": 1505795983940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.682, 46.13, 13.15 ] } },
+ { "type": "Feature", "properties": { "id": "ak16853978", "mag": 1.3, "time": 1505795947149, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.1655, 62.2572, 56.3 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605993", "mag": 1.1, "time": 1505795780711, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.1363, 37.4312, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894911", "mag": 1.31, "time": 1505795498990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.7385, 38.757333, 2.56 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875861", "mag": 1.1, "time": 1505795298437, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.2708, 60.1059, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017262000", "mag": 3.54, "time": 1505794257010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -68.6603, 17.4281, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875860", "mag": 2.4, "time": 1505793870359, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -160.7298, 54.4321, 27.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875859", "mag": 1.7, "time": 1505793327250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.1948, 59.7387, 99.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16853975", "mag": 1.6, "time": 1505792759926, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -167.4718, 53.5765, 9.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894906", "mag": 1.57, "time": 1505792076170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.7735, 38.656833, -0.04 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766479", "mag": 1.69, "time": 1505792016930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.486333, 32.9165, 3.74 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766487", "mag": 1.34, "time": 1505791878570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.484833, 32.910667, 3.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766471", "mag": 1.85, "time": 1505791676460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.4825, 32.916333, 3.63 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894886", "mag": 1.72, "time": 1505789062930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.840667, 37.569167, 0.74 ] } },
+ { "type": "Feature", "properties": { "id": "ak16853477", "mag": 1.0, "time": 1505787688094, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -157.1719, 66.2583, 2.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875853", "mag": 1.7, "time": 1505787600292, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.3919, 59.6211, 106.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16875852", "mag": 1.1, "time": 1505786552106, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.5941, 61.448, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256309", "mag": 1.39, "time": 1505786055440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.526833, 46.8665, 12.97 ] } },
+ { "type": "Feature", "properties": { "id": "ak16853476", "mag": 1.1, "time": 1505785818136, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.8501, 59.9025, 11.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852984", "mag": 1.1, "time": 1505784566645, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.6396, 62.818, 76.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aqg7", "mag": 4.1, "time": 1505784206570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4373, 15.5332, 46.8 ] } },
+ { "type": "Feature", "properties": { "id": "uu60247557", "mag": 1.04, "time": 1505784051560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.714, 41.274333, 9.1 ] } },
+ { "type": "Feature", "properties": { "id": "uu60247547", "mag": 1.47, "time": 1505783841160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.707167, 41.273, 13.52 ] } },
+ { "type": "Feature", "properties": { "id": "hv61913526", "mag": 1.76, "time": 1505783827370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.457833, 19.1825, 36.457 ] } },
+ { "type": "Feature", "properties": { "id": "uu60247542", "mag": 2.67, "time": 1505783530250, "felt": 53, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.715333, 41.2735, 12.54 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852978", "mag": 2.3, "time": 1505783525625, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6267, 63.2162, 130.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852863", "mag": 2.5, "time": 1505781518245, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.0202, 60.2096, 73.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894856", "mag": 0.99, "time": 1505781008310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.827331, 38.841667, 1.75 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852858", "mag": 1.1, "time": 1505780482987, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.8182, 61.2069, 27.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894851", "mag": 1.36, "time": 1505780335820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.7775, 38.816, 2.36 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852857", "mag": 1.6, "time": 1505780229532, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.4, 60.0341, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852855", "mag": 1.5, "time": 1505779887968, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.8629, 61.2326, 1.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766415", "mag": 1.9, "time": 1505779853200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.489333, 32.905167, 5.38 ] } },
+ { "type": "Feature", "properties": { "id": "ci37165308", "mag": 1.73, "time": 1505779842240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.488, 32.911333, 4.36 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852849", "mag": 1.7, "time": 1505779013710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9564, 61.0148, 51.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852847", "mag": 1.4, "time": 1505778755901, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.7113, 59.8038, 2.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852839", "mag": 1.8, "time": 1505778454412, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4318, 51.6727, 27.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852350", "mag": 2.0, "time": 1505777928661, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.5948, 59.4167, 88.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766399", "mag": 1.34, "time": 1505777787740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.855667, 36.109333, 3.89 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905714", "mag": 1.0, "time": 1505777724697, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.9455, 64.7711, 1.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766391", "mag": 0.98, "time": 1505777305130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.852333, 36.108833, 4.09 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766383", "mag": 1.52, "time": 1505777027970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.673833, 35.0495, -0.79 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605852", "mag": 1.0, "time": 1505777021809, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.5662, 37.4193, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852327", "mag": 1.3, "time": 1505776382741, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3544, 64.9878, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894836", "mag": 1.11, "time": 1505776268170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.826164, 38.803165, -0.67 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852320", "mag": 2.2, "time": 1505774485259, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.6811, 59.3157, 121.6 ] } },
+ { "type": "Feature", "properties": { "id": "uw61330861", "mag": 1.73, "time": 1505774113220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.3385, 46.609, -0.26 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awm5", "mag": 4.3, "time": 1505773697460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 150.1858, 46.1638, 102.95 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aqck", "mag": 3.9, "time": 1505773335560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.2122, -24.1635, 187.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894811", "mag": 1.66, "time": 1505773221810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.814667, 38.797333, 2.92 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aurg", "mag": 3.7, "time": 1505773151260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -161.33, 54.9516, 64.12 ] } },
+ { "type": "Feature", "properties": { "id": "ak16851830", "mag": 1.1, "time": 1505773086095, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.3969, 60.1593, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766351", "mag": 2.36, "time": 1505772988180, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.856, 36.108833, 3.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aqc4", "mag": 4.3, "time": 1505772810860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7554, 15.1768, 26.84 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905709", "mag": 1.9, "time": 1505772157260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.3386, 60.1473, 141.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894806", "mag": 1.27, "time": 1505771972190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.114667, 39.267, 3.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905707", "mag": 2.2, "time": 1505771817995, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -164.2489, 54.4702, 80.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894796", "mag": 2.0, "time": 1505771179880, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.128, 39.249833, 8.56 ] } },
+ { "type": "Feature", "properties": { "id": "ak16851826", "mag": 1.4, "time": 1505770110538, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6751, 61.3285, 49.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766303", "mag": 1.45, "time": 1505769920400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.605, 32.830833, 11.11 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766295", "mag": 1.71, "time": 1505769761910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.604667, 32.8245, 12.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766287", "mag": 2.17, "time": 1505769684730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.606, 32.822667, 12.54 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017261003", "mag": 2.77, "time": 1505769603950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -66.496, 19.0255, 9.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16851820", "mag": 1.8, "time": 1505768968360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.5226, 60.8929, 114.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16851818", "mag": 1.8, "time": 1505768967170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.6844, 60.3627, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "hv61913136", "mag": 2.13, "time": 1505768803830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.602167, 19.474, 2.169 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766271", "mag": 1.2, "time": 1505768642090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.024833, 34.482, 7.73 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766255", "mag": 1.05, "time": 1505767837000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.472833, 34.117167, 12.54 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aq9e", "mag": 4.0, "time": 1505767497800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -72.084, -30.3511, 16.63 ] } },
+ { "type": "Feature", "properties": { "id": "ak16851331", "mag": 3.1, "time": 1505767490141, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -160.4781, 55.9976, 142.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16851328", "mag": 1.1, "time": 1505767149947, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -135.8292, 66.9662, 11.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766231", "mag": 0.99, "time": 1505765477990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.581833, 34.027833, 15.24 ] } },
+ { "type": "Feature", "properties": { "id": "ak16851294", "mag": 1.2, "time": 1505764980957, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.5833, 61.5338, 35.4 ] } },
+ { "type": "Feature", "properties": { "id": "uw61330806", "mag": 1.54, "time": 1505764971380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.54, 46.3245, -0.47 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605816", "mag": 1.4, "time": 1505764963953, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.1157, 37.3834, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605865", "mag": 1.1, "time": 1505764655295, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.1142, 38.3008, 12.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894761", "mag": 1.86, "time": 1505764383660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.820667, 37.543667, 3.73 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aq7z", "mag": 4.9, "time": 1505764292580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.6427, 15.3134, 31.07 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766191", "mag": 0.97, "time": 1505763617780, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.450667, 34.371167, 7.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aq71", "mag": 2.7, "time": 1505763144440, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4497, 42.6436, 9.31 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766183", "mag": 1.36, "time": 1505762589870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.1565, 35.016333, -1.02 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256274", "mag": 1.49, "time": 1505762568370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.536167, 46.875, 12.74 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605809", "mag": 1.3, "time": 1505762272549, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.6987, 37.801, 0.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16850796", "mag": 1.9, "time": 1505761948762, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.4688, 62.7498, 82.0 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605855", "mag": 1.3, "time": 1505761056131, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.1168, 37.3993, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766175", "mag": 1.17, "time": 1505760720620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.9445, 34.324333, -1.41 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894741", "mag": 1.25, "time": 1505760426930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.8455, 38.818, 2.33 ] } },
+ { "type": "Feature", "properties": { "id": "uu60247432", "mag": 1.19, "time": 1505760132640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.613667, 40.6905, 8.76 ] } },
+ { "type": "Feature", "properties": { "id": "ak16850168", "mag": 2.1, "time": 1505759367705, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.838, 63.3882, 112.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766167", "mag": 3.51, "time": 1505759058190, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.656502, 31.030666, 5.16 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605797", "mag": 1.7, "time": 1505758994627, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.1288, 37.4056, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16850165", "mag": 1.4, "time": 1505758989527, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.4112, 62.8303, 102.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905692", "mag": 1.1, "time": 1505758393925, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.8004, 59.9261, 7.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci37766159", "mag": 1.12, "time": 1505757568700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.635, 33.146167, 7.87 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894726", "mag": 0.98, "time": 1505757550510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.418667, 37.284667, 6.16 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905691", "mag": 1.4, "time": 1505757310878, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9735, 60.9138, 37.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16850161", "mag": 1.0, "time": 1505757088256, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.0018, 62.0064, 13.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905689", "mag": 1.2, "time": 1505757035772, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8926, 61.2214, 62.6 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017261002", "mag": 2.83, "time": 1505756997070, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -66.5011, 19.09, 29.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aq4m", "mag": 4.3, "time": 1505756979200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -95.2066, 15.6332, 53.99 ] } },
+ { "type": "Feature", "properties": { "id": "ak16849685", "mag": 1.4, "time": 1505755775657, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.6398, 58.3116, 3.1 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605793", "mag": 2.1, "time": 1505755747277, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.0899, 37.3433, 2.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aq3v", "mag": 4.1, "time": 1505755544410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.8487, 15.9949, 55.32 ] } },
+ { "type": "Feature", "properties": { "id": "uu60247422", "mag": 3.28, "time": 1505755278460, "felt": 662, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.609167, 40.700833, 10.96 ] } },
+ { "type": "Feature", "properties": { "id": "ak16849675", "mag": 1.0, "time": 1505754649061, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.0364, 64.4942, 19.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894701", "mag": 1.54, "time": 1505754599760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.869, 36.443167, 15.01 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70235573", "mag": 2.16, "time": 1505754215540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.819333, 37.204, 5.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894696", "mag": 1.11, "time": 1505753360080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.779167, 38.816834, 1.68 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894681", "mag": 2.71, "time": 1505753271320, "felt": 5, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.776833, 38.818833, 1.94 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aq1c", "mag": 4.3, "time": 1505753232560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 19.9297, 40.1065, 16.32 ] } },
+ { "type": "Feature", "properties": { "id": "hv61912961", "mag": 1.88, "time": 1505752987740, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.220333, 19.426333, 30.266 ] } },
+ { "type": "Feature", "properties": { "id": "ak16849646", "mag": 1.9, "time": 1505752045532, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.8846, 59.8511, 56.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905682", "mag": 2.1, "time": 1505751893024, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -175.9783, 51.5536, 48.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905681", "mag": 1.4, "time": 1505751513529, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.5148, 59.7419, 92.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aq9y", "mag": 3.0, "time": 1505751460390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -179.173, 52.0554, 121.43 ] } },
+ { "type": "Feature", "properties": { "id": "uu60247412", "mag": 1.56, "time": 1505751055750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.8355, 39.743833, 1.73 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605780", "mag": 1.0, "time": 1505750947574, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.0248, 38.8721, 3.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894651", "mag": 1.22, "time": 1505750864240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8995, 37.521833, -0.61 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apzi", "mag": 4.5, "time": 1505750058850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 77.1478, 40.9769, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905679", "mag": 1.0, "time": 1505749750880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.3078, 62.9046, 85.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16849178", "mag": 1.3, "time": 1505749184927, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.5131, 62.8898, 90.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apyu", "mag": 4.3, "time": 1505748920580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -72.1652, -31.8057, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16849177", "mag": 3.5, "time": 1505748318594, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.7225, 51.7093, 41.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894631", "mag": 1.04, "time": 1505748063110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.787498, 38.798832, -0.32 ] } },
+ { "type": "Feature", "properties": { "id": "hv61912826", "mag": 1.1, "time": 1505748041950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.431667, 19.343833, 9.245 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605847", "mag": 1.0, "time": 1505747832897, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.1332, 37.421, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apya", "mag": 4.7, "time": 1505747639290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5858, 15.1833, 36.89 ] } },
+ { "type": "Feature", "properties": { "id": "ak16848711", "mag": 1.3, "time": 1505747504037, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.7568, 59.8878, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905675", "mag": 2.1, "time": 1505746990876, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.9195, 57.1996, 98.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894616", "mag": 2.19, "time": 1505746390770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.149, 40.217, 6.16 ] } },
+ { "type": "Feature", "properties": { "id": "ak16848704", "mag": 2.3, "time": 1505746286875, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -164.7477, 53.6076, 54.8 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017261001", "mag": 2.61, "time": 1505746245880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -64.7745, 18.8611, 60.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16848698", "mag": 2.1, "time": 1505746048831, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.6658, 61.6841, 99.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aq9s", "mag": 4.1, "time": 1505745176040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.3907, 51.552, 15.01 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apxn", "mag": 4.9, "time": 1505745090220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -173.9092, -17.3471, 45.41 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apxj", "mag": 4.3, "time": 1505744936080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -72.2186, -31.8431, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605771", "mag": 1.4, "time": 1505744651408, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.1135, 37.3693, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apx5", "mag": 5.6, "time": 1505744352870, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5576, 15.2537, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905668", "mag": 2.5, "time": 1505742582241, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -162.8697, 55.3906, 161.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apwd", "mag": 5.8, "time": 1505742416590, "felt": 129, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -72.147, -31.82, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apz2", "mag": 2.7, "time": 1505742004420, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5215, 46.8389, 9.05 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605759", "mag": 1.7, "time": 1505741994692, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.124, 38.2695, 11.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apw7", "mag": 4.6, "time": 1505741142110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 167.9613, 54.8175, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905665", "mag": 1.6, "time": 1505741113018, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.6727, 58.1121, 86.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905664", "mag": 1.1, "time": 1505740639920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.4494, 63.2584, 114.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894591", "mag": 2.07, "time": 1505739410930, "felt": 5, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.0555, 37.236667, 7.74 ] } },
+ { "type": "Feature", "properties": { "id": "ak16848204", "mag": 1.1, "time": 1505739204689, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.9796, 60.2252, 8.2 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256214", "mag": 2.14, "time": 1505739119730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5825, 46.902333, 13.02 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894586", "mag": 2.01, "time": 1505738526550, "felt": 0, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.378, 36.3415, 3.67 ] } },
+ { "type": "Feature", "properties": { "id": "ak16847753", "mag": 1.3, "time": 1505737613815, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.1555, 60.2089, 8.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apvj", "mag": 5.0, "time": 1505736665230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.9085, -30.4189, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apva", "mag": 4.9, "time": 1505736421580, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.9784, 16.2017, 42.11 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894571", "mag": 1.07, "time": 1505736271580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.784332, 38.838333, 0.08 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894556", "mag": 0.97, "time": 1505736021180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.818001, 38.813499, 2.19 ] } },
+ { "type": "Feature", "properties": { "id": "ak16847743", "mag": 2.1, "time": 1505735884769, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.3712, 59.8705, 71.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16847742", "mag": 1.0, "time": 1505735834346, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.8742, 61.715, 45.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905659", "mag": 1.3, "time": 1505735311381, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8392, 63.0532, 129.1 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256209", "mag": 1.05, "time": 1505734177450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.518, 46.853667, 12.03 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256199", "mag": 1.81, "time": 1505733980660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.487833, 46.873667, 12.76 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894526", "mag": 1.16, "time": 1505733885060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.8005, 38.805833, 2.04 ] } },
+ { "type": "Feature", "properties": { "id": "ak16847290", "mag": 1.5, "time": 1505733696824, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.5693, 64.3804, 8.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894516", "mag": 1.04, "time": 1505733506920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.814163, 38.801998, 2.32 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aur7", "mag": 3.1, "time": 1505733485810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -170.7034, 52.2855, 34.99 ] } },
+ { "type": "Feature", "properties": { "id": "ak16847284", "mag": 1.4, "time": 1505732610976, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6388, 61.2241, 50.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765935", "mag": 1.95, "time": 1505732049210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.924667, 34.9205, 5.15 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765927", "mag": 1.35, "time": 1505731803760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.3425, 35.462, 3.59 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894501", "mag": 1.64, "time": 1505731051670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.950333, 41.046833, 9.17 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905652", "mag": 2.0, "time": 1505729940504, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -161.5491, 54.9912, 67.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16846821", "mag": 3.6, "time": 1505729929794, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.5426, 63.5414, 107.9 ] } },
+ { "type": "Feature", "properties": { "id": "hv61912566", "mag": 1.91, "time": 1505728760570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.608167, 19.4375, 2.822 ] } },
+ { "type": "Feature", "properties": { "id": "ak16846819", "mag": 1.2, "time": 1505728039731, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.773, 63.2917, 2.1 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017261000", "mag": 2.03, "time": 1505727803000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.2451, 18.1321, 32.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765911", "mag": 1.15, "time": 1505727350640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.034667, 34.574333, 8.17 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894496", "mag": 1.16, "time": 1505727178720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.815002, 38.806999, 3.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16846817", "mag": 1.3, "time": 1505726686491, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.5195, 61.7191, 48.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894491", "mag": 1.99, "time": 1505726671730, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.177167, 36.580167, 5.17 ] } },
+ { "type": "Feature", "properties": { "id": "ak16846815", "mag": 1.4, "time": 1505726488235, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.0878, 61.0048, 19.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16846813", "mag": 1.3, "time": 1505726256030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.0016, 62.7051, 3.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16846811", "mag": 1.2, "time": 1505725663332, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7382, 59.7002, 39.4 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605720", "mag": 1.9, "time": 1505725520932, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.0964, 37.3646, 4.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905644", "mag": 1.4, "time": 1505724853854, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.3038, 57.9653, 66.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894486", "mag": 1.37, "time": 1505724683560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.892833, 39.342333, 17.73 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905643", "mag": 1.3, "time": 1505724218199, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.9106, 60.4014, 74.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16846810", "mag": 1.2, "time": 1505724188489, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.4141, 63.186, 102.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16846807", "mag": 2.8, "time": 1505723956077, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.0917, 53.5664, 54.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16846803", "mag": 1.3, "time": 1505723952516, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.705, 62.5617, 9.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16846799", "mag": 1.9, "time": 1505723888518, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.5274, 59.9845, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16846358", "mag": 1.3, "time": 1505723457765, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9157, 63.5359, 3.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894456", "mag": 1.22, "time": 1505721765430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.157, 36.5615, 3.01 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905637", "mag": 1.8, "time": 1505721695198, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -164.5368, 53.884, 45.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16846355", "mag": 1.3, "time": 1505721374282, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.8253, 64.8958, 12.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16846352", "mag": 1.3, "time": 1505721334563, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.8755, 64.8906, 14.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16846351", "mag": 1.4, "time": 1505720984307, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.6407, 59.7861, 56.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905633", "mag": 1.2, "time": 1505720070282, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2909, 61.9803, 75.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905632", "mag": 1.3, "time": 1505720064076, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7225, 60.6284, 40.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765871", "mag": 0.96, "time": 1505719770880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.790667, 33.495, 4.99 ] } },
+ { "type": "Feature", "properties": { "id": "hv61912506", "mag": 1.73, "time": 1505719651510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.218167, 19.4285, 29.836 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894436", "mag": 1.05, "time": 1505719249700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.0175, 37.221333, 9.74 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894411", "mag": 1.53, "time": 1505718670360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.827167, 38.8125, 1.64 ] } },
+ { "type": "Feature", "properties": { "id": "ak16845911", "mag": 1.3, "time": 1505718573027, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -161.2238, 64.9935, 6.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894406", "mag": 1.22, "time": 1505718182950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.180167, 36.585333, 5.57 ] } },
+ { "type": "Feature", "properties": { "id": "ak16845908", "mag": 1.1, "time": 1505717899889, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.0029, 61.1046, 1.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16845905", "mag": 2.8, "time": 1505717405495, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.0451, 53.5595, 58.8 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256179", "mag": 2.84, "time": 1505717382030, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.576167, 48.519, 10.89 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765839", "mag": 1.11, "time": 1505716385670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.6075, 32.833667, 11.71 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905628", "mag": 1.2, "time": 1505716158469, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.5838, 63.1688, 113.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905627", "mag": 1.2, "time": 1505715377323, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.6661, 60.0063, 5.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16845901", "mag": 1.6, "time": 1505714845138, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.4484, 61.3659, 46.1 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256174", "mag": 1.81, "time": 1505714255290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.529333, 46.9025, 12.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16845458", "mag": 1.9, "time": 1505713543034, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.4235, 61.487, 4.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16845453", "mag": 3.2, "time": 1505712925929, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.0259, 53.5803, 50.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apru", "mag": 5.7, "time": 1505712483490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -12.7162, -18.5262, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605697", "mag": 1.0, "time": 1505711755570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9167, 38.4153, 9.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16845450", "mag": 2.7, "time": 1505711653057, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 179.4353, 51.7384, 88.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16845451", "mag": 1.4, "time": 1505711579811, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0383, 61.8395, 66.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894331", "mag": 2.68, "time": 1505711256010, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -125.213167, 41.036, 15.48 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apre", "mag": 3.6, "time": 1505710149350, "felt": 15, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.457, 42.6072, 5.27 ] } },
+ { "type": "Feature", "properties": { "id": "uu60247312", "mag": 1.94, "time": 1505709538260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.024833, 44.791, 10.06 ] } },
+ { "type": "Feature", "properties": { "id": "ak16845447", "mag": 1.6, "time": 1505709232112, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -167.234, 53.4469, 14.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765759", "mag": 1.11, "time": 1505708432940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.797, 33.496667, 4.85 ] } },
+ { "type": "Feature", "properties": { "id": "nm60206976", "mag": 2.5, "time": 1505708310780, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -89.764167, 36.103833, 7.78 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894281", "mag": 1.78, "time": 1505708211260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.583, 36.899833, 6.75 ] } },
+ { "type": "Feature", "properties": { "id": "ak16845444", "mag": 1.6, "time": 1505708018964, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.0127, 61.0975, 1.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16845440", "mag": 1.7, "time": 1505706867753, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.5639, 63.255, 126.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16845438", "mag": 3.0, "time": 1505706621950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0175, 55.7675, 33.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765751", "mag": 1.44, "time": 1505706060150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.797, 33.6865, 17.69 ] } },
+ { "type": "Feature", "properties": { "id": "uu60247287", "mag": 2.42, "time": 1505704855680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.429167, 42.593667, 7.36 ] } },
+ { "type": "Feature", "properties": { "id": "ak16845431", "mag": 2.4, "time": 1505704484262, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.8583, 58.216, 42.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16845430", "mag": 1.1, "time": 1505704418776, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.2714, 58.1899, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256144", "mag": 1.01, "time": 1505704182270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.526333, 46.8725, 13.72 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905611", "mag": 1.0, "time": 1505704113848, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9313, 61.6519, 67.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894211", "mag": 1.84, "time": 1505703109320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.735167, 37.656, 5.91 ] } },
+ { "type": "Feature", "properties": { "id": "ak16845426", "mag": 1.6, "time": 1505702885799, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.6172, 61.5636, 14.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765687", "mag": 1.59, "time": 1505702779150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.919833, 33.9785, 4.46 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605680", "mag": 1.4, "time": 1505702728608, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.713, 38.8287, 9.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16844993", "mag": 1.3, "time": 1505701093513, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.5107, 62.1708, 21.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awky", "mag": 4.1, "time": 1505700898950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.3513, 15.0304, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765671", "mag": 1.43, "time": 1505700367060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.172167, 34.033667, 5.06 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905606", "mag": 1.2, "time": 1505699859087, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8715, 60.6663, 44.3 ] } },
+ { "type": "Feature", "properties": { "id": "uw61330596", "mag": 1.49, "time": 1505699530930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.847333, 47.759167, 17.25 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apq2", "mag": 4.2, "time": 1505699407130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.2351, 15.3068, 42.58 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awly", "mag": 4.2, "time": 1505698782750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.1304, 14.9812, 38.39 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905605", "mag": 1.0, "time": 1505698554304, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.5172, 62.1736, 24.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894176", "mag": 2.03, "time": 1505698095820, "felt": 171, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.295333, 37.912, 2.97 ] } },
+ { "type": "Feature", "properties": { "id": "us2000appq", "mag": 4.5, "time": 1505697812820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 159.3367, 53.381, 85.64 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765639", "mag": 1.01, "time": 1505697641450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.7125, 33.986833, 15.48 ] } },
+ { "type": "Feature", "properties": { "id": "us2000appj", "mag": 4.2, "time": 1505697430690, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -69.5275, -17.5255, 167.68 ] } },
+ { "type": "Feature", "properties": { "id": "ak16844988", "mag": 1.0, "time": 1505697245375, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.1193, 62.3401, 0.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765631", "mag": 1.87, "time": 1505697080810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.650333, 36.996833, -0.56 ] } },
+ { "type": "Feature", "properties": { "id": "ak16905602", "mag": 1.4, "time": 1505696884087, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.1499, 61.9617, 114.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16844556", "mag": 1.5, "time": 1505696691069, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.8744, 60.2484, 9.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000azbk", "mag": 4.0, "time": 1505696468620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5206, 14.824, 18.19 ] } },
+ { "type": "Feature", "properties": { "id": "ak16844553", "mag": 1.3, "time": 1505696463448, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.4081, 64.6136, 20.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894161", "mag": 1.21, "time": 1505695849630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.818833, 37.41, -0.31 ] } },
+ { "type": "Feature", "properties": { "id": "us2000awku", "mag": 4.1, "time": 1505694807240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 145.306, 19.0286, 202.23 ] } },
+ { "type": "Feature", "properties": { "id": "us2000app7", "mag": 4.4, "time": 1505694748030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 119.3564, -8.1346, 41.72 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605668", "mag": 1.2, "time": 1505694738920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.3624, 37.0509, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16844544", "mag": 2.0, "time": 1505694295643, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7281, 60.3555, 46.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16844543", "mag": 1.8, "time": 1505694278381, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.7896, 59.8626, 4.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894151", "mag": 1.42, "time": 1505693902060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.912833, 37.621667, 2.05 ] } },
+ { "type": "Feature", "properties": { "id": "ak16844541", "mag": 1.3, "time": 1505693551555, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.791, 61.7452, 48.2 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256109", "mag": 1.41, "time": 1505690846740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.522, 46.869667, 12.91 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765583", "mag": 1.3, "time": 1505690496480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.673167, 35.042833, -0.82 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873959", "mag": 1.1, "time": 1505690288149, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.4144, 67.2216, 11.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16844094", "mag": 1.9, "time": 1505690276630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.3972, 53.7854, 6.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apnm", "mag": 4.9, "time": 1505689940400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 149.5672, -4.6379, 588.19 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256099", "mag": 2.34, "time": 1505689339390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5195, 46.899167, 12.28 ] } },
+ { "type": "Feature", "properties": { "id": "ak16844091", "mag": 1.5, "time": 1505688162418, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.5592, 60.9727, 72.2 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256084", "mag": 1.49, "time": 1505688150190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.8165, 46.9305, 13.74 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894131", "mag": 0.95, "time": 1505687822870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.026667, 36.453333, 2.98 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894126", "mag": 1.46, "time": 1505687740270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.618333, 36.970833, 5.35 ] } },
+ { "type": "Feature", "properties": { "id": "ak16844087", "mag": 1.3, "time": 1505686236328, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3499, 60.4807, 6.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16844084", "mag": 1.7, "time": 1505686047172, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.7406, 64.6981, 9.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16844079", "mag": 2.1, "time": 1505685489298, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3304, 60.4706, 9.6 ] } },
+ { "type": "Feature", "properties": { "id": "uw61330461", "mag": 2.46, "time": 1505684983130, "felt": 15, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.725333, 47.439333, 22.35 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873952", "mag": 2.2, "time": 1505684866449, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -169.006, 52.386, 9.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894116", "mag": 1.14, "time": 1505684450170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.571833, 37.947167, 8.37 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873951", "mag": 1.3, "time": 1505684432066, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.6357, 60.5724, 2.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16843656", "mag": 1.6, "time": 1505683789980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.1167, 59.7703, 41.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16843652", "mag": 1.6, "time": 1505683291823, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.4894, 61.5289, 25.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894101", "mag": 1.41, "time": 1505682978360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.834, 37.496, 1.06 ] } },
+ { "type": "Feature", "properties": { "id": "ak16843651", "mag": 2.6, "time": 1505682712646, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 178.4711, 51.686, 75.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894096", "mag": 0.99, "time": 1505682599530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.816167, 37.455833, 1.06 ] } },
+ { "type": "Feature", "properties": { "id": "ak16843650", "mag": 1.2, "time": 1505682068077, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.5842, 61.7746, 3.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894086", "mag": 1.35, "time": 1505681812610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.973667, 36.395167, 4.69 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894081", "mag": 1.91, "time": 1505681477080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.809167, 38.797667, 3.52 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894076", "mag": 1.47, "time": 1505681470510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.810167, 38.799167, 3.08 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873946", "mag": 1.4, "time": 1505680958230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.1812, 62.2538, 76.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apkx", "mag": 4.9, "time": 1505680147260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -174.9501, -18.9829, 129.26 ] } },
+ { "type": "Feature", "properties": { "id": "ak16843225", "mag": 1.3, "time": 1505680062920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.5209, 60.1956, 82.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765519", "mag": 1.42, "time": 1505680024130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.293, 35.488167, 2.05 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873944", "mag": 1.3, "time": 1505679233862, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2975, 62.163, 79.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873943", "mag": 1.8, "time": 1505678992249, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -174.8219, 51.8825, 86.4 ] } },
+ { "type": "Feature", "properties": { "id": "uw61330431", "mag": 1.0, "time": 1505678333060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.5365, 47.603667, 19.51 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765487", "mag": 1.12, "time": 1505676865320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.608667, 32.830167, 11.82 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apke", "mag": 4.1, "time": 1505676865110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -87.5905, 12.0757, 53.01 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apkd", "mag": 3.9, "time": 1505676791370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -70.2379, -31.7388, 121.68 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765479", "mag": 1.54, "time": 1505676576290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.605333, 32.8245, 11.96 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apkc", "mag": 2.5, "time": 1505676527950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4244, 42.5958, 5.8 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605653", "mag": 1.3, "time": 1505676457309, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.12, 38.2855, 13.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894061", "mag": 1.21, "time": 1505675373140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.059667, 36.477833, 6.98 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apk4", "mag": 3.1, "time": 1505674381070, "felt": 7, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -96.9818, 35.7788, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16842798", "mag": 1.4, "time": 1505672288384, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.7121, 63.5719, 4.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16842797", "mag": 2.7, "time": 1505669173773, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4976, 51.6544, 7.8 ] } },
+ { "type": "Feature", "properties": { "id": "mb80256039", "mag": 1.09, "time": 1505668834370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.6775, 46.891833, 15.96 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873938", "mag": 1.2, "time": 1505668625975, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.5592, 62.857, 82.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765423", "mag": 1.4, "time": 1505668324590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.831333, 32.775833, 2.46 ] } },
+ { "type": "Feature", "properties": { "id": "ak16842795", "mag": 1.1, "time": 1505668022720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.4003, 64.8531, 2.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72894026", "mag": 1.3, "time": 1505667983860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.734667, 38.788167, 1.43 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873936", "mag": 1.6, "time": 1505667107903, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.0584, 57.21, 33.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765415", "mag": 1.52, "time": 1505666643390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.833167, 32.781833, 2.39 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765407", "mag": 0.98, "time": 1505666358680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.273667, 33.981333, 6.22 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at5v", "mag": 4.3, "time": 1505665820280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 127.2591, 0.908, 157.83 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017260000", "mag": 2.31, "time": 1505665148110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.9698, 19.0821, 23.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apj3", "mag": 2.6, "time": 1505664664460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4059, 42.5497, 11.14 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apj0", "mag": 2.7, "time": 1505663998840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4107, 42.5429, 8.67 ] } },
+ { "type": "Feature", "properties": { "id": "uw61330391", "mag": 1.11, "time": 1505663462920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.04, 46.880167, 6.02 ] } },
+ { "type": "Feature", "properties": { "id": "uu60247022", "mag": 1.06, "time": 1505663122580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.025833, 44.790333, 9.98 ] } },
+ { "type": "Feature", "properties": { "id": "nn00606540", "mag": 1.3, "time": 1505663040033, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.0921, 41.885, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873932", "mag": 1.9, "time": 1505662296127, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -174.8489, 51.9624, 111.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at5n", "mag": 4.5, "time": 1505662282900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 140.7612, 44.1688, 33.57 ] } },
+ { "type": "Feature", "properties": { "id": "mb80255969", "mag": 2.04, "time": 1505662108810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.516, 46.881333, 14.94 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at5p", "mag": 4.5, "time": 1505662091100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 149.0118, -6.3464, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873931", "mag": 1.4, "time": 1505662034661, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -144.362, 63.1318, 2.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at68", "mag": 4.3, "time": 1505661360280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 148.9733, -6.4551, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16841969", "mag": 1.1, "time": 1505661169528, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.6029, 66.5697, 13.3 ] } },
+ { "type": "Feature", "properties": { "id": "mb80255949", "mag": 1.49, "time": 1505659897070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.519, 46.855, 14.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apij", "mag": 5.4, "time": 1505659803240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -173.6428, -16.6386, 30.39 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at5x", "mag": 5.0, "time": 1505659691430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 92.0846, 12.809, 27.48 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765367", "mag": 1.03, "time": 1505659458990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.19, 33.2585, 9.58 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893976", "mag": 1.19, "time": 1505659223910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.825, 37.453, 1.57 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at5m", "mag": 4.9, "time": 1505658989080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 149.1591, -6.3567, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apie", "mag": 4.5, "time": 1505658574670, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 24.0015, 39.2721, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16841552", "mag": 1.3, "time": 1505658549717, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.9309, 62.6606, 59.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apif", "mag": 5.7, "time": 1505658367620, "felt": 0, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 148.8708, -6.3113, 18.92 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at5l", "mag": 4.3, "time": 1505658365190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -17.9505, 64.5019, 9.15 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aza1", "mag": 4.2, "time": 1505658191320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5959, 15.2169, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at6b", "mag": 4.6, "time": 1505658184020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -17.6137, 64.4904, 8.23 ] } },
+ { "type": "Feature", "properties": { "id": "ak16841550", "mag": 1.4, "time": 1505657865000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.8499, 59.8804, 5.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765335", "mag": 1.11, "time": 1505657294840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.367, 33.357167, 9.18 ] } },
+ { "type": "Feature", "properties": { "id": "ak16841549", "mag": 1.4, "time": 1505657219284, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.0876, 69.5184, 4.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893941", "mag": 1.51, "time": 1505657160730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.818333, 38.818167, 2.23 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893946", "mag": 1.02, "time": 1505657152440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.817001, 38.8185, 2.05 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873926", "mag": 1.7, "time": 1505656923604, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.8082, 60.1773, 106.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873925", "mag": 1.9, "time": 1505656654419, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.6293, 59.5728, 120.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765327", "mag": 2.88, "time": 1505656629430, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.882333, 31.6215, 9.25 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at5k", "mag": 4.1, "time": 1505656609750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 126.5305, 1.7746, 37.54 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893936", "mag": 0.98, "time": 1505656502420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.125667, 36.566167, 8.44 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at5i", "mag": 4.4, "time": 1505655648380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.9394, -17.3298, 553.92 ] } },
+ { "type": "Feature", "properties": { "id": "se60044613", "mag": 2.03, "time": 1505655579030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -85.053333, 35.561333, 15.47 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765311", "mag": 1.07, "time": 1505655296260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.090333, 33.473833, 14.65 ] } },
+ { "type": "Feature", "properties": { "id": "ak16841547", "mag": 1.9, "time": 1505655282227, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.7794, 63.9496, 114.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at5r", "mag": 4.9, "time": 1505655030310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -11.7611, -21.01, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000as44", "mag": 2.6, "time": 1505654924870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.7236, 51.4933, 34.35 ] } },
+ { "type": "Feature", "properties": { "id": "ak16841538", "mag": 2.3, "time": 1505654819006, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.6722, 62.9044, 66.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765303", "mag": 0.97, "time": 1505654141860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.922167, 33.9755, 4.94 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aphx", "mag": 4.0, "time": 1505653928680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4533, 15.5042, 7.94 ] } },
+ { "type": "Feature", "properties": { "id": "ak16841537", "mag": 1.0, "time": 1505653531820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.3466, 61.07, 12.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893916", "mag": 0.99, "time": 1505653446980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.835, 37.479333, 0.86 ] } },
+ { "type": "Feature", "properties": { "id": "ak16841536", "mag": 1.4, "time": 1505653266021, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.6794, 67.9633, 14.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16841136", "mag": 1.5, "time": 1505652267061, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.9646, 53.8971, 6.6 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605626", "mag": 1.0, "time": 1505652081143, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.2815, 36.537, 7.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16841133", "mag": 1.8, "time": 1505651930739, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.7652, 62.1126, 23.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16841130", "mag": 2.2, "time": 1505651632523, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.454, 59.2923, 97.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765271", "mag": 1.39, "time": 1505650827610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.021167, 33.921, 2.44 ] } },
+ { "type": "Feature", "properties": { "id": "hv61911226", "mag": 1.91, "time": 1505650411260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.478668, 19.212334, 38.03 ] } },
+ { "type": "Feature", "properties": { "id": "ak16841124", "mag": 2.1, "time": 1505649687852, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.7865, 65.3345, 13.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893881", "mag": 1.23, "time": 1505648682040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.543833, 37.339667, 10.06 ] } },
+ { "type": "Feature", "properties": { "id": "ak16840722", "mag": 3.2, "time": 1505648575230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.7144, 57.2975, 42.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at5g", "mag": 4.3, "time": 1505647937400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 166.6171, -11.7459, 251.44 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873911", "mag": 2.6, "time": 1505647578270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -135.7891, 66.3882, 37.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873910", "mag": 2.0, "time": 1505647575716, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.55, 57.7487, 89.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873909", "mag": 2.8, "time": 1505647412246, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -135.7412, 66.3682, 34.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16840719", "mag": 2.1, "time": 1505647228188, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.4607, 60.5815, 14.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765239", "mag": 1.03, "time": 1505646849520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.920667, 33.972167, 5.29 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aph6", "mag": 4.2, "time": 1505646653440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.3399, -21.9058, 192.78 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aph5", "mag": 4.7, "time": 1505646260660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 127.0437, 3.6252, 68.15 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873907", "mag": 2.2, "time": 1505645846935, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4823, 51.6608, 13.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873906", "mag": 1.2, "time": 1505645773090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.3827, 53.8702, 12.1 ] } },
+ { "type": "Feature", "properties": { "id": "uw61330311", "mag": 1.94, "time": 1505644617240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.041167, 46.879167, 6.84 ] } },
+ { "type": "Feature", "properties": { "id": "ak16840715", "mag": 1.5, "time": 1505644280463, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.605, 61.6723, 29.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765223", "mag": 1.02, "time": 1505644185880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.465667, 34.376833, 9.74 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765215", "mag": 1.28, "time": 1505644151980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.358167, 33.415667, 12.48 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at5e", "mag": 4.5, "time": 1505644031790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 92.0628, 12.7773, 33.35 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873903", "mag": 1.4, "time": 1505643609236, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.5971, 61.5891, 59.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16840713", "mag": 1.9, "time": 1505643118540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -144.0384, 63.1445, 14.8 ] } },
+ { "type": "Feature", "properties": { "id": "hv61911016", "mag": 2.48, "time": 1505641665420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.593167, 19.476, 2.731 ] } },
+ { "type": "Feature", "properties": { "id": "ak16840350", "mag": 1.1, "time": 1505641100972, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.8915, 64.848, 8.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at5c", "mag": 4.7, "time": 1505640684330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -26.4288, -59.7896, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16840314", "mag": 2.8, "time": 1505640505656, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.6831, 60.3761, 2.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apgy", "mag": 4.9, "time": 1505640302130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 141.2485, 37.3415, 54.96 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at65", "mag": 4.6, "time": 1505640090990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -13.5314, -7.0219, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000as3y", "mag": 2.7, "time": 1505639953270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -176.1147, 51.5611, 45.65 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at5a", "mag": 4.8, "time": 1505639681290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -13.1689, -7.0877, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16840312", "mag": 2.1, "time": 1505638931288, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0719, 60.2719, 130.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16840302", "mag": 2.8, "time": 1505638686114, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.2164, 60.4788, 97.5 ] } },
+ { "type": "Feature", "properties": { "id": "uu60246942", "mag": 1.01, "time": 1505637537950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.025833, 44.786167, 7.95 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893791", "mag": 1.48, "time": 1505637347930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.879167, 37.109167, 2.16 ] } },
+ { "type": "Feature", "properties": { "id": "ak16839942", "mag": 1.9, "time": 1505637129909, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8564, 60.3231, 63.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893786", "mag": 1.14, "time": 1505636971290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.737335, 38.786167, 0.85 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893781", "mag": 2.61, "time": 1505636516400, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.117, 36.594333, 6.98 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apg4", "mag": 4.6, "time": 1505636241220, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -82.1696, 7.5057, 23.33 ] } },
+ { "type": "Feature", "properties": { "id": "ak16839932", "mag": 1.1, "time": 1505636239228, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.8157, 63.2668, 2.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apg0", "mag": 4.1, "time": 1505634585840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -66.7666, -23.8893, 236.18 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765143", "mag": 2.2, "time": 1505634363500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.373667, 32.9405, 7.78 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605603", "mag": 1.8, "time": 1505634209242, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8894, 38.3778, 11.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apfv", "mag": 2.4, "time": 1505634047190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4463, 42.5857, 4.34 ] } },
+ { "type": "Feature", "properties": { "id": "ak16839551", "mag": 1.9, "time": 1505633391424, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.7184, 59.603, 74.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893741", "mag": 1.84, "time": 1505633100770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.834167, 37.493833, 1.09 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apft", "mag": 2.6, "time": 1505632181750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4391, 42.6077, 6.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765127", "mag": 0.98, "time": 1505632149420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.605167, 32.828333, 10.94 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893701", "mag": 1.35, "time": 1505631284810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.952833, 37.588167, 1.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apfk", "mag": 4.3, "time": 1505630160580, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -71.6223, -35.7292, 85.77 ] } },
+ { "type": "Feature", "properties": { "id": "ak16839518", "mag": 2.0, "time": 1505629372703, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.7555, 60.0405, 18.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893646", "mag": 1.36, "time": 1505628925460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.736667, 38.757, 1.79 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873889", "mag": 2.9, "time": 1505628904808, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -164.5935, 53.8081, 78.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apfd", "mag": 2.9, "time": 1505628801990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4531, 42.5908, 5.17 ] } },
+ { "type": "Feature", "properties": { "id": "uu60246882", "mag": 1.05, "time": 1505628704550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.836, 44.307333, 7.31 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873888", "mag": 1.1, "time": 1505628661963, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.5848, 64.1727, 10.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apfa", "mag": 4.9, "time": 1505628478300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.9805, 16.0409, 45.23 ] } },
+ { "type": "Feature", "properties": { "id": "uu60246872", "mag": 1.16, "time": 1505628425450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.817667, 44.294, 7.61 ] } },
+ { "type": "Feature", "properties": { "id": "uu60246867", "mag": 1.13, "time": 1505628332210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.828167, 44.305167, 7.48 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apf6", "mag": 4.5, "time": 1505628213110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -95.0121, 16.1058, 52.57 ] } },
+ { "type": "Feature", "properties": { "id": "ak16839149", "mag": 1.6, "time": 1505628012027, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.2, 62.1778, 6.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apf5", "mag": 4.3, "time": 1505627809940, "felt": 7, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -88.5423, 14.4117, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765039", "mag": 1.19, "time": 1505627007650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.0955, 36.761167, 1.69 ] } },
+ { "type": "Feature", "properties": { "id": "uu60246847", "mag": 3.15, "time": 1505626724050, "felt": 5, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.841667, 44.302333, 7.53 ] } },
+ { "type": "Feature", "properties": { "id": "uu60246837", "mag": 2.04, "time": 1505626455220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.822333, 44.293667, 7.53 ] } },
+ { "type": "Feature", "properties": { "id": "ci37765023", "mag": 1.52, "time": 1505626163830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.797833, 33.501167, 4.62 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apeu", "mag": 4.4, "time": 1505625898530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -86.4078, 10.7018, 35.32 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893621", "mag": 1.12, "time": 1505625800310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.810165, 38.820499, 1.92 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764991", "mag": 1.62, "time": 1505625396010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.928167, 35.9015, 5.28 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764983", "mag": 1.96, "time": 1505624889150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.181, 33.187833, 5.86 ] } },
+ { "type": "Feature", "properties": { "id": "ak16838778", "mag": 1.4, "time": 1505624855438, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.4712, 59.8595, 42.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893601", "mag": 1.37, "time": 1505624608110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.8885, 37.105, 1.63 ] } },
+ { "type": "Feature", "properties": { "id": "ak16838775", "mag": 3.2, "time": 1505624284096, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -163.1812, 54.0118, 9.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apeh", "mag": 4.3, "time": 1505624194760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -105.7123, 17.7366, 31.43 ] } },
+ { "type": "Feature", "properties": { "id": "ak16838774", "mag": 1.8, "time": 1505623546848, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.7399, 59.8813, 5.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16838756", "mag": 1.2, "time": 1505622986310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.8141, 63.2696, 2.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16838752", "mag": 1.7, "time": 1505622626171, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -158.3598, 64.3838, 13.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764967", "mag": 0.95, "time": 1505622039760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.1755, 33.965, 15.93 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873881", "mag": 2.7, "time": 1505621586321, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -169.8861, 52.4075, 59.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873880", "mag": 1.0, "time": 1505621507758, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.3176, 61.144, 19.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16838400", "mag": 1.9, "time": 1505621153075, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.1301, 60.8625, 64.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16838393", "mag": 2.5, "time": 1505620853506, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8794, 60.7582, 60.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16838388", "mag": 2.8, "time": 1505620146422, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.7851, 59.8817, 2.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893571", "mag": 1.03, "time": 1505619694280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.821167, 38.807999, 1.94 ] } },
+ { "type": "Feature", "properties": { "id": "ak16838386", "mag": 2.2, "time": 1505619628700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.9053, 67.6564, 13.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893561", "mag": 1.07, "time": 1505619296320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.822502, 38.808998, 1.93 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764903", "mag": 1.12, "time": 1505618790010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.147333, 34.5405, 9.83 ] } },
+ { "type": "Feature", "properties": { "id": "ak16838042", "mag": 1.6, "time": 1505617352105, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.5056, 61.4142, 8.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16838020", "mag": 1.2, "time": 1505616366369, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.6618, 60.5653, 6.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16838003", "mag": 1.0, "time": 1505615565391, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.2146, 64.7331, 17.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764863", "mag": 1.1, "time": 1505613255300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.709667, 33.653333, 15.82 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764847", "mag": 1.21, "time": 1505612591880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.687167, 33.6285, 12.15 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764839", "mag": 1.47, "time": 1505612490180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.927167, 33.971833, 17.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16837647", "mag": 1.8, "time": 1505611875649, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.771, 59.8672, 1.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16873869", "mag": 1.7, "time": 1505609079690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.474, 51.671, 16.0 ] } },
+ { "type": "Feature", "properties": { "id": "hv61910741", "mag": 2.42, "time": 1505608202930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.177667, 19.442, 41.639 ] } },
+ { "type": "Feature", "properties": { "id": "ak16836972", "mag": 2.6, "time": 1505606832814, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.3048, 51.6525, 97.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764815", "mag": 0.95, "time": 1505606822450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.746333, 33.887, 16.59 ] } },
+ { "type": "Feature", "properties": { "id": "ak16836965", "mag": 2.3, "time": 1505606388180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.7659, 59.8663, 5.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16836961", "mag": 2.4, "time": 1505606178328, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.7941, 59.8509, 5.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16836957", "mag": 1.8, "time": 1505606050093, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.89, 59.8885, 15.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16860570", "mag": 1.4, "time": 1505605718038, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.8821, 59.8989, 17.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16860569", "mag": 1.6, "time": 1505605674005, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.8902, 59.9059, 15.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16860568", "mag": 1.9, "time": 1505605456859, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.8916, 59.9103, 15.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16860567", "mag": 2.3, "time": 1505605410411, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.9, 59.889, 12.6 ] } },
+ { "type": "Feature", "properties": { "id": "uw61330071", "mag": 2.57, "time": 1505605382130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -124.863333, 45.526833, 36.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apcc", "mag": 5.1, "time": 1505605083280, "felt": 218, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ -136.7498, 59.9037, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apbv", "mag": 3.9, "time": 1505604419110, "felt": 198, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -96.6989, 35.8586, 2.57 ] } },
+ { "type": "Feature", "properties": { "id": "ak16836912", "mag": 2.9, "time": 1505604383308, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 178.6017, 51.905, 128.2 ] } },
+ { "type": "Feature", "properties": { "id": "uw61329986", "mag": 1.23, "time": 1505604005810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.754167, 46.857333, 1.43 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apbu", "mag": 4.7, "time": 1505603696310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -14.0114, -17.7554, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16860564", "mag": 1.6, "time": 1505603516964, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.1524, 61.3778, 62.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apbm", "mag": 4.5, "time": 1505603442050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.1822, 15.4761, 67.03 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893446", "mag": 2.29, "time": 1505603337140, "felt": 5, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.616833, 36.971, 4.79 ] } },
+ { "type": "Feature", "properties": { "id": "ak16860563", "mag": 1.5, "time": 1505603223363, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.5667, 57.9908, 15.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16860562", "mag": 1.6, "time": 1505602163820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0011, 60.0807, 110.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16836589", "mag": 1.7, "time": 1505601390855, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.7769, 62.4045, 59.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893436", "mag": 1.34, "time": 1505600967450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.834167, 37.493, 0.66 ] } },
+ { "type": "Feature", "properties": { "id": "uw61329976", "mag": 1.03, "time": 1505600388700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.491167, 46.067333, 18.24 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764791", "mag": 1.29, "time": 1505599746390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.431333, 33.040167, 10.42 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893421", "mag": 1.75, "time": 1505599309380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.164333, 35.816, 11.62 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apln", "mag": 3.8, "time": 1505599105290, "felt": 27, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 139.4711, 35.839, 65.43 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893416", "mag": 2.39, "time": 1505598962550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -124.606167, 40.391, 23.43 ] } },
+ { "type": "Feature", "properties": { "id": "ak16836269", "mag": 2.6, "time": 1505598312964, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.1504, 57.6803, 1.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apay", "mag": 4.1, "time": 1505597546760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4078, 15.1552, 27.65 ] } },
+ { "type": "Feature", "properties": { "id": "ak16860558", "mag": 1.5, "time": 1505597186774, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8073, 63.0653, 123.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893411", "mag": 1.07, "time": 1505596690170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.793999, 38.805332, 0.54 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764743", "mag": 1.25, "time": 1505596431740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.179, 33.192167, 7.19 ] } },
+ { "type": "Feature", "properties": { "id": "us2000apa3", "mag": 5.2, "time": 1505595657570, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 159.8208, 52.9335, 55.59 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893406", "mag": 1.68, "time": 1505595567120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.832833, 37.5715, 2.76 ] } },
+ { "type": "Feature", "properties": { "id": "ak16835937", "mag": 1.2, "time": 1505594309155, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.7782, 63.4422, 11.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16835935", "mag": 1.3, "time": 1505593468147, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0825, 63.2217, 0.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764719", "mag": 1.01, "time": 1505593021350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.509667, 36.069667, 3.41 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764711", "mag": 1.86, "time": 1505592937400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.217, 32.373167, 19.88 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ap9e", "mag": 4.2, "time": 1505592897770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -66.6768, -23.7075, 201.03 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605530", "mag": 1.0, "time": 1505591425440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.9, 39.4039, 6.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893386", "mag": 1.01, "time": 1505591244480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.504167, 37.923833, 7.96 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ap8u", "mag": 5.1, "time": 1505590529510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.552, 15.3031, 17.06 ] } },
+ { "type": "Feature", "properties": { "id": "ak16835905", "mag": 2.1, "time": 1505590055161, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0556, 59.9293, 124.0 ] } },
+ { "type": "Feature", "properties": { "id": "uu60246652", "mag": 1.36, "time": 1505589841530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.020833, 44.802, 10.59 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764687", "mag": 1.0, "time": 1505588714630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.973333, 33.989, 6.67 ] } },
+ { "type": "Feature", "properties": { "id": "ak16835606", "mag": 2.1, "time": 1505588651481, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.7021, 67.8201, 4.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764679", "mag": 1.11, "time": 1505588640970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.2045, 34.993167, -0.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ap88", "mag": 4.3, "time": 1505588283560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7095, 15.6575, 33.63 ] } },
+ { "type": "Feature", "properties": { "id": "ak16860552", "mag": 2.1, "time": 1505587762267, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.2692, 60.1941, 137.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16860551", "mag": 1.2, "time": 1505586754071, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.2984, 62.5136, 52.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764631", "mag": 1.09, "time": 1505586635400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.791667, 33.507667, 4.61 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764623", "mag": 1.32, "time": 1505586305110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.975667, 33.992333, 5.71 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893361", "mag": 1.14, "time": 1505585751450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.8095, 38.823167, 1.14 ] } },
+ { "type": "Feature", "properties": { "id": "ak16835287", "mag": 2.1, "time": 1505584069266, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.8156, 57.4983, 73.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ap76", "mag": 4.0, "time": 1505583967320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -95.5572, 15.6925, 24.12 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ap74", "mag": 4.7, "time": 1505583533380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 142.7408, 24.878, 57.27 ] } },
+ { "type": "Feature", "properties": { "id": "ak16860549", "mag": 1.4, "time": 1505583090155, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0305, 61.8843, 68.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764599", "mag": 1.28, "time": 1505582839910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.878167, 35.360667, 7.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ap78", "mag": 4.9, "time": 1505582156450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 161.507, -10.1846, 49.82 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ap6d", "mag": 3.0, "time": 1505582077650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4285, 42.5847, 7.15 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ap6b", "mag": 4.6, "time": 1505581929340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -74.1918, -37.2167, 6.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ap64", "mag": 4.5, "time": 1505581636660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -95.0682, 16.1115, 35.63 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893331", "mag": 1.49, "time": 1505581158890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.337833, 37.820167, -0.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16860548", "mag": 2.1, "time": 1505580632689, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -157.7764, 56.9377, 2.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893326", "mag": 1.43, "time": 1505580258840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.711, 38.750833, 1.46 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893316", "mag": 1.6, "time": 1505579747930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.717167, 38.752667, 1.24 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893306", "mag": 1.39, "time": 1505579471580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.0075, 37.570667, 2.07 ] } },
+ { "type": "Feature", "properties": { "id": "hv61910186", "mag": 1.68, "time": 1505579377040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.611, 19.430167, 2.332 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764559", "mag": 1.5, "time": 1505579023330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.801833, 34.514833, 12.76 ] } },
+ { "type": "Feature", "properties": { "id": "ak16834974", "mag": 1.6, "time": 1505578926267, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.7481, 62.8102, 9.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16834965", "mag": 2.6, "time": 1505578647951, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7871, 61.8971, 60.5 ] } },
+ { "type": "Feature", "properties": { "id": "mb80255754", "mag": 1.22, "time": 1505578208020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.489667, 44.705667, 13.34 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893286", "mag": 1.35, "time": 1505577465010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.047, 36.467, 7.96 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605503", "mag": 1.0, "time": 1505577266743, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.9133, 37.0358, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16834664", "mag": 2.4, "time": 1505577104470, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.431, 64.4709, 16.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ap48", "mag": 2.5, "time": 1505575595120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4328, 42.5757, 6.87 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893281", "mag": 1.04, "time": 1505575420020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.895333, 37.565, -1.35 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ap45", "mag": 2.6, "time": 1505574778570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4287, 42.5771, 8.55 ] } },
+ { "type": "Feature", "properties": { "id": "ak16834651", "mag": 1.1, "time": 1505574443625, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.8572, 64.7619, 12.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893271", "mag": 1.41, "time": 1505574428990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.946833, 37.638167, 2.02 ] } },
+ { "type": "Feature", "properties": { "id": "ak16860541", "mag": 2.0, "time": 1505574078688, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.3496, 59.7545, 127.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764535", "mag": 1.64, "time": 1505573652280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.1775, 33.193, 4.38 ] } },
+ { "type": "Feature", "properties": { "id": "ak16834350", "mag": 1.4, "time": 1505572849209, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.9009, 64.7582, 0.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ap3f", "mag": 2.7, "time": 1505571851260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.424, 42.5936, 4.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16834332", "mag": 2.5, "time": 1505571656570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.9804, 59.5744, 87.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ap3b", "mag": 5.4, "time": 1505571537070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.9072, 16.226, 27.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16860538", "mag": 1.3, "time": 1505570434361, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2424, 62.5449, 91.4 ] } },
+ { "type": "Feature", "properties": { "id": "uw61329766", "mag": 1.85, "time": 1505569264490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.0445, 46.876833, 6.67 ] } },
+ { "type": "Feature", "properties": { "id": "ak16834028", "mag": 1.9, "time": 1505568376976, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.1823, 62.4985, 43.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893206", "mag": 1.29, "time": 1505567825160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.931167, 37.587167, 0.64 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764455", "mag": 2.74, "time": 1505566718480, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.162, 34.381, 19.82 ] } },
+ { "type": "Feature", "properties": { "id": "ak16860534", "mag": 1.8, "time": 1505566502565, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.1816, 59.9775, 117.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893196", "mag": 1.67, "time": 1505566233320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.7105, 38.752667, 1.06 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017259001", "mag": 2.53, "time": 1505566066240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.1556, 17.5196, 8.0 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605483", "mag": 1.9, "time": 1505565978805, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.5538, 38.7481, 7.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764447", "mag": 1.73, "time": 1505565806200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.609667, 33.184833, 2.89 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70235458", "mag": 2.43, "time": 1505565729090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.570167, 37.344833, 5.17 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ap2h", "mag": 5.1, "time": 1505565414430, "felt": null, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 154.9693, -6.4027, 84.07 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893191", "mag": 1.22, "time": 1505565031030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.840833, 37.499667, 1.31 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893176", "mag": 1.02, "time": 1505564232460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.827667, 38.837502, 1.89 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893171", "mag": 1.16, "time": 1505563869000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.124, 36.5485, 6.91 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893166", "mag": 1.98, "time": 1505563826250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.96, 36.383333, 5.84 ] } },
+ { "type": "Feature", "properties": { "id": "ak16860533", "mag": 2.3, "time": 1505563620965, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.2643, 51.2858, 23.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16833723", "mag": 1.8, "time": 1505563033811, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0307, 59.9768, 107.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16833722", "mag": 1.0, "time": 1505562940424, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.5632, 63.5373, 8.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ap1y", "mag": 2.6, "time": 1505562746670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -87.3487, 38.1953, 7.98 ] } },
+ { "type": "Feature", "properties": { "id": "ak16833715", "mag": 1.4, "time": 1505562545553, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0358, 63.0385, 119.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ap1n", "mag": 4.9, "time": 1505561075850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -179.2793, -17.0456, 538.12 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ap1h", "mag": 4.9, "time": 1505561004690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.0304, 14.9269, 46.15 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893161", "mag": 1.71, "time": 1505560933840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.120167, 35.9645, 23.92 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at4t", "mag": 4.2, "time": 1505560744440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 128.8254, -7.4355, 134.05 ] } },
+ { "type": "Feature", "properties": { "id": "ak16833426", "mag": 1.4, "time": 1505560633966, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.4578, 61.5042, 28.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ap1d", "mag": 2.4, "time": 1505560442800, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -96.8006, 35.9908, 5.836 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893146", "mag": 1.21, "time": 1505560059470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.829167, 37.4595, 2.47 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ap17", "mag": 4.2, "time": 1505558287960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.162, 15.1165, 61.6 ] } },
+ { "type": "Feature", "properties": { "id": "mb80255689", "mag": 1.86, "time": 1505557588190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.1525, 48.101667, 7.53 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893131", "mag": 1.55, "time": 1505557460780, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.826, 38.836333, 2.51 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ap0t", "mag": 4.5, "time": 1505557108730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.2297, 14.9414, 30.52 ] } },
+ { "type": "Feature", "properties": { "id": "uw61329606", "mag": 1.52, "time": 1505556991880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.998833, 47.691333, 5.06 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ap0r", "mag": 5.4, "time": 1505556693470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 83.5155, 42.2053, 16.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893116", "mag": 1.84, "time": 1505556472360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.136, 35.962667, 25.16 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at4a", "mag": 4.0, "time": 1505555867920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 122.1193, -10.8831, 38.93 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893106", "mag": 2.2, "time": 1505555321940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.918167, 38.061667, 8.48 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764391", "mag": 3.37, "time": 1505555150630, "felt": 12, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.616167, 33.169667, 8.65 ] } },
+ { "type": "Feature", "properties": { "id": "ak16833112", "mag": 1.5, "time": 1505554903991, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.7489, 59.845, 6.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16832833", "mag": 1.9, "time": 1505554129377, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.7145, 60.2604, 9.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16832826", "mag": 1.1, "time": 1505553506665, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3921, 63.5231, 5.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16832818", "mag": 2.0, "time": 1505552113865, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.4792, 63.0863, 5.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16860523", "mag": 1.1, "time": 1505550954800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.5868, 63.8926, 99.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ap0a", "mag": 4.0, "time": 1505550836160, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 27.685, 37.0689, 6.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764359", "mag": 1.53, "time": 1505550124480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.9555, 33.145833, 9.49 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764335", "mag": 1.72, "time": 1505549627950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.053167, 36.123167, 1.12 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764327", "mag": 1.0, "time": 1505549298090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.920833, 33.975167, 6.39 ] } },
+ { "type": "Feature", "properties": { "id": "ak16832531", "mag": 1.9, "time": 1505548305568, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.9221, 64.7554, 18.3 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017259000", "mag": 3.64, "time": 1505548231440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -64.0526, 18.4531, 34.0 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605447", "mag": 1.3, "time": 1505548133652, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.0331, 40.436, 11.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16860520", "mag": 1.3, "time": 1505547550857, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9184, 62.2903, 70.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764303", "mag": 0.95, "time": 1505546199690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.922833, 33.978, 5.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16832252", "mag": 3.1, "time": 1505545940675, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 178.5336, 51.3744, 18.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893051", "mag": 1.0, "time": 1505544999790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8995, 37.518833, 0.05 ] } },
+ { "type": "Feature", "properties": { "id": "hv61909871", "mag": 3.66, "time": 1505544037320, "felt": 734, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -157.487667, 21.642167, 10.046 ] } },
+ { "type": "Feature", "properties": { "id": "ak16832238", "mag": 2.6, "time": 1505543981141, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.591, 58.4419, 63.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16860517", "mag": 1.9, "time": 1505543962894, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.4461, 59.504, 85.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764247", "mag": 0.97, "time": 1505543854670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.918833, 33.976667, 6.71 ] } },
+ { "type": "Feature", "properties": { "id": "ak16832235", "mag": 1.7, "time": 1505543819625, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.8364, 61.486, 9.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000anze", "mag": 4.4, "time": 1505543417100, "felt": 29, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -90.4791, 13.6017, 52.75 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893026", "mag": 0.96, "time": 1505543269370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8325, 37.540333, 4.97 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893021", "mag": 1.36, "time": 1505543240340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.181833, 37.775667, 14.71 ] } },
+ { "type": "Feature", "properties": { "id": "ak16831965", "mag": 1.2, "time": 1505542824882, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.1125, 62.0856, 43.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893011", "mag": 1.57, "time": 1505541411490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.8025, 38.706667, 3.14 ] } },
+ { "type": "Feature", "properties": { "id": "ak16831959", "mag": 1.0, "time": 1505541221769, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -157.4333, 66.2529, 10.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16831957", "mag": 1.8, "time": 1505541032598, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.4004, 57.5066, 48.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000anz4", "mag": 4.4, "time": 1505540612950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -60.854, 17.4925, 32.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000anz2", "mag": 4.1, "time": 1505540153920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.143, 15.2335, 36.21 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764183", "mag": 1.57, "time": 1505539498920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.924667, 33.976667, 6.44 ] } },
+ { "type": "Feature", "properties": { "id": "us2000anyv", "mag": 3.7, "time": 1505539256530, "felt": 22, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4153, 42.5716, 8.12 ] } },
+ { "type": "Feature", "properties": { "id": "nc72893001", "mag": 1.74, "time": 1505539200450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.266667, 39.366833, -0.52 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605425", "mag": 1.2, "time": 1505536942149, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.719, 36.6783, 6.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764071", "mag": 3.03, "time": 1505536766220, "felt": 99, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.926333, 33.9745, 5.92 ] } },
+ { "type": "Feature", "properties": { "id": "us2000anyf", "mag": 4.6, "time": 1505535666910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -77.9491, -1.4664, 157.52 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892991", "mag": 1.09, "time": 1505535129720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.777833, 39.807833, 8.29 ] } },
+ { "type": "Feature", "properties": { "id": "us2000any5", "mag": 4.3, "time": 1505534256750, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -89.7094, 13.2544, 54.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16831411", "mag": 1.0, "time": 1505534077361, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.8446, 61.8774, 13.6 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605540", "mag": 1.1, "time": 1505533644071, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.5347, 38.3939, 14.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764039", "mag": 1.68, "time": 1505533494970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.682, 35.141167, 11.28 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764031", "mag": 1.75, "time": 1505533234710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.516833, 32.862, 5.65 ] } },
+ { "type": "Feature", "properties": { "id": "ak16831410", "mag": 1.3, "time": 1505532137489, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.8143, 61.3719, 31.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892971", "mag": 0.98, "time": 1505532054400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8735, 37.542, 7.25 ] } },
+ { "type": "Feature", "properties": { "id": "nm60206921", "mag": 1.9, "time": 1505531769960, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -90.3315, 35.6915, 12.51 ] } },
+ { "type": "Feature", "properties": { "id": "ci37764007", "mag": 1.33, "time": 1505531552680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.105667, 34.034, 6.86 ] } },
+ { "type": "Feature", "properties": { "id": "ak16860509", "mag": 1.7, "time": 1505530441142, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.2233, 59.405, 90.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16831409", "mag": 2.6, "time": 1505529914916, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.7519, 54.2192, 117.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763991", "mag": 1.37, "time": 1505528713010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.179, 33.193833, 7.41 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763983", "mag": 1.44, "time": 1505528615710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.793333, 33.493667, 4.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000anxt", "mag": 4.3, "time": 1505528560360, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -100.0309, 17.2785, 69.28 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892956", "mag": 1.06, "time": 1505527887720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.904167, 37.519667, -0.32 ] } },
+ { "type": "Feature", "properties": { "id": "ak16831144", "mag": 1.1, "time": 1505526547318, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6449, 63.5861, 5.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16831140", "mag": 1.8, "time": 1505526295378, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.4346, 59.0192, 66.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892946", "mag": 1.02, "time": 1505525854460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.764168, 38.786999, 0.87 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763959", "mag": 1.17, "time": 1505525787900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.395167, 34.877167, 11.59 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892941", "mag": 1.34, "time": 1505525721400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.772833, 38.807167, -0.11 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892936", "mag": 1.51, "time": 1505525691180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.819167, 37.545, 3.75 ] } },
+ { "type": "Feature", "properties": { "id": "us2000anxl", "mag": 4.6, "time": 1505525689580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -170.5872, 52.0486, 37.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16831132", "mag": 1.8, "time": 1505525666712, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6913, 63.5749, 10.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16831131", "mag": 1.1, "time": 1505525600973, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6368, 63.6017, 8.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892931", "mag": 1.16, "time": 1505524996900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.806167, 36.224833, 7.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830868", "mag": 2.0, "time": 1505523996780, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.276, 57.4142, 39.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16860501", "mag": 1.8, "time": 1505523576256, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.099, 59.7523, 100.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830864", "mag": 1.0, "time": 1505522724047, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -142.3705, 66.2593, 7.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830862", "mag": 1.4, "time": 1505522720015, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8357, 63.5631, 6.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at41", "mag": 4.6, "time": 1505522674060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 69.6259, -23.9788, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000anwt", "mag": 4.3, "time": 1505522470090, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -74.2357, -37.2039, 9.72 ] } },
+ { "type": "Feature", "properties": { "id": "uu60246252", "mag": 1.18, "time": 1505521902190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4075, 42.596, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830861", "mag": 1.2, "time": 1505521740882, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.7991, 61.6212, 38.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830860", "mag": 1.0, "time": 1505521253411, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.9628, 64.7584, 4.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830858", "mag": 1.6, "time": 1505521010086, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.3459, 62.5868, 57.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000at4p", "mag": 4.6, "time": 1505520028160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -30.9669, 2.8319, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830852", "mag": 2.5, "time": 1505519615949, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.8797, 64.7729, 8.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830848", "mag": 3.4, "time": 1505519352423, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.9613, 56.0051, 45.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830585", "mag": 2.2, "time": 1505518242769, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.9245, 64.7851, 9.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830502", "mag": 1.5, "time": 1505517724005, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.3927, 62.7723, 62.1 ] } },
+ { "type": "Feature", "properties": { "id": "hv61909476", "mag": 1.46, "time": 1505517626230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.6105, 19.420833, 2.212 ] } },
+ { "type": "Feature", "properties": { "id": "us2000anvi", "mag": 4.9, "time": 1505517194700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 142.9781, 67.621, 14.89 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852972", "mag": 2.3, "time": 1505516822454, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -175.046, 51.6929, 12.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000asms", "mag": 4.2, "time": 1505515397660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 151.5667, -4.6769, 135.04 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830490", "mag": 2.1, "time": 1505515348546, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.2666, 60.2335, 149.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000anza", "mag": 4.2, "time": 1505515078190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 91.9514, 12.8959, 27.42 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852968", "mag": 1.7, "time": 1505514517165, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.1028, 59.5574, 89.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830486", "mag": 1.5, "time": 1505514413181, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.8103, 64.7863, 4.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852966", "mag": 1.7, "time": 1505514284700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.1862, 59.9258, 120.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892896", "mag": 1.71, "time": 1505514238180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.848, 40.281, 4.76 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aqg1", "mag": 3.2, "time": 1505514207940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -164.4161, 53.6697, 25.19 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892891", "mag": 1.42, "time": 1505514193630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.7085, 38.747, 1.29 ] } },
+ { "type": "Feature", "properties": { "id": "us2000antx", "mag": 2.8, "time": 1505513431240, "felt": 6, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.9688, 37.279, 4.85 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830471", "mag": 1.3, "time": 1505513126878, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.0818, 58.2131, 3.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aqg0", "mag": 2.6, "time": 1505512544140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 178.6723, 51.5577, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000antf", "mag": 4.6, "time": 1505512126220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 147.5618, -5.9077, 108.71 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830466", "mag": 1.7, "time": 1505511266504, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -138.7109, 60.4891, 8.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000asmu", "mag": 4.3, "time": 1505510611600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 137.0445, 34.5022, 328.82 ] } },
+ { "type": "Feature", "properties": { "id": "us2000anrz", "mag": 3.1, "time": 1505510517900, "felt": 6, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4379, 42.6057, 6.23 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830211", "mag": 3.0, "time": 1505510263990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.8926, 64.7765, 8.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852960", "mag": 1.5, "time": 1505509916511, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.1722, 61.1116, 68.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852959", "mag": 2.0, "time": 1505509441508, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4835, 51.7117, 13.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892861", "mag": 1.56, "time": 1505509197990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.217167, 35.152667, 7.27 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605401", "mag": 1.3, "time": 1505508712532, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.5746, 38.7781, 10.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000anqp", "mag": 4.4, "time": 1505508340380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 142.6832, 12.6788, 125.94 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605391", "mag": 1.0, "time": 1505508003630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.3614, 38.5819, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763831", "mag": 1.45, "time": 1505507271630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.356667, 34.4865, 9.29 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830197", "mag": 2.1, "time": 1505507006348, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.8768, 60.2433, 18.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892846", "mag": 2.43, "time": 1505506978320, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.075333, 36.496667, 4.87 ] } },
+ { "type": "Feature", "properties": { "id": "us2000annp", "mag": 2.3, "time": 1505506905940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4277, 42.5599, 9.59 ] } },
+ { "type": "Feature", "properties": { "id": "ak16829946", "mag": 2.6, "time": 1505506584731, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.9781, 57.0654, 81.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892841", "mag": 1.21, "time": 1505506558180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.801833, 38.823167, 2.59 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763815", "mag": 1.6, "time": 1505506434580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.772667, 33.326167, 12.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16829942", "mag": 2.0, "time": 1505506388550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.6381, 59.7681, 10.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16829939", "mag": 1.3, "time": 1505506296730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3557, 64.9805, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16829919", "mag": 3.2, "time": 1505506091028, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.8331, 59.8732, 91.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16829917", "mag": 1.1, "time": 1505506034459, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.1896, 63.4641, 20.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892821", "mag": 1.26, "time": 1505506033580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.407667, 37.504333, 1.03 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017258005", "mag": 3.43, "time": 1505505501670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -64.6295, 19.1915, 40.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16829915", "mag": 1.5, "time": 1505505395135, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6711, 60.3885, 41.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16829913", "mag": 2.1, "time": 1505505235226, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -135.0254, 58.4988, 9.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16829904", "mag": 1.1, "time": 1505503708373, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.5162, 63.4918, 1.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892806", "mag": 1.03, "time": 1505503474580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.488333, 37.450833, 4.91 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763759", "mag": 1.72, "time": 1505502131450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.796, 33.503167, 6.45 ] } },
+ { "type": "Feature", "properties": { "id": "us2000anjp", "mag": 5.5, "time": 1505501282460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -28.3292, -55.4644, 9.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892771", "mag": 1.05, "time": 1505500911720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.725334, 38.757, 1.52 ] } },
+ { "type": "Feature", "properties": { "id": "us2000anjh", "mag": 4.5, "time": 1505500904740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 169.72, 54.0122, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "uw61308057", "mag": 0.97, "time": 1505500854880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -124.858667, 48.515, 37.88 ] } },
+ { "type": "Feature", "properties": { "id": "ak16829625", "mag": 1.6, "time": 1505499922143, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3749, 60.4419, 18.3 ] } },
+ { "type": "Feature", "properties": { "id": "uu60246132", "mag": 1.51, "time": 1505499901840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.420667, 42.537167, 7.15 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892766", "mag": 2.33, "time": 1505499839660, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.49, 37.447667, 5.54 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892756", "mag": 1.0, "time": 1505499395080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.799667, 37.462333, 0.05 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892761", "mag": 1.02, "time": 1505499284680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.445, 37.379333, 14.57 ] } },
+ { "type": "Feature", "properties": { "id": "ak16829622", "mag": 1.1, "time": 1505498936272, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.4458, 61.0059, 4.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000anhz", "mag": 4.2, "time": 1505498539950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.9892, 15.1825, 46.32 ] } },
+ { "type": "Feature", "properties": { "id": "ak16829378", "mag": 1.9, "time": 1505498347271, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -138.7292, 60.4845, 7.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763719", "mag": 1.44, "time": 1505498108300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.178169, 35.602833, 5.95 ] } },
+ { "type": "Feature", "properties": { "id": "us2000anhd", "mag": 5.0, "time": 1505497546880, "felt": 12, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 28.8132, -2.7314, 12.98 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763711", "mag": 1.02, "time": 1505497385540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.102833, 33.170333, 9.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16829370", "mag": 1.8, "time": 1505496661795, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.3298, 60.0961, 93.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892746", "mag": 1.22, "time": 1505496479100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.641667, 37.477167, 6.06 ] } },
+ { "type": "Feature", "properties": { "id": "us2000angr", "mag": 4.6, "time": 1505496373980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 160.527, 53.8618, 60.06 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763679", "mag": 1.04, "time": 1505495567950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.808, 36.012167, 1.77 ] } },
+ { "type": "Feature", "properties": { "id": "ak16829365", "mag": 1.4, "time": 1505494067842, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.3827, 63.102, 108.2 ] } },
+ { "type": "Feature", "properties": { "id": "uw61308032", "mag": 1.41, "time": 1505493000220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.048333, 47.3965, 13.93 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892711", "mag": 1.1, "time": 1505492830650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.807, 38.822667, 2.57 ] } },
+ { "type": "Feature", "properties": { "id": "uw61308027", "mag": 1.17, "time": 1505492391290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.0485, 47.395833, 13.68 ] } },
+ { "type": "Feature", "properties": { "id": "ak16829360", "mag": 2.9, "time": 1505491697051, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -164.4354, 53.7237, 49.7 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017258004", "mag": 1.98, "time": 1505491060700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -66.7353, 18.0013, 7.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16829358", "mag": 1.6, "time": 1505491027770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6843, 60.3013, 49.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000angc", "mag": 4.7, "time": 1505490910540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 140.4948, -51.951, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16829355", "mag": 3.2, "time": 1505490508935, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -162.4074, 55.3684, 134.2 ] } },
+ { "type": "Feature", "properties": { "id": "uu60246117", "mag": 1.78, "time": 1505490038910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.438833, 42.587833, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763607", "mag": 1.3, "time": 1505489472220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.491167, 33.8525, -0.5 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70235413", "mag": 2.08, "time": 1505488486050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.96, 37.276667, 2.46 ] } },
+ { "type": "Feature", "properties": { "id": "ak16829351", "mag": 1.4, "time": 1505488175090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.4615, 63.0908, 2.8 ] } },
+ { "type": "Feature", "properties": { "id": "hv61908956", "mag": 2.13, "time": 1505487142110, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.862333, 19.450333, 1.074 ] } },
+ { "type": "Feature", "properties": { "id": "ak16829348", "mag": 2.3, "time": 1505486994801, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -163.5994, 64.2424, 10.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852936", "mag": 1.5, "time": 1505485797408, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.5105, 60.533, 54.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16829346", "mag": 1.6, "time": 1505485726963, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.8399, 59.9528, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80255559", "mag": 1.54, "time": 1505485070000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.528, 46.898, 12.92 ] } },
+ { "type": "Feature", "properties": { "id": "us2000asmd", "mag": 4.0, "time": 1505484479350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 118.2763, -7.0257, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763559", "mag": 1.43, "time": 1505483064830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.6045, 33.127833, 7.81 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763535", "mag": 1.14, "time": 1505482307640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.736833, 33.222833, 12.21 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763527", "mag": 1.65, "time": 1505482113260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.742833, 33.223833, 11.67 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763511", "mag": 2.98, "time": 1505481739410, "felt": 62, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.750167, 33.221833, 11.54 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605319", "mag": 1.4, "time": 1505481612897, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.536, 39.4025, 7.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16829343", "mag": 1.1, "time": 1505481511288, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -138.734, 60.477, 7.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16829342", "mag": 1.1, "time": 1505481115042, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -138.6866, 60.4978, 7.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000an8y", "mag": 3.0, "time": 1505480692500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.9665, 37.2798, 4.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aqfs", "mag": 4.0, "time": 1505480677660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 177.1015, 51.6899, 62.37 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892656", "mag": 1.2, "time": 1505479917850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.478833, 36.923833, 5.96 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852930", "mag": 2.2, "time": 1505479857860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -164.6735, 54.2139, 72.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852929", "mag": 1.3, "time": 1505479424949, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8074, 61.6789, 63.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763455", "mag": 1.43, "time": 1505479133890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.172833, 33.1885, 5.98 ] } },
+ { "type": "Feature", "properties": { "id": "us2000an8s", "mag": 5.0, "time": 1505479021440, "felt": null, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 99.4856, 1.5915, 160.08 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852928", "mag": 2.1, "time": 1505478896521, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 178.6795, 51.3691, 28.0 ] } },
+ { "type": "Feature", "properties": { "id": "uw61307972", "mag": 0.95, "time": 1505478878910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.588, 45.973333, 13.92 ] } },
+ { "type": "Feature", "properties": { "id": "mb80255544", "mag": 1.19, "time": 1505478239910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.527, 46.868167, 11.01 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852925", "mag": 2.1, "time": 1505477897255, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -160.3237, 54.8499, 18.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892641", "mag": 1.01, "time": 1505477523520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.799667, 38.833832, 2.01 ] } },
+ { "type": "Feature", "properties": { "id": "us2000an8e", "mag": 2.7, "time": 1505477274970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.525, 46.8611, 10.18 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852924", "mag": 1.4, "time": 1505476792218, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.5946, 57.6534, 29.9 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017258003", "mag": 2.18, "time": 1505476739060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -66.7808, 18.0135, 13.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852923", "mag": 2.0, "time": 1505476493650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -160.7994, 54.9781, 25.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000an7z", "mag": 3.8, "time": 1505475906360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -161.753, 54.3697, 28.05 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892636", "mag": 2.0, "time": 1505475684320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.723167, 38.750667, 1.87 ] } },
+ { "type": "Feature", "properties": { "id": "ak16829087", "mag": 1.6, "time": 1505475033163, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.6709, 67.7999, 2.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16829082", "mag": 1.8, "time": 1505474984470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9722, 63.0999, 131.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16829079", "mag": 1.4, "time": 1505474678706, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -138.7297, 60.4779, 8.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000an7j", "mag": 2.7, "time": 1505474631800, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4441, 42.568, 7.22 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892626", "mag": 1.04, "time": 1505474439810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.804667, 37.458833, 0.13 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763407", "mag": 3.23, "time": 1505473976550, "felt": 13, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.303167, 35.032833, 11.48 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605300", "mag": 1.1, "time": 1505473795002, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.7828, 38.6088, 8.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16828841", "mag": 1.7, "time": 1505473634732, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.54, 59.9657, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "uw61307932", "mag": 1.91, "time": 1505473610560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.044333, 46.870333, 5.23 ] } },
+ { "type": "Feature", "properties": { "id": "uw61307927", "mag": 2.04, "time": 1505473528440, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.040667, 46.874167, 5.89 ] } },
+ { "type": "Feature", "properties": { "id": "us2000an74", "mag": 4.6, "time": 1505473111350, "felt": 7, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -60.5703, 14.9752, 55.34 ] } },
+ { "type": "Feature", "properties": { "id": "ak16828838", "mag": 2.3, "time": 1505473096912, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.7454, 57.1664, 7.6 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70235273", "mag": 1.73, "time": 1505472377400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.7775, 37.328833, 5.95 ] } },
+ { "type": "Feature", "properties": { "id": "ak16828836", "mag": 1.2, "time": 1505472358115, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.0141, 62.1581, 7.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000an6x", "mag": 3.0, "time": 1505471961060, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4507, 42.5991, 6.39 ] } },
+ { "type": "Feature", "properties": { "id": "ak16828834", "mag": 1.6, "time": 1505471035679, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.5654, 60.6122, 4.1 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017258002", "mag": 3.3, "time": 1505471012430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -65.039, 18.7165, 49.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892606", "mag": 2.13, "time": 1505469780960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.106167, 36.291833, 27.69 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852912", "mag": 1.9, "time": 1505469324601, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0438, 60.2245, 124.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16828830", "mag": 2.7, "time": 1505468486908, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -164.378, 53.6654, 25.8 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017258001", "mag": 3.31, "time": 1505468158660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.9741, 18.1111, 53.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16828827", "mag": 1.9, "time": 1505468029663, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.1086, 60.3742, 87.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000an6e", "mag": 2.1, "time": 1505467401730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4369, 42.5723, 4.71 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763367", "mag": 1.32, "time": 1505466931820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.601167, 35.792, 0.88 ] } },
+ { "type": "Feature", "properties": { "id": "hv61908811", "mag": 1.86, "time": 1505466749280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.473328, 19.201, 34.94 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017258000", "mag": 2.64, "time": 1505466025100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -66.746, 17.9996, 11.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000an5j", "mag": 3.6, "time": 1505463761200, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4416, 42.5753, 5.34 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852908", "mag": 1.3, "time": 1505463469458, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.2829, 57.3488, 39.2 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605283", "mag": 1.7, "time": 1505461873940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.4437, 37.5652, 30.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892591", "mag": 2.34, "time": 1505461865770, "felt": 34, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.815833, 37.416, -0.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892576", "mag": 1.69, "time": 1505460536470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.027667, 35.933167, 12.08 ] } },
+ { "type": "Feature", "properties": { "id": "ak16828820", "mag": 1.4, "time": 1505460317106, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.3735, 59.7943, 6.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852903", "mag": 1.3, "time": 1505459205027, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.8448, 60.0925, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16828585", "mag": 1.4, "time": 1505458631465, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.0593, 61.7131, 3.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000an4v", "mag": 4.4, "time": 1505458308660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 179.5767, -21.9172, 640.49 ] } },
+ { "type": "Feature", "properties": { "id": "ak16828584", "mag": 1.4, "time": 1505458006745, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.7132, 60.0014, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16828563", "mag": 2.8, "time": 1505456528325, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.4989, 60.1125, 151.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16828570", "mag": 2.5, "time": 1505456526893, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.2519, 60.1326, 152.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892551", "mag": 2.6, "time": 1505456369610, "felt": 148, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.814333, 37.412167, -0.14 ] } },
+ { "type": "Feature", "properties": { "id": "ak16828560", "mag": 1.1, "time": 1505456105481, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.0298, 65.3407, 11.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763319", "mag": 1.07, "time": 1505455402480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.7685, 33.327833, 13.39 ] } },
+ { "type": "Feature", "properties": { "id": "ak16828558", "mag": 1.4, "time": 1505455356648, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.3726, 61.4994, 31.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852896", "mag": 1.9, "time": 1505455322292, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.2513, 60.1603, 135.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892546", "mag": 1.03, "time": 1505455248140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.810667, 38.83, 2.09 ] } },
+ { "type": "Feature", "properties": { "id": "ak16828556", "mag": 1.6, "time": 1505455168783, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.9297, 60.9306, 19.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763311", "mag": 1.21, "time": 1505454701910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.190167, 33.332667, 10.93 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852894", "mag": 1.7, "time": 1505453971264, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.8667, 60.0997, 103.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000an3z", "mag": 4.6, "time": 1505453216820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -82.4676, -42.4862, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852893", "mag": 1.1, "time": 1505452792257, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.4902, 57.7349, 15.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16828554", "mag": 1.4, "time": 1505452679971, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.3948, 61.1147, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852891", "mag": 1.6, "time": 1505451604059, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.9039, 61.8273, 105.7 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70235253", "mag": 1.62, "time": 1505451601330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.7765, 37.333333, 5.53 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892536", "mag": 2.78, "time": 1505451572070, "felt": 348, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.804667, 37.415, 2.65 ] } },
+ { "type": "Feature", "properties": { "id": "ak16828322", "mag": 1.1, "time": 1505451186525, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -138.7346, 60.4761, 9.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000anyw", "mag": 2.0, "time": 1505450267000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -71.42, 45.73, 18.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892526", "mag": 1.26, "time": 1505449157230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.802333, 38.8245, 1.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16828321", "mag": 1.4, "time": 1505448965816, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.0369, 60.3155, 0.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000an31", "mag": 4.3, "time": 1505448638800, "felt": 9, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -76.4066, -11.9189, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80255479", "mag": 1.23, "time": 1505447369570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.529333, 46.896667, 13.22 ] } },
+ { "type": "Feature", "properties": { "id": "ak16828316", "mag": 2.0, "time": 1505447351856, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.1687, 59.8152, 101.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16828314", "mag": 1.7, "time": 1505447232655, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.4451, 60.022, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892516", "mag": 1.1, "time": 1505446837720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.730835, 38.793999, 1.32 ] } },
+ { "type": "Feature", "properties": { "id": "uu60245937", "mag": 2.38, "time": 1505446750290, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -108.831833, 40.139667, 5.96 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605251", "mag": 1.0, "time": 1505446468632, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9033, 38.4011, 9.6 ] } },
+ { "type": "Feature", "properties": { "id": "uw61307757", "mag": 1.87, "time": 1505444885110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.039, 46.879667, 6.38 ] } },
+ { "type": "Feature", "properties": { "id": "ak16828311", "mag": 1.7, "time": 1505444727120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -142.9607, 69.4522, 5.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16828309", "mag": 1.6, "time": 1505444714123, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.2585, 60.8639, 35.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16828078", "mag": 1.7, "time": 1505444473211, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.9441, 60.8403, 88.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16852882", "mag": 1.6, "time": 1505443841428, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.2335, 53.7145, 69.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000an1z", "mag": 4.4, "time": 1505443535780, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.5573, 15.2748, 63.05 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892506", "mag": 1.02, "time": 1505442684550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.883667, 37.553, 2.17 ] } },
+ { "type": "Feature", "properties": { "id": "hv61908531", "mag": 3.04, "time": 1505439944520, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.466833, 19.197667, 35.437 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827839", "mag": 1.5, "time": 1505439822541, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.4032, 62.4253, 2.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763231", "mag": 1.55, "time": 1505439516220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.3195, 34.068167, 18.36 ] } },
+ { "type": "Feature", "properties": { "id": "us2000an15", "mag": 5.2, "time": 1505439500860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5689, -26.6333, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000an0z", "mag": 4.8, "time": 1505439407990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 94.866, 18.8304, 42.15 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892491", "mag": 1.99, "time": 1505438838520, "felt": 6, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.813833, 37.412167, -0.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892486", "mag": 3.28, "time": 1505438267780, "felt": 1110, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.805667, 37.414, -0.21 ] } },
+ { "type": "Feature", "properties": { "id": "uw61307737", "mag": 1.35, "time": 1505438193040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.260833, 45.950833, -0.29 ] } },
+ { "type": "Feature", "properties": { "id": "us2000an0d", "mag": 2.7, "time": 1505437987460, "felt": 5, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.5868, 37.2136, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000an0g", "mag": 4.3, "time": 1505437868680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4079, 15.6978, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827837", "mag": 1.3, "time": 1505437000881, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.7, 64.3159, 3.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aslu", "mag": 4.1, "time": 1505436496140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.8507, -18.1469, 603.85 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763199", "mag": 1.36, "time": 1505435921800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.729667, 33.651667, 14.16 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892481", "mag": 1.05, "time": 1505435403940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.1895, 36.589667, 2.71 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aslz", "mag": 4.4, "time": 1505434827610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 141.716, 24.4725, 93.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amzk", "mag": 4.1, "time": 1505434054870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.3134, -31.912, 136.67 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827738", "mag": 1.1, "time": 1505433675781, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.4097, 60.0357, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "uw61307717", "mag": 1.13, "time": 1505433139350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.677167, 47.835167, -0.74 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892476", "mag": 1.21, "time": 1505432696710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.828167, 37.448333, 11.34 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827737", "mag": 2.4, "time": 1505432573787, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -163.6213, 54.0704, 37.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amz3", "mag": 4.1, "time": 1505431969130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.671, 15.2225, 53.79 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892471", "mag": 1.5, "time": 1505431533120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.4815, 38.607167, 11.47 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892466", "mag": 1.83, "time": 1505431346810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.8125, 37.417833, 0.06 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827381", "mag": 2.1, "time": 1505430963793, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.5301, 63.0381, 100.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amyn", "mag": 4.7, "time": 1505430410000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -172.7418, -15.3348, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892451", "mag": 1.34, "time": 1505430316610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.842333, 38.821, 2.01 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827378", "mag": 1.7, "time": 1505430242693, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.6605, 59.9169, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827376", "mag": 1.4, "time": 1505430223593, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3686, 64.993, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70235238", "mag": 1.58, "time": 1505429674020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.887667, 37.203667, 6.13 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827373", "mag": 1.9, "time": 1505429324646, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.3648, 60.031, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827371", "mag": 1.2, "time": 1505429076761, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.7478, 61.0185, 13.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amx5", "mag": 4.0, "time": 1505428206900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.2168, 15.3544, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892426", "mag": 2.04, "time": 1505428077100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.454833, 37.434333, 10.05 ] } },
+ { "type": "Feature", "properties": { "id": "ak16861216", "mag": 1.9, "time": 1505427925219, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -158.0714, 56.1589, 10.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827036", "mag": 2.0, "time": 1505427923919, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.0766, 61.1472, 0.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amww", "mag": 5.2, "time": 1505427661920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 170.1022, -13.8345, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763135", "mag": 1.49, "time": 1505427523820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.866, 34.011167, 16.92 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605229", "mag": 2.2, "time": 1505427385689, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.0155, 38.8648, 4.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000askz", "mag": 4.1, "time": 1505426291450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 129.1685, -7.2026, 147.79 ] } },
+ { "type": "Feature", "properties": { "id": "hv61908231", "mag": 2.43, "time": 1505426012270, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.012665, 19.708, 2.82 ] } },
+ { "type": "Feature", "properties": { "id": "uu60245817", "mag": 1.37, "time": 1505425437900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.738, 38.746667, 7.72 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827032", "mag": 1.7, "time": 1505425052822, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.4453, 59.9712, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827035", "mag": 2.3, "time": 1505424622002, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -164.6154, 53.6195, 25.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000asl6", "mag": 4.4, "time": 1505424366710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 122.1651, -12.9278, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017257005", "mag": 3.03, "time": 1505423754820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.8618, 18.9605, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amub", "mag": 2.8, "time": 1505423589100, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.1847, 37.3761, 9.38 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892386", "mag": 1.71, "time": 1505423524180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.993, 37.849, 7.27 ] } },
+ { "type": "Feature", "properties": { "id": "uw61307597", "mag": 1.91, "time": 1505423420600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.516333, 49.4855, -1.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827021", "mag": 2.6, "time": 1505422812693, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.9235, 64.0866, 5.1 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017257004", "mag": 3.1, "time": 1505421809880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.5351, 18.7848, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "uw61307587", "mag": 2.41, "time": 1505421654690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.038167, 46.8785, 6.64 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763103", "mag": 1.09, "time": 1505421634220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.484667, 33.852667, -0.55 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763095", "mag": 2.06, "time": 1505421264070, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.377, 34.075, 2.89 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763087", "mag": 1.19, "time": 1505421203990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.9245, 33.981667, 6.59 ] } },
+ { "type": "Feature", "properties": { "id": "uw61307577", "mag": 2.03, "time": 1505420251860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.041833, 46.875667, 6.94 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763071", "mag": 1.01, "time": 1505420033530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.481, 33.8295, -0.53 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amr0", "mag": 3.2, "time": 1505419914220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -103.2947, 31.1684, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16826805", "mag": 1.7, "time": 1505419715229, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.541, 59.9804, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80255399", "mag": 3.06, "time": 1505419221280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.5865, 48.5185, 11.24 ] } },
+ { "type": "Feature", "properties": { "id": "uu60245777", "mag": 2.41, "time": 1505419186750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -108.829333, 40.126, 5.93 ] } },
+ { "type": "Feature", "properties": { "id": "ak16826800", "mag": 1.6, "time": 1505419140835, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.9798, 59.9221, 1.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892321", "mag": 1.03, "time": 1505418518980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.838833, 37.542333, 4.28 ] } },
+ { "type": "Feature", "properties": { "id": "ak16861208", "mag": 1.9, "time": 1505418243673, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0345, 59.5576, 91.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892316", "mag": 1.93, "time": 1505418215210, "felt": 0, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.825833, 37.479167, 0.95 ] } },
+ { "type": "Feature", "properties": { "id": "uw61307562", "mag": 1.61, "time": 1505417734660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.201667, 47.657667, 24.36 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892311", "mag": 2.58, "time": 1505417475310, "felt": 83, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.815167, 37.412167, -0.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16826593", "mag": 3.3, "time": 1505417123986, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -162.9114, 52.3919, 7.2 ] } },
+ { "type": "Feature", "properties": { "id": "ld60143041", "mag": 1.13, "time": 1505416429790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -78.886167, 43.172167, 4.49 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amnb", "mag": 3.0, "time": 1505416249190, "felt": 10, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.5193, 36.2853, 5.18 ] } },
+ { "type": "Feature", "properties": { "id": "ak16826590", "mag": 1.5, "time": 1505416113279, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.1135, 61.6397, 76.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16826581", "mag": 3.0, "time": 1505415978301, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.7549, 53.141, 25.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16826576", "mag": 2.1, "time": 1505415492270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.9009, 60.0386, 108.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16826575", "mag": 1.4, "time": 1505414640813, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.4567, 60.0012, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892281", "mag": 1.22, "time": 1505414516760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.106667, 37.328833, -0.31 ] } },
+ { "type": "Feature", "properties": { "id": "ak16826369", "mag": 1.5, "time": 1505413533625, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.2439, 60.5671, 11.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16826365", "mag": 2.1, "time": 1505413453164, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.2344, 60.5666, 13.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16826364", "mag": 1.2, "time": 1505413265164, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.6599, 59.9119, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37763023", "mag": 1.39, "time": 1505413136790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.316167, 35.0525, -0.97 ] } },
+ { "type": "Feature", "properties": { "id": "uw61307532", "mag": 1.1, "time": 1505412859730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.3855, 45.629833, -1.63 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892266", "mag": 0.96, "time": 1505412496280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.823167, 37.5355, 0.22 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892261", "mag": 1.1, "time": 1505411783250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.808166, 38.800167, 2.65 ] } },
+ { "type": "Feature", "properties": { "id": "ak16826335", "mag": 1.2, "time": 1505411310289, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.0556, 61.0558, 10.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16826330", "mag": 1.6, "time": 1505411005327, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8642, 60.9198, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amk5", "mag": 5.8, "time": 1505410888670, "felt": 9, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 145.732, 18.6699, 173.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892241", "mag": 3.28, "time": 1505410337330, "felt": 1346, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.8135, 37.411667, -0.21 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amw9", "mag": 2.9, "time": 1505410106220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.434, 42.5971, 8.27 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762975", "mag": 1.37, "time": 1505410085790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.795333, 33.494833, 5.03 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amja", "mag": 3.2, "time": 1505409999020, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4403, 42.586, 8.7 ] } },
+ { "type": "Feature", "properties": { "id": "uw61307502", "mag": 2.03, "time": 1505409449050, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.775333, 47.590667, 26.27 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amis", "mag": 4.1, "time": 1505408885650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.3313, 15.7247, 66.16 ] } },
+ { "type": "Feature", "properties": { "id": "ak16826120", "mag": 2.2, "time": 1505408670072, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.8183, 60.7702, 77.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amhu", "mag": 2.5, "time": 1505407539000, "felt": 179, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.0236, 32.7967, 6.19 ] } },
+ { "type": "Feature", "properties": { "id": "ak16826109", "mag": 3.4, "time": 1505406315703, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.9733, 53.4109, 37.9 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017257003", "mag": 1.93, "time": 1505405250720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.1335, 18.0533, 14.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16825909", "mag": 3.0, "time": 1505405033445, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.4291, 57.7254, 15.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16861191", "mag": 2.2, "time": 1505404726740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -168.4598, 52.5561, 41.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amga", "mag": 4.5, "time": 1505404343560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 147.122, -6.0228, 63.06 ] } },
+ { "type": "Feature", "properties": { "id": "uu60245622", "mag": 1.46, "time": 1505403828660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.640167, 41.675, 10.23 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762935", "mag": 1.53, "time": 1505403471570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.7005, 36.071833, 0.62 ] } },
+ { "type": "Feature", "properties": { "id": "ak16861190", "mag": 1.9, "time": 1505403359391, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.3367, 58.804, 116.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762927", "mag": 1.08, "time": 1505403357540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.6365, 33.9595, 15.51 ] } },
+ { "type": "Feature", "properties": { "id": "ak16825908", "mag": 1.4, "time": 1505402885768, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.5012, 61.3116, 5.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16825714", "mag": 2.2, "time": 1505399922942, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -164.5211, 53.4862, 2.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892201", "mag": 2.8, "time": 1505399703490, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8115, 37.473, 1.65 ] } },
+ { "type": "Feature", "properties": { "id": "ak16825708", "mag": 2.5, "time": 1505399664156, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.3242, 59.9299, 129.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amdz", "mag": 4.3, "time": 1505399623950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.8439, 15.4623, 51.01 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70235213", "mag": 2.12, "time": 1505398747570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.888167, 37.203167, 5.99 ] } },
+ { "type": "Feature", "properties": { "id": "ak16825704", "mag": 1.0, "time": 1505398436381, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.6928, 63.8584, 11.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762895", "mag": 1.82, "time": 1505398376370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.448167, 33.465, 11.86 ] } },
+ { "type": "Feature", "properties": { "id": "mb80255329", "mag": 1.87, "time": 1505398289770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.534833, 46.870333, 11.87 ] } },
+ { "type": "Feature", "properties": { "id": "ak16825519", "mag": 1.8, "time": 1505397944345, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.464, 59.9879, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amcx", "mag": 2.4, "time": 1505397840240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4117, 42.6047, 6.9 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017257002", "mag": 3.32, "time": 1505397292070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -68.3985, 17.9023, 89.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16861180", "mag": 2.0, "time": 1505397099289, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -164.7867, 53.5505, 48.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16861178", "mag": 1.1, "time": 1505394745904, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.8149, 59.8173, 16.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892181", "mag": 0.97, "time": 1505394542400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.833667, 37.603833, 3.53 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605167", "mag": 1.1, "time": 1505394484720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9328, 38.4065, 6.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16825327", "mag": 1.8, "time": 1505394377057, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.5142, 60.0065, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16825325", "mag": 1.1, "time": 1505393895767, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.0247, 61.1655, 6.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16825323", "mag": 1.3, "time": 1505393727514, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.0737, 61.1407, 3.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ambm", "mag": 2.8, "time": 1505393579230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4339, 42.5276, 8.74 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892176", "mag": 1.12, "time": 1505393008100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8295, 37.486167, 1.89 ] } },
+ { "type": "Feature", "properties": { "id": "ak16825308", "mag": 2.8, "time": 1505392115017, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.1037, 58.6121, 140.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892171", "mag": 1.95, "time": 1505392014690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.811, 37.47, 1.05 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762879", "mag": 2.48, "time": 1505391903440, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.03, 34.269167, 1.91 ] } },
+ { "type": "Feature", "properties": { "id": "hv61907846", "mag": 1.74, "time": 1505391154930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.801498, 20.135166, 20.69 ] } },
+ { "type": "Feature", "properties": { "id": "ak16825129", "mag": 1.8, "time": 1505390600450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.6941, 53.4145, 21.6 ] } },
+ { "type": "Feature", "properties": { "id": "uu60245547", "mag": 1.86, "time": 1505390326640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.506167, 37.5615, 15.73 ] } },
+ { "type": "Feature", "properties": { "id": "ak16825126", "mag": 1.4, "time": 1505389290941, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.5082, 60.1407, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16825125", "mag": 1.0, "time": 1505389269829, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.3654, 61.4964, 18.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16861166", "mag": 1.9, "time": 1505388913353, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.3862, 51.6162, 20.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16825120", "mag": 2.1, "time": 1505388602725, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -159.7931, 54.8482, 3.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16825116", "mag": 1.5, "time": 1505388522841, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.3442, 61.3489, 49.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16825115", "mag": 1.2, "time": 1505388281614, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.5528, 61.7241, 28.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16824940", "mag": 1.2, "time": 1505387093135, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.3758, 61.1701, 24.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892141", "mag": 1.22, "time": 1505386514410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.131, 36.571833, 9.94 ] } },
+ { "type": "Feature", "properties": { "id": "ak16824937", "mag": 2.5, "time": 1505385684936, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -168.0082, 52.3291, 6.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16824932", "mag": 1.6, "time": 1505384400903, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.5379, 59.9886, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16824930", "mag": 1.2, "time": 1505383839558, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -144.3238, 66.4782, 11.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16861154", "mag": 1.9, "time": 1505383026342, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -164.851, 54.0129, 69.5 ] } },
+ { "type": "Feature", "properties": { "id": "hv61907791", "mag": 1.61, "time": 1505382391650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.223667, 18.879, 14.409 ] } },
+ { "type": "Feature", "properties": { "id": "ak16824762", "mag": 1.4, "time": 1505381878343, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.4212, 60.1553, 64.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16824759", "mag": 2.0, "time": 1505381875397, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7269, 61.5265, 60.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892131", "mag": 0.97, "time": 1505381710130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.720001, 38.778168, 1.63 ] } },
+ { "type": "Feature", "properties": { "id": "ak16824756", "mag": 2.0, "time": 1505380861272, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.0471, 60.1915, 70.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16861150", "mag": 2.6, "time": 1505380391671, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -162.8518, 53.4455, 2.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16824753", "mag": 2.6, "time": 1505380263376, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -158.1582, 56.2796, 14.2 ] } },
+ { "type": "Feature", "properties": { "id": "uu60245457", "mag": 2.53, "time": 1505379272870, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -108.827333, 40.120667, -3.25 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762823", "mag": 2.96, "time": 1505378281630, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.181833, 31.831667, 18.32 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892121", "mag": 1.02, "time": 1505377845780, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.717499, 38.774666, 2.13 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892116", "mag": 1.11, "time": 1505377833950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.714333, 38.776667, 1.68 ] } },
+ { "type": "Feature", "properties": { "id": "us2000am81", "mag": 4.6, "time": 1505377166860, "felt": 66, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -76.4481, -11.977, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70235208", "mag": 1.81, "time": 1505376928150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.570333, 37.345667, 5.05 ] } },
+ { "type": "Feature", "properties": { "id": "ak16824583", "mag": 1.6, "time": 1505376729312, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.4585, 60.3656, 97.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892106", "mag": 1.19, "time": 1505376712450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.799833, 38.712667, 4.08 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762815", "mag": 1.04, "time": 1505374690080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.221833, 32.924167, 12.12 ] } },
+ { "type": "Feature", "properties": { "id": "ak16824572", "mag": 1.6, "time": 1505374660381, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -144.7598, 65.436, 12.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000am75", "mag": 4.4, "time": 1505372640680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -72.6754, -34.2973, 1.87 ] } },
+ { "type": "Feature", "properties": { "id": "ak16824419", "mag": 1.8, "time": 1505372310107, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.5103, 60.0002, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762807", "mag": 1.14, "time": 1505372248820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.872333, 36.502833, 6.38 ] } },
+ { "type": "Feature", "properties": { "id": "ak16824418", "mag": 1.0, "time": 1505372093089, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8634, 59.8384, 41.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16824415", "mag": 1.3, "time": 1505371860862, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.4454, 63.0596, 8.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762783", "mag": 1.64, "time": 1505371108250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.625167, 32.844, 11.98 ] } },
+ { "type": "Feature", "properties": { "id": "ak16824411", "mag": 1.3, "time": 1505371053195, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.1765, 60.359, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aywv", "mag": 4.0, "time": 1505370268660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.6903, 15.5507, 43.43 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762759", "mag": 1.32, "time": 1505370002700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.733, 33.668167, 13.69 ] } },
+ { "type": "Feature", "properties": { "id": "hv61907731", "mag": 1.75, "time": 1505369997330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.382, 19.236, 32.221 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762751", "mag": 0.96, "time": 1505369947950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.731167, 33.674333, 14.82 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aywt", "mag": 4.0, "time": 1505369661520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.2582, 14.9559, 25.35 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892081", "mag": 1.08, "time": 1505369496760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.1615, 36.5675, 3.55 ] } },
+ { "type": "Feature", "properties": { "id": "us2000am6i", "mag": 4.5, "time": 1505369450740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.3229, 15.1323, 35.74 ] } },
+ { "type": "Feature", "properties": { "id": "us2000am6b", "mag": 4.4, "time": 1505369156780, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7112, 15.4856, 25.87 ] } },
+ { "type": "Feature", "properties": { "id": "us2000am61", "mag": 3.0, "time": 1505368177800, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.3656, 36.7402, 7.992 ] } },
+ { "type": "Feature", "properties": { "id": "hv61907641", "mag": 2.26, "time": 1505367585250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.425667, 19.294167, 8.845 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arcx", "mag": 3.2, "time": 1505367393080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4046, 51.5999, 12.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000am5i", "mag": 4.2, "time": 1505366427980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.0841, 14.4266, 49.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amaf", "mag": 4.7, "time": 1505366112080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 148.0489, -1.356, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892391", "mag": 1.0, "time": 1505365754150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.669167, 40.386833, 6.29 ] } },
+ { "type": "Feature", "properties": { "id": "us2000am56", "mag": 4.7, "time": 1505365399680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.0709, 14.4637, 52.71 ] } },
+ { "type": "Feature", "properties": { "id": "mb80255284", "mag": 0.98, "time": 1505365218550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.522, 46.8975, 13.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16861140", "mag": 1.2, "time": 1505365047321, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0097, 62.5721, 78.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762615", "mag": 0.95, "time": 1505364900090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.405833, 33.049333, 3.39 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892056", "mag": 1.38, "time": 1505364695740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.834, 37.54, 4.68 ] } },
+ { "type": "Feature", "properties": { "id": "uw61307352", "mag": 1.78, "time": 1505364485340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.942833, 46.866667, 10.19 ] } },
+ { "type": "Feature", "properties": { "id": "ak16824230", "mag": 1.9, "time": 1505364358950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.959, 59.8075, 60.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762599", "mag": 1.23, "time": 1505364106870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.992833, 33.957167, 16.75 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762591", "mag": 2.12, "time": 1505363550640, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.864667, 34.336333, 2.71 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892041", "mag": 1.83, "time": 1505363410540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.834167, 37.540667, 4.76 ] } },
+ { "type": "Feature", "properties": { "id": "ak16824097", "mag": 1.0, "time": 1505363016608, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.1668, 62.6309, 61.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000am4b", "mag": 3.2, "time": 1505362481060, "felt": 8, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.9406, 37.3096, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823967", "mag": 2.0, "time": 1505361191283, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2972, 61.0176, 70.0 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017257000", "mag": 4.32, "time": 1505360450920, "felt": 14, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -68.791, 18.2223, 133.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000am3s", "mag": 3.3, "time": 1505360430180, "felt": 7, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.5112, 36.2854, 3.99 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762583", "mag": 1.43, "time": 1505358534420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.6335, 37.005167, 1.55 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762575", "mag": 1.39, "time": 1505358219310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.606667, 32.828, 12.41 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762567", "mag": 1.41, "time": 1505358109150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.427667, 34.225833, 13.02 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amd4", "mag": 3.2, "time": 1505357901130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4442, 42.5241, 6.99 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amd0", "mag": 3.1, "time": 1505357873450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4212, 42.5232, 8.42 ] } },
+ { "type": "Feature", "properties": { "id": "us2000am2z", "mag": 4.0, "time": 1505357591000, "felt": 5, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4618, 42.5096, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "uu60245162", "mag": 3.43, "time": 1505357581000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.426833, 42.522333, 7.86 ] } },
+ { "type": "Feature", "properties": { "id": "ak16861134", "mag": 1.6, "time": 1505356675370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.8887, 59.6609, 90.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823826", "mag": 1.2, "time": 1505356643722, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.394, 60.1683, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000am28", "mag": 2.4, "time": 1505356555350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4263, 42.5303, 6.85 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605135", "mag": 1.0, "time": 1505356439739, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.8899, 37.3603, 8.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823823", "mag": 1.2, "time": 1505356197786, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.8776, 62.7371, 2.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892031", "mag": 0.98, "time": 1505355727940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.737663, 38.785168, 2.12 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892026", "mag": 1.09, "time": 1505355720450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.746833, 38.787833, 0.11 ] } },
+ { "type": "Feature", "properties": { "id": "ak16861131", "mag": 1.7, "time": 1505355503652, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.2915, 59.077, 76.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72892021", "mag": 1.67, "time": 1505355378570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.139667, 37.139, 11.31 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823809", "mag": 1.2, "time": 1505354254705, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.3285, 60.1933, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000am21", "mag": 3.2, "time": 1505353999720, "felt": 13, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 22.899, 42.6704, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762543", "mag": 1.21, "time": 1505353838790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.543667, 34.513833, 6.53 ] } },
+ { "type": "Feature", "properties": { "id": "us2000am1y", "mag": 2.6, "time": 1505353481360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4312, 42.6014, 6.92 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823693", "mag": 1.0, "time": 1505351348552, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.644, 62.6994, 58.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823694", "mag": 2.1, "time": 1505351146642, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -160.5002, 54.7664, 27.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823688", "mag": 1.1, "time": 1505350854568, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.6619, 59.8124, 15.7 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017257001", "mag": 1.33, "time": 1505350270080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.141, 18.0321, 11.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823577", "mag": 2.7, "time": 1505349755149, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -161.3635, 54.4582, 4.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16861124", "mag": 1.1, "time": 1505349382106, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.2989, 65.668, 14.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000am0x", "mag": 4.6, "time": 1505348843700, "felt": 139, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 139.6152, 35.7719, 48.83 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762495", "mag": 1.0, "time": 1505347877510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.3345, 33.3545, 11.05 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823574", "mag": 2.8, "time": 1505347636545, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -174.3466, 52.1109, 79.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823573", "mag": 2.3, "time": 1505347560653, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4123, 51.617, 13.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762487", "mag": 1.28, "time": 1505347417680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.2715, 33.976667, 5.05 ] } },
+ { "type": "Feature", "properties": { "id": "hv61907326", "mag": 1.75, "time": 1505347375860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.394165, 19.238333, 32.54 ] } },
+ { "type": "Feature", "properties": { "id": "ak16861121", "mag": 1.7, "time": 1505347241023, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4, 51.6505, 10.1 ] } },
+ { "type": "Feature", "properties": { "id": "hv61907236", "mag": 2.19, "time": 1505347011230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.3835, 19.243, 32.131 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891986", "mag": 1.15, "time": 1505346581750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.5475, 37.143167, 3.07 ] } },
+ { "type": "Feature", "properties": { "id": "uw61307262", "mag": 1.18, "time": 1505346312450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.458833, 45.814167, -0.95 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823443", "mag": 1.7, "time": 1505346090013, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3313, 60.824, 55.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762463", "mag": 2.21, "time": 1505345845770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.610333, 32.834, 14.54 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762455", "mag": 1.23, "time": 1505345794660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.613333, 32.828, 12.93 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823442", "mag": 1.4, "time": 1505345681125, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.1366, 63.4085, 115.9 ] } },
+ { "type": "Feature", "properties": { "id": "mb80255184", "mag": 0.99, "time": 1505345517200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.161833, 48.091333, 6.16 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823441", "mag": 1.4, "time": 1505345131416, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9358, 61.9565, 65.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000alzg", "mag": 4.2, "time": 1505344897150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -69.4183, -18.058, 145.27 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823332", "mag": 2.8, "time": 1505344031893, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.3482, 51.3154, 44.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823330", "mag": 1.3, "time": 1505343882913, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3403, 64.9963, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000alyy", "mag": 3.2, "time": 1505343206750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5646, 46.8793, 10.55 ] } },
+ { "type": "Feature", "properties": { "id": "uw61307247", "mag": 1.57, "time": 1505343065140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.347833, 44.090833, -1.55 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762423", "mag": 2.63, "time": 1505342925380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.6105, 32.832833, 13.39 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70235168", "mag": 1.72, "time": 1505342816860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.966333, 37.277833, 4.1 ] } },
+ { "type": "Feature", "properties": { "id": "uu60245097", "mag": 1.4, "time": 1505342728590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.0425, 44.6825, 13.02 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762407", "mag": 1.11, "time": 1505342669930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.2705, 33.978, 5.78 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830577", "mag": 2.2, "time": 1505342546550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -159.6253, 55.5692, 53.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762415", "mag": 1.75, "time": 1505342494590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.999333, 33.073, -0.12 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605103", "mag": 1.1, "time": 1505342257553, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.367, 38.5022, 1.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762399", "mag": 1.66, "time": 1505342009270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.612333, 32.834667, 12.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762391", "mag": 1.75, "time": 1505341937760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.613, 32.838667, 12.07 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762383", "mag": 1.83, "time": 1505341540510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.614, 32.8335, 12.31 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762367", "mag": 3.47, "time": 1505341287040, "felt": 39, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.615833, 32.843833, 15.23 ] } },
+ { "type": "Feature", "properties": { "id": "hv61907176", "mag": 1.67, "time": 1505340803980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.213667, 19.3035, 2.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823316", "mag": 2.5, "time": 1505340733287, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.3859, 61.6698, 29.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891951", "mag": 1.45, "time": 1505340188960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.841667, 37.532167, -1.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830575", "mag": 1.5, "time": 1505340177499, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.5229, 57.7401, 52.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762359", "mag": 1.73, "time": 1505340060360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.274, 33.976333, 5.08 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762351", "mag": 3.26, "time": 1505339982500, "felt": 19, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.276, 33.975333, 3.91 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830574", "mag": 1.6, "time": 1505339727053, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -167.4531, 53.5386, 11.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823310", "mag": 1.1, "time": 1505339360762, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.5682, 53.9212, 8.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762343", "mag": 1.12, "time": 1505339170890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.795167, 33.507167, 4.82 ] } },
+ { "type": "Feature", "properties": { "id": "mb80255169", "mag": 1.13, "time": 1505339091750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.622667, 46.909667, 10.61 ] } },
+ { "type": "Feature", "properties": { "id": "us2000alwi", "mag": 4.7, "time": 1505338937260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.0086, 15.1566, 38.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762335", "mag": 1.17, "time": 1505338520010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.614667, 32.832167, 10.18 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762327", "mag": 1.59, "time": 1505338477140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.615333, 32.843, 15.01 ] } },
+ { "type": "Feature", "properties": { "id": "uu60245082", "mag": 1.54, "time": 1505338298430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.043833, 44.678167, 13.53 ] } },
+ { "type": "Feature", "properties": { "id": "us2000alvq", "mag": 5.0, "time": 1505338251370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.9904, 15.7092, 39.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891936", "mag": 1.29, "time": 1505338239110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.017333, 37.5655, -0.37 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762303", "mag": 1.69, "time": 1505337757160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.7965, 33.504167, 5.32 ] } },
+ { "type": "Feature", "properties": { "id": "uu60245072", "mag": 1.82, "time": 1505336663200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.075667, 44.674, 5.83 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762287", "mag": 1.49, "time": 1505336435640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.498833, 33.8575, -0.61 ] } },
+ { "type": "Feature", "properties": { "id": "mb80255154", "mag": 2.29, "time": 1505335433020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.7145, 46.9035, 15.16 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891916", "mag": 1.11, "time": 1505334220120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.7985, 38.833168, 1.37 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891911", "mag": 1.01, "time": 1505333988430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.811165, 38.815666, 2.78 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823196", "mag": 1.7, "time": 1505333862556, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2791, 60.1339, 58.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891901", "mag": 1.64, "time": 1505333181410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.814, 38.8085, 2.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891896", "mag": 1.52, "time": 1505332739060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.817667, 37.481167, 0.23 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762231", "mag": 1.56, "time": 1505331922920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.381833, 35.980833, 4.99 ] } },
+ { "type": "Feature", "properties": { "id": "us2000alqh", "mag": 4.6, "time": 1505331447000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 112.9501, -6.0986, 590.53 ] } },
+ { "type": "Feature", "properties": { "id": "us2000alq6", "mag": 3.0, "time": 1505331233180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4525, 42.6029, 6.02 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823083", "mag": 1.8, "time": 1505330838320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.8987, 61.0912, 0.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823082", "mag": 1.3, "time": 1505330810883, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.7682, 61.1384, 6.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823080", "mag": 1.9, "time": 1505329947650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.7636, 59.6753, 80.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762215", "mag": 1.01, "time": 1505329786970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.1445, 33.667, -0.63 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891881", "mag": 1.2, "time": 1505329775160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.850167, 37.644667, 5.63 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762207", "mag": 1.15, "time": 1505329688010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.187167, 34.993167, -0.82 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830566", "mag": 2.0, "time": 1505328672149, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.302, 51.3949, 36.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822979", "mag": 1.3, "time": 1505328502909, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.3078, 61.2967, 15.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891876", "mag": 1.1, "time": 1505327236230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.745666, 38.787834, 1.52 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822977", "mag": 1.3, "time": 1505326599778, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0157, 63.5538, 1.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891871", "mag": 2.5, "time": 1505325897250, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.0595, 40.449667, 16.29 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891866", "mag": 1.77, "time": 1505325532440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.0005, 35.943167, 17.23 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891861", "mag": 1.4, "time": 1505325215290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.600167, 35.482, -0.46 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762175", "mag": 1.47, "time": 1505324991750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.609, 32.840667, 14.81 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822975", "mag": 1.2, "time": 1505324283732, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.2438, 62.4485, 2.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891851", "mag": 1.07, "time": 1505324016940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.841167, 37.491667, -0.1 ] } },
+ { "type": "Feature", "properties": { "id": "se60179327", "mag": 3.2, "time": 1505323990930, "felt": 525, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -80.703, 37.472833, 17.77 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822973", "mag": 1.1, "time": 1505323870033, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.7446, 59.8908, 41.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830561", "mag": 1.8, "time": 1505323399318, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.9553, 59.6095, 109.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830560", "mag": 2.0, "time": 1505322404855, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.5059, 60.1768, 153.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000alkc", "mag": 4.4, "time": 1505321962400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.6803, 15.7969, 43.13 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830559", "mag": 1.8, "time": 1505321554841, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -174.8197, 51.97, 7.3 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891831", "mag": 2.56, "time": 1505318816290, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -124.704667, 40.484, 16.91 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822799", "mag": 1.8, "time": 1505318719906, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -174.4098, 51.7491, 29.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822798", "mag": 1.1, "time": 1505318596103, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.8143, 62.8428, 67.1 ] } },
+ { "type": "Feature", "properties": { "id": "hv61906796", "mag": 2.1, "time": 1505317840280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.485504, 19.219, 36.43 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822695", "mag": 1.3, "time": 1505316869586, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.4592, 63.3484, 0.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000asbr", "mag": 4.3, "time": 1505316791790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 152.1284, -4.88, 54.06 ] } },
+ { "type": "Feature", "properties": { "id": "hv61906781", "mag": 1.87, "time": 1505316745210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.889333, 19.9115, 24.592 ] } },
+ { "type": "Feature", "properties": { "id": "us2000alhx", "mag": 5.0, "time": 1505316098600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 161.9266, -10.7647, 46.64 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822692", "mag": 2.1, "time": 1505315572825, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.2966, 59.7717, 67.1 ] } },
+ { "type": "Feature", "properties": { "id": "nm60179312", "mag": 1.77, "time": 1505315298800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -89.672667, 36.156667, 9.37 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822691", "mag": 1.8, "time": 1505315111913, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.8055, 59.8229, 63.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822689", "mag": 1.5, "time": 1505313796189, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.627, 60.7945, 30.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762039", "mag": 1.34, "time": 1505312641900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.791, 36.012167, 1.22 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605012", "mag": 1.1, "time": 1505309502885, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9116, 38.3879, 15.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830551", "mag": 1.1, "time": 1505309158928, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.8896, 60.3719, 15.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822590", "mag": 1.1, "time": 1505309077336, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -157.3908, 66.2048, 11.9 ] } },
+ { "type": "Feature", "properties": { "id": "mb80255099", "mag": 1.92, "time": 1505309076210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.547833, 44.257, 9.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891776", "mag": 1.02, "time": 1505308975510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.918167, 37.593167, 0.05 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822588", "mag": 1.4, "time": 1505308950441, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.4711, 65.4989, 11.1 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604990", "mag": 2.3, "time": 1505308914949, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.818, 38.8311, 8.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci37762007", "mag": 2.3, "time": 1505308483530, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.585667, 35.139667, 1.62 ] } },
+ { "type": "Feature", "properties": { "id": "ci37761999", "mag": 1.26, "time": 1505308208470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.6185, 32.838, 13.81 ] } },
+ { "type": "Feature", "properties": { "id": "hv61906676", "mag": 1.95, "time": 1505307948740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.298996, 19.424334, 6.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci37761983", "mag": 1.11, "time": 1505307567020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.623, 32.839333, 10.27 ] } },
+ { "type": "Feature", "properties": { "id": "us2000alfh", "mag": 4.5, "time": 1505306912090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.7023, 15.8472, 95.22 ] } },
+ { "type": "Feature", "properties": { "id": "mb80255094", "mag": 1.19, "time": 1505305625190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.642667, 46.956667, 13.27 ] } },
+ { "type": "Feature", "properties": { "id": "ci37761967", "mag": 0.99, "time": 1505305387220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.587333, 36.179667, 0.99 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891766", "mag": 1.15, "time": 1505305306770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.820333, 38.804, 2.93 ] } },
+ { "type": "Feature", "properties": { "id": "us2000anw3", "mag": 2.5, "time": 1505305272030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -163.6774, 53.9359, 13.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci37761959", "mag": 1.4, "time": 1505304763660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.829167, 32.782333, 3.76 ] } },
+ { "type": "Feature", "properties": { "id": "us2000asbk", "mag": 4.1, "time": 1505303510580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 128.1783, 2.9917, 58.22 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891751", "mag": 0.99, "time": 1505303358450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.082167, 35.707667, 6.66 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822583", "mag": 1.1, "time": 1505302645910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.3182, 60.2384, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822582", "mag": 2.3, "time": 1505302558389, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.6566, 51.5758, 56.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000alew", "mag": 3.9, "time": 1505302030040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.2516, 14.855, 22.24 ] } },
+ { "type": "Feature", "properties": { "id": "mb80255084", "mag": 1.07, "time": 1505300960250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.511667, 46.9035, 5.32 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822577", "mag": 1.5, "time": 1505300414194, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.9212, 64.7545, 3.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000alee", "mag": 3.3, "time": 1505299970430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.6225, 59.7836, 5.44 ] } },
+ { "type": "Feature", "properties": { "id": "uu60244877", "mag": 2.35, "time": 1505299838240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.8535, 44.770833, 7.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891746", "mag": 1.53, "time": 1505299590270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.793, 38.8215, 3.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830540", "mag": 1.9, "time": 1505298481141, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.1134, 57.8805, 76.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000anw1", "mag": 3.0, "time": 1505298226550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 179.0008, 50.1653, 25.9 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604987", "mag": 1.7, "time": 1505298050456, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.8103, 39.3643, 9.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822473", "mag": 1.2, "time": 1505297484913, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.4897, 63.0467, 3.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822472", "mag": 2.4, "time": 1505297294726, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -164.0416, 53.5692, 24.5 ] } },
+ { "type": "Feature", "properties": { "id": "uw61307017", "mag": 1.34, "time": 1505297037790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.764333, 48.271333, 1.82 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830536", "mag": 1.2, "time": 1505297029108, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.7778, 60.5002, 3.8 ] } },
+ { "type": "Feature", "properties": { "id": "uu60244867", "mag": 2.44, "time": 1505296698750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.422, 42.567833, 7.73 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aldk", "mag": 4.3, "time": 1505296627560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.9055, 15.639, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37761935", "mag": 1.02, "time": 1505296379600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.6215, 32.831333, 10.19 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aldd", "mag": 4.5, "time": 1505295980580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7401, 15.5449, 31.41 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ald3", "mag": 2.4, "time": 1505295918600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.9039, 36.2089, 4.448 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822468", "mag": 2.5, "time": 1505295654705, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -158.2898, 58.6446, 4.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ald0", "mag": 4.3, "time": 1505295123840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 179.5523, -23.5684, 541.35 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822374", "mag": 2.1, "time": 1505294583800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.5476, 52.7346, 39.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000alcs", "mag": 3.9, "time": 1505294302600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.2348, 15.2732, 42.03 ] } },
+ { "type": "Feature", "properties": { "id": "hv61906586", "mag": 2.11, "time": 1505294188360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.356003, 19.467167, 4.72 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891726", "mag": 1.09, "time": 1505293695870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.793831, 38.822334, 2.17 ] } },
+ { "type": "Feature", "properties": { "id": "us2000alcf", "mag": 2.6, "time": 1505292526080, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4275, 42.596, 6.01 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822373", "mag": 1.5, "time": 1505292217097, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.4702, 60.5679, 7.7 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604985", "mag": 1.6, "time": 1505292088777, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.548, 37.4198, 12.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891721", "mag": 1.57, "time": 1505290933360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.889333, 39.366167, 10.36 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822371", "mag": 1.4, "time": 1505290808147, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.8609, 62.2453, 3.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822294", "mag": 1.5, "time": 1505289269698, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7566, 62.9227, 94.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822278", "mag": 1.1, "time": 1505287972451, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.7433, 64.7476, 3.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822251", "mag": 3.4, "time": 1505287366858, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.5871, 61.6459, 24.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822240", "mag": 4.2, "time": 1505287337046, "felt": 42, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.9213, 62.8983, 79.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000albc", "mag": 2.3, "time": 1505286819380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4494, 42.6632, 10.21 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830527", "mag": 1.8, "time": 1505286603893, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0388, 59.8755, 109.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822236", "mag": 1.3, "time": 1505286374065, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.3111, 60.5579, 12.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891681", "mag": 1.39, "time": 1505286150510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8285, 37.467, -1.65 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822233", "mag": 1.6, "time": 1505285865490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.8651, 62.2629, 96.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000alb7", "mag": 2.6, "time": 1505285839040, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4177, 42.5618, 8.28 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830523", "mag": 1.7, "time": 1505285675768, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.1432, 53.7072, 69.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000alb2", "mag": 4.5, "time": 1505284765560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -179.084, -22.1327, 549.09 ] } },
+ { "type": "Feature", "properties": { "id": "nn00605030", "mag": 1.1, "time": 1505284250632, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9094, 38.3681, 5.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830521", "mag": 1.2, "time": 1505284146176, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.8175, 60.5189, 13.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000alax", "mag": 4.7, "time": 1505283996200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 147.6079, 13.4506, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891656", "mag": 2.62, "time": 1505283657320, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.803833, 37.486167, 2.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci37761831", "mag": 1.06, "time": 1505283115050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.795667, 33.5045, 6.22 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822160", "mag": 1.4, "time": 1505282783934, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.9732, 60.9785, 5.5 ] } },
+ { "type": "Feature", "properties": { "id": "mb80255029", "mag": 1.01, "time": 1505281846410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5335, 46.862167, 10.42 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822085", "mag": 1.5, "time": 1505279524459, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -144.8464, 60.3009, 18.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ala9", "mag": 4.5, "time": 1505279374230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.453, 15.3914, 72.28 ] } },
+ { "type": "Feature", "properties": { "id": "ci37761799", "mag": 0.97, "time": 1505279080610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.108167, 34.0375, 6.71 ] } },
+ { "type": "Feature", "properties": { "id": "ak16830517", "mag": 1.1, "time": 1505278511333, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.4202, 60.2062, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80255024", "mag": 0.95, "time": 1505278401320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.529833, 46.864167, 11.03 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891626", "mag": 1.1, "time": 1505277590570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.657667, 37.1885, 3.74 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891621", "mag": 1.74, "time": 1505277415750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.886167, 39.3655, 10.44 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822082", "mag": 1.6, "time": 1505275993590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -157.0455, 67.102, 9.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891611", "mag": 1.07, "time": 1505275610780, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.795, 38.834667, 1.79 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822080", "mag": 3.5, "time": 1505275475357, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4947, 51.6652, 10.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891606", "mag": 2.64, "time": 1505275168490, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.793833, 38.835667, 1.89 ] } },
+ { "type": "Feature", "properties": { "id": "mb80255014", "mag": 0.96, "time": 1505274355010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.537, 46.87, 9.71 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891581", "mag": 0.95, "time": 1505273207520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.795166, 38.836666, 1.37 ] } },
+ { "type": "Feature", "properties": { "id": "mb80255009", "mag": 1.36, "time": 1505273099690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.536167, 46.872333, 11.58 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017256002", "mag": 2.65, "time": 1505272611930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -66.4988, 19.1065, 25.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891561", "mag": 0.95, "time": 1505272540610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.796669, 38.836834, 1.67 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891556", "mag": 1.43, "time": 1505272430980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.798333, 38.835167, 1.85 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891551", "mag": 2.57, "time": 1505272400990, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.795667, 38.835, 1.82 ] } },
+ { "type": "Feature", "properties": { "id": "us2000al90", "mag": 4.7, "time": 1505272023240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -73.0946, 9.5711, 124.17 ] } },
+ { "type": "Feature", "properties": { "id": "mb80255004", "mag": 1.06, "time": 1505270988240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.532, 46.864667, 11.36 ] } },
+ { "type": "Feature", "properties": { "id": "us2000al8v", "mag": 4.4, "time": 1505270586710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5721, 15.2889, 34.84 ] } },
+ { "type": "Feature", "properties": { "id": "ci37761727", "mag": 1.4, "time": 1505270305170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.643667, 34.5065, 17.68 ] } },
+ { "type": "Feature", "properties": { "id": "ak16822007", "mag": 1.0, "time": 1505269102037, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6691, 63.5608, 10.3 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017256000", "mag": 3.12, "time": 1505269072880, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -66.5123, 19.091, 21.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891541", "mag": 1.06, "time": 1505268817240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.517833, 36.804167, 4.87 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821999", "mag": 1.7, "time": 1505268378179, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.2198, 61.7575, 9.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000al86", "mag": 5.0, "time": 1505268098300, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5276, 15.1558, 14.07 ] } },
+ { "type": "Feature", "properties": { "id": "mb80254989", "mag": 1.38, "time": 1505267929610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.540667, 46.872333, 11.48 ] } },
+ { "type": "Feature", "properties": { "id": "mb80254984", "mag": 0.99, "time": 1505267728460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5535, 46.8885, 10.76 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821934", "mag": 1.1, "time": 1505267091152, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2406, 64.8451, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891516", "mag": 1.94, "time": 1505266613010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.366833, 40.4805, 29.25 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017256001", "mag": 3.05, "time": 1505266581450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -66.5053, 19.0955, 25.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37761639", "mag": 2.16, "time": 1505265949130, "felt": 80, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.768667, 33.774833, 2.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821933", "mag": 1.0, "time": 1505265920217, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.4031, 60.2216, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37761631", "mag": 1.35, "time": 1505265794450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.333667, 32.933167, 11.47 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821931", "mag": 1.3, "time": 1505265469603, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.5511, 61.3707, 12.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000al7y", "mag": 4.1, "time": 1505265414270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4234, 15.3254, 35.74 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821926", "mag": 2.1, "time": 1505265047390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.5313, 60.6712, 14.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821924", "mag": 1.7, "time": 1505264772966, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -158.5006, 65.2775, 11.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000al7s", "mag": 4.1, "time": 1505263876510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -95.3188, 15.5954, 29.98 ] } },
+ { "type": "Feature", "properties": { "id": "hv61906111", "mag": 1.46, "time": 1505262900730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.538167, 19.256333, 8.429 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891421", "mag": 1.92, "time": 1505262602400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.273167, 36.148167, 8.47 ] } },
+ { "type": "Feature", "properties": { "id": "hv61906101", "mag": 2.02, "time": 1505262046800, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.276672, 19.404333, 0.19 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891406", "mag": 1.7, "time": 1505261981400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.865667, 36.439667, 6.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000al7a", "mag": 3.9, "time": 1505261942310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.399, 14.9659, 29.81 ] } },
+ { "type": "Feature", "properties": { "id": "hv61906081", "mag": 1.94, "time": 1505261244650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.535, 19.849, 23.752 ] } },
+ { "type": "Feature", "properties": { "id": "ci37761535", "mag": 1.56, "time": 1505261179000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.165833, 34.0375, 5.82 ] } },
+ { "type": "Feature", "properties": { "id": "ak16850793", "mag": 2.2, "time": 1505260675964, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -164.4757, 53.3828, 38.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821817", "mag": 1.0, "time": 1505258496556, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -144.5762, 67.0334, 2.1 ] } },
+ { "type": "Feature", "properties": { "id": "uw61306902", "mag": 1.1, "time": 1505258286020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.374667, 45.693833, -0.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000al6d", "mag": 4.9, "time": 1505257835180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -32.4621, 58.0975, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37761503", "mag": 1.49, "time": 1505257449290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.675833, 35.043, -0.82 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821811", "mag": 1.3, "time": 1505256864247, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3463, 64.994, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "hv61905981", "mag": 1.81, "time": 1505256516770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.543333, 19.851167, 24.833 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821806", "mag": 2.7, "time": 1505256286618, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -164.4621, 65.79, 5.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821804", "mag": 1.5, "time": 1505255958164, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.3411, 61.6898, 7.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000al5m", "mag": 4.0, "time": 1505255324930, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -70.8843, -20.2485, 15.05 ] } },
+ { "type": "Feature", "properties": { "id": "us2000al5h", "mag": 4.8, "time": 1505254407650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -32.3543, 58.0241, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891326", "mag": 1.22, "time": 1505251854350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.794833, 38.819333, 2.91 ] } },
+ { "type": "Feature", "properties": { "id": "ci37761407", "mag": 1.17, "time": 1505251524970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.193167, 34.9985, -0.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000al44", "mag": 4.6, "time": 1505250860230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -32.4259, 58.0753, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821734", "mag": 1.5, "time": 1505250673775, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.907, 60.3564, 8.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000al3g", "mag": 4.9, "time": 1505250247360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -32.4208, 58.165, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891306", "mag": 1.1, "time": 1505250244890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.819333, 37.604167, 3.81 ] } },
+ { "type": "Feature", "properties": { "id": "ci37761383", "mag": 1.74, "time": 1505250166450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.805333, 33.691833, 15.39 ] } },
+ { "type": "Feature", "properties": { "id": "ci37761375", "mag": 1.49, "time": 1505248746150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.3685, 33.956333, 12.98 ] } },
+ { "type": "Feature", "properties": { "id": "ci37761367", "mag": 1.03, "time": 1505248730160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.575167, 33.465333, 9.81 ] } },
+ { "type": "Feature", "properties": { "id": "us2000al2x", "mag": 4.8, "time": 1505248700330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -174.19, -15.0799, 144.26 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891286", "mag": 2.07, "time": 1505247727770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.5795, 39.603833, -0.21 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821575", "mag": 1.5, "time": 1505247191039, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.9811, 64.7032, 15.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000al1n", "mag": 2.7, "time": 1505247025290, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.3683, 36.7446, 14.63 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891281", "mag": 1.59, "time": 1505246933110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.827333, 38.839, 2.11 ] } },
+ { "type": "Feature", "properties": { "id": "us2000al1t", "mag": 4.3, "time": 1505246854930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4239, 15.7169, 52.92 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891276", "mag": 1.98, "time": 1505246713670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.876833, 37.8095, 14.44 ] } },
+ { "type": "Feature", "properties": { "id": "ak16850781", "mag": 1.8, "time": 1505246486363, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.5902, 57.2026, 44.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci37761335", "mag": 0.96, "time": 1505246263650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.759333, 33.8575, 5.49 ] } },
+ { "type": "Feature", "properties": { "id": "ci37761319", "mag": 2.18, "time": 1505245563030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.385, 32.3285, 10.39 ] } },
+ { "type": "Feature", "properties": { "id": "ak16850780", "mag": 3.0, "time": 1505245054736, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -170.5817, 52.3665, 32.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821568", "mag": 1.3, "time": 1505244764083, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.4179, 63.5705, 4.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891271", "mag": 2.16, "time": 1505244492580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.146667, 40.211833, 2.94 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891266", "mag": 1.1, "time": 1505244145950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.875667, 38.839667, 2.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000al0z", "mag": 4.4, "time": 1505243754080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.7715, -21.9227, 347.97 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821516", "mag": 1.4, "time": 1505243650979, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.5267, 60.0018, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821564", "mag": 1.6, "time": 1505243467122, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -159.2171, 59.7927, 8.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akzt", "mag": 4.7, "time": 1505243351270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -32.2455, 58.0337, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akzf", "mag": 4.3, "time": 1505243172030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.6417, 15.6677, 51.24 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akyq", "mag": 4.4, "time": 1505241724530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.9743, 16.3622, 66.45 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891231", "mag": 1.19, "time": 1505241397800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.244667, 39.3805, 3.22 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akyh", "mag": 4.4, "time": 1505241368140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.5996, 15.3334, 74.72 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aky8", "mag": 4.6, "time": 1505240973270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.0643, 15.2212, 44.65 ] } },
+ { "type": "Feature", "properties": { "id": "ak16850775", "mag": 1.7, "time": 1505240703529, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.2159, 59.366, 81.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akxq", "mag": 2.8, "time": 1505240585080, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4572, 42.5165, 8.78 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821457", "mag": 1.1, "time": 1505238948365, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.1631, 60.0754, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16850772", "mag": 1.0, "time": 1505238898070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.2683, 61.5446, 35.4 ] } },
+ { "type": "Feature", "properties": { "id": "hv61905641", "mag": 2.1, "time": 1505238187460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.247667, 19.393167, 36.582 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aq68", "mag": 2.8, "time": 1505237765880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -158.9785, 55.7766, 56.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akwr", "mag": 4.3, "time": 1505237620800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 129.6779, -5.2108, 218.06 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821449", "mag": 2.3, "time": 1505236529463, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -167.4402, 53.5209, 13.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821379", "mag": 2.4, "time": 1505235536293, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.4636, 60.5717, 9.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akvp", "mag": 4.5, "time": 1505235493410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.2449, 15.2798, 73.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aq63", "mag": 3.1, "time": 1505235473870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -167.5043, 53.6304, 25.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821334", "mag": 1.0, "time": 1505235138364, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -142.7095, 60.5946, 14.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891191", "mag": 1.63, "time": 1505235102110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.444167, 37.384167, 12.11 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akwm", "mag": 4.6, "time": 1505234310180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -58.4081, 13.9047, 20.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821326", "mag": 1.9, "time": 1505234239386, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.7021, 63.9919, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37761199", "mag": 1.12, "time": 1505233979950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.139333, 35.857167, 3.42 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821324", "mag": 1.0, "time": 1505233378354, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.8118, 65.9855, 3.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821323", "mag": 2.3, "time": 1505232589454, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -176.3915, 52.0051, 11.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891166", "mag": 1.17, "time": 1505232534860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.976167, 37.596833, 8.18 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akua", "mag": 4.5, "time": 1505231911880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 129.3156, -7.5665, 115.97 ] } },
+ { "type": "Feature", "properties": { "id": "ci37761183", "mag": 1.38, "time": 1505231682740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.031667, 33.866, 11.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891131", "mag": 1.13, "time": 1505231490780, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.821167, 37.605, 4.21 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aq60", "mag": 3.4, "time": 1505230949090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -171.7818, 52.0274, 61.84 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akty", "mag": 4.1, "time": 1505230831380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -157.0909, 55.1751, 22.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000asax", "mag": 4.2, "time": 1505230532990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -179.919, -24.5557, 553.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aktu", "mag": 5.0, "time": 1505230101200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.9204, 15.0356, 34.73 ] } },
+ { "type": "Feature", "properties": { "id": "ci37761159", "mag": 0.99, "time": 1505229927560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.794, 33.505667, 4.44 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akts", "mag": 4.4, "time": 1505229916500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4589, 15.8693, 40.82 ] } },
+ { "type": "Feature", "properties": { "id": "ak16850759", "mag": 2.0, "time": 1505229684203, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.4729, 57.3614, 66.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000asau", "mag": 4.5, "time": 1505228968140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.2892, -30.4261, 12.38 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akt9", "mag": 4.7, "time": 1505227714260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 167.6472, -14.1046, 43.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821264", "mag": 1.4, "time": 1505227661290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.5591, 61.6356, 28.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821262", "mag": 1.8, "time": 1505227098718, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.5176, 60.4846, 107.4 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017255006", "mag": 3.11, "time": 1505226988680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.8866, 18.066, 112.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821260", "mag": 1.3, "time": 1505226855029, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.482, 62.559, 83.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci37761111", "mag": 1.33, "time": 1505226544460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.166, 34.036, 5.82 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891096", "mag": 1.34, "time": 1505226449930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.7255, 38.788667, 1.77 ] } },
+ { "type": "Feature", "properties": { "id": "ak16850755", "mag": 1.5, "time": 1505226255965, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.5898, 60.4951, 99.5 ] } },
+ { "type": "Feature", "properties": { "id": "uu60244417", "mag": 1.65, "time": 1505226014340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.334667, 44.621667, 2.11 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aq5x", "mag": 3.1, "time": 1505225597950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -171.3403, 52.1694, 67.96 ] } },
+ { "type": "Feature", "properties": { "id": "uu60244407", "mag": 1.34, "time": 1505225495130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.467, 42.663667, 3.54 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821259", "mag": 1.2, "time": 1505225438730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.3559, 60.1768, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821258", "mag": 1.2, "time": 1505225170339, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.1399, 60.3035, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821221", "mag": 1.0, "time": 1505223846302, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.7846, 53.7799, 6.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821217", "mag": 1.4, "time": 1505223357390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.7209, 60.3452, 65.8 ] } },
+ { "type": "Feature", "properties": { "id": "hv61905526", "mag": 1.72, "time": 1505223290340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.929167, 19.870667, 12.697 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821215", "mag": 1.4, "time": 1505223177976, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.314, 60.1844, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "uu60244352", "mag": 2.41, "time": 1505222826990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.443167, 42.595, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821210", "mag": 1.0, "time": 1505222200792, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.0089, 61.3182, 28.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akri", "mag": 2.9, "time": 1505221931200, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.9201, 36.2062, 6.163 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821207", "mag": 2.0, "time": 1505221802809, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9996, 62.229, 72.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akrz", "mag": 2.5, "time": 1505220235620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5432, 46.8852, 12.06 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821169", "mag": 1.1, "time": 1505219786301, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.9544, 67.3188, 9.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821166", "mag": 1.0, "time": 1505219272070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.0159, 59.8987, 11.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891076", "mag": 1.16, "time": 1505219059140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.820667, 37.602667, 4.12 ] } },
+ { "type": "Feature", "properties": { "id": "ci37761079", "mag": 1.06, "time": 1505218941580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.819667, 33.71, 15.77 ] } },
+ { "type": "Feature", "properties": { "id": "ak16850742", "mag": 2.4, "time": 1505218654701, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4252, 51.6857, 14.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821165", "mag": 1.0, "time": 1505218329490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.4876, 60.0043, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821163", "mag": 1.3, "time": 1505217760897, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.4102, 62.0418, 78.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891061", "mag": 0.96, "time": 1505217348960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.826333, 37.602833, 3.87 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821126", "mag": 1.3, "time": 1505216937519, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.1452, 62.8895, 56.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821125", "mag": 1.1, "time": 1505216743699, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.6326, 60.2201, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821120", "mag": 1.7, "time": 1505216018269, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.0049, 60.6518, 14.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821119", "mag": 1.5, "time": 1505215652902, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.8093, 53.7706, 8.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akpn", "mag": 4.7, "time": 1505215606400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 101.7514, 27.9618, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16850734", "mag": 1.1, "time": 1505215354092, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.0512, 61.2674, 7.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akpc", "mag": 4.2, "time": 1505214378050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.8032, 16.1985, 37.2 ] } },
+ { "type": "Feature", "properties": { "id": "uu60244277", "mag": 1.7, "time": 1505214238510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.430167, 38.334333, 2.58 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821114", "mag": 1.9, "time": 1505213809149, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.8883, 61.2794, 95.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891031", "mag": 1.31, "time": 1505213535320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.861167, 37.426667, 3.97 ] } },
+ { "type": "Feature", "properties": { "id": "uu60244252", "mag": 1.02, "time": 1505213356870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.007333, 44.7855, 7.95 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821079", "mag": 1.4, "time": 1505212565937, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.7135, 59.8217, 2.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72891026", "mag": 1.86, "time": 1505212446760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.801833, 35.832333, 9.72 ] } },
+ { "type": "Feature", "properties": { "id": "uw61306757", "mag": 1.64, "time": 1505211458410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.728833, 46.841667, -2.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821074", "mag": 1.9, "time": 1505210888686, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7981, 61.0848, 49.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci37761007", "mag": 0.97, "time": 1505210308130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.34, 33.3915, 3.45 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821073", "mag": 1.0, "time": 1505210226661, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.8733, 61.5592, 31.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aknn", "mag": 4.7, "time": 1505209925680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -173.31, -20.0675, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16850728", "mag": 1.6, "time": 1505209600286, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.4588, 61.074, 107.6 ] } },
+ { "type": "Feature", "properties": { "id": "uu60244207", "mag": 2.1, "time": 1505209143550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.465333, 42.608333, 2.53 ] } },
+ { "type": "Feature", "properties": { "id": "ak16850727", "mag": 1.6, "time": 1505208401509, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.2489, 60.3172, 132.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821071", "mag": 1.7, "time": 1505208310612, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.6819, 58.4203, 78.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aknb", "mag": 4.4, "time": 1505208006490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7329, 15.7927, 47.14 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821038", "mag": 1.4, "time": 1505207062279, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.7269, 62.2754, 47.5 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017255004", "mag": 3.01, "time": 1505207032870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.6503, 18.1753, 12.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821031", "mag": 2.4, "time": 1505206694908, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.4161, 60.188, 103.5 ] } },
+ { "type": "Feature", "properties": { "id": "hv61905311", "mag": 2.02, "time": 1505206056030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.975333, 19.557, 44.801 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821027", "mag": 2.1, "time": 1505205093842, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.4164, 57.0134, 65.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aq5l", "mag": 3.0, "time": 1505204765080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -174.2778, 52.1101, 228.97 ] } },
+ { "type": "Feature", "properties": { "id": "nm60179282", "mag": 1.12, "time": 1505204172200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -89.554167, 36.472, 8.99 ] } },
+ { "type": "Feature", "properties": { "id": "us2000asam", "mag": 4.1, "time": 1505203793240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 147.4651, -4.9334, 167.53 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821023", "mag": 1.4, "time": 1505203680731, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.1732, 61.3766, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aq5k", "mag": 2.8, "time": 1505203540370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -159.5128, 54.8119, 22.77 ] } },
+ { "type": "Feature", "properties": { "id": "ci37760911", "mag": 1.29, "time": 1505202683830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.019667, 34.347833, 1.32 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821022", "mag": 1.1, "time": 1505201992117, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.4302, 65.4772, 14.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aq5j", "mag": 3.4, "time": 1505201513110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -169.335, 52.1151, 36.52 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604832", "mag": 1.5, "time": 1505201175706, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.919, 38.3871, 7.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821017", "mag": 1.4, "time": 1505201121331, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.8746, 64.7668, 2.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akm6", "mag": 4.0, "time": 1505200774070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.6261, 15.7276, 39.07 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821016", "mag": 1.1, "time": 1505200723657, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.6326, 59.9341, 17.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890911", "mag": 1.14, "time": 1505200493800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.835833, 37.502, -0.69 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017255005", "mag": 3.62, "time": 1505200390090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -68.7348, 17.4213, 58.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000asal", "mag": 4.5, "time": 1505200235050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 175.9237, -40.6778, 35.49 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821015", "mag": 1.0, "time": 1505200050481, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.0733, 62.8571, 78.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890906", "mag": 1.85, "time": 1505199341840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.959667, 36.079833, 11.15 ] } },
+ { "type": "Feature", "properties": { "id": "ak16820976", "mag": 4.5, "time": 1505198623340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -157.0626, 55.2018, 8.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16820951", "mag": 1.3, "time": 1505198176732, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.6431, 63.3655, 4.3 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604828", "mag": 1.4, "time": 1505197517767, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.0826, 39.1124, 11.2 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604827", "mag": 2.8, "time": 1505197059215, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.294, 37.806, 4.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akla", "mag": 4.9, "time": 1505196044760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 70.8701, -26.0946, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37760839", "mag": 1.35, "time": 1505195823730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.070833, 34.124, 7.32 ] } },
+ { "type": "Feature", "properties": { "id": "ak16850710", "mag": 1.4, "time": 1505195695881, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.9514, 59.3304, 53.9 ] } },
+ { "type": "Feature", "properties": { "id": "uu60244052", "mag": 1.22, "time": 1505195536580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.435667, 42.555167, 6.85 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akkz", "mag": 4.4, "time": 1505195184110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.3657, 15.4552, 61.44 ] } },
+ { "type": "Feature", "properties": { "id": "ak16820948", "mag": 1.9, "time": 1505194916797, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.7632, 53.2354, 44.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16850708", "mag": 1.2, "time": 1505194707074, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.5938, 63.2379, 122.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80254859", "mag": 1.15, "time": 1505194171440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.527333, 46.863, 11.45 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890836", "mag": 1.09, "time": 1505193911680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.735833, 38.760833, 1.36 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akkp", "mag": 4.6, "time": 1505193612080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.8716, 15.0886, 57.71 ] } },
+ { "type": "Feature", "properties": { "id": "ak16820908", "mag": 2.5, "time": 1505193453186, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.7231, 53.1426, 25.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akkk", "mag": 5.3, "time": 1505192927120, "felt": 8, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.832, 15.182, 60.95 ] } },
+ { "type": "Feature", "properties": { "id": "mb80254849", "mag": 1.28, "time": 1505192738900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5175, 46.899833, 10.92 ] } },
+ { "type": "Feature", "properties": { "id": "mb80254844", "mag": 1.54, "time": 1505192475320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.973833, 43.2425, 2.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16820905", "mag": 1.1, "time": 1505191714754, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.4231, 60.1297, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890796", "mag": 1.14, "time": 1505190808830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.835, 37.502667, -0.15 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890791", "mag": 1.45, "time": 1505190617760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.788, 37.455, 7.56 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017255003", "mag": 1.94, "time": 1505190564980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.3923, 18.5168, 23.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16850705", "mag": 1.4, "time": 1505190149086, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.3144, 60.1274, 78.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16850704", "mag": 1.8, "time": 1505189303211, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -158.0362, 56.0678, 8.4 ] } },
+ { "type": "Feature", "properties": { "id": "uu60243967", "mag": 1.29, "time": 1505189093580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.059333, 40.568667, 7.12 ] } },
+ { "type": "Feature", "properties": { "id": "hv61905031", "mag": 2.8, "time": 1505189080390, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -157.320667, 21.633833, 8.469 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017255001", "mag": 2.63, "time": 1505188852110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.3921, 18.5325, 19.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80254839", "mag": 2.17, "time": 1505188197080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.530167, 46.8705, 12.49 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70235033", "mag": 2.06, "time": 1505188185670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.492167, 37.299667, 4.92 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890766", "mag": 2.21, "time": 1505187928020, "felt": 6, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.319833, 40.4865, 13.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci37760735", "mag": 1.81, "time": 1505187547790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.287333, 34.079667, 14.28 ] } },
+ { "type": "Feature", "properties": { "id": "ak16850702", "mag": 1.3, "time": 1505187086661, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.8075, 61.2964, 89.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16850701", "mag": 1.4, "time": 1505186992230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.2832, 60.1725, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80254834", "mag": 1.19, "time": 1505186273780, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.528833, 46.863667, 13.34 ] } },
+ { "type": "Feature", "properties": { "id": "ci37760703", "mag": 1.89, "time": 1505185679940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.797333, 33.494667, 4.01 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017255002", "mag": 2.13, "time": 1505185260690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -68.0131, 19.0945, 24.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890706", "mag": 2.85, "time": 1505184989380, "felt": 7, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.821333, 37.6055, 4.17 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890701", "mag": 1.11, "time": 1505184817490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.821333, 37.468667, -0.39 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890691", "mag": 2.54, "time": 1505184593110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -124.502, 40.2965, 19.04 ] } },
+ { "type": "Feature", "properties": { "id": "ci37760663", "mag": 0.96, "time": 1505184048300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.1715, 34.0385, 5.42 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890681", "mag": 1.03, "time": 1505183875680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.820667, 37.4715, -1.63 ] } },
+ { "type": "Feature", "properties": { "id": "ak16820879", "mag": 1.6, "time": 1505183679937, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.3232, 62.0502, 60.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16850697", "mag": 1.5, "time": 1505183127519, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0397, 60.1249, 106.2 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017255000", "mag": 3.99, "time": 1505182040830, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -68.7961, 18.688, 102.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akii", "mag": 2.5, "time": 1505181688510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.445, 42.5935, 6.67 ] } },
+ { "type": "Feature", "properties": { "id": "ak16850696", "mag": 1.4, "time": 1505181679899, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.6734, 59.8319, 93.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16820869", "mag": 1.9, "time": 1505181012974, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.001, 59.4008, 36.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16820867", "mag": 1.9, "time": 1505180308488, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.5196, 59.9375, 123.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16820865", "mag": 1.6, "time": 1505179834308, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.8744, 63.0936, 89.7 ] } },
+ { "type": "Feature", "properties": { "id": "uu60243827", "mag": 1.28, "time": 1505179319200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.414167, 42.53, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890631", "mag": 0.96, "time": 1505179150280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.816, 37.475, 1.48 ] } },
+ { "type": "Feature", "properties": { "id": "ci37760623", "mag": 1.18, "time": 1505178887000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.025, 36.311333, 2.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890616", "mag": 1.11, "time": 1505178809900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.820167, 37.474167, -0.42 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akhk", "mag": 5.1, "time": 1505178756750, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.097, 15.4421, 48.35 ] } },
+ { "type": "Feature", "properties": { "id": "ak16820847", "mag": 1.9, "time": 1505178590464, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.8044, 60.0035, 75.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890606", "mag": 2.1, "time": 1505178296120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.819667, 37.471, -0.04 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akhe", "mag": 4.8, "time": 1505178017830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.2744, 15.0853, 44.38 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akhb", "mag": 2.4, "time": 1505177859710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4236, 42.5422, 5.98 ] } },
+ { "type": "Feature", "properties": { "id": "ci37760607", "mag": 1.78, "time": 1505177706210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.796167, 33.491167, 3.15 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akh7", "mag": 2.8, "time": 1505177557480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4213, 42.5825, 7.47 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890576", "mag": 2.34, "time": 1505177324250, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.82, 37.473, 0.51 ] } },
+ { "type": "Feature", "properties": { "id": "hv61904866", "mag": 1.99, "time": 1505176986190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.857, 19.358667, 41.774 ] } },
+ { "type": "Feature", "properties": { "id": "ak16820845", "mag": 1.3, "time": 1505176784517, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.3458, 60.155, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890561", "mag": 1.42, "time": 1505176270180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8195, 37.4765, -0.54 ] } },
+ { "type": "Feature", "properties": { "id": "ak16820836", "mag": 2.9, "time": 1505175684396, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.1737, 62.7988, 8.1 ] } },
+ { "type": "Feature", "properties": { "id": "uu60243772", "mag": 1.28, "time": 1505175463030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.450167, 42.593667, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akgt", "mag": 2.7, "time": 1505175275390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.45, 42.6006, 6.65 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akgp", "mag": 3.1, "time": 1505174426060, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4619, 42.5922, 9.11 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amy6", "mag": 3.4, "time": 1505174223950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -173.0579, 52.772, 207.41 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amy5", "mag": 3.3, "time": 1505173482210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 178.0407, 51.8595, 146.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16820045", "mag": 1.1, "time": 1505171834061, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.9121, 61.9185, 44.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akg3", "mag": 4.4, "time": 1505171543900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.3251, 15.4699, 53.34 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890511", "mag": 1.3, "time": 1505171391890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.012, 37.426833, 3.03 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akfs", "mag": 4.2, "time": 1505169617100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.6345, 15.6178, 38.83 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akfr", "mag": 2.8, "time": 1505169599030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4698, 42.6061, 6.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827363", "mag": 2.0, "time": 1505169544066, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4581, 51.6497, 9.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16819990", "mag": 1.0, "time": 1505169272029, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.1659, 59.9838, 14.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827361", "mag": 1.5, "time": 1505168696545, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.2029, 59.1798, 77.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci37760423", "mag": 1.26, "time": 1505168688630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.3355, 32.933, 10.81 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akf8", "mag": 5.0, "time": 1505168453040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.9567, 15.7603, 48.25 ] } },
+ { "type": "Feature", "properties": { "id": "ak16819215", "mag": 1.5, "time": 1505167702707, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.4466, 62.4273, 81.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ar1k", "mag": 4.4, "time": 1505167046570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 152.2966, -4.9444, 49.23 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890491", "mag": 1.11, "time": 1505166863970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.544833, 37.529, 12.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akeb", "mag": 5.1, "time": 1505166728910, "felt": null, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ -178.3593, 51.5235, 54.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16819167", "mag": 1.4, "time": 1505166664445, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.3213, 60.2363, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akdz", "mag": 4.3, "time": 1505166482960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.1669, 15.1965, 62.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akdq", "mag": 2.6, "time": 1505166481930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4105, 42.5306, 6.58 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827357", "mag": 2.3, "time": 1505165942611, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.8283, 55.1229, 12.0 ] } },
+ { "type": "Feature", "properties": { "id": "uw61306477", "mag": 1.21, "time": 1505165549480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.1755, 46.198833, 3.06 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890461", "mag": 2.23, "time": 1505164836450, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.939, 35.641167, 4.35 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ayll", "mag": 4.1, "time": 1505164739710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.6724, 15.4385, 31.22 ] } },
+ { "type": "Feature", "properties": { "id": "ci37760359", "mag": 2.29, "time": 1505164180230, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.940167, 35.427833, 21.14 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akcq", "mag": 5.5, "time": 1505164150350, "felt": 7, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.0139, 14.9074, 27.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akch", "mag": 2.4, "time": 1505164053450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4202, 42.5566, 9.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827356", "mag": 1.9, "time": 1505163754769, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -173.4142, 51.8321, 32.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci37760351", "mag": 1.47, "time": 1505163661880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.9785, 32.6095, -0.36 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827355", "mag": 1.0, "time": 1505163537708, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -144.7591, 65.4356, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604742", "mag": 1.3, "time": 1505163193915, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9149, 38.3846, 5.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akbz", "mag": 4.1, "time": 1505162450200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -173.477, 52.2896, 65.69 ] } },
+ { "type": "Feature", "properties": { "id": "mb80254709", "mag": 1.54, "time": 1505162126870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.327667, 46.1355, 6.01 ] } },
+ { "type": "Feature", "properties": { "id": "ak16818311", "mag": 2.4, "time": 1505162030333, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -167.0, 53.2916, 13.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16818304", "mag": 2.2, "time": 1505161796041, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -167.8204, 65.319, 3.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16818297", "mag": 2.0, "time": 1505161193751, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8659, 62.8899, 99.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16818278", "mag": 3.2, "time": 1505160763887, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.115, 63.145, 108.2 ] } },
+ { "type": "Feature", "properties": { "id": "mb80254694", "mag": 1.38, "time": 1505160716790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.540833, 46.904833, 11.87 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akaa", "mag": 2.5, "time": 1505159932140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4306, 42.5727, 7.14 ] } },
+ { "type": "Feature", "properties": { "id": "mb80254684", "mag": 1.16, "time": 1505159186030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.524833, 46.8675, 11.01 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827348", "mag": 1.2, "time": 1505158596706, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2022, 60.4231, 48.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16817479", "mag": 2.9, "time": 1505158124591, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.5505, 65.8017, 12.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16817476", "mag": 3.0, "time": 1505158119494, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.2439, 66.0161, 16.1 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604719", "mag": 1.3, "time": 1505157785095, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8838, 38.8119, 4.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890441", "mag": 1.74, "time": 1505157705880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.778, 38.7915, 3.48 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak9n", "mag": 3.0, "time": 1505157604550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.471, 42.609, 7.61 ] } },
+ { "type": "Feature", "properties": { "id": "ak16817472", "mag": 1.1, "time": 1505156621773, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3067, 62.9071, 5.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827345", "mag": 1.6, "time": 1505156304521, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.3368, 59.849, 84.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16816710", "mag": 1.0, "time": 1505155839711, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.7252, 63.4914, 1.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827343", "mag": 1.6, "time": 1505155190108, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.9414, 58.9343, 71.6 ] } },
+ { "type": "Feature", "properties": { "id": "uu60243377", "mag": 2.04, "time": 1505154917000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.423167, 42.524333, 7.67 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak8v", "mag": 4.8, "time": 1505154337990, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 125.9192, 10.9561, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827342", "mag": 1.4, "time": 1505154205074, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0563, 59.7893, 104.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akih", "mag": 3.5, "time": 1505153371450, "felt": 12, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -8.5745, 37.1247, 19.99 ] } },
+ { "type": "Feature", "properties": { "id": "ak16816675", "mag": 2.0, "time": 1505153241938, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.1793, 60.2771, 148.8 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604702", "mag": 1.1, "time": 1505152546779, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8175, 38.8318, 9.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890416", "mag": 1.57, "time": 1505151412520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8205, 37.474, -0.34 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak7u", "mag": 5.7, "time": 1505151309620, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 142.3373, 23.9529, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak7m", "mag": 2.5, "time": 1505151089130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4259, 42.5401, 6.8 ] } },
+ { "type": "Feature", "properties": { "id": "mb80254649", "mag": 1.0, "time": 1505150945110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.515833, 46.859, 13.54 ] } },
+ { "type": "Feature", "properties": { "id": "ak16815885", "mag": 1.4, "time": 1505150387657, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8119, 60.5833, 13.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci37760231", "mag": 1.15, "time": 1505150078250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.339833, 33.717167, -0.52 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ar17", "mag": 4.5, "time": 1505148873550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -27.1014, -58.1449, 29.22 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ar14", "mag": 4.7, "time": 1505148316830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 141.7999, 10.8571, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak6r", "mag": 4.4, "time": 1505148294180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 93.763, 11.1912, 135.46 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ar16", "mag": 4.3, "time": 1505147708500, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 105.5216, 28.9426, 37.11 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak65", "mag": 5.0, "time": 1505146815920, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 21.5733, 39.2104, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "uu60012999", "mag": 2.37, "time": 1505146629690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.425833, 42.545833, 6.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak62", "mag": 3.2, "time": 1505146591940, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4221, 42.5774, 8.61 ] } },
+ { "type": "Feature", "properties": { "id": "ci37760191", "mag": 1.27, "time": 1505146302070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.870333, 36.5125, 7.71 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ar11", "mag": 4.2, "time": 1505146234900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 169.8301, -18.5966, 222.96 ] } },
+ { "type": "Feature", "properties": { "id": "ci37760183", "mag": 1.04, "time": 1505146087980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.721333, 33.538833, 2.61 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak5l", "mag": 4.4, "time": 1505145120270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.9232, 15.0128, 54.55 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827338", "mag": 1.8, "time": 1505144756285, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.3358, 57.9354, 144.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak5f", "mag": 4.3, "time": 1505144492050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.0414, 15.1729, 45.88 ] } },
+ { "type": "Feature", "properties": { "id": "ak16815056", "mag": 1.9, "time": 1505144205558, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.6743, 59.7685, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak58", "mag": 3.1, "time": 1505144033150, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4647, 42.6086, 4.31 ] } },
+ { "type": "Feature", "properties": { "id": "uu60243162", "mag": 1.47, "time": 1505143989150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.462833, 42.578167, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16815038", "mag": 1.9, "time": 1505143851904, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.7738, 62.154, 53.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16815036", "mag": 1.9, "time": 1505143815664, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0859, 60.2049, 139.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak57", "mag": 4.8, "time": 1505143793430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 169.1802, 54.2242, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak55", "mag": 4.3, "time": 1505143224640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 146.6506, -2.821, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak4j", "mag": 3.0, "time": 1505142692750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4148, 42.5413, 9.05 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak4f", "mag": 4.4, "time": 1505142409640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.0513, 14.8747, 44.09 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak40", "mag": 5.0, "time": 1505141758490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.3653, 15.3524, 32.65 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ar1h", "mag": 4.9, "time": 1505141691760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -176.0928, -23.8876, 37.16 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak3s", "mag": 4.2, "time": 1505141169530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7122, 15.3112, 28.67 ] } },
+ { "type": "Feature", "properties": { "id": "mb80254604", "mag": 1.16, "time": 1505141014400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.532333, 46.8915, 13.58 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890356", "mag": 0.96, "time": 1505141002070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.819168, 38.845001, -0.69 ] } },
+ { "type": "Feature", "properties": { "id": "ak16814255", "mag": 2.0, "time": 1505140885717, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.2937, 51.4307, 40.1 ] } },
+ { "type": "Feature", "properties": { "id": "uw61306377", "mag": 1.82, "time": 1505140831500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.526167, 45.054, 14.59 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak3q", "mag": 4.2, "time": 1505140745590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4233, 15.4024, 50.36 ] } },
+ { "type": "Feature", "properties": { "id": "ci37760143", "mag": 1.15, "time": 1505140731290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.260667, 32.865667, 12.62 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890351", "mag": 1.47, "time": 1505140721900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.98, 37.905667, 7.94 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017254001", "mag": 1.99, "time": 1505140527660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.1661, 18.2745, 22.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak3b", "mag": 2.7, "time": 1505140375620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4329, 42.6048, 10.74 ] } },
+ { "type": "Feature", "properties": { "id": "uu60243057", "mag": 2.26, "time": 1505140157270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.440667, 42.570833, 6.17 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak35", "mag": 2.8, "time": 1505139740960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4268, 42.5293, 6.86 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ar1f", "mag": 4.4, "time": 1505139719640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -33.2097, 57.3966, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak30", "mag": 2.8, "time": 1505139413770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4261, 42.5344, 6.18 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak2x", "mag": 2.8, "time": 1505139156090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4192, 42.5317, 7.87 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890336", "mag": 1.18, "time": 1505138783780, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.788833, 37.4565, 7.82 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak5e", "mag": 3.4, "time": 1505138730330, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4143, 42.5438, 7.19 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak2i", "mag": 2.7, "time": 1505138706230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4164, 42.5288, 7.13 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak2w", "mag": 4.2, "time": 1505138643370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 147.2941, 49.241, 567.61 ] } },
+ { "type": "Feature", "properties": { "id": "ak16813499", "mag": 2.0, "time": 1505138537316, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.7415, 61.4216, 18.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak25", "mag": 2.7, "time": 1505138348200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4259, 42.5325, 7.14 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ar0y", "mag": 4.6, "time": 1505138171510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 95.9326, 17.4028, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16813481", "mag": 1.9, "time": 1505137989499, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.3857, 59.1724, 56.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak1y", "mag": 2.6, "time": 1505137521110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4339, 42.5419, 8.21 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak1r", "mag": 2.9, "time": 1505137114700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4362, 42.5456, 6.59 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak1m", "mag": 3.0, "time": 1505136985250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4366, 42.5476, 10.03 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ar0x", "mag": 4.6, "time": 1505136879610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 94.6908, 22.421, 111.87 ] } },
+ { "type": "Feature", "properties": { "id": "ak16813475", "mag": 2.1, "time": 1505136538402, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -175.5913, 51.4481, 48.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak17", "mag": 4.7, "time": 1505136395640, "felt": 63, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4397, 42.547, 8.42 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ar13", "mag": 4.3, "time": 1505136238290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -174.0316, -19.7635, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37760103", "mag": 1.09, "time": 1505136097380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.293, 35.087333, 5.54 ] } },
+ { "type": "Feature", "properties": { "id": "ak16812727", "mag": 2.6, "time": 1505135732771, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.9083, 64.6086, 14.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16812725", "mag": 1.1, "time": 1505135440719, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -142.9809, 60.2846, 15.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16812722", "mag": 1.3, "time": 1505135255673, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2227, 61.5128, 2.0 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604646", "mag": 1.4, "time": 1505134420760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.0108, 37.3174, 5.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890261", "mag": 1.53, "time": 1505134375000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.944, 37.596667, 2.35 ] } },
+ { "type": "Feature", "properties": { "id": "ak16812712", "mag": 1.2, "time": 1505134108855, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.0572, 63.3368, 5.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890256", "mag": 2.28, "time": 1505133958310, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.804, 37.487667, 2.35 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827325", "mag": 1.0, "time": 1505133922020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.6291, 68.5279, 7.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827324", "mag": 2.0, "time": 1505133892582, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 179.5495, 51.3476, 48.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak0e", "mag": 2.5, "time": 1505133857280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4384, 42.5522, 4.67 ] } },
+ { "type": "Feature", "properties": { "id": "uu60242837", "mag": 1.53, "time": 1505133790240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.424667, 42.5545, 3.92 ] } },
+ { "type": "Feature", "properties": { "id": "hv61904231", "mag": 1.21, "time": 1505133342610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.6145, 19.417333, 2.362 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak05", "mag": 4.1, "time": 1505133270220, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4421, 42.5481, 9.98 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak03", "mag": 2.7, "time": 1505133174850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4364, 42.5648, 8.56 ] } },
+ { "type": "Feature", "properties": { "id": "ak16812710", "mag": 1.0, "time": 1505133166684, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.8559, 62.6857, 65.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ar0u", "mag": 4.2, "time": 1505133047670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -179.1594, -25.8043, 396.76 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604676", "mag": 1.2, "time": 1505132161656, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9061, 38.3603, 6.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16811973", "mag": 1.1, "time": 1505132086727, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.8547, 61.7247, 43.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16811972", "mag": 1.5, "time": 1505132009437, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3277, 62.9497, 102.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajzy", "mag": 2.5, "time": 1505131814160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4451, 42.6131, 6.65 ] } },
+ { "type": "Feature", "properties": { "id": "mb80254459", "mag": 2.11, "time": 1505131462070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.591167, 48.595333, 11.25 ] } },
+ { "type": "Feature", "properties": { "id": "ak16811969", "mag": 1.3, "time": 1505131136327, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.0317, 60.2939, 13.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci37760055", "mag": 1.58, "time": 1505130502980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.1345, 33.263, 3.81 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajzq", "mag": 3.0, "time": 1505130391090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4364, 42.5733, 9.58 ] } },
+ { "type": "Feature", "properties": { "id": "ak16811954", "mag": 3.1, "time": 1505130323357, "felt": 0, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.1197, 60.1444, 17.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ar0t", "mag": 4.0, "time": 1505129120720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -176.0508, -16.1442, 368.85 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajzk", "mag": 4.5, "time": 1505129105150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -74.1346, -37.5234, 25.58 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890236", "mag": 2.17, "time": 1505128675290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.822, 37.459167, 1.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827315", "mag": 2.3, "time": 1505128561623, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -163.8371, 52.7853, 7.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16811944", "mag": 1.3, "time": 1505128093436, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.0565, 64.7051, 17.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16811204", "mag": 1.3, "time": 1505127768013, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -163.9834, 54.7566, 4.6 ] } },
+ { "type": "Feature", "properties": { "id": "hv61904116", "mag": 2.16, "time": 1505127753700, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.28183, 19.407, 0.02 ] } },
+ { "type": "Feature", "properties": { "id": "ci37760031", "mag": 2.03, "time": 1505127492210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.712, 33.879333, 13.03 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827311", "mag": 1.5, "time": 1505127421795, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.853, 59.6229, 96.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16811203", "mag": 1.3, "time": 1505127015264, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.6217, 68.5348, 1.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16811201", "mag": 1.5, "time": 1505126914844, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.1251, 64.9961, 18.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16811199", "mag": 1.6, "time": 1505125956806, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -164.5218, 65.7316, 2.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16811198", "mag": 1.6, "time": 1505125657616, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.3884, 53.8156, 54.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890226", "mag": 1.01, "time": 1505125359080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.753998, 38.790165, 3.35 ] } },
+ { "type": "Feature", "properties": { "id": "ci37760023", "mag": 1.32, "time": 1505125346420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.25, 34.0295, 14.73 ] } },
+ { "type": "Feature", "properties": { "id": "ci37760015", "mag": 1.79, "time": 1505125221750, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.210667, 33.964, 14.98 ] } },
+ { "type": "Feature", "properties": { "id": "ak16811192", "mag": 1.6, "time": 1505124596279, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -167.4191, 53.5639, 6.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajy4", "mag": 3.0, "time": 1505124017240, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4438, 42.5496, 7.43 ] } },
+ { "type": "Feature", "properties": { "id": "ak16811190", "mag": 1.5, "time": 1505123878146, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.2865, 60.4132, 89.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16811188", "mag": 1.0, "time": 1505123692728, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.3358, 61.5763, 29.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890206", "mag": 0.98, "time": 1505123643110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.747167, 37.409167, 5.32 ] } },
+ { "type": "Feature", "properties": { "id": "ak16811186", "mag": 1.6, "time": 1505123476693, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.8224, 59.7877, 2.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajxv", "mag": 2.9, "time": 1505123164250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4237, 42.5673, 7.37 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajxj", "mag": 4.3, "time": 1505122591560, "felt": 25, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4287, 42.5544, 2.24 ] } },
+ { "type": "Feature", "properties": { "id": "uu60242567", "mag": 2.2, "time": 1505122522080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4315, 42.546167, 6.37 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759983", "mag": 1.63, "time": 1505121892310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.268167, 34.059667, 16.34 ] } },
+ { "type": "Feature", "properties": { "id": "ak16810446", "mag": 2.6, "time": 1505121756650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.4598, 60.9205, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16810443", "mag": 1.2, "time": 1505121065274, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.565, 68.8276, 0.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759967", "mag": 1.22, "time": 1505119075410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.577833, 33.463, 8.81 ] } },
+ { "type": "Feature", "properties": { "id": "uw61306317", "mag": 1.48, "time": 1505118779800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.494333, 48.421333, 23.39 ] } },
+ { "type": "Feature", "properties": { "id": "uu60242517", "mag": 2.59, "time": 1505118734680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -109.851333, 41.686167, 9.37 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017254000", "mag": 3.41, "time": 1505118382390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.9758, 19.4726, 83.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16809713", "mag": 1.0, "time": 1505117722024, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.6659, 62.2481, 21.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16809711", "mag": 3.4, "time": 1505116920134, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -169.5449, 52.5632, 40.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajwn", "mag": 4.4, "time": 1505116663270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.9806, 15.3004, 56.84 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759959", "mag": 1.14, "time": 1505116447350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.2325, 33.327833, 10.93 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajwc", "mag": 2.7, "time": 1505116217360, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4585, 42.6238, 8.02 ] } },
+ { "type": "Feature", "properties": { "id": "uu60242452", "mag": 1.42, "time": 1505115184130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4215, 42.555167, 8.21 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajw6", "mag": 4.3, "time": 1505114696270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.1399, -24.246, 215.32 ] } },
+ { "type": "Feature", "properties": { "id": "ak16809708", "mag": 1.5, "time": 1505114006947, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8258, 60.1009, 45.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827294", "mag": 1.9, "time": 1505113098912, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -142.8676, 59.0889, 2.2 ] } },
+ { "type": "Feature", "properties": { "id": "mb80254374", "mag": 1.5, "time": 1505112921190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.529333, 46.8645, 12.3 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759927", "mag": 2.02, "time": 1505112772010, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.403, 34.906, 11.64 ] } },
+ { "type": "Feature", "properties": { "id": "ak16809693", "mag": 2.3, "time": 1505111147899, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -142.1691, 60.3968, 3.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890121", "mag": 1.12, "time": 1505109941490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.819168, 38.807335, 2.77 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajvf", "mag": 2.9, "time": 1505109741010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4688, 42.5774, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajva", "mag": 4.3, "time": 1505109063560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.9711, 15.3853, 85.78 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890106", "mag": 1.68, "time": 1505108835910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.298667, 36.839667, 6.48 ] } },
+ { "type": "Feature", "properties": { "id": "ak16809690", "mag": 2.3, "time": 1505108549578, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -157.9816, 56.0816, 4.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajv3", "mag": 2.5, "time": 1505108046520, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4343, 42.6729, 8.91 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajuy", "mag": 4.3, "time": 1505107771280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.0235, 15.4152, 96.62 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827288", "mag": 1.8, "time": 1505107165861, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.0716, 53.7182, 69.4 ] } },
+ { "type": "Feature", "properties": { "id": "uw61306307", "mag": 1.9, "time": 1505107163540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.039333, 46.874833, 6.58 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890096", "mag": 1.14, "time": 1505106775000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.0835, 41.351667, 6.69 ] } },
+ { "type": "Feature", "properties": { "id": "ak16809640", "mag": 2.4, "time": 1505106550298, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.8937, 61.0452, 165.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16808961", "mag": 1.6, "time": 1505105485577, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.1953, 59.1308, 77.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajuh", "mag": 4.0, "time": 1505105288350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.1177, 14.9912, 39.36 ] } },
+ { "type": "Feature", "properties": { "id": "uu60242387", "mag": 2.04, "time": 1505105195110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4145, 42.553333, 8.78 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759879", "mag": 1.88, "time": 1505105166860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.690333, 36.111167, 2.14 ] } },
+ { "type": "Feature", "properties": { "id": "uu60242382", "mag": 1.62, "time": 1505105133670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.917167, 39.7665, 0.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajua", "mag": 4.2, "time": 1505104652010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -95.1678, 15.2785, 67.46 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aju8", "mag": 4.3, "time": 1505104387690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 134.2896, -4.2452, 11.73 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aju4", "mag": 4.2, "time": 1505104376590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.8401, 15.5681, 47.06 ] } },
+ { "type": "Feature", "properties": { "id": "ak16808959", "mag": 1.5, "time": 1505103598244, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.9778, 58.2872, 74.3 ] } },
+ { "type": "Feature", "properties": { "id": "uw61306297", "mag": 2.04, "time": 1505103582560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.041833, 46.873833, 6.67 ] } },
+ { "type": "Feature", "properties": { "id": "uw61306292", "mag": 2.25, "time": 1505103114370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.041333, 46.872667, 6.52 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827283", "mag": 1.6, "time": 1505102962401, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.439, 59.7864, 127.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827279", "mag": 1.3, "time": 1505101851739, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.7785, 59.9173, 97.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ar0i", "mag": 4.1, "time": 1505101626150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 152.4651, -10.314, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759855", "mag": 1.09, "time": 1505101001790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.693833, 36.111833, 2.19 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajtf", "mag": 3.6, "time": 1505100425300, "felt": 34, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -96.7392, 35.5637, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ar0g", "mag": 4.3, "time": 1505099718750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -33.3922, 57.1877, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16808239", "mag": 1.2, "time": 1505099609741, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.1984, 60.4559, 13.3 ] } },
+ { "type": "Feature", "properties": { "id": "mb80254349", "mag": 1.33, "time": 1505099352010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.536833, 46.868167, 13.72 ] } },
+ { "type": "Feature", "properties": { "id": "ak16808202", "mag": 1.5, "time": 1505098597935, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.3852, 59.9636, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16808197", "mag": 1.0, "time": 1505098478421, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2252, 63.2571, 2.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16808189", "mag": 2.2, "time": 1505098007693, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -137.7551, 60.3801, 2.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajt6", "mag": 3.1, "time": 1505097902820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -137.7475, 60.3735, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajt7", "mag": 5.1, "time": 1505097732030, "felt": null, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 134.3851, -4.1892, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16808181", "mag": 1.1, "time": 1505097584665, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6756, 61.6922, 62.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajt5", "mag": 3.0, "time": 1505097294300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4685, 42.672, 9.46 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajt2", "mag": 2.8, "time": 1505097280810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4535, 42.6306, 9.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ar0e", "mag": 4.3, "time": 1505096741600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 122.0697, 24.7471, 68.23 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajsz", "mag": 4.7, "time": 1505096631090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.9001, 15.6517, 51.53 ] } },
+ { "type": "Feature", "properties": { "id": "ak16807505", "mag": 1.3, "time": 1505096509471, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.9046, 61.531, 28.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16807502", "mag": 1.6, "time": 1505096282982, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -159.2586, 62.549, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890026", "mag": 1.21, "time": 1505096190960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.009667, 37.590833, -0.07 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajsw", "mag": 4.2, "time": 1505095770400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.418, 15.8113, 56.97 ] } },
+ { "type": "Feature", "properties": { "id": "ak16807468", "mag": 1.2, "time": 1505095529647, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.0357, 62.0888, 52.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759783", "mag": 2.05, "time": 1505095452510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.502333, 35.679, 6.19 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890021", "mag": 1.71, "time": 1505095034230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.535667, 37.632333, 19.33 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759775", "mag": 1.34, "time": 1505095022580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.507333, 34.488, 1.46 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajsk", "mag": 4.6, "time": 1505093529680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 143.5451, 12.9836, 114.29 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827267", "mag": 1.3, "time": 1505093440775, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.1537, 59.7401, 106.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759759", "mag": 1.69, "time": 1505093145730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.798167, 33.493667, 3.61 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604614", "mag": 1.5, "time": 1505092989312, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.6589, 37.3487, 6.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ar1r", "mag": 3.5, "time": 1505092806050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 170.8111, 53.8607, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ar0b", "mag": 4.2, "time": 1505092783010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 95.953, 17.3198, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "hv61903861", "mag": 1.26, "time": 1505092321650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.490333, 19.339667, 9.09 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajsh", "mag": 4.1, "time": 1505092219210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 129.972, -6.9548, 134.48 ] } },
+ { "type": "Feature", "properties": { "id": "ak16806794", "mag": 1.3, "time": 1505092129494, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.3457, 60.4497, 89.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827265", "mag": 1.1, "time": 1505091880397, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6719, 63.2902, 124.6 ] } },
+ { "type": "Feature", "properties": { "id": "uu60242262", "mag": 2.47, "time": 1505091634360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.440667, 42.578333, 7.23 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajsf", "mag": 2.3, "time": 1505091431720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.443, 42.5904, 7.61 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827264", "mag": 1.3, "time": 1505091007359, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.0095, 58.5704, 86.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890011", "mag": 1.58, "time": 1505090685010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.832333, 37.542333, 4.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759743", "mag": 1.01, "time": 1505090624240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.589167, 36.0335, 2.63 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amxb", "mag": 3.0, "time": 1505090296990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.554, 51.5916, 17.56 ] } },
+ { "type": "Feature", "properties": { "id": "nc72890001", "mag": 0.97, "time": 1505089976320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.831, 37.541833, 4.79 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajsa", "mag": 4.9, "time": 1505089942200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.9938, 15.3932, 58.95 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajs1", "mag": 3.2, "time": 1505088752720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4151, 42.563, 8.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajrw", "mag": 4.4, "time": 1505087147130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.4901, 14.0924, 54.64 ] } },
+ { "type": "Feature", "properties": { "id": "ak16806048", "mag": 1.2, "time": 1505085946916, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.3481, 62.1328, 10.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759727", "mag": 1.54, "time": 1505085941950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.663167, 35.044, -0.82 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajrn", "mag": 2.4, "time": 1505085758040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4372, 42.584, 3.54 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827727", "mag": 1.2, "time": 1505085448361, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0012, 60.1398, 104.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajrh", "mag": 2.4, "time": 1505084625610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4614, 42.6018, 5.02 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajre", "mag": 3.0, "time": 1505084186000, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4583, 42.5935, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16805384", "mag": 1.3, "time": 1505084019928, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9225, 60.1912, 51.8 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017253006", "mag": 3.55, "time": 1505083663180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -68.7241, 19.5025, 24.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759703", "mag": 1.47, "time": 1505083414820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.164, 34.038833, 6.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759695", "mag": 2.37, "time": 1505083359860, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.166167, 34.037667, 6.01 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759687", "mag": 1.26, "time": 1505083316070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.166667, 34.039167, 6.08 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70234968", "mag": 1.57, "time": 1505083207900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.877167, 37.229167, 3.02 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759679", "mag": 1.03, "time": 1505082787240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.290167, 35.090833, 2.62 ] } },
+ { "type": "Feature", "properties": { "id": "uu60242127", "mag": 1.52, "time": 1505082515530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.439, 42.5855, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16805375", "mag": 2.0, "time": 1505082468672, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.2261, 62.1899, 53.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16805361", "mag": 2.4, "time": 1505082389962, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.8636, 68.2355, 2.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajq9", "mag": 3.3, "time": 1505081821360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4511, 42.5959, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889956", "mag": 1.01, "time": 1505081275110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.790333, 37.452833, 8.21 ] } },
+ { "type": "Feature", "properties": { "id": "ak16805341", "mag": 2.5, "time": 1505081090999, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.9101, 57.044, 46.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajpe", "mag": 5.9, "time": 1505079621210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -33.6765, 57.1272, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889936", "mag": 1.22, "time": 1505079295950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.937667, 37.601667, 1.02 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889931", "mag": 1.1, "time": 1505078962470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.806, 37.5175, -2.34 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajp8", "mag": 2.8, "time": 1505078892060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4509, 42.5792, 6.22 ] } },
+ { "type": "Feature", "properties": { "id": "uw61306227", "mag": 1.13, "time": 1505078465000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.011167, 46.792, 5.12 ] } },
+ { "type": "Feature", "properties": { "id": "uu60241997", "mag": 1.44, "time": 1505078100230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.422167, 42.554167, 8.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827720", "mag": 1.0, "time": 1505077902054, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.0938, 58.0932, 50.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889921", "mag": 1.74, "time": 1505077579730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.941333, 37.642833, 0.01 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889926", "mag": 1.62, "time": 1505077560070, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.946167, 37.638667, -0.65 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889911", "mag": 0.99, "time": 1505077390170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.394833, 36.9325, 8.56 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017253005", "mag": 2.52, "time": 1505077373570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -66.714, 18.0166, 7.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889916", "mag": 0.95, "time": 1505077317230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.881833, 37.512333, -0.07 ] } },
+ { "type": "Feature", "properties": { "id": "ak16804640", "mag": 1.6, "time": 1505077302019, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.5368, 58.8361, 122.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajnd", "mag": 4.5, "time": 1505076424950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.2595, 15.0768, 55.96 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604604", "mag": 1.4, "time": 1505076297106, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.9555, 40.8314, 10.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16803984", "mag": 1.3, "time": 1505076289998, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.1907, 63.4845, 0.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajms", "mag": 3.3, "time": 1505075535460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4239, 42.5436, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604570", "mag": 1.1, "time": 1505075507371, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.8807, 36.8036, 7.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827715", "mag": 1.2, "time": 1505074869438, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.7422, 60.0074, 102.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16803877", "mag": 1.0, "time": 1505074842648, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.4194, 63.2783, 7.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajm5", "mag": 2.5, "time": 1505074494700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4599, 42.5711, 10.61 ] } },
+ { "type": "Feature", "properties": { "id": "hv61903706", "mag": 1.86, "time": 1505074128010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.273331, 19.413166, 0.54 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajlx", "mag": 3.2, "time": 1505074034020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.42, 42.5453, 7.37 ] } },
+ { "type": "Feature", "properties": { "id": "ak16803869", "mag": 1.2, "time": 1505073920064, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.7217, 63.3651, 4.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajls", "mag": 4.3, "time": 1505073807210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -69.114, -23.6018, 85.28 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajlp", "mag": 4.6, "time": 1505073492510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 13.2839, 42.1689, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759623", "mag": 1.13, "time": 1505073299090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.162, 34.035333, 6.06 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajlc", "mag": 2.7, "time": 1505072667200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.6178, 36.1361, 5.301 ] } },
+ { "type": "Feature", "properties": { "id": "mb80254244", "mag": 1.15, "time": 1505072506030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.527667, 46.862667, 10.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akfw", "mag": 3.1, "time": 1505072325000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4094, 42.5488, 7.85 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajl5", "mag": 2.7, "time": 1505072221960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4249, 42.5451, 9.42 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889901", "mag": 1.7, "time": 1505072189820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.784833, 38.824667, 1.65 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889906", "mag": 1.54, "time": 1505072140190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.153, 37.129167, 12.33 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889891", "mag": 1.28, "time": 1505070945740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.891, 37.544167, 1.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16803197", "mag": 2.5, "time": 1505070454371, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -162.4505, 54.6854, 60.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajkd", "mag": 4.1, "time": 1505070312980, "felt": 41, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4177, 42.5563, 13.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889881", "mag": 1.58, "time": 1505069810220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.149, 37.1305, 12.32 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajkz", "mag": 2.4, "time": 1505069780800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4181, 42.5449, 7.46 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017253004", "mag": 3.24, "time": 1505069521610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -65.0411, 19.2021, 48.0 ] } },
+ { "type": "Feature", "properties": { "id": "hv61903656", "mag": 1.57, "time": 1505069138690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.104167, 19.329333, 5.178 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajjx", "mag": 2.9, "time": 1505068769580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4153, 42.5555, 7.28 ] } },
+ { "type": "Feature", "properties": { "id": "ak16802543", "mag": 1.6, "time": 1505068750842, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.6404, 58.5519, 66.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajju", "mag": 2.5, "time": 1505068746720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -104.9924, 37.0464, 6.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889876", "mag": 1.12, "time": 1505068188960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.315667, 36.955833, 7.62 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajjp", "mag": 2.3, "time": 1505068125580, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.1711, 35.6565, 7.54 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajjl", "mag": 2.4, "time": 1505067921890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4388, 42.6003, 7.21 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759607", "mag": 1.53, "time": 1505067791950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.169667, 34.037167, 4.29 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759599", "mag": 0.99, "time": 1505067584720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.163333, 34.028, 2.94 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajn9", "mag": 2.7, "time": 1505067322220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -170.5732, 52.3355, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827705", "mag": 1.3, "time": 1505067315004, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.7536, 59.2097, 68.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889866", "mag": 1.0, "time": 1505067136160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.764168, 38.833, 0.66 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889861", "mag": 1.06, "time": 1505067131030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.759667, 38.833667, 1.17 ] } },
+ { "type": "Feature", "properties": { "id": "ak16802540", "mag": 1.3, "time": 1505066586033, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.3745, 62.1772, 42.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759591", "mag": 1.48, "time": 1505066404370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.166333, 34.044667, 5.25 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759583", "mag": 1.53, "time": 1505066395290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.163333, 34.041167, 5.54 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827703", "mag": 1.0, "time": 1505066200905, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.7529, 58.6862, 17.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759567", "mag": 1.34, "time": 1505066082610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.163833, 34.040667, 6.08 ] } },
+ { "type": "Feature", "properties": { "id": "ak16802539", "mag": 1.1, "time": 1505065957419, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0268, 60.5262, 19.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajjb", "mag": 2.5, "time": 1505065916650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4209, 42.5639, 8.61 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759559", "mag": 1.32, "time": 1505065772840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.2325, 34.474333, 11.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16802537", "mag": 1.3, "time": 1505065364910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.2942, 63.1472, 1.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759551", "mag": 1.1, "time": 1505065150010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.172667, 34.034333, 5.23 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759543", "mag": 1.69, "time": 1505064387890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.295, 35.088667, 4.44 ] } },
+ { "type": "Feature", "properties": { "id": "ak16802513", "mag": 1.5, "time": 1505064158942, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -145.1889, 65.0868, 19.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajj3", "mag": 4.4, "time": 1505063935670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 82.4969, 41.9157, 28.96 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajiy", "mag": 2.7, "time": 1505063902750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4577, 42.6058, 5.68 ] } },
+ { "type": "Feature", "properties": { "id": "uu60241602", "mag": 1.36, "time": 1505063711640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.415333, 42.567, 9.66 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759535", "mag": 1.1, "time": 1505063618920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.165167, 34.041667, 6.46 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889821", "mag": 1.62, "time": 1505063575750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.157167, 37.135667, 10.29 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889816", "mag": 1.01, "time": 1505063492860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.774667, 35.547833, 5.09 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759527", "mag": 2.15, "time": 1505063398380, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.238167, 34.467833, 11.17 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajih", "mag": 2.5, "time": 1505062945810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4296, 42.5627, 11.62 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889806", "mag": 2.49, "time": 1505062781340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.801833, 38.789333, 3.19 ] } },
+ { "type": "Feature", "properties": { "id": "uu60013054", "mag": 1.65, "time": 1505062641290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.444, 42.594667, 6.67 ] } },
+ { "type": "Feature", "properties": { "id": "uu60241572", "mag": 2.02, "time": 1505062621720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.432167, 42.5965, 4.48 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759519", "mag": 1.59, "time": 1505062248460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.167, 34.038667, 4.49 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759511", "mag": 1.92, "time": 1505062179580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.165, 34.039333, 4.98 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759503", "mag": 1.57, "time": 1505062145210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.164167, 34.037667, 5.25 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759495", "mag": 1.42, "time": 1505061900480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.165667, 34.038667, 5.34 ] } },
+ { "type": "Feature", "properties": { "id": "ak16801882", "mag": 1.1, "time": 1505061849133, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -142.1509, 60.3803, 7.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759487", "mag": 1.49, "time": 1505061523920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.893, 35.343333, 5.39 ] } },
+ { "type": "Feature", "properties": { "id": "ak16801880", "mag": 1.5, "time": 1505061368254, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.731, 60.0161, 6.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759471", "mag": 1.2, "time": 1505061266330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.167333, 34.040167, 4.42 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajn8", "mag": 3.4, "time": 1505060976520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -173.3264, 52.5377, 96.17 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759455", "mag": 1.41, "time": 1505060968220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.8935, 35.3405, 5.83 ] } },
+ { "type": "Feature", "properties": { "id": "ak16801858", "mag": 1.5, "time": 1505060123211, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4433, 51.6859, 21.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16801272", "mag": 1.1, "time": 1505059792074, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.1384, 63.4871, 1.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827692", "mag": 2.2, "time": 1505059542515, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -169.3922, 52.3983, 21.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889781", "mag": 1.29, "time": 1505059412980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.943667, 37.596167, 2.31 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajqf", "mag": 4.6, "time": 1505058668170, "felt": 49, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 139.1945, 35.7377, 54.25 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889766", "mag": 1.32, "time": 1505058489100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.046333, 38.9295, 0.46 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajhi", "mag": 2.5, "time": 1505058212500, "felt": 9, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -96.7958, 35.9926, 4.398 ] } },
+ { "type": "Feature", "properties": { "id": "ak16801236", "mag": 1.4, "time": 1505058208151, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.9025, 57.4691, 48.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759407", "mag": 1.83, "time": 1505057535880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.3395, 34.014333, 2.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000artt", "mag": 4.2, "time": 1505057483820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 141.9272, 37.8866, 41.94 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827688", "mag": 1.7, "time": 1505057440690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.7035, 58.208, 3.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajh6", "mag": 4.6, "time": 1505057331420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4383, 15.2976, 42.92 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajh4", "mag": 2.6, "time": 1505057207380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4289, 42.5593, 7.96 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827687", "mag": 1.5, "time": 1505057001386, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4181, 51.7014, 6.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajh2", "mag": 4.2, "time": 1505056916120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.2576, 14.9344, 12.93 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajgy", "mag": 2.5, "time": 1505056755330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.7823, 37.3283, 5.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827686", "mag": 1.1, "time": 1505056731493, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.8679, 57.3821, 46.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajgx", "mag": 2.8, "time": 1505056639060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4498, 42.5804, 5.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827685", "mag": 1.2, "time": 1505056471867, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.1402, 60.9584, 19.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajgu", "mag": 2.5, "time": 1505056401260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4462, 42.5738, 5.62 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajgm", "mag": 4.9, "time": 1505055545760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 146.6784, 14.1109, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759383", "mag": 1.0, "time": 1505055131400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.169167, 34.0425, 5.43 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajge", "mag": 3.4, "time": 1505054862840, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4185, 42.5625, 9.41 ] } },
+ { "type": "Feature", "properties": { "id": "ak16800620", "mag": 1.1, "time": 1505054600546, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.7386, 61.4915, 80.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajgc", "mag": 3.1, "time": 1505054298370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4151, 42.55, 7.52 ] } },
+ { "type": "Feature", "properties": { "id": "ak16800576", "mag": 2.5, "time": 1505054208776, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9361, 60.2731, 64.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889746", "mag": 1.38, "time": 1505053809310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.442, 37.695667, 4.15 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017253003", "mag": 2.17, "time": 1505052857240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.2868, 18.1121, 18.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajg9", "mag": 2.9, "time": 1505052838460, "felt": 11, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5162, 46.8743, 14.72 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889741", "mag": 1.38, "time": 1505052751930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.824333, 38.060667, 1.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16799977", "mag": 1.0, "time": 1505052033903, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.8767, 61.5617, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "mb80254079", "mag": 1.59, "time": 1505051737640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.410667, 44.4485, 6.72 ] } },
+ { "type": "Feature", "properties": { "id": "ak16799971", "mag": 1.7, "time": 1505051381698, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.7235, 59.8179, 4.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajfa", "mag": 4.3, "time": 1505051330480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -90.3498, 13.069, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajf7", "mag": 4.0, "time": 1505050961060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -174.3526, 52.4771, 237.56 ] } },
+ { "type": "Feature", "properties": { "id": "ak16799942", "mag": 1.7, "time": 1505050892677, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.6731, 59.5546, 120.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajf3", "mag": 4.6, "time": 1505050808670, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.529, 15.6631, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajf0", "mag": 4.5, "time": 1505050687090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4173, 15.2922, 52.65 ] } },
+ { "type": "Feature", "properties": { "id": "us2000artu", "mag": 4.1, "time": 1505050610220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 128.1836, -7.5542, 159.39 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajex", "mag": 4.3, "time": 1505049954620, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.6306, 15.7653, 20.71 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759303", "mag": 1.26, "time": 1505049848270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.7985, 33.504667, 4.53 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajeq", "mag": 2.8, "time": 1505049297970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4232, 42.5578, 7.16 ] } },
+ { "type": "Feature", "properties": { "id": "ak16799353", "mag": 1.3, "time": 1505049096103, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.6348, 59.8194, 14.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajen", "mag": 3.0, "time": 1505048991180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4182, 42.5509, 7.02 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827673", "mag": 1.6, "time": 1505048796797, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -167.3116, 53.3278, 13.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajej", "mag": 2.6, "time": 1505048615320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4688, 42.6115, 6.14 ] } },
+ { "type": "Feature", "properties": { "id": "mb80254034", "mag": 1.41, "time": 1505048540860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.521667, 46.8615, 12.53 ] } },
+ { "type": "Feature", "properties": { "id": "mb80254029", "mag": 1.23, "time": 1505048399750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.521167, 46.853, 11.49 ] } },
+ { "type": "Feature", "properties": { "id": "ak16799346", "mag": 2.0, "time": 1505048306207, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.2292, 62.187, 56.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aje5", "mag": 4.4, "time": 1505047810980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -87.8604, 12.4905, 60.22 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aje3", "mag": 3.6, "time": 1505047519260, "felt": 5, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4283, 42.5536, 6.44 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aje1", "mag": 2.8, "time": 1505047427230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4487, 42.6011, 5.82 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajdz", "mag": 2.5, "time": 1505047141140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4433, 42.6033, 3.94 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajm3", "mag": 3.4, "time": 1505046945740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -169.4897, 52.4554, 37.93 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajdq", "mag": 3.1, "time": 1505046464560, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4503, 42.6011, 4.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827668", "mag": 1.6, "time": 1505046395510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.3819, 59.8907, 133.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajdf", "mag": 3.9, "time": 1505045951750, "felt": 7, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4091, 42.5736, 10.02 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajdd", "mag": 3.1, "time": 1505045857190, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4617, 42.6284, 4.97 ] } },
+ { "type": "Feature", "properties": { "id": "uu60241107", "mag": 2.14, "time": 1505045641970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.427, 42.59, 6.81 ] } },
+ { "type": "Feature", "properties": { "id": "ak16798742", "mag": 1.3, "time": 1505045327481, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.3496, 69.231, 1.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajd9", "mag": 4.3, "time": 1505045213250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.1554, 14.0483, 13.91 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajd2", "mag": 4.5, "time": 1505044829750, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.4915, 15.8549, 21.45 ] } },
+ { "type": "Feature", "properties": { "id": "ak16798732", "mag": 2.6, "time": 1505044761546, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.966, 59.8093, 102.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajcy", "mag": 2.6, "time": 1505044665510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.5652, 42.6019, 9.42 ] } },
+ { "type": "Feature", "properties": { "id": "us2000artq", "mag": 4.4, "time": 1505044070510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 120.6016, 12.9144, 38.64 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827665", "mag": 1.6, "time": 1505043947734, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.3635, 51.6272, 0.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajci", "mag": 2.9, "time": 1505043647160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4487, 42.6201, 8.65 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827663", "mag": 2.1, "time": 1505043481292, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -168.5488, 52.6471, 37.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajch", "mag": 2.9, "time": 1505043441680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4464, 42.565, 8.31 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604506", "mag": 1.1, "time": 1505043238904, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.2044, 38.3052, 10.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajce", "mag": 2.6, "time": 1505042826200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4252, 42.5577, 5.15 ] } },
+ { "type": "Feature", "properties": { "id": "ak16798700", "mag": 1.7, "time": 1505042612937, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.2918, 69.235, 1.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajc9", "mag": 3.1, "time": 1505042537350, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4318, 42.5604, 7.18 ] } },
+ { "type": "Feature", "properties": { "id": "hv61903466", "mag": 2.42, "time": 1505042508060, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.211833, 19.916833, 13.349 ] } },
+ { "type": "Feature", "properties": { "id": "ak16798696", "mag": 1.3, "time": 1505042293807, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.3271, 69.2374, 3.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajbt", "mag": 4.7, "time": 1505041959050, "felt": 41, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4701, 42.6074, 4.56 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajbp", "mag": 2.6, "time": 1505041798510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4553, 42.6057, 2.2 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604588", "mag": 1.0, "time": 1505041736983, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8863, 39.0228, 11.8 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017253002", "mag": 2.88, "time": 1505041375350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -66.305, 18.603, 82.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajbk", "mag": 3.1, "time": 1505040789630, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4404, 42.601, 4.73 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajbj", "mag": 2.6, "time": 1505040635620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4423, 42.5705, 7.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759247", "mag": 1.02, "time": 1505040606370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.192167, 33.778, 3.52 ] } },
+ { "type": "Feature", "properties": { "id": "uw61306142", "mag": 2.37, "time": 1505040308500, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.040167, 46.875333, 6.45 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827659", "mag": 2.3, "time": 1505040202211, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -175.8004, 51.946, 193.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajba", "mag": 2.5, "time": 1505040116970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4234, 42.6126, 8.0 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70234948", "mag": 1.52, "time": 1505039824000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.878333, 37.226333, 2.17 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajay", "mag": 2.5, "time": 1505039717650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4475, 42.5965, 6.66 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759239", "mag": 1.83, "time": 1505039190870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.297667, 34.7275, 4.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759231", "mag": 1.46, "time": 1505038960010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.206167, 33.030167, 5.66 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajah", "mag": 4.9, "time": 1505038459290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5926, 15.8657, 62.07 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajad", "mag": 2.8, "time": 1505038317850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4649, 42.5713, 2.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ajac", "mag": 2.8, "time": 1505038143220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.3389, 42.5698, 5.91 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aja1", "mag": 2.5, "time": 1505037892850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4134, 42.5966, 2.41 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889666", "mag": 2.44, "time": 1505037177900, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.680333, 36.934833, 10.93 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ak98", "mag": 2.7, "time": 1505037007800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.9657, 36.5378, 5.921 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akbp", "mag": 3.5, "time": 1505036907810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4216, 42.6147, 2.61 ] } },
+ { "type": "Feature", "properties": { "id": "hv61903376", "mag": 2.02, "time": 1505036885770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.244, 19.404333, 38.634 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj9i", "mag": 5.0, "time": 1505036830570, "felt": 222, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4155, 42.5629, 9.83 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604494", "mag": 1.3, "time": 1505036614546, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9198, 38.3864, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16797541", "mag": 2.3, "time": 1505036483755, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -176.8674, 50.427, 38.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889656", "mag": 1.55, "time": 1505036419440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9445, 37.642333, -0.52 ] } },
+ { "type": "Feature", "properties": { "id": "us2000artp", "mag": 4.7, "time": 1505036336060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 147.742, 44.4006, 89.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj9e", "mag": 4.1, "time": 1505036045120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.8669, 15.7031, 37.36 ] } },
+ { "type": "Feature", "properties": { "id": "ak16797519", "mag": 3.3, "time": 1505035967489, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.9107, 62.993, 122.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16797515", "mag": 2.4, "time": 1505035289100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.6897, 53.169, 25.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827654", "mag": 1.4, "time": 1505034233691, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.9911, 60.3931, 86.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16796945", "mag": 2.3, "time": 1505033682313, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.0313, 60.3066, 10.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889646", "mag": 1.08, "time": 1505033636850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.818001, 38.801998, 2.52 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj8v", "mag": 2.4, "time": 1505033298010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.484, 42.6096, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amz2", "mag": 2.8, "time": 1505033251180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -163.0563, 54.0093, 14.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759175", "mag": 1.28, "time": 1505033174200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.362167, 33.154333, 11.24 ] } },
+ { "type": "Feature", "properties": { "id": "ak16796924", "mag": 1.8, "time": 1505033149645, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.7762, 53.453, 28.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj8s", "mag": 5.5, "time": 1505033064540, "felt": 15, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 142.8932, 41.7813, 45.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj8i", "mag": 5.2, "time": 1505032778170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5035, 15.7644, 57.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amz1", "mag": 2.8, "time": 1505032715690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -162.8991, 53.5788, 15.9 ] } },
+ { "type": "Feature", "properties": { "id": "mb80253749", "mag": 1.76, "time": 1505032545100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.524667, 46.889167, 14.06 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj87", "mag": 3.8, "time": 1505032481960, "felt": 5, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -104.9548, 37.0369, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000artm", "mag": 4.4, "time": 1505032427640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.852, -18.159, 601.21 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj86", "mag": 4.2, "time": 1505032314990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 22.3039, 38.0722, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759159", "mag": 0.97, "time": 1505031839650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.1615, 34.0365, 4.44 ] } },
+ { "type": "Feature", "properties": { "id": "us2000artk", "mag": 3.8, "time": 1505031830730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 170.788, 53.8251, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000amyz", "mag": 2.6, "time": 1505031468470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4988, 51.6871, 9.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arti", "mag": 4.5, "time": 1505031463320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 179.9123, -25.0133, 508.03 ] } },
+ { "type": "Feature", "properties": { "id": "hv61903321", "mag": 1.9, "time": 1505031307020, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.376, 19.109, 42.633 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759151", "mag": 2.32, "time": 1505031276490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.528667, 33.143833, 8.22 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889631", "mag": 1.68, "time": 1505031062020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.1025, 35.652333, 4.49 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759127", "mag": 0.99, "time": 1505030565890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.4795, 34.347667, 6.85 ] } },
+ { "type": "Feature", "properties": { "id": "ak16796357", "mag": 1.6, "time": 1505029768799, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.6864, 61.2792, 33.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16796347", "mag": 2.8, "time": 1505029738842, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8811, 62.6834, 89.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16796345", "mag": 1.1, "time": 1505029334941, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.9656, 62.9587, 88.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16796343", "mag": 1.4, "time": 1505028430485, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.3315, 60.2265, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759079", "mag": 1.03, "time": 1505028192380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.793833, 33.508, 4.77 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827644", "mag": 2.2, "time": 1505028185237, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -175.9799, 52.0013, 156.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000artg", "mag": 4.2, "time": 1505027908500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 179.9129, -24.5931, 503.92 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj7r", "mag": 4.5, "time": 1505027720310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5866, 15.1076, 24.87 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj7m", "mag": 3.3, "time": 1505027636400, "felt": 12, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -96.804, 35.9918, 5.961 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj7l", "mag": 3.0, "time": 1505027344470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4316, 42.5611, 7.33 ] } },
+ { "type": "Feature", "properties": { "id": "ak16796341", "mag": 1.6, "time": 1505026917606, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.9481, 51.2072, 22.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16796340", "mag": 1.2, "time": 1505026743356, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0079, 59.5892, 41.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16796338", "mag": 1.3, "time": 1505026513369, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.0949, 62.0857, 37.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759055", "mag": 1.58, "time": 1505026335940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.798333, 33.501167, 3.42 ] } },
+ { "type": "Feature", "properties": { "id": "mb80253734", "mag": 1.14, "time": 1505025721140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -113.170167, 47.328333, 19.23 ] } },
+ { "type": "Feature", "properties": { "id": "ak16796336", "mag": 1.0, "time": 1505025668896, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.2865, 62.4037, 46.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16796333", "mag": 1.6, "time": 1505025496149, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.8107, 60.5943, 2.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889606", "mag": 1.8, "time": 1505025336300, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.260333, 36.150833, 8.23 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj7g", "mag": 4.3, "time": 1505024815920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5354, 15.0816, 39.42 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827636", "mag": 1.3, "time": 1505024434533, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4031, 51.77, 19.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16795777", "mag": 1.4, "time": 1505024355978, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.0051, 60.2926, 12.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759039", "mag": 1.89, "time": 1505024281500, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.871, 36.511333, 7.6 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604470", "mag": 1.2, "time": 1505024158420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.1219, 37.3848, 6.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889576", "mag": 0.98, "time": 1505022995190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.766333, 37.576333, 4.92 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj75", "mag": 4.0, "time": 1505022687700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.2661, 15.0962, 47.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827633", "mag": 1.4, "time": 1505022608119, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.9863, 59.5419, 87.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16795771", "mag": 1.7, "time": 1505022431855, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7645, 61.916, 63.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16795770", "mag": 1.2, "time": 1505022130505, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6083, 61.2662, 54.7 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604466", "mag": 1.4, "time": 1505021979344, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.1529, 37.0254, 0.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16795766", "mag": 1.7, "time": 1505021975648, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.1305, 61.3941, 3.7 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017253001", "mag": 2.14, "time": 1505021553530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.0151, 18.2211, 26.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37759015", "mag": 1.41, "time": 1505021428240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.1665, 34.037667, 5.07 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj6q", "mag": 2.8, "time": 1505020972500, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.6874, 36.6964, 8.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758999", "mag": 1.58, "time": 1505020355730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.168833, 34.037667, 4.71 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889556", "mag": 1.12, "time": 1505019834580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.712167, 38.750333, 2.07 ] } },
+ { "type": "Feature", "properties": { "id": "uw61306032", "mag": 2.05, "time": 1505019796720, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.038167, 46.874333, 6.38 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj6e", "mag": 4.1, "time": 1505019258690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -173.3705, 67.5564, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj6c", "mag": 4.1, "time": 1505019032690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -95.0925, 15.7467, 34.06 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ayew", "mag": 4.2, "time": 1505018634430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.9037, 15.4311, 74.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758959", "mag": 1.24, "time": 1505018324480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.169833, 34.0395, 6.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16795206", "mag": 2.1, "time": 1505018157144, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.4944, 60.3044, 178.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ayer", "mag": 4.0, "time": 1505017700720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.8225, 15.3927, 47.72 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758935", "mag": 1.14, "time": 1505017497720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.169, 34.039333, 6.34 ] } },
+ { "type": "Feature", "properties": { "id": "ak16795202", "mag": 1.4, "time": 1505017366860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3287, 63.2644, 12.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758927", "mag": 0.97, "time": 1505017113210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.034167, 34.268333, -0.16 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827627", "mag": 1.4, "time": 1505017084382, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.915, 59.1941, 109.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758911", "mag": 1.67, "time": 1505016996470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.167, 34.037833, 5.81 ] } },
+ { "type": "Feature", "properties": { "id": "ak16795198", "mag": 1.2, "time": 1505016773648, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.4096, 62.1404, 0.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16795193", "mag": 2.2, "time": 1505016672191, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.3522, 59.8641, 133.9 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70234903", "mag": 1.63, "time": 1505016085390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.572167, 37.347167, 4.85 ] } },
+ { "type": "Feature", "properties": { "id": "ak16795191", "mag": 1.2, "time": 1505016021415, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.4153, 61.11, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj5p", "mag": 4.3, "time": 1505015407020, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 141.7252, 38.0198, 68.12 ] } },
+ { "type": "Feature", "properties": { "id": "ak16795189", "mag": 1.3, "time": 1505014815822, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.7877, 59.5199, 52.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889511", "mag": 1.11, "time": 1505014765900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.711998, 38.755501, 2.76 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj5f", "mag": 4.1, "time": 1505014246310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7509, 15.2659, 43.51 ] } },
+ { "type": "Feature", "properties": { "id": "ak16795181", "mag": 2.2, "time": 1505014149113, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.8561, 61.3045, 25.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16795185", "mag": 1.8, "time": 1505014144643, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.2491, 60.9757, 43.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj59", "mag": 4.1, "time": 1505013882540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -173.2187, 67.6427, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "uw61306007", "mag": 1.81, "time": 1505013085820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.600667, 43.836167, 3.82 ] } },
+ { "type": "Feature", "properties": { "id": "mb80253724", "mag": 1.18, "time": 1505012880400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.520333, 46.896167, 10.28 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj51", "mag": 5.8, "time": 1505012842340, "felt": 8, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5278, 15.3896, 29.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16794614", "mag": 1.5, "time": 1505011941254, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.0253, 66.769, 24.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16794611", "mag": 1.9, "time": 1505011477433, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.452, 60.9238, 15.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16794610", "mag": 2.3, "time": 1505010496180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 178.5196, 51.817, 106.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arv6", "mag": 4.0, "time": 1505010360400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.9747, 15.1883, 59.97 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017253000", "mag": 2.65, "time": 1505009947880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.1073, 18.2203, 79.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj4r", "mag": 4.3, "time": 1505009855470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.3515, 14.9239, 35.26 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj4q", "mag": 2.4, "time": 1505009730390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.403, 42.6058, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16794604", "mag": 1.5, "time": 1505009566066, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.5055, 61.4008, 14.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj4m", "mag": 3.2, "time": 1505008832850, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4779, 42.6737, 2.46 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aye7", "mag": 3.9, "time": 1505008653110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.442, 15.7739, 41.92 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj4i", "mag": 4.2, "time": 1505008285900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.3811, 14.9456, 27.79 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827395", "mag": 1.0, "time": 1505008083507, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.7452, 63.1544, 9.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16794056", "mag": 1.8, "time": 1505007980655, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -137.9725, 59.1241, 13.0 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604443", "mag": 1.1, "time": 1505007942083, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9112, 38.3937, 7.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758839", "mag": 1.22, "time": 1505007033130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.383167, 33.193, 7.75 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827393", "mag": 1.2, "time": 1505006807930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.6807, 59.9356, 95.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj47", "mag": 4.1, "time": 1505005871300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.689, 16.7045, 39.46 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj44", "mag": 4.3, "time": 1505005501920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7157, 15.408, 32.22 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj41", "mag": 4.3, "time": 1505005103690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5751, 15.5308, 63.49 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj3z", "mag": 4.4, "time": 1505004749280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4987, 15.3526, 47.21 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj3t", "mag": 3.3, "time": 1505004389150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -129.358, 44.2464, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16793513", "mag": 2.3, "time": 1505004296412, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -143.3005, 58.2485, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16793511", "mag": 2.0, "time": 1505004250005, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.3901, 51.6935, 13.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj3m", "mag": 3.3, "time": 1505004159420, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -129.0417, 44.4745, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827390", "mag": 1.5, "time": 1505004153873, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.9635, 59.4036, 98.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16827388", "mag": 1.4, "time": 1505003603974, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4592, 51.7361, 18.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16793506", "mag": 1.5, "time": 1505003554878, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.5578, 62.0025, 41.6 ] } },
+ { "type": "Feature", "properties": { "id": "mb80253689", "mag": 0.96, "time": 1505003169140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.508667, 46.879833, 9.14 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj3k", "mag": 4.7, "time": 1505002421890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -172.5775, -16.7183, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16793503", "mag": 1.2, "time": 1505001653442, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.0694, 51.6811, 2.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj3c", "mag": 2.3, "time": 1505001525800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.427, 42.5803, 7.86 ] } },
+ { "type": "Feature", "properties": { "id": "hv61903041", "mag": 1.97, "time": 1505000788390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.501, 19.948333, 38.213 ] } },
+ { "type": "Feature", "properties": { "id": "ak16793502", "mag": 2.1, "time": 1505000595653, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -159.5442, 56.1065, 5.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj36", "mag": 3.3, "time": 1505000090270, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -129.0754, 44.3952, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889416", "mag": 1.43, "time": 1505000045060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.709167, 38.768333, 1.44 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889411", "mag": 1.18, "time": 1504999845050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.424167, 38.768, 7.71 ] } },
+ { "type": "Feature", "properties": { "id": "ak16793501", "mag": 1.0, "time": 1504999793486, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0175, 59.5958, 36.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16793499", "mag": 1.5, "time": 1504999218478, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.9885, 60.7112, 87.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823567", "mag": 1.5, "time": 1504999019129, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.3619, 57.7499, 9.3 ] } },
+ { "type": "Feature", "properties": { "id": "hv61903026", "mag": 1.83, "time": 1504999009760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.28717, 19.4025, 1.54 ] } },
+ { "type": "Feature", "properties": { "id": "ak16793495", "mag": 1.5, "time": 1504998539010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.1873, 63.1024, 94.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16793492", "mag": 1.9, "time": 1504998198191, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -157.4513, 66.9866, 0.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16793490", "mag": 1.1, "time": 1504998084010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3555, 64.9906, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000am0g", "mag": 2.9, "time": 1504997864050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -161.5776, 54.9813, 70.97 ] } },
+ { "type": "Feature", "properties": { "id": "us2000am0f", "mag": 3.0, "time": 1504997382330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -158.4861, 55.435, 25.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj2w", "mag": 2.6, "time": 1504996101810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4595, 42.6646, 8.07 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823560", "mag": 1.1, "time": 1504995586471, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.5516, 60.1674, 10.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj2g", "mag": 2.6, "time": 1504995580700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -99.3253, 36.95, 2.161 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889401", "mag": 1.53, "time": 1504995533070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.883167, 39.862333, 5.12 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj2p", "mag": 4.3, "time": 1504995471290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -73.6167, -36.1497, 25.35 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758743", "mag": 0.97, "time": 1504995032090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.927167, 35.897667, 6.49 ] } },
+ { "type": "Feature", "properties": { "id": "ak16792945", "mag": 1.9, "time": 1504994934423, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.6439, 60.0021, 159.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889396", "mag": 1.01, "time": 1504994309360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.744499, 38.774666, 1.39 ] } },
+ { "type": "Feature", "properties": { "id": "mb80253659", "mag": 1.35, "time": 1504994237270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.767667, 45.618, 0.67 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889391", "mag": 1.15, "time": 1504994059680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.4355, 39.501833, 12.05 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ayd8", "mag": 4.0, "time": 1504993547880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -95.0655, 15.7772, 34.99 ] } },
+ { "type": "Feature", "properties": { "id": "uu60240502", "mag": 1.28, "time": 1504993388650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.014167, 44.781833, 8.11 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889381", "mag": 1.37, "time": 1504992621690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.732833, 38.768167, 0.83 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889376", "mag": 1.64, "time": 1504992347010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.879, 39.861333, 5.75 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889366", "mag": 0.99, "time": 1504990736460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.712667, 38.913333, 2.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj18", "mag": 4.9, "time": 1504990247280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.6127, -27.7277, 147.22 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aksk", "mag": 2.8, "time": 1504990158400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -96.8073, 35.9883, 6.228 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj13", "mag": 3.1, "time": 1504990070700, "felt": 18, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -96.8015, 35.9914, 5.85 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arta", "mag": 4.2, "time": 1504989955640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -95.0828, 15.537, 19.56 ] } },
+ { "type": "Feature", "properties": { "id": "ak16792284", "mag": 1.6, "time": 1504989907169, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.0546, 60.3983, 79.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889356", "mag": 0.96, "time": 1504989514010, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.201333, 37.802667, 8.55 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823554", "mag": 1.4, "time": 1504989475242, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.8158, 59.9912, 96.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj0w", "mag": 2.8, "time": 1504989429400, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.5041, 36.2908, 8.103 ] } },
+ { "type": "Feature", "properties": { "id": "hv61902851", "mag": 1.98, "time": 1504989368750, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.279159, 19.391001, 0.54 ] } },
+ { "type": "Feature", "properties": { "id": "us2000art9", "mag": 4.4, "time": 1504989282650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5518, 15.0779, 35.94 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj0x", "mag": 4.2, "time": 1504989178220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.8925, 15.5513, 33.85 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj1p", "mag": 2.3, "time": 1504988963860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -158.4077, 55.6085, 30.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823552", "mag": 1.2, "time": 1504988912939, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.7854, 60.1774, 76.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj0r", "mag": 4.8, "time": 1504988774940, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.8055, 15.4862, 41.24 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823551", "mag": 1.5, "time": 1504988703567, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.6984, 60.153, 94.6 ] } },
+ { "type": "Feature", "properties": { "id": "hv61902831", "mag": 2.68, "time": 1504988541740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.446, 20.027167, 8.137 ] } },
+ { "type": "Feature", "properties": { "id": "uu60240472", "mag": 1.31, "time": 1504988346800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.206, 39.282333, -3.32 ] } },
+ { "type": "Feature", "properties": { "id": "hv61902821", "mag": 2.08, "time": 1504988052380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.281998, 19.411833, 2.05 ] } },
+ { "type": "Feature", "properties": { "id": "ak16791747", "mag": 1.2, "time": 1504986900345, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.4114, 60.0877, 56.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889346", "mag": 1.15, "time": 1504985576640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.723667, 38.753833, 1.93 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aizy", "mag": 4.4, "time": 1504984967070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -157.1285, 55.2452, 28.63 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823547", "mag": 2.3, "time": 1504984573262, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -174.2291, 50.8322, 17.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aizr", "mag": 2.3, "time": 1504983888120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4504, 42.6494, 10.91 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604425", "mag": 1.1, "time": 1504983732096, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8284, 38.06, 3.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16791198", "mag": 1.7, "time": 1504983607869, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.5288, 51.7278, 12.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889341", "mag": 1.77, "time": 1504983196540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.881, 38.833667, 2.0 ] } },
+ { "type": "Feature", "properties": { "id": "uu60240427", "mag": 2.17, "time": 1504983086160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.417167, 42.555833, 8.52 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aizg", "mag": 4.4, "time": 1504983043410, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4218, 15.787, 57.77 ] } },
+ { "type": "Feature", "properties": { "id": "hv61902716", "mag": 1.45, "time": 1504983007260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.274333, 18.915833, 7.212 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823545", "mag": 1.7, "time": 1504982688397, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -166.1975, 53.2518, 21.4 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604404", "mag": 2.1, "time": 1504981848383, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9058, 38.3558, 8.8 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889331", "mag": 1.22, "time": 1504981774440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.480833, 38.843833, 10.34 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aiz4", "mag": 4.4, "time": 1504981610170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 155.7383, 49.4785, 59.88 ] } },
+ { "type": "Feature", "properties": { "id": "ak16791190", "mag": 2.4, "time": 1504980782997, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.857, 67.7643, 14.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823543", "mag": 1.8, "time": 1504980266831, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4071, 51.6082, 9.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758695", "mag": 1.06, "time": 1504980028730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.307667, 34.0925, 16.16 ] } },
+ { "type": "Feature", "properties": { "id": "ak16791189", "mag": 1.3, "time": 1504980002277, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.043, 60.3576, 52.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aiyg", "mag": 4.4, "time": 1504979697800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.459, 15.3004, 36.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823541", "mag": 1.5, "time": 1504978178608, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.8616, 58.3062, 104.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aycf", "mag": 4.2, "time": 1504977766490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.1719, 15.1363, 19.92 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889311", "mag": 1.86, "time": 1504977631430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.621667, 39.523333, 4.94 ] } },
+ { "type": "Feature", "properties": { "id": "us2000am0a", "mag": 2.9, "time": 1504977007380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.3606, 51.5729, 20.05 ] } },
+ { "type": "Feature", "properties": { "id": "uw61305857", "mag": 1.96, "time": 1504976913320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.5835, 49.325, -0.06 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604394", "mag": 1.0, "time": 1504976713972, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.9184, 39.4189, 9.4 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604419", "mag": 1.0, "time": 1504976501919, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9128, 38.3555, 7.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823539", "mag": 1.7, "time": 1504975843554, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.3563, 51.6531, 13.1 ] } },
+ { "type": "Feature", "properties": { "id": "uu60240367", "mag": 1.09, "time": 1504975707090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.071, 44.717, 8.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16790653", "mag": 3.1, "time": 1504974617088, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.3417, 51.6239, 10.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16790654", "mag": 1.9, "time": 1504974537489, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -175.3148, 51.695, 47.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aix7", "mag": 4.4, "time": 1504974070040, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.1553, 15.4199, 68.05 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aix4", "mag": 2.7, "time": 1504973305730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4403, 42.5514, 9.99 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758639", "mag": 1.49, "time": 1504972882060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.274333, 33.977333, 4.89 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823535", "mag": 1.4, "time": 1504972779074, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.6619, 59.5746, 73.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16790651", "mag": 1.4, "time": 1504972583759, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.0742, 62.1419, 37.4 ] } },
+ { "type": "Feature", "properties": { "id": "hv61902621", "mag": 1.3, "time": 1504971779440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.013167, 19.393333, 2.338 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758631", "mag": 1.6, "time": 1504971677250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.497167, 32.741, 8.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16790130", "mag": 2.4, "time": 1504971409637, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4283, 51.6859, 9.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aiwm", "mag": 5.3, "time": 1504971008260, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.8484, 15.8296, 39.05 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889281", "mag": 1.07, "time": 1504970982380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.944833, 37.598167, 1.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aiwh", "mag": 4.8, "time": 1504970946650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5822, 15.0866, 46.84 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aiwe", "mag": 4.6, "time": 1504970869530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.9636, 15.3251, 65.27 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889276", "mag": 1.09, "time": 1504970812160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.855667, 37.658833, 2.53 ] } },
+ { "type": "Feature", "properties": { "id": "ak16790123", "mag": 2.1, "time": 1504970292620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.13, 51.4897, 41.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16790120", "mag": 1.2, "time": 1504968778296, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.3618, 61.0444, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aiw3", "mag": 4.1, "time": 1504968358930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.193, 15.2562, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16789598", "mag": 2.5, "time": 1504968226307, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7868, 63.1355, 123.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16789594", "mag": 1.9, "time": 1504968045372, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.7112, 60.6453, 16.4 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758615", "mag": 1.41, "time": 1504967951280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.275, 33.978333, 4.74 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823526", "mag": 1.9, "time": 1504967456812, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -160.4388, 54.8237, 32.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aivy", "mag": 4.2, "time": 1504967440700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.1556, 16.3217, 115.13 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823525", "mag": 1.4, "time": 1504967368293, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.6252, 59.9753, 101.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823524", "mag": 1.7, "time": 1504966965980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.7649, 56.8018, 3.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823523", "mag": 1.6, "time": 1504966219015, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.4826, 51.2597, 23.7 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889256", "mag": 1.03, "time": 1504966067680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.012333, 37.593667, 0.37 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604381", "mag": 2.3, "time": 1504966020076, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.3553, 40.6574, 6.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758607", "mag": 1.15, "time": 1504965758050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.386667, 33.320333, 5.46 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aivs", "mag": 2.6, "time": 1504965349760, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.431, 42.5704, 9.32 ] } },
+ { "type": "Feature", "properties": { "id": "mb80253559", "mag": 1.01, "time": 1504964725150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.785167, 43.612, -3.47 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823520", "mag": 2.0, "time": 1504964361277, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -164.4265, 54.015, 30.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823518", "mag": 1.4, "time": 1504963874108, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.0471, 60.762, 82.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16789076", "mag": 1.7, "time": 1504963420635, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.7554, 59.5701, 80.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aivg", "mag": 4.8, "time": 1504963319300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.118, 15.2555, 36.22 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aiva", "mag": 4.7, "time": 1504963129400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.9764, 15.3921, 63.93 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823516", "mag": 1.1, "time": 1504962479847, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.8765, 58.9325, 12.9 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70234863", "mag": 1.66, "time": 1504961953310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.8555, 37.210833, 3.69 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aiuu", "mag": 4.3, "time": 1504961286800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.1507, 15.2159, 54.84 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889151", "mag": 1.59, "time": 1504961182210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.2615, 36.143, 9.79 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823515", "mag": 1.3, "time": 1504960711273, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.5542, 59.755, 14.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aiud", "mag": 4.5, "time": 1504959908650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.2891, 15.5969, 67.38 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823514", "mag": 2.3, "time": 1504959541727, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -158.2315, 55.4677, 18.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aiu3", "mag": 3.5, "time": 1504959495530, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.3875, 42.5392, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aiu8", "mag": 4.9, "time": 1504959466540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4075, 16.1573, 92.03 ] } },
+ { "type": "Feature", "properties": { "id": "ak16788555", "mag": 1.8, "time": 1504958775607, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.5009, 59.7863, 1.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823512", "mag": 1.2, "time": 1504958710011, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.6279, 61.013, 77.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aitr", "mag": 5.2, "time": 1504958620590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -66.1721, -22.4546, 222.22 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758559", "mag": 2.17, "time": 1504958517340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.871333, 36.511, 7.46 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889136", "mag": 1.89, "time": 1504958245210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.943333, 37.597, 2.4 ] } },
+ { "type": "Feature", "properties": { "id": "ak16788550", "mag": 1.2, "time": 1504957995087, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7877, 61.7723, 59.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aita", "mag": 3.9, "time": 1504957968370, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4749, 42.5793, 8.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aitc", "mag": 4.9, "time": 1504957853960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4489, 15.7338, 63.09 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889131", "mag": 1.42, "time": 1504957844330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.822667, 37.604833, 3.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ait9", "mag": 3.1, "time": 1504957715430, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4515, 42.5732, 7.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ait3", "mag": 3.0, "time": 1504956895100, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.7026, 36.641, 8.008 ] } },
+ { "type": "Feature", "properties": { "id": "us2000am03", "mag": 2.5, "time": 1504956200380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -163.0448, 53.9738, 19.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ait2", "mag": 4.0, "time": 1504956162220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.601, 15.854, 69.04 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aisv", "mag": 2.4, "time": 1504955702120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4242, 42.579, 6.95 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aisz", "mag": 4.5, "time": 1504955498600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 126.8292, 3.6504, 59.54 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889126", "mag": 1.04, "time": 1504955440550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.832333, 37.5415, 4.76 ] } },
+ { "type": "Feature", "properties": { "id": "ak16788046", "mag": 2.3, "time": 1504954557233, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.3602, 51.5792, 17.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aisn", "mag": 4.2, "time": 1504953867200, "felt": 0, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -70.2262, -15.3425, 224.81 ] } },
+ { "type": "Feature", "properties": { "id": "uu60240042", "mag": 1.27, "time": 1504953324130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.006167, 44.792, 10.46 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017252001", "mag": 2.09, "time": 1504953205290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.2761, 18.0591, 19.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758511", "mag": 1.45, "time": 1504952800930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.930333, 35.903, 6.17 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ayba", "mag": 4.1, "time": 1504952366970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5053, 15.7495, 68.22 ] } },
+ { "type": "Feature", "properties": { "id": "mb80253459", "mag": 1.52, "time": 1504952233330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.447, 46.021167, 0.93 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889121", "mag": 1.03, "time": 1504952209100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.871, 37.554833, 4.73 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758487", "mag": 1.12, "time": 1504952052150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.988, 36.408833, 5.76 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ais8", "mag": 4.3, "time": 1504951965100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 140.9766, 44.5128, 265.04 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604410", "mag": 1.1, "time": 1504951735991, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.3876, 37.2486, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758471", "mag": 1.08, "time": 1504951652550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.931667, 34.0345, 15.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16787530", "mag": 1.1, "time": 1504951610158, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.7897, 67.3419, 11.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ais3", "mag": 5.4, "time": 1504951518370, "felt": null, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 133.9356, -4.9459, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000airu", "mag": 4.6, "time": 1504951047220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.0237, -24.161, 169.64 ] } },
+ { "type": "Feature", "properties": { "id": "ak16787527", "mag": 1.5, "time": 1504950964134, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.1724, 62.5675, 9.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16787525", "mag": 1.4, "time": 1504950309819, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.6065, 60.0265, 7.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000am01", "mag": 3.8, "time": 1504950233710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -163.0371, 53.9395, 13.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889106", "mag": 1.8, "time": 1504950063660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.642667, 38.4305, 9.02 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ayb4", "mag": 3.9, "time": 1504949950000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -95.1532, 14.9116, 21.58 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889101", "mag": 1.84, "time": 1504949895770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.008833, 39.729667, 5.67 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823500", "mag": 1.6, "time": 1504949837453, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.187, 59.0211, 72.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823499", "mag": 1.5, "time": 1504949724642, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.0279, 61.4535, 96.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arsy", "mag": 4.1, "time": 1504949643990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 169.3876, -19.5742, 213.81 ] } },
+ { "type": "Feature", "properties": { "id": "ak16787519", "mag": 1.4, "time": 1504949316312, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.0341, 61.6767, 50.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823497", "mag": 2.2, "time": 1504949226805, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -157.3563, 55.6967, 21.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000airg", "mag": 2.3, "time": 1504948998980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4451, 42.6157, 5.99 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889066", "mag": 0.98, "time": 1504947621670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.982833, 37.917667, 10.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823496", "mag": 2.0, "time": 1504947486008, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -173.2987, 51.7726, 13.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16787403", "mag": 2.6, "time": 1504947413205, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.5944, 59.4202, 75.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aiqx", "mag": 4.1, "time": 1504946674160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5388, 15.3559, 54.35 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758415", "mag": 1.03, "time": 1504946346090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.892667, 32.718333, 8.72 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avsk", "mag": 2.8, "time": 1504946098400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4224, 42.5665, 6.74 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aiqt", "mag": 2.6, "time": 1504946086710, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4255, 42.5806, 6.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000avsj", "mag": 2.7, "time": 1504945947000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4298, 42.5744, 7.17 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ampk", "mag": 3.3, "time": 1504945822720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4585, 42.6108, 6.88 ] } },
+ { "type": "Feature", "properties": { "id": "us2000al9w", "mag": 3.6, "time": 1504945687860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4277, 42.5592, 9.39 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aiur", "mag": 4.0, "time": 1504945641000, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4155, 42.5631, 8.48 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823493", "mag": 1.8, "time": 1504945521703, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.5064, 51.8445, 13.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758407", "mag": 1.19, "time": 1504945503520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.470167, 34.3615, 1.96 ] } },
+ { "type": "Feature", "properties": { "id": "us2000akd5", "mag": 3.3, "time": 1504945430400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4221, 42.5799, 5.91 ] } },
+ { "type": "Feature", "properties": { "id": "us2000art2", "mag": 4.5, "time": 1504945418710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 145.5761, 18.7533, 262.64 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aiq7", "mag": 4.1, "time": 1504945384770, "felt": 32, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4167, 42.5619, 7.19 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aiql", "mag": 4.5, "time": 1504945169540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 130.0828, -6.9776, 133.54 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aiq2", "mag": 3.3, "time": 1504944298530, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.427, 42.5842, 7.06 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aipz", "mag": 4.8, "time": 1504944096330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.0129, 15.2713, 53.97 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arsw", "mag": 4.7, "time": 1504943699570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -25.2724, -59.2757, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "hv61902241", "mag": 1.62, "time": 1504943455500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.2485, 19.386833, 31.012 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj4h", "mag": 2.6, "time": 1504943362330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4304, 42.5789, 7.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aipn", "mag": 4.2, "time": 1504943316560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 74.9524, 38.8091, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aipm", "mag": 2.3, "time": 1504943304230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4353, 42.5792, 9.03 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aipl", "mag": 2.8, "time": 1504942989430, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4364, 42.5726, 8.45 ] } },
+ { "type": "Feature", "properties": { "id": "us2000art3", "mag": 4.7, "time": 1504942625890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 146.7566, 13.8193, 16.98 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823489", "mag": 2.2, "time": 1504941981540, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.6119, 68.4897, 9.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16786898", "mag": 2.3, "time": 1504941973751, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.6435, 68.4109, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aipa", "mag": 4.1, "time": 1504940445840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7031, 15.6436, 38.39 ] } },
+ { "type": "Feature", "properties": { "id": "ak16786512", "mag": 1.4, "time": 1504940146158, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6116, 61.8175, 55.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758383", "mag": 1.42, "time": 1504940130810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.027333, 34.440333, 12.46 ] } },
+ { "type": "Feature", "properties": { "id": "uw61305607", "mag": 1.15, "time": 1504939688980, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.4665, 48.458667, 29.09 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604353", "mag": 1.1, "time": 1504939522222, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.9216, 38.3812, 6.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ayad", "mag": 4.2, "time": 1504939027620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4368, 15.1947, 59.18 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823487", "mag": 1.3, "time": 1504938992964, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.2717, 59.963, 19.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16786506", "mag": 2.6, "time": 1504938975370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.5829, 68.5268, 13.9 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758359", "mag": 1.28, "time": 1504938780620, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.4375, 32.7105, 7.58 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ayac", "mag": 4.2, "time": 1504938734260, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.6092, 15.0415, 60.74 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aip9", "mag": 4.8, "time": 1504938495700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.9169, 15.1747, 62.25 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aing", "mag": 5.0, "time": 1504938263510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7579, 15.8771, 50.37 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889046", "mag": 1.74, "time": 1504938239010, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.951833, 36.388167, 3.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758351", "mag": 1.69, "time": 1504938189230, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.433333, 32.708, 11.7 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758343", "mag": 2.17, "time": 1504938036110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.650333, 32.557, 11.77 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arsu", "mag": 4.2, "time": 1504937955720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.536, 15.7206, 33.37 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aya9", "mag": 4.1, "time": 1504937750680, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4987, 15.6186, 49.66 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ain2", "mag": 4.5, "time": 1504937531380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.2803, 15.4532, 53.46 ] } },
+ { "type": "Feature", "properties": { "id": "mb80253349", "mag": 1.16, "time": 1504937527100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5255, 46.891167, 14.63 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aimz", "mag": 4.9, "time": 1504936574470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -25.7043, -59.8211, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aya4", "mag": 4.1, "time": 1504936122970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4429, 15.8428, 39.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823484", "mag": 1.2, "time": 1504936114606, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7939, 63.1602, 125.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16786077", "mag": 1.2, "time": 1504935774238, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.9696, 65.5175, 9.8 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604400", "mag": 1.2, "time": 1504935386919, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.5673, 40.9452, 13.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000alzw", "mag": 3.4, "time": 1504935359040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -170.4837, 52.2353, 39.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16786013", "mag": 1.4, "time": 1504934755508, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.2112, 59.8068, 77.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aimb", "mag": 4.7, "time": 1504934538770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7033, 15.6728, 51.46 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arum", "mag": 4.3, "time": 1504934315700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.6748, 15.2159, 35.55 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aim7", "mag": 4.0, "time": 1504934242180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.7794, 15.3776, 67.05 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aim0", "mag": 4.3, "time": 1504933783810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.0338, 15.1325, 37.84 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay9t", "mag": 4.3, "time": 1504933351910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.8516, 15.6769, 64.29 ] } },
+ { "type": "Feature", "properties": { "id": "ak16785716", "mag": 1.3, "time": 1504933227428, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.6303, 68.5196, 9.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823479", "mag": 1.4, "time": 1504933167331, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.3862, 58.1118, 65.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823478", "mag": 1.9, "time": 1504932908497, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.2638, 51.342, 32.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ailq", "mag": 5.5, "time": 1504932892100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.0613, 15.0808, 29.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ailp", "mag": 4.5, "time": 1504932819610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 119.1423, -8.6068, 144.45 ] } },
+ { "type": "Feature", "properties": { "id": "ak16785656", "mag": 1.7, "time": 1504932712383, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.238, 65.7544, 14.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72889011", "mag": 1.03, "time": 1504932679700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.051167, 36.471667, 6.53 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ailm", "mag": 2.9, "time": 1504932636140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.9441, 58.6028, 4.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay9s", "mag": 4.1, "time": 1504932576140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.6151, 15.175, 41.76 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ailg", "mag": 2.7, "time": 1504932451000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.5107, 36.2919, 8.117 ] } },
+ { "type": "Feature", "properties": { "id": "mb80253329", "mag": 1.19, "time": 1504932343290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.527833, 46.862667, 11.76 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758279", "mag": 1.67, "time": 1504932048030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.507167, 33.653, 1.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823475", "mag": 1.1, "time": 1504931942522, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.2765, 60.0722, 83.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aila", "mag": 4.2, "time": 1504931645090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4593, 15.3365, 41.87 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758271", "mag": 1.52, "time": 1504931420370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.8695, 34.238, 8.73 ] } },
+ { "type": "Feature", "properties": { "id": "ak16785521", "mag": 1.4, "time": 1504931241910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.646, 68.5258, 6.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16785582", "mag": 1.0, "time": 1504931175076, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.1393, 61.7136, 2.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ail5", "mag": 4.7, "time": 1504930943390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4341, 15.1257, 27.87 ] } },
+ { "type": "Feature", "properties": { "id": "ak16785423", "mag": 1.8, "time": 1504930589594, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.6499, 68.5284, 16.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16785419", "mag": 2.0, "time": 1504930533977, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.1907, 61.6985, 2.3 ] } },
+ { "type": "Feature", "properties": { "id": "nm60179177", "mag": 3.06, "time": 1504930529110, "felt": 135, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -87.913, 38.425, 11.76 ] } },
+ { "type": "Feature", "properties": { "id": "mb80253319", "mag": 1.63, "time": 1504930497770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.491667, 46.891833, 11.66 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay9p", "mag": 4.1, "time": 1504930486630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.9352, 15.3169, 41.53 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay9n", "mag": 3.7, "time": 1504930165360, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5559, 15.8989, 56.13 ] } },
+ { "type": "Feature", "properties": { "id": "ak16785231", "mag": 2.5, "time": 1504929910494, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.6125, 68.5273, 8.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16785228", "mag": 2.4, "time": 1504929817958, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.6164, 68.5069, 15.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ail9", "mag": 4.2, "time": 1504929739110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.2125, 15.079, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000alzs", "mag": 2.7, "time": 1504929498060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -169.2368, 51.9836, 19.57 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823467", "mag": 1.5, "time": 1504929296944, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.2744, 61.3017, 122.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay9h", "mag": 3.8, "time": 1504928398040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -95.0181, 16.0961, 38.88 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017252000", "mag": 3.08, "time": 1504928197450, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.4461, 18.7428, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay9g", "mag": 4.1, "time": 1504927088180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4711, 15.1531, 65.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16784944", "mag": 1.8, "time": 1504927005991, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.3303, 60.1916, 78.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16784941", "mag": 2.3, "time": 1504926969938, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.6189, 68.5221, 13.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16784938", "mag": 2.1, "time": 1504926585070, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.6431, 68.5555, 3.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aijy", "mag": 4.9, "time": 1504926495850, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.3472, 15.9092, 62.55 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay9f", "mag": 4.0, "time": 1504926311940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.338, 15.4947, 53.82 ] } },
+ { "type": "Feature", "properties": { "id": "ak16784757", "mag": 1.4, "time": 1504926151958, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.5619, 63.1355, 67.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay9d", "mag": 4.0, "time": 1504926060810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.644, 15.4622, 58.54 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay9b", "mag": 4.0, "time": 1504925827780, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.0747, 15.195, 43.36 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aj03", "mag": 2.7, "time": 1504925336910, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -163.2524, 54.0919, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aijm", "mag": 4.5, "time": 1504925090110, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -67.2748, -24.2322, 205.92 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aijl", "mag": 5.1, "time": 1504925024150, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7923, 15.6429, 57.68 ] } },
+ { "type": "Feature", "properties": { "id": "ak16784618", "mag": 2.6, "time": 1504924922956, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.6215, 68.5087, 13.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aij6", "mag": 4.9, "time": 1504924325880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.2803, 15.0759, 19.62 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823460", "mag": 1.6, "time": 1504924009517, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.6908, 68.536, 4.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823459", "mag": 1.6, "time": 1504923856019, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.1588, 59.9206, 119.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758231", "mag": 1.09, "time": 1504923480190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.197667, 33.036667, 6.54 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823458", "mag": 1.2, "time": 1504923376066, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.8869, 60.0725, 77.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16784466", "mag": 1.3, "time": 1504922976851, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.9394, 63.4575, 10.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758223", "mag": 1.64, "time": 1504922815610, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.095167, 35.773167, 10.47 ] } },
+ { "type": "Feature", "properties": { "id": "uw61305517", "mag": 1.22, "time": 1504922472730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.234, 46.341167, 11.49 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758207", "mag": 0.96, "time": 1504922375210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.930333, 35.896833, 5.72 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823455", "mag": 1.1, "time": 1504921668573, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.5605, 58.7828, 14.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16784171", "mag": 1.5, "time": 1504921324109, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.7065, 68.5298, 8.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay97", "mag": 4.2, "time": 1504921245860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.8933, 15.7086, 79.65 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay95", "mag": 4.0, "time": 1504920659630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5492, 15.7942, 35.56 ] } },
+ { "type": "Feature", "properties": { "id": "ak16784114", "mag": 1.2, "time": 1504920524598, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.8278, 67.3421, 14.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823452", "mag": 1.3, "time": 1504919998366, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.593, 58.7481, 11.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arv3", "mag": 4.3, "time": 1504919742200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -82.4369, 7.7941, 13.81 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aiic", "mag": 4.1, "time": 1504919644420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.098, 15.37, 28.41 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888926", "mag": 1.51, "time": 1504919499600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.797167, 38.8195, 2.74 ] } },
+ { "type": "Feature", "properties": { "id": "hv61901901", "mag": 2.49, "time": 1504919482270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.300507, 19.404333, 13.76 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay91", "mag": 4.1, "time": 1504919175710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.5371, 15.6773, 67.69 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay90", "mag": 3.9, "time": 1504918842770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4561, 15.2969, 47.01 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888921", "mag": 1.43, "time": 1504918334270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.63, 40.262167, 3.32 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aiht", "mag": 4.4, "time": 1504918076900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5874, 15.6439, 12.93 ] } },
+ { "type": "Feature", "properties": { "id": "ak16783729", "mag": 1.5, "time": 1504917773363, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.7901, 64.8033, 13.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823450", "mag": 1.8, "time": 1504917198075, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.1288, 53.4202, 28.2 ] } },
+ { "type": "Feature", "properties": { "id": "uu60239577", "mag": 1.64, "time": 1504917186550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.438333, 42.574167, 3.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823449", "mag": 1.6, "time": 1504917085381, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.671, 59.1673, 61.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aihy", "mag": 4.1, "time": 1504916600330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.3911, 16.0661, 39.18 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aih9", "mag": 2.8, "time": 1504916318430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4281, 42.5718, 5.53 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aih8", "mag": 2.5, "time": 1504916278870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4338, 42.5822, 5.38 ] } },
+ { "type": "Feature", "properties": { "id": "ak16783588", "mag": 1.6, "time": 1504916071368, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.3277, 59.285, 86.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16783586", "mag": 1.1, "time": 1504915994737, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.056, 67.2634, 8.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823446", "mag": 2.1, "time": 1504915956900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -163.713, 53.9765, 25.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758159", "mag": 1.56, "time": 1504915633570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.2745, 33.978, 4.17 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arsl", "mag": 4.3, "time": 1504915283460, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.6805, 16.8287, 106.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16823445", "mag": 1.2, "time": 1504915279966, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -136.6323, 59.8055, 11.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16783409", "mag": 1.6, "time": 1504915272065, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.43, 61.3236, 75.8 ] } },
+ { "type": "Feature", "properties": { "id": "ci37164028", "mag": 1.71, "time": 1504915194240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.598333, 33.300667, 5.25 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758151", "mag": 2.09, "time": 1504915192060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.24, 32.322667, 6.67 ] } },
+ { "type": "Feature", "properties": { "id": "ak16783408", "mag": 1.6, "time": 1504915154515, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.3632, 60.1661, 90.3 ] } },
+ { "type": "Feature", "properties": { "id": "hv61901846", "mag": 1.94, "time": 1504914308880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.314, 18.895833, 12.72 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888886", "mag": 1.0, "time": 1504914139040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.003833, 37.588667, 1.64 ] } },
+ { "type": "Feature", "properties": { "id": "ak16783243", "mag": 1.1, "time": 1504913564223, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.2504, 62.3109, 15.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821920", "mag": 1.3, "time": 1504913498285, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.1821, 58.2348, 101.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821919", "mag": 1.4, "time": 1504913414028, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.1655, 60.5722, 86.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821918", "mag": 1.1, "time": 1504913077516, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.597, 58.7696, 12.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aigc", "mag": 4.1, "time": 1504912952040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.1585, 15.0785, 47.75 ] } },
+ { "type": "Feature", "properties": { "id": "uu60239522", "mag": 1.86, "time": 1504912091450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.417833, 42.557333, 7.29 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aifs", "mag": 4.4, "time": 1504911443790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 82.6815, 44.316, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16782938", "mag": 1.1, "time": 1504911183072, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3769, 64.9856, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16782937", "mag": 1.1, "time": 1504910876129, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -146.7587, 61.2722, 29.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16782871", "mag": 1.5, "time": 1504910569120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -139.4893, 60.1552, 7.8 ] } },
+ { "type": "Feature", "properties": { "id": "ak16782868", "mag": 1.4, "time": 1504910467245, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.7194, 62.6908, 57.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821913", "mag": 1.7, "time": 1504910258777, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.0231, 58.2214, 149.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888801", "mag": 1.9, "time": 1504909953040, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.8175, 37.486333, -0.46 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aif7", "mag": 2.5, "time": 1504909902600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.5076, 36.2848, 8.171 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aif4", "mag": 4.8, "time": 1504909723200, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.8865, 15.3302, 30.08 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821912", "mag": 1.1, "time": 1504909705310, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.3127, 62.4824, 115.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aif0", "mag": 3.0, "time": 1504909701800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.5069, 36.2872, 6.887 ] } },
+ { "type": "Feature", "properties": { "id": "mb80253249", "mag": 1.02, "time": 1504909626120, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.500333, 46.870333, 14.95 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888791", "mag": 1.37, "time": 1504909453970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.04, 37.6285, -2.07 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aier", "mag": 4.4, "time": 1504908895340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.0113, 15.4861, 55.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821911", "mag": 1.3, "time": 1504908516343, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.8637, 60.6448, 52.5 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758063", "mag": 1.18, "time": 1504908189370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.201167, 33.035167, 5.64 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888781", "mag": 1.42, "time": 1504907868300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.038667, 37.624833, -2.91 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aie8", "mag": 4.7, "time": 1504907825570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5854, 15.5735, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888776", "mag": 1.8, "time": 1504907588830, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.040167, 37.63, -1.66 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aie6", "mag": 4.6, "time": 1504907582410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4976, 15.7473, 55.06 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aidm", "mag": 4.5, "time": 1504906777370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.0707, 15.2209, 55.42 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aid9", "mag": 4.8, "time": 1504906287810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.3905, 15.4318, 56.37 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888771", "mag": 1.19, "time": 1504906092960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.451, 37.990333, 1.49 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aicx", "mag": 4.3, "time": 1504906074440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.2669, 15.5886, 57.93 ] } },
+ { "type": "Feature", "properties": { "id": "ak16782412", "mag": 1.0, "time": 1504906074363, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.3787, 62.4883, 7.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16782375", "mag": 2.3, "time": 1504905457780, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -168.4787, 52.748, 40.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888756", "mag": 1.38, "time": 1504905314090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.756167, 39.273333, 4.85 ] } },
+ { "type": "Feature", "properties": { "id": "ak16782374", "mag": 1.2, "time": 1504905292993, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.8681, 59.9024, 67.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aicp", "mag": 4.2, "time": 1504905187950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4812, 15.6987, 35.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16782334", "mag": 1.1, "time": 1504904835105, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -144.7621, 65.5089, 13.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16782328", "mag": 2.5, "time": 1504904826453, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.811, 61.2391, 56.6 ] } },
+ { "type": "Feature", "properties": { "id": "uw61305342", "mag": 1.93, "time": 1504904598280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.065167, 44.442833, -1.58 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888751", "mag": 1.54, "time": 1504903192860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.7535, 39.279333, 8.66 ] } },
+ { "type": "Feature", "properties": { "id": "ak16781999", "mag": 3.0, "time": 1504902403320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.2239, 60.1717, 139.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16781990", "mag": 2.9, "time": 1504902403227, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.2392, 60.1979, 145.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay7u", "mag": 4.1, "time": 1504902279690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7805, 15.528, 44.33 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821902", "mag": 2.3, "time": 1504902127057, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -164.6706, 53.1595, 47.8 ] } },
+ { "type": "Feature", "properties": { "id": "mb80253224", "mag": 1.28, "time": 1504901825890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.961667, 44.423667, 7.65 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758023", "mag": 1.23, "time": 1504901676790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.243333, 34.049667, 14.94 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arsf", "mag": 4.8, "time": 1504901654190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 169.1397, -18.9749, 151.93 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aib4", "mag": 4.7, "time": 1504901358420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4084, 14.947, 20.03 ] } },
+ { "type": "Feature", "properties": { "id": "mb80254729", "mag": 1.15, "time": 1504901142840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5325, 46.863333, 12.44 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arse", "mag": 4.2, "time": 1504900520170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 122.6478, 18.4195, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16781710", "mag": 1.5, "time": 1504900346639, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.5122, 61.5519, 57.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16781709", "mag": 1.3, "time": 1504900242686, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.7722, 60.316, 70.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aibq", "mag": 2.5, "time": 1504899687060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4383, 42.5694, 8.27 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888741", "mag": 1.05, "time": 1504899640660, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.013, 37.593167, 0.27 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aib3", "mag": 2.8, "time": 1504899556990, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4363, 42.571, 9.27 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aia5", "mag": 2.6, "time": 1504899482480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4289, 42.5733, 13.75 ] } },
+ { "type": "Feature", "properties": { "id": "ak16781595", "mag": 1.7, "time": 1504899244914, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -141.1502, 60.3533, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16781585", "mag": 3.9, "time": 1504899189169, "felt": 0, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.5601, 59.2544, 64.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37758007", "mag": 2.02, "time": 1504898829300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.561833, 31.0585, 5.61 ] } },
+ { "type": "Feature", "properties": { "id": "ak16781550", "mag": 1.4, "time": 1504898282611, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6296, 61.6699, 64.1 ] } },
+ { "type": "Feature", "properties": { "id": "ci37757991", "mag": 1.52, "time": 1504897913130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.184167, 34.008167, 14.79 ] } },
+ { "type": "Feature", "properties": { "id": "ci37757975", "mag": 1.23, "time": 1504897847890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.191833, 34.995167, -0.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai96", "mag": 4.7, "time": 1504897612480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.1128, 15.0427, 38.05 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay7g", "mag": 4.5, "time": 1504897486190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.6162, 15.5292, 52.13 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aku3", "mag": 2.7, "time": 1504897427450, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4362, 42.5723, 6.2 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aruj", "mag": 4.0, "time": 1504897268300, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 151.0589, 51.6006, 526.16 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai8x", "mag": 5.3, "time": 1504897044080, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.9814, 16.231, 63.24 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ars7", "mag": 4.4, "time": 1504896441090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 166.9803, -12.2109, 239.13 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ars8", "mag": 4.2, "time": 1504895755810, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4237, 15.0921, 33.24 ] } },
+ { "type": "Feature", "properties": { "id": "ak16781202", "mag": 1.1, "time": 1504895394318, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.517, 62.887, 92.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai8l", "mag": 5.0, "time": 1504895053450, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -95.0247, 15.6158, 25.92 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888711", "mag": 1.13, "time": 1504894886190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.369, 37.616167, 3.76 ] } },
+ { "type": "Feature", "properties": { "id": "ci37757951", "mag": 1.29, "time": 1504894538140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.34, 35.0645, -0.97 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604251", "mag": 1.1, "time": 1504893693579, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.5283, 37.177, 14.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888696", "mag": 1.24, "time": 1504893681000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.9525, 37.9215, -0.25 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai89", "mag": 4.9, "time": 1504893629390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.339, 15.3801, 37.31 ] } },
+ { "type": "Feature", "properties": { "id": "ak16780971", "mag": 2.0, "time": 1504893338524, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -157.7656, 56.9755, 12.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai7x", "mag": 4.4, "time": 1504893167240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.8739, 15.6809, 69.44 ] } },
+ { "type": "Feature", "properties": { "id": "ci37757919", "mag": 1.09, "time": 1504892320190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.792333, 33.504167, 6.36 ] } },
+ { "type": "Feature", "properties": { "id": "ak16780872", "mag": 2.7, "time": 1504892251611, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.2184, 60.0235, 132.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai7w", "mag": 5.1, "time": 1504892136330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 54.7094, 14.7125, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16780870", "mag": 1.9, "time": 1504892114398, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.5364, 59.0829, 80.6 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604241", "mag": 1.7, "time": 1504892108096, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.8858, 39.5547, 16.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci37757903", "mag": 1.06, "time": 1504892000240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.084, 33.233167, 9.85 ] } },
+ { "type": "Feature", "properties": { "id": "mb80253164", "mag": 0.95, "time": 1504891992150, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.5415, 46.8995, 11.59 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai7p", "mag": 4.3, "time": 1504891955840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.495, 15.1404, 36.22 ] } },
+ { "type": "Feature", "properties": { "id": "ak16780841", "mag": 1.4, "time": 1504891846856, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.3249, 60.9139, 26.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arsh", "mag": 4.5, "time": 1504891333730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 133.2388, -6.8416, 19.98 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay6x", "mag": 4.1, "time": 1504891315080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7297, 15.3343, 19.17 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ars4", "mag": 4.4, "time": 1504891219920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 54.7693, 14.6837, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16780813", "mag": 1.5, "time": 1504891126668, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.153, 61.7092, 3.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888686", "mag": 1.23, "time": 1504891114230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.1045, 37.325167, -0.31 ] } },
+ { "type": "Feature", "properties": { "id": "ci37757879", "mag": 2.31, "time": 1504890797650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.463833, 34.355833, 3.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai73", "mag": 4.9, "time": 1504890172380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.6852, 15.6184, 20.97 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai6w", "mag": 4.8, "time": 1504890101520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.3813, 15.1628, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai6n", "mag": 4.6, "time": 1504889103890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 130.804, -6.0426, 126.88 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai6c", "mag": 4.7, "time": 1504888948510, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.8822, 15.7603, 70.11 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai66", "mag": 3.1, "time": 1504888942660, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4688, 42.6127, 7.46 ] } },
+ { "type": "Feature", "properties": { "id": "ci37757839", "mag": 1.07, "time": 1504888838380, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.931, 35.8975, 5.55 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai5r", "mag": 5.0, "time": 1504887559080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.1176, 15.3478, 50.28 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai7e", "mag": 2.6, "time": 1504887451250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -174.8013, 51.3347, 33.06 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai5q", "mag": 4.8, "time": 1504887267930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.834, 15.2659, 31.94 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ars1", "mag": 4.4, "time": 1504887163560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 121.5842, 0.5634, 87.49 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai5f", "mag": 4.9, "time": 1504887145160, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4164, 15.3325, 55.79 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aixn", "mag": 4.1, "time": 1504887139190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.237, 15.3669, 61.33 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821886", "mag": 1.0, "time": 1504887040916, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.7913, 61.8643, 40.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai53", "mag": 4.6, "time": 1504886882420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4908, 15.0663, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16780437", "mag": 1.7, "time": 1504886789015, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.1717, 61.2338, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arsa", "mag": 4.8, "time": 1504886367500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -45.1832, 25.2517, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arrz", "mag": 4.3, "time": 1504885790410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 121.1544, 13.7011, 115.66 ] } },
+ { "type": "Feature", "properties": { "id": "ci37757791", "mag": 2.49, "time": 1504885701960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.863167, 36.514, 1.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888591", "mag": 1.18, "time": 1504885591170, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.029167, 37.64, 1.33 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay69", "mag": 4.3, "time": 1504884967040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.8299, 15.2537, 51.49 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888561", "mag": 2.76, "time": 1504884687580, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -126.4015, 40.656167, 4.61 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888556", "mag": 1.22, "time": 1504884477720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.594833, 36.036167, 3.51 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888551", "mag": 1.29, "time": 1504884449700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.600833, 36.033, 2.98 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai45", "mag": 4.4, "time": 1504884249230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 51.6373, 29.0196, 32.54 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai4f", "mag": 5.0, "time": 1504884005650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -172.4529, -15.2805, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ci37757767", "mag": 1.56, "time": 1504883892090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.447333, 34.149, 10.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888536", "mag": 1.66, "time": 1504883570470, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.168167, 39.1465, -0.58 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arrw", "mag": 4.2, "time": 1504882974870, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7985, 15.5213, 35.36 ] } },
+ { "type": "Feature", "properties": { "id": "ak16779960", "mag": 1.8, "time": 1504882678981, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0626, 62.8988, 105.6 ] } },
+ { "type": "Feature", "properties": { "id": "ci37757743", "mag": 0.97, "time": 1504882082250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.499333, 33.723667, 12.91 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai3n", "mag": 5.3, "time": 1504881901650, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.3384, 15.544, 53.27 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai3i", "mag": 5.0, "time": 1504881612700, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4062, 15.406, 49.05 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai3c", "mag": 5.1, "time": 1504880703430, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.1626, 15.9178, 78.53 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821881", "mag": 1.9, "time": 1504880601665, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.7019, 53.1531, 4.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai3a", "mag": 4.6, "time": 1504880185590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.9379, 15.4789, 51.37 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888511", "mag": 1.64, "time": 1504879933970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.805, 37.519, 0.63 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arrt", "mag": 4.3, "time": 1504879797140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -92.5495, 15.2436, 49.04 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888506", "mag": 1.11, "time": 1504879682840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.807167, 37.5155, -1.34 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai2x", "mag": 4.4, "time": 1504878550770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.3291, 15.5119, 43.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai2u", "mag": 4.5, "time": 1504878237250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.3775, 15.3318, 55.57 ] } },
+ { "type": "Feature", "properties": { "id": "ak16779589", "mag": 2.1, "time": 1504878197682, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.7176, 61.7913, 43.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888501", "mag": 1.4, "time": 1504877974600, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.826833, 38.884833, 0.43 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai2s", "mag": 4.5, "time": 1504877794630, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.2597, 15.3155, 57.11 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai2p", "mag": 4.3, "time": 1504877637550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.3617, 15.3594, 72.43 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821879", "mag": 1.1, "time": 1504877280981, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.4859, 62.9279, 91.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai2h", "mag": 4.3, "time": 1504877227420, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.2794, 15.5765, 57.44 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai2d", "mag": 4.9, "time": 1504877000620, "felt": 5, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 140.4519, 39.5355, 14.54 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888491", "mag": 1.84, "time": 1504876384490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.493333, 38.505333, 9.95 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821878", "mag": 1.4, "time": 1504875984627, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.1326, 61.9648, 66.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821876", "mag": 2.2, "time": 1504875655387, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -168.9923, 52.3567, 17.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888486", "mag": 2.07, "time": 1504875297970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.476833, 38.505667, 10.55 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888481", "mag": 2.29, "time": 1504875261290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.487833, 38.504167, 11.24 ] } },
+ { "type": "Feature", "properties": { "id": "ak16779354", "mag": 1.2, "time": 1504874899621, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.8024, 62.2347, 27.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai1z", "mag": 4.7, "time": 1504874764610, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.9526, 15.348, 66.08 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604198", "mag": 1.6, "time": 1504874486416, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.1528, 36.3422, 12.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16779312", "mag": 1.1, "time": 1504874405501, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -142.2249, 66.2606, 1.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821873", "mag": 1.7, "time": 1504874360732, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -177.5174, 51.2619, 22.7 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604197", "mag": 1.1, "time": 1504874200883, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.2814, 37.8092, 5.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888476", "mag": 1.21, "time": 1504873957930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.509333, 40.482667, 4.94 ] } },
+ { "type": "Feature", "properties": { "id": "ci37757703", "mag": 1.39, "time": 1504873858920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.717833, 33.649333, 15.22 ] } },
+ { "type": "Feature", "properties": { "id": "ci37757695", "mag": 1.17, "time": 1504872471560, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.568167, 33.822667, 8.77 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai1k", "mag": 5.2, "time": 1504872379780, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4203, 15.4936, 64.61 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604195", "mag": 1.1, "time": 1504872342696, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.0794, 39.7864, 6.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai1f", "mag": 4.5, "time": 1504872210290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.752, 15.6687, 34.52 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai17", "mag": 4.7, "time": 1504871509040, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.251, 15.2604, 43.78 ] } },
+ { "type": "Feature", "properties": { "id": "ci37757687", "mag": 1.13, "time": 1504871201290, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.5185, 33.500333, 13.87 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai11", "mag": 4.8, "time": 1504870992430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5788, 16.0581, 67.6 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888461", "mag": 1.42, "time": 1504869975320, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.437833, 39.504833, 12.47 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai0u", "mag": 5.0, "time": 1504869955970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7875, 15.7988, 32.83 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888456", "mag": 1.91, "time": 1504869902080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.485667, 38.504833, 10.49 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai0r", "mag": 3.1, "time": 1504869744270, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4645, 42.6225, 8.36 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai0n", "mag": 4.5, "time": 1504869089530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4825, 15.1089, 36.59 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai0k", "mag": 4.3, "time": 1504868775480, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.798, 15.8932, 52.08 ] } },
+ { "type": "Feature", "properties": { "id": "ak16778868", "mag": 2.4, "time": 1504868579816, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.6965, 62.1823, 44.5 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888446", "mag": 1.29, "time": 1504868153570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.486333, 38.5055, 8.02 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888436", "mag": 1.9, "time": 1504867751580, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.482833, 38.504333, 10.56 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888431", "mag": 1.71, "time": 1504867332410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.491833, 38.504667, 9.32 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888421", "mag": 1.08, "time": 1504867024130, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.489, 38.504333, 8.33 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821868", "mag": 2.1, "time": 1504866678618, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -160.4655, 55.6664, 99.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821867", "mag": 1.4, "time": 1504866626331, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -147.0732, 60.0832, 7.7 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai08", "mag": 4.7, "time": 1504866065090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 125.9223, 5.4358, 106.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16778797", "mag": 1.0, "time": 1504865774499, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.3276, 61.5525, 10.3 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604189", "mag": 1.2, "time": 1504865677094, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -120.0784, 39.7853, 6.9 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888411", "mag": 1.53, "time": 1504865468770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.476167, 38.507167, 9.38 ] } },
+ { "type": "Feature", "properties": { "id": "hv61901161", "mag": 1.74, "time": 1504864814220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.466833, 19.2065, 36.007 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70234788", "mag": 2.39, "time": 1504864780960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.7805, 37.3255, 5.78 ] } },
+ { "type": "Feature", "properties": { "id": "ak16780611", "mag": 2.4, "time": 1504864612255, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.1592, 61.3969, 4.3 ] } },
+ { "type": "Feature", "properties": { "id": "ak16778631", "mag": 2.2, "time": 1504864578261, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -140.1624, 61.4081, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "uw61305087", "mag": 2.01, "time": 1504864189490, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.050833, 48.9275, 23.48 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821863", "mag": 1.7, "time": 1504863670078, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -178.4879, 51.7374, 21.1 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821862", "mag": 1.8, "time": 1504862106783, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.9215, 58.7206, 119.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahzn", "mag": 4.6, "time": 1504861954060, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4387, 15.3946, 52.08 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888396", "mag": 1.27, "time": 1504861876770, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8075, 37.512833, 1.14 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahzl", "mag": 4.5, "time": 1504861821720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4897, 15.3898, 66.84 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahzj", "mag": 4.5, "time": 1504861699670, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5329, 15.609, 39.64 ] } },
+ { "type": "Feature", "properties": { "id": "ci37757655", "mag": 1.16, "time": 1504861667220, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.622833, 33.107167, 12.71 ] } },
+ { "type": "Feature", "properties": { "id": "ak16778553", "mag": 1.9, "time": 1504861559880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -157.5627, 66.997, 11.1 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888391", "mag": 2.09, "time": 1504860900670, "felt": 0, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -123.456, 39.646667, 9.55 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay4f", "mag": 4.1, "time": 1504860843930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7484, 15.3716, 56.33 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888386", "mag": 2.1, "time": 1504860440750, "felt": 7, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.938, 37.831333, 7.32 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay4d", "mag": 4.4, "time": 1504860354710, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.834, 15.3232, 49.34 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arrb", "mag": 4.6, "time": 1504860180930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.0811, 15.785, 52.87 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahzq", "mag": 4.5, "time": 1504860168930, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.9132, 15.2837, 68.08 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahz5", "mag": 5.3, "time": 1504859674330, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.1725, 15.2148, 50.77 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821859", "mag": 2.1, "time": 1504859557955, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -159.0839, 54.9712, 35.5 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604302", "mag": 1.1, "time": 1504859552745, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.4838, 37.3947, 8.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16778352", "mag": 1.2, "time": 1504859550711, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.4759, 63.0882, 87.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahz3", "mag": 4.3, "time": 1504859478950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.3904, 15.121, 30.23 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604182", "mag": 1.0, "time": 1504858881802, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.0405, 37.2978, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahz1", "mag": 4.3, "time": 1504858630350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.6852, 15.833, 76.27 ] } },
+ { "type": "Feature", "properties": { "id": "uu60239147", "mag": 2.45, "time": 1504858591000, "felt": 0, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.444167, 42.664333, 8.83 ] } },
+ { "type": "Feature", "properties": { "id": "us2000al72", "mag": 2.9, "time": 1504858190760, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -169.2139, 52.5352, 91.97 ] } },
+ { "type": "Feature", "properties": { "id": "uu60239137", "mag": 1.54, "time": 1504858110210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -110.647, 44.396167, 2.58 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arui", "mag": 4.2, "time": 1504858026090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4738, 14.8297, 45.65 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahyr", "mag": 4.3, "time": 1504857969210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -95.0003, 15.7457, 35.1 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arul", "mag": 4.3, "time": 1504857669250, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.801, 14.8524, 28.84 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahyk", "mag": 4.5, "time": 1504857596840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7758, 15.5339, 42.45 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604180", "mag": 1.2, "time": 1504857534482, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.0136, 37.3074, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821856", "mag": 1.2, "time": 1504857418267, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -157.4697, 58.6313, 13.4 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604280", "mag": 1.0, "time": 1504857267736, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -119.7805, 38.6696, 7.4 ] } },
+ { "type": "Feature", "properties": { "id": "us2000aruq", "mag": 4.3, "time": 1504857079940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.6759, 15.5537, 36.84 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahyf", "mag": 3.2, "time": 1504857069370, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4101, 42.5653, 6.35 ] } },
+ { "type": "Feature", "properties": { "id": "ci37757631", "mag": 1.01, "time": 1504856868740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -117.778, 36.031333, 2.15 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay0x", "mag": 4.1, "time": 1504856777400, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7738, 15.4661, 38.21 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821855", "mag": 1.3, "time": 1504856435979, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.538, 63.3273, 125.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahy9", "mag": 4.4, "time": 1504856316640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.6365, 15.5777, 47.53 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahy5", "mag": 3.2, "time": 1504855878650, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.446, 42.6598, 6.58 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahy6", "mag": 4.4, "time": 1504855839640, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7956, 15.6082, 34.65 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arrn", "mag": 4.1, "time": 1504855556590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.2068, 15.1108, 51.65 ] } },
+ { "type": "Feature", "properties": { "id": "us2000al71", "mag": 3.0, "time": 1504855456090, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -164.0677, 53.8832, 50.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16778144", "mag": 3.2, "time": 1504855447301, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -135.611, 66.2631, 33.8 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arri", "mag": 4.2, "time": 1504855233030, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.9743, 15.126, 35.68 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888356", "mag": 1.89, "time": 1504854775740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -121.3305, 41.068, 11.84 ] } },
+ { "type": "Feature", "properties": { "id": "mb80253029", "mag": 1.45, "time": 1504854704970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.500667, 45.881, 8.81 ] } },
+ { "type": "Feature", "properties": { "id": "ak16778123", "mag": 2.3, "time": 1504854630925, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -142.7701, 57.7458, 12.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888351", "mag": 1.26, "time": 1504854591960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.882167, 37.522833, -2.2 ] } },
+ { "type": "Feature", "properties": { "id": "hv61901091", "mag": 1.09, "time": 1504854245900, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.447167, 19.4775, 2.47 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay45", "mag": 4.2, "time": 1504854208800, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7971, 14.6019, 44.25 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahxm", "mag": 4.2, "time": 1504854069790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.8774, 14.8705, 34.98 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay43", "mag": 4.1, "time": 1504853757100, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.8976, 15.4459, 61.28 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahxh", "mag": 3.6, "time": 1504853614760, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -104.9507, 36.9956, 6.27 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821851", "mag": 1.1, "time": 1504853435000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.2544, 63.717, 83.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888336", "mag": 0.98, "time": 1504853065280, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.982833, 37.5425, 1.67 ] } },
+ { "type": "Feature", "properties": { "id": "ak16777966", "mag": 1.3, "time": 1504853023023, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -148.715, 63.9895, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arut", "mag": 4.2, "time": 1504852684440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.2381, 15.5108, 43.98 ] } },
+ { "type": "Feature", "properties": { "id": "ci37757623", "mag": 0.96, "time": 1504852586240, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.789, 33.501333, 5.44 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arr6", "mag": 4.2, "time": 1504852477520, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.3508, 15.2654, 45.29 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888331", "mag": 1.19, "time": 1504852408190, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.736, 38.759167, 1.73 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arr7", "mag": 4.0, "time": 1504852398530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.7954, 14.8479, 70.92 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604169", "mag": 1.2, "time": 1504852379590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.2104, 36.4921, 0.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahxc", "mag": 4.7, "time": 1504852332790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 3.8455, 72.6309, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888321", "mag": 1.8, "time": 1504852052730, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.8065, 38.792167, 2.94 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahx3", "mag": 4.3, "time": 1504851979140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.627, 15.4476, 46.76 ] } },
+ { "type": "Feature", "properties": { "id": "ak16777937", "mag": 2.1, "time": 1504851258875, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.4392, 60.165, 78.3 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arr1", "mag": 4.3, "time": 1504851196580, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.9103, 15.3461, 69.88 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821848", "mag": 1.5, "time": 1504851158790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -152.7947, 60.1163, 106.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahwt", "mag": 4.6, "time": 1504850928420, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5535, 15.437, 48.5 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arr4", "mag": 4.3, "time": 1504850711370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.9041, 15.1749, 40.34 ] } },
+ { "type": "Feature", "properties": { "id": "ak16777931", "mag": 1.3, "time": 1504850655355, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -156.0257, 67.0569, 3.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arr2", "mag": 4.2, "time": 1504850627530, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -95.1989, 15.0884, 40.99 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arrk", "mag": 4.2, "time": 1504850557880, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7531, 15.4362, 36.4 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888301", "mag": 1.87, "time": 1504850251760, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.802333, 38.820667, 3.26 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahwk", "mag": 4.6, "time": 1504850223990, "felt": 0, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.1219, 15.2941, 54.75 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahx1", "mag": 4.3, "time": 1504850059440, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.9647, 15.304, 72.81 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay3u", "mag": 4.2, "time": 1504849825570, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.712, 15.4284, 47.14 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888296", "mag": 1.15, "time": 1504849761840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.800667, 38.847667, 0.54 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay3t", "mag": 4.4, "time": 1504849737970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.8795, 15.668, 47.2 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888271", "mag": 1.56, "time": 1504849628820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.8005, 38.846333, 0.64 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888266", "mag": 1.02, "time": 1504849513230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.801666, 38.847332, 0.61 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahw5", "mag": 5.0, "time": 1504849467850, "felt": 1, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.7228, 15.5333, 34.69 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arr3", "mag": 4.3, "time": 1504849426720, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.0216, 15.4454, 53.87 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888261", "mag": 0.99, "time": 1504849348500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.761002, 38.832501, 0.49 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604165", "mag": 2.1, "time": 1504849234193, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -114.9828, 37.2854, 2.6 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arr0", "mag": 4.9, "time": 1504849156050, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.9438, 15.1471, 68.27 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay3s", "mag": 4.7, "time": 1504849019590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.8391, 15.6629, 60.73 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arux", "mag": 5.1, "time": 1504848867960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.0987, 14.9089, 42.35 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai3y", "mag": 2.5, "time": 1504848837100, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -98.4714, 36.5024, 6.91 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahvy", "mag": 5.2, "time": 1504848817820, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.4082, 15.2843, 45.81 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arqy", "mag": 4.6, "time": 1504848547140, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.9331, 15.1504, 39.51 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888241", "mag": 1.03, "time": 1504848340890, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.800835, 38.847832, 0.49 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahvs", "mag": 5.2, "time": 1504848276840, "felt": 3, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5946, 15.2029, 49.18 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888226", "mag": 1.48, "time": 1504848105550, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.802, 38.848167, 0.48 ] } },
+ { "type": "Feature", "properties": { "id": "nn00604164", "mag": 1.9, "time": 1504848096515, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -115.8669, 37.2911, 8.9 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ay3q", "mag": 4.8, "time": 1504848059390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.6096, 15.9617, 41.51 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahvc", "mag": 5.3, "time": 1504847863090, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.5672, 15.5726, 51.13 ] } },
+ { "type": "Feature", "properties": { "id": "nc71107624", "mag": 2.16, "time": 1504847827370, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.752167, 39.287167, 10.78 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888211", "mag": 1.01, "time": 1504847761210, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.765663, 38.848667, 6.01 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888201", "mag": 1.17, "time": 1504847709790, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.80883, 38.829666, 0.99 ] } },
+ { "type": "Feature", "properties": { "id": "pr2017251000", "mag": 3.73, "time": 1504847643290, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -68.2905, 19.3283, 52.0 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arqw", "mag": 4.8, "time": 1504847625230, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -93.8789, 15.4565, 61.03 ] } },
+ { "type": "Feature", "properties": { "id": "us2000arqv", "mag": 5.0, "time": 1504847479550, "felt": null, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ 128.5159, 2.4289, 235.24 ] } },
+ { "type": "Feature", "properties": { "id": "nc71107629", "mag": 1.35, "time": 1504847454920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.805833, 38.815333, 2.23 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888186", "mag": 1.45, "time": 1504847378350, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.766, 38.8255, 0.39 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888181", "mag": 2.28, "time": 1504847361610, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.7555, 38.775667, 0.02 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888171", "mag": 1.83, "time": 1504847323920, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.7715, 38.817333, -0.11 ] } },
+ { "type": "Feature", "properties": { "id": "nc71107399", "mag": 1.12, "time": 1504847319000, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.771167, 38.819333, -0.31 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888156", "mag": 1.24, "time": 1504847297950, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.556, 38.807, 15.91 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888151", "mag": 1.36, "time": 1504847289840, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.806, 38.822, 1.41 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888176", "mag": 1.79, "time": 1504847279970, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.739667, 38.774, -0.49 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888146", "mag": 2.3, "time": 1504847258860, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.817833, 38.815167, 0.34 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888141", "mag": 2.42, "time": 1504847223340, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.800667, 38.83, 1.81 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahv7", "mag": 5.7, "time": 1504846893100, "felt": 26, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -94.2707, 15.1746, 35.87 ] } },
+ { "type": "Feature", "properties": { "id": "ak16777708", "mag": 1.1, "time": 1504846594461, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -151.0631, 61.4229, 6.8 ] } },
+ { "type": "Feature", "properties": { "id": "mb80252994", "mag": 1.72, "time": 1504846249390, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -112.541833, 46.857167, 12.55 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahv0", "mag": 8.1, "time": 1504846160000, "felt": 2494, "tsunami": 1 }, "geometry": { "type": "Point", "coordinates": [ -93.9067, 15.0356, 56.67 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ai6a", "mag": 2.5, "time": 1504846040410, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -163.4753, 53.7845, 22.98 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888131", "mag": 1.2, "time": 1504845594500, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.8105, 37.463833, -1.37 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821844", "mag": 2.0, "time": 1504845256450, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 178.621, 51.2706, 13.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci37757591", "mag": 1.24, "time": 1504844674340, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.899167, 34.321833, 9.91 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821842", "mag": 2.0, "time": 1504843966513, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ 179.0405, 51.3724, 44.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821841", "mag": 2.4, "time": 1504843627204, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -165.0538, 52.2197, 10.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821840", "mag": 1.4, "time": 1504843458180, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7807, 61.7731, 61.9 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821839", "mag": 1.1, "time": 1504843388032, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -149.5616, 61.4081, 45.5 ] } },
+ { "type": "Feature", "properties": { "id": "ak16777570", "mag": 1.9, "time": 1504843130740, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -173.812, 51.8664, 11.6 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821837", "mag": 1.7, "time": 1504843122073, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.717, 58.7435, 117.7 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821836", "mag": 1.3, "time": 1504842507708, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.7323, 60.5323, 52.2 ] } },
+ { "type": "Feature", "properties": { "id": "ci37757551", "mag": 1.47, "time": 1504841647940, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -116.7945, 33.496333, 3.33 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahus", "mag": 4.7, "time": 1504841042960, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -169.0592, 52.1619, 10.0 ] } },
+ { "type": "Feature", "properties": { "id": "ak16777419", "mag": 1.0, "time": 1504839731548, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -153.81, 64.7157, 15.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16777418", "mag": 2.4, "time": 1504839437977, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -174.7414, 52.1837, 13.2 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821832", "mag": 2.4, "time": 1504839217735, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -169.2407, 52.3318, 38.5 ] } },
+ { "type": "Feature", "properties": { "id": "hv61900746", "mag": 2.1, "time": 1504839173590, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -154.978833, 19.772, 43.163 ] } },
+ { "type": "Feature", "properties": { "id": "ismpkansas70234763", "mag": 1.85, "time": 1504838718270, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.887167, 37.203, 6.15 ] } },
+ { "type": "Feature", "properties": { "id": "ci37757519", "mag": 1.49, "time": 1504838267430, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -118.945167, 34.213667, 19.49 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahub", "mag": 4.3, "time": 1504837583700, "felt": 823, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -97.683, 36.6996, 6.073 ] } },
+ { "type": "Feature", "properties": { "id": "ak16777416", "mag": 1.3, "time": 1504836895690, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -150.6982, 63.5777, 11.7 ] } },
+ { "type": "Feature", "properties": { "id": "uw61304877", "mag": 1.15, "time": 1504836765080, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.568333, 48.699167, 3.29 ] } },
+ { "type": "Feature", "properties": { "id": "us2000ahu8", "mag": 3.7, "time": 1504836433340, "felt": 2, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -111.4569, 42.6238, 5.0 ] } },
+ { "type": "Feature", "properties": { "id": "nc72888096", "mag": 2.03, "time": 1504835142230, "felt": 4, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -122.053667, 37.835167, 7.59 ] } },
+ { "type": "Feature", "properties": { "id": "ak16821829", "mag": 1.5, "time": 1504834613166, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -163.7652, 67.5597, 6.1 ] } },
+ { "type": "Feature", "properties": { "id": "hv61900626", "mag": 2.91, "time": 1504833891990, "felt": null, "tsunami": 0 }, "geometry": { "type": "Point", "coordinates": [ -155.011833, 19.399333, 2.609 ] } }
+ ]
+ }
\ No newline at end of file
diff --git a/stories/MapAdaptor/components/images/layers.svg b/stories/MapAdaptor/components/images/layers.svg
new file mode 100644
index 0000000000..615f4172d7
--- /dev/null
+++ b/stories/MapAdaptor/components/images/layers.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/stories/MapAdaptor/components/pointImage.tsx b/stories/MapAdaptor/components/pointImage.tsx
new file mode 100644
index 0000000000..a9d4cdd306
--- /dev/null
+++ b/stories/MapAdaptor/components/pointImage.tsx
@@ -0,0 +1,79 @@
+import '!style-loader!css-loader!./css/l7.css';
+import { Marker, Popup, Scale, Zoom } from '@l7/component';
+import { Point } from '@l7/layers';
+import { Scene } from '@l7/scene';
+import * as React from 'react';
+import data from './data.json';
+export default class PointImage extends React.Component {
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ this.scene.destroy();
+ }
+
+ public componentDidMount() {
+ const scene = new Scene({
+ center: [120.19382669582967, 30.258134],
+ id: 'map',
+ pitch: 0,
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/dark-v10',
+ zoom: 1,
+ });
+ scene.addImage(
+ '00',
+ 'https://gw.alipayobjects.com/mdn/antv_site/afts/img/A*kzTMQqS2QdUAAAAAAAAAAABkARQnAQ',
+ );
+ const pointLayer = new Point({});
+
+ // console.log(zoomControl);
+ //
+ pointLayer
+ .source(data)
+ // .color('blue')
+ .shape('00')
+ .size(40);
+ scene.addLayer(pointLayer);
+ scene.render();
+ scene.on('loaded', () => {
+ const zoomControl = new Zoom({
+ position: 'bottomright',
+ });
+ const scaleControl = new Scale();
+ const popup = new Popup({
+ offsets: [0, 20],
+ })
+ .setLnglat({
+ lng: 120.19382669582967,
+ lat: 30.258134,
+ })
+ .setText('hello')
+ .addTo(scene);
+
+ const maker = new Marker();
+ maker
+ .setLnglat({
+ lng: 120.19382669582967,
+ lat: 30.258134,
+ })
+ .addTo(scene);
+ scene.addControl(zoomControl);
+ scene.addControl(scaleControl);
+ });
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/MultiPassRenderer/MultiPassRenderer.stories.tsx b/stories/MultiPassRenderer/MultiPassRenderer.stories.tsx
new file mode 100644
index 0000000000..f29a258afc
--- /dev/null
+++ b/stories/MultiPassRenderer/MultiPassRenderer.stories.tsx
@@ -0,0 +1,18 @@
+import { storiesOf } from '@storybook/react';
+import * as React from 'react';
+import Blur from './components/Blur';
+import ColorHalftone from './components/ColorHalftone';
+import HexagonalPixelate from './components/HexagonalPixelate';
+import Ink from './components/Ink';
+import Noise from './components/Noise';
+import Sepia from './components/Sepia';
+import TAA from './components/TAA';
+// @ts-ignore
+storiesOf('MultiPassRenderer', module)
+ .add('ColorHalftone', () => )
+ .add('HexagonalPixelate', () => )
+ .add('Ink', () => )
+ .add('Blur', () => )
+ .add('Noise', () => )
+ .add('Sepia', () => )
+ .add('TAA(Temporal Anti-Aliasing)', () => );
diff --git a/stories/MultiPassRenderer/components/Blur.tsx b/stories/MultiPassRenderer/components/Blur.tsx
new file mode 100644
index 0000000000..47bbeaebba
--- /dev/null
+++ b/stories/MultiPassRenderer/components/Blur.tsx
@@ -0,0 +1,131 @@
+// @ts-ignore
+import { PolygonLayer } from '@l7/layers';
+// @ts-ignore
+import { Scene } from '@l7/scene';
+import * as dat from 'dat.gui';
+import * as React from 'react';
+
+export default class Mapbox extends React.Component {
+ private gui: dat.GUI;
+ private $stats: Node;
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ if (this.gui) {
+ this.gui.destroy();
+ }
+ if (this.$stats) {
+ document.body.removeChild(this.$stats);
+ }
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d2e0e930-fd44-4fca-8872-c1037b0fee7b.json',
+ );
+ const data = await response.json();
+ const scene = new Scene({
+ id: 'map',
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/streets-v9',
+ center: [110.19382669582967, 50.258134],
+ pitch: 0,
+ zoom: 3,
+ });
+ const layer = new PolygonLayer({
+ enablePicking: true,
+ enableHighlight: true,
+ passes: [
+ [
+ 'blurH',
+ {
+ blurRadius: 8,
+ },
+ ],
+ [
+ 'blurV',
+ {
+ blurRadius: 8,
+ },
+ ],
+ ],
+ });
+
+ layer
+ .source(data)
+ .size('name', [0, 10000, 50000, 30000, 100000])
+ .color('name', [
+ '#2E8AE6',
+ '#69D1AB',
+ '#DAF291',
+ '#FFD591',
+ '#FF7A45',
+ '#CF1D49',
+ ])
+ .shape('fill')
+ .style({
+ opacity: 0.8,
+ });
+
+ scene.addLayer(layer);
+ scene.render();
+
+ this.scene = scene;
+
+ /*** 运行时修改样式属性 ***/
+ const gui = new dat.GUI();
+ this.gui = gui;
+ const styleOptions = {
+ blurVRadius: 8,
+ blurHRadius: 8,
+ };
+ const pointFolder = gui.addFolder('Blur 配置');
+ pointFolder
+ .add(styleOptions, 'blurVRadius', 0, 100)
+ .onChange((blurRadius: number) => {
+ layer.style({
+ passes: [
+ [
+ 'blurV',
+ {
+ blurRadius,
+ },
+ ],
+ ],
+ });
+ scene.render();
+ });
+ pointFolder
+ .add(styleOptions, 'blurHRadius', 0, 100)
+ .onChange((blurRadius: number) => {
+ layer.style({
+ passes: [
+ [
+ 'blurH',
+ {
+ blurRadius,
+ },
+ ],
+ ],
+ });
+ scene.render();
+ });
+ pointFolder.open();
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/MultiPassRenderer/components/ColorHalftone.tsx b/stories/MultiPassRenderer/components/ColorHalftone.tsx
new file mode 100644
index 0000000000..7cf2f6c101
--- /dev/null
+++ b/stories/MultiPassRenderer/components/ColorHalftone.tsx
@@ -0,0 +1,153 @@
+// @ts-ignore
+import { PolygonLayer } from '@l7/layers';
+// @ts-ignore
+import { Scene } from '@l7/scene';
+import * as dat from 'dat.gui';
+import * as React from 'react';
+
+export default class ColorHalftone extends React.Component {
+ private gui: dat.GUI;
+ private $stats: Node;
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ if (this.gui) {
+ this.gui.destroy();
+ }
+ if (this.$stats) {
+ document.body.removeChild(this.$stats);
+ }
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d2e0e930-fd44-4fca-8872-c1037b0fee7b.json',
+ );
+ const data = await response.json();
+ const scene = new Scene({
+ id: 'map',
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/streets-v9',
+ center: [110.19382669582967, 50.258134],
+ pitch: 0,
+ zoom: 3,
+ });
+ const layer = new PolygonLayer({
+ enablePicking: true,
+ enableHighlight: true,
+ passes: [
+ [
+ 'colorHalftone',
+ {
+ size: 8,
+ },
+ ],
+ ],
+ });
+
+ layer
+ .source(data)
+ .size('name', [0, 10000, 50000, 30000, 100000])
+ .color('name', [
+ '#2E8AE6',
+ '#69D1AB',
+ '#DAF291',
+ '#FFD591',
+ '#FF7A45',
+ '#CF1D49',
+ ])
+ .shape('fill')
+ .style({
+ opacity: 0.8,
+ });
+
+ scene.addLayer(layer);
+ scene.render();
+
+ this.scene = scene;
+
+ /*** 运行时修改样式属性 ***/
+ const gui = new dat.GUI();
+ this.gui = gui;
+ const styleOptions = {
+ angle: 0,
+ size: 8,
+ centerX: 0.5,
+ centerY: 0.5,
+ };
+ const pointFolder = gui.addFolder('ColorHalftone 配置');
+ pointFolder
+ .add(styleOptions, 'centerX', 0, 1)
+ .onChange((centerX: number) => {
+ layer.style({
+ passes: [
+ [
+ 'colorHalftone',
+ {
+ center: [centerX, styleOptions.centerY],
+ },
+ ],
+ ],
+ });
+ scene.render();
+ });
+ pointFolder
+ .add(styleOptions, 'centerY', 0, 1)
+ .onChange((centerY: number) => {
+ layer.style({
+ passes: [
+ [
+ 'colorHalftone',
+ {
+ center: [styleOptions.centerX, centerY],
+ },
+ ],
+ ],
+ });
+ scene.render();
+ });
+ pointFolder.add(styleOptions, 'angle', 0, 10).onChange((angle: number) => {
+ layer.style({
+ passes: [
+ [
+ 'colorHalftone',
+ {
+ angle,
+ },
+ ],
+ ],
+ });
+ scene.render();
+ });
+ pointFolder.add(styleOptions, 'size', 0, 20).onChange((size: number) => {
+ layer.style({
+ passes: [
+ [
+ 'colorHalftone',
+ {
+ size,
+ },
+ ],
+ ],
+ });
+ scene.render();
+ });
+ pointFolder.open();
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/MultiPassRenderer/components/HexagonalPixelate.tsx b/stories/MultiPassRenderer/components/HexagonalPixelate.tsx
new file mode 100644
index 0000000000..8303d798b3
--- /dev/null
+++ b/stories/MultiPassRenderer/components/HexagonalPixelate.tsx
@@ -0,0 +1,139 @@
+// @ts-ignore
+import { PolygonLayer } from '@l7/layers';
+// @ts-ignore
+import { Scene } from '@l7/scene';
+import * as dat from 'dat.gui';
+import * as React from 'react';
+
+export default class HexagonalPixelate extends React.Component {
+ private gui: dat.GUI;
+ private $stats: Node;
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ if (this.gui) {
+ this.gui.destroy();
+ }
+ if (this.$stats) {
+ document.body.removeChild(this.$stats);
+ }
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d2e0e930-fd44-4fca-8872-c1037b0fee7b.json',
+ );
+ const data = await response.json();
+ const scene = new Scene({
+ id: 'map',
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/streets-v9',
+ center: [110.19382669582967, 50.258134],
+ pitch: 0,
+ zoom: 3,
+ });
+ const layer = new PolygonLayer({
+ enablePicking: true,
+ enableHighlight: true,
+ passes: [
+ [
+ 'hexagonalPixelate',
+ {
+ scale: 10,
+ },
+ ],
+ ],
+ });
+
+ layer
+ .source(data)
+ .size('name', [0, 10000, 50000, 30000, 100000])
+ .color('name', [
+ '#2E8AE6',
+ '#69D1AB',
+ '#DAF291',
+ '#FFD591',
+ '#FF7A45',
+ '#CF1D49',
+ ])
+ .shape('fill')
+ .style({
+ opacity: 0.8,
+ });
+
+ scene.addLayer(layer);
+ scene.render();
+
+ this.scene = scene;
+
+ /*** 运行时修改样式属性 ***/
+ const gui = new dat.GUI();
+ this.gui = gui;
+ const styleOptions = {
+ scale: 10,
+ centerX: 0.5,
+ centerY: 0.5,
+ };
+ const pointFolder = gui.addFolder('HexagonalPixelate 配置');
+ pointFolder
+ .add(styleOptions, 'centerX', 0, 1)
+ .onChange((centerX: number) => {
+ layer.style({
+ passes: [
+ [
+ 'hexagonalPixelate',
+ {
+ center: [centerX, styleOptions.centerY],
+ },
+ ],
+ ],
+ });
+ scene.render();
+ });
+ pointFolder
+ .add(styleOptions, 'centerY', 0, 1)
+ .onChange((centerY: number) => {
+ layer.style({
+ passes: [
+ [
+ 'hexagonalPixelate',
+ {
+ center: [styleOptions.centerX, centerY],
+ },
+ ],
+ ],
+ });
+ scene.render();
+ });
+ pointFolder.add(styleOptions, 'scale', 0, 50).onChange((scale: number) => {
+ layer.style({
+ passes: [
+ [
+ 'hexagonalPixelate',
+ {
+ scale,
+ },
+ ],
+ ],
+ });
+ scene.render();
+ });
+ pointFolder.open();
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/MultiPassRenderer/components/Ink.tsx b/stories/MultiPassRenderer/components/Ink.tsx
new file mode 100644
index 0000000000..29723c9412
--- /dev/null
+++ b/stories/MultiPassRenderer/components/Ink.tsx
@@ -0,0 +1,109 @@
+// @ts-ignore
+import { PolygonLayer } from '@l7/layers';
+// @ts-ignore
+import { Scene } from '@l7/scene';
+import * as dat from 'dat.gui';
+import * as React from 'react';
+
+export default class Ink extends React.Component {
+ private gui: dat.GUI;
+ private $stats: Node;
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ if (this.gui) {
+ this.gui.destroy();
+ }
+ if (this.$stats) {
+ document.body.removeChild(this.$stats);
+ }
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d2e0e930-fd44-4fca-8872-c1037b0fee7b.json',
+ );
+ const data = await response.json();
+ const scene = new Scene({
+ id: 'map',
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/streets-v9',
+ center: [110.19382669582967, 50.258134],
+ pitch: 0,
+ zoom: 3,
+ });
+ const layer = new PolygonLayer({
+ enablePicking: true,
+ enableHighlight: true,
+ passes: [
+ [
+ 'ink',
+ {
+ strength: 0.6,
+ },
+ ],
+ ],
+ });
+
+ layer
+ .source(data)
+ .size('name', [0, 10000, 50000, 30000, 100000])
+ .color('name', [
+ '#2E8AE6',
+ '#69D1AB',
+ '#DAF291',
+ '#FFD591',
+ '#FF7A45',
+ '#CF1D49',
+ ])
+ .shape('fill')
+ .style({
+ opacity: 0.8,
+ });
+
+ scene.addLayer(layer);
+ scene.render();
+
+ this.scene = scene;
+
+ /*** 运行时修改样式属性 ***/
+ const gui = new dat.GUI();
+ this.gui = gui;
+ const styleOptions = {
+ strength: 0.6,
+ };
+ const pointFolder = gui.addFolder('Ink 配置');
+ pointFolder
+ .add(styleOptions, 'strength', 0, 1)
+ .onChange((strength: number) => {
+ layer.style({
+ passes: [
+ [
+ 'ink',
+ {
+ strength,
+ },
+ ],
+ ],
+ });
+ scene.render();
+ });
+ pointFolder.open();
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/MultiPassRenderer/components/Noise.tsx b/stories/MultiPassRenderer/components/Noise.tsx
new file mode 100644
index 0000000000..7bb0df1d59
--- /dev/null
+++ b/stories/MultiPassRenderer/components/Noise.tsx
@@ -0,0 +1,100 @@
+// @ts-ignore
+import { PolygonLayer } from '@l7/layers';
+// @ts-ignore
+import { Scene } from '@l7/scene';
+import * as dat from 'dat.gui';
+import * as React from 'react';
+
+export default class Noise extends React.Component {
+ private gui: dat.GUI;
+ private $stats: Node;
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ if (this.gui) {
+ this.gui.destroy();
+ }
+ if (this.$stats) {
+ document.body.removeChild(this.$stats);
+ }
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d2e0e930-fd44-4fca-8872-c1037b0fee7b.json',
+ );
+ const data = await response.json();
+ const scene = new Scene({
+ id: 'map',
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/streets-v9',
+ center: [110.19382669582967, 50.258134],
+ pitch: 0,
+ zoom: 3,
+ });
+ const layer = new PolygonLayer({
+ enablePicking: true,
+ enableHighlight: true,
+ passes: ['noise'],
+ });
+
+ layer
+ .source(data)
+ .size('name', [0, 10000, 50000, 30000, 100000])
+ .color('name', [
+ '#2E8AE6',
+ '#69D1AB',
+ '#DAF291',
+ '#FFD591',
+ '#FF7A45',
+ '#CF1D49',
+ ])
+ .shape('fill')
+ .style({
+ opacity: 0.8,
+ });
+
+ scene.addLayer(layer);
+ scene.render();
+
+ this.scene = scene;
+
+ /*** 运行时修改样式属性 ***/
+ const gui = new dat.GUI();
+ this.gui = gui;
+ const styleOptions = {
+ amount: 1,
+ };
+ const pointFolder = gui.addFolder('Noise 配置');
+ pointFolder.add(styleOptions, 'amount', 0, 1).onChange((amount: number) => {
+ layer.style({
+ passes: [
+ [
+ 'noise',
+ {
+ amount,
+ },
+ ],
+ ],
+ });
+ scene.render();
+ });
+ pointFolder.open();
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/MultiPassRenderer/components/Sepia.tsx b/stories/MultiPassRenderer/components/Sepia.tsx
new file mode 100644
index 0000000000..fe859f8a42
--- /dev/null
+++ b/stories/MultiPassRenderer/components/Sepia.tsx
@@ -0,0 +1,100 @@
+// @ts-ignore
+import { PolygonLayer } from '@l7/layers';
+// @ts-ignore
+import { Scene } from '@l7/scene';
+import * as dat from 'dat.gui';
+import * as React from 'react';
+
+export default class Sepia extends React.Component {
+ private gui: dat.GUI;
+ private $stats: Node;
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ if (this.gui) {
+ this.gui.destroy();
+ }
+ if (this.$stats) {
+ document.body.removeChild(this.$stats);
+ }
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d2e0e930-fd44-4fca-8872-c1037b0fee7b.json',
+ );
+ const data = await response.json();
+ const scene = new Scene({
+ id: 'map',
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/streets-v9',
+ center: [110.19382669582967, 50.258134],
+ pitch: 0,
+ zoom: 3,
+ });
+ const layer = new PolygonLayer({
+ enablePicking: true,
+ enableHighlight: true,
+ passes: ['sepia'],
+ });
+
+ layer
+ .source(data)
+ .size('name', [0, 10000, 50000, 30000, 100000])
+ .color('name', [
+ '#2E8AE6',
+ '#69D1AB',
+ '#DAF291',
+ '#FFD591',
+ '#FF7A45',
+ '#CF1D49',
+ ])
+ .shape('fill')
+ .style({
+ opacity: 0.8,
+ });
+
+ scene.addLayer(layer);
+ scene.render();
+
+ this.scene = scene;
+
+ /*** 运行时修改样式属性 ***/
+ const gui = new dat.GUI();
+ this.gui = gui;
+ const styleOptions = {
+ amount: 0.5,
+ };
+ const pointFolder = gui.addFolder('Sepia 配置');
+ pointFolder.add(styleOptions, 'amount', 0, 1).onChange((amount: number) => {
+ layer.style({
+ passes: [
+ [
+ 'sepia',
+ {
+ amount,
+ },
+ ],
+ ],
+ });
+ scene.render();
+ });
+ pointFolder.open();
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/MultiPassRenderer/components/TAA.tsx b/stories/MultiPassRenderer/components/TAA.tsx
new file mode 100644
index 0000000000..5c9ed0677b
--- /dev/null
+++ b/stories/MultiPassRenderer/components/TAA.tsx
@@ -0,0 +1,105 @@
+// @ts-ignore
+import { PolygonLayer } from '@l7/layers';
+// @ts-ignore
+import { Scene } from '@l7/scene';
+import * as dat from 'dat.gui';
+import * as React from 'react';
+
+export default class TAA extends React.Component {
+ private gui: dat.GUI;
+ private $stats: Node;
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ if (this.gui) {
+ this.gui.destroy();
+ }
+ if (this.$stats) {
+ document.body.removeChild(this.$stats);
+ }
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d2e0e930-fd44-4fca-8872-c1037b0fee7b.json',
+ );
+ const data = await response.json();
+ const scene = new Scene({
+ id: 'map',
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/streets-v9',
+ center: [110.19382669582967, 50.258134],
+ pitch: 0,
+ zoom: 3,
+ });
+ const layer = new PolygonLayer({
+ enablePicking: true,
+ enableHighlight: true,
+ enableTAA: true,
+ jitterScale: 1,
+ // passes: [
+ // 'blurH',
+ // [
+ // 'blurV',
+ // {
+ // blurRadius: 8,
+ // },
+ // ],
+ // ],
+ });
+
+ layer
+ .source(data)
+ .size('name', [0, 10000, 50000, 30000, 100000])
+ .color('name', [
+ '#2E8AE6',
+ '#69D1AB',
+ '#DAF291',
+ '#FFD591',
+ '#FF7A45',
+ '#CF1D49',
+ ])
+ .shape('fill')
+ .style({
+ opacity: 0.8,
+ });
+
+ scene.addLayer(layer);
+ scene.render();
+
+ this.scene = scene;
+
+ /*** 运行时修改样式属性 ***/
+ const gui = new dat.GUI();
+ this.gui = gui;
+ const styleOptions = {
+ jitterScale: 1,
+ };
+ const pointFolder = gui.addFolder('TAA 配置');
+ pointFolder
+ .add(styleOptions, 'jitterScale', 0, 100)
+ .onChange((jitterScale: number) => {
+ layer.style({
+ jitterScale,
+ });
+ scene.render();
+ });
+ pointFolder.open();
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/Picking/Picking.stories.tsx b/stories/Picking/Picking.stories.tsx
new file mode 100644
index 0000000000..fca22b2492
--- /dev/null
+++ b/stories/Picking/Picking.stories.tsx
@@ -0,0 +1,10 @@
+import { storiesOf } from '@storybook/react';
+import * as React from 'react';
+import AdvancedAPI from './components/AdvancedAPI';
+import Highlight from './components/Highlight';
+import Tooltip from './components/Tooltip';
+// @ts-ignore
+storiesOf('交互', module)
+ .add('拾取 & 高亮', () => )
+ .add('拾取 & Tooltip', () => )
+ .add('高级拾取 API', () => );
diff --git a/stories/Picking/components/AdvancedAPI.tsx b/stories/Picking/components/AdvancedAPI.tsx
new file mode 100644
index 0000000000..1a99de0db4
--- /dev/null
+++ b/stories/Picking/components/AdvancedAPI.tsx
@@ -0,0 +1,120 @@
+// @ts-ignore
+import { PolygonLayer } from '@l7/layers';
+// @ts-ignore
+import { Scene } from '@l7/scene';
+import * as dat from 'dat.gui';
+import * as React from 'react';
+
+export default class AdvancedAPI extends React.Component {
+ private gui: dat.GUI;
+ private $stats: Node;
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ if (this.gui) {
+ this.gui.destroy();
+ }
+ if (this.$stats) {
+ document.body.removeChild(this.$stats);
+ }
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d2e0e930-fd44-4fca-8872-c1037b0fee7b.json',
+ );
+ const scene = new Scene({
+ id: 'map',
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/streets-v9',
+ center: [110.19382669582967, 50.258134],
+ pitch: 0,
+ zoom: 3,
+ });
+ const layer = new PolygonLayer({
+ enablePicking: true,
+ enableHighlight: true,
+ highlightColor: [0, 0, 1, 1],
+ onHover: (pickedFeature) => {
+ // tslint:disable-next-line:no-console
+ console.log(pickedFeature);
+ },
+ });
+
+ layer
+ .source(await response.json())
+ .size('name', [0, 10000, 50000, 30000, 100000])
+ .color('name', [
+ '#2E8AE6',
+ '#69D1AB',
+ '#DAF291',
+ '#FFD591',
+ '#FF7A45',
+ '#CF1D49',
+ ])
+ .shape('fill')
+ .style({
+ opacity: 0.8,
+ });
+ scene.addLayer(layer);
+ scene.render();
+
+ this.scene = scene;
+
+ /*** 运行时修改样式属性 ***/
+ const gui = new dat.GUI();
+ this.gui = gui;
+ const styleOptions = {
+ enablePicking: true,
+ enableHighlight: true,
+ highlightColor: [0, 0, 255],
+ pickingX: window.innerWidth / 2,
+ pickingY: window.innerHeight / 2,
+ };
+ const pointFolder = gui.addFolder('非鼠标 hover 交互');
+ pointFolder
+ .add(styleOptions, 'enableHighlight')
+ .onChange((enableHighlight: boolean) => {
+ layer.style({
+ enableHighlight,
+ });
+ scene.render();
+ });
+ pointFolder
+ .add(styleOptions, 'pickingX', 0, window.innerWidth)
+ .onChange((pickingX: number) => {
+ layer.pick({ x: pickingX, y: styleOptions.pickingY });
+ });
+ pointFolder
+ .add(styleOptions, 'pickingY', 0, window.innerHeight)
+ .onChange((pickingY: number) => {
+ layer.pick({ x: styleOptions.pickingX, y: pickingY });
+ });
+ pointFolder
+ .addColor(styleOptions, 'highlightColor')
+ .onChange((highlightColor: number[]) => {
+ const [r, g, b] = highlightColor.map((c) => c / 255);
+ layer.style({
+ highlightColor: [r, g, b, 1],
+ });
+ scene.render();
+ });
+ pointFolder.open();
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/Picking/components/Highlight.tsx b/stories/Picking/components/Highlight.tsx
new file mode 100644
index 0000000000..6c004bd8cb
--- /dev/null
+++ b/stories/Picking/components/Highlight.tsx
@@ -0,0 +1,117 @@
+// @ts-ignore
+import { PolygonLayer } from '@l7/layers';
+// @ts-ignore
+import { Scene } from '@l7/scene';
+import * as dat from 'dat.gui';
+import * as React from 'react';
+
+export default class Highlight extends React.Component {
+ private gui: dat.GUI;
+ private $stats: Node;
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ if (this.gui) {
+ this.gui.destroy();
+ }
+ if (this.$stats) {
+ document.body.removeChild(this.$stats);
+ }
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d2e0e930-fd44-4fca-8872-c1037b0fee7b.json',
+ );
+ const scene = new Scene({
+ id: 'map',
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/streets-v9',
+ center: [110.19382669582967, 50.258134],
+ pitch: 0,
+ zoom: 3,
+ });
+ const layer = new PolygonLayer({
+ enablePicking: true,
+ enableHighlight: true,
+ highlightColor: [0, 0, 1, 1],
+ onHover: (pickedFeature) => {
+ // tslint:disable-next-line:no-console
+ // console.log(pickedFeature);
+ },
+ });
+
+ layer
+ .source(await response.json())
+ .size('name', [0, 10000, 50000, 30000, 100000])
+ .color('name', [
+ '#2E8AE6',
+ '#69D1AB',
+ '#DAF291',
+ '#FFD591',
+ '#FF7A45',
+ '#CF1D49',
+ ])
+ .shape('fill')
+ .style({
+ opacity: 1.0,
+ });
+ scene.addLayer(layer);
+ scene.render();
+ console.log(layer);
+ this.scene = scene;
+
+ /*** 运行时修改样式属性 ***/
+ const gui = new dat.GUI();
+ this.gui = gui;
+ const styleOptions = {
+ enablePicking: true,
+ enableHighlight: true,
+ highlightColor: [0, 0, 255],
+ };
+ const pointFolder = gui.addFolder('拾取 & 高亮');
+ // pointFolder
+ // .add(styleOptions, 'enablePicking')
+ // .onChange((enablePicking: boolean) => {
+ // // FIXME: 该配置项会影响到初始化阶段 PixelPickingPass 的添加,暂不支持在运行时更改
+ // layer.style({
+ // enablePicking,
+ // });
+ // scene.render();
+ // });
+ pointFolder
+ .add(styleOptions, 'enableHighlight')
+ .onChange((enableHighlight: boolean) => {
+ layer.style({
+ enableHighlight,
+ });
+ scene.render();
+ });
+ pointFolder
+ .addColor(styleOptions, 'highlightColor')
+ .onChange((highlightColor: number[]) => {
+ const [r, g, b] = highlightColor.map((c) => c / 255);
+ layer.style({
+ highlightColor: [r, g, b, 1],
+ });
+ scene.render();
+ });
+ pointFolder.open();
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/stories/Picking/components/Tooltip.tsx b/stories/Picking/components/Tooltip.tsx
new file mode 100644
index 0000000000..d833036b65
--- /dev/null
+++ b/stories/Picking/components/Tooltip.tsx
@@ -0,0 +1,71 @@
+// @ts-ignore
+import { PolygonLayer } from '@l7/layers';
+// @ts-ignore
+import { Scene } from '@l7/scene';
+import * as dat from 'dat.gui';
+import * as React from 'react';
+
+export default class Mapbox extends React.Component {
+ private scene: Scene;
+
+ public componentWillUnmount() {
+ this.scene.destroy();
+ }
+
+ public async componentDidMount() {
+ const response = await fetch(
+ 'https://gw.alipayobjects.com/os/basement_prod/d2e0e930-fd44-4fca-8872-c1037b0fee7b.json',
+ );
+ const scene = new Scene({
+ id: 'map',
+ type: 'mapbox',
+ style: 'mapbox://styles/mapbox/streets-v9',
+ center: [110.19382669582967, 50.258134],
+ pitch: 0,
+ zoom: 3,
+ });
+ const layer = new PolygonLayer({
+ enablePicking: true,
+ enableHighlight: false,
+ onHover: (pickedFeature) => {
+ // tslint:disable-next-line:no-console
+ // console.log(pickedFeature);
+ },
+ });
+
+ layer
+ .source(await response.json())
+ .size('name', [0, 10000, 50000, 30000, 100000])
+ .color('name', [
+ '#2E8AE6',
+ '#69D1AB',
+ '#DAF291',
+ '#FFD591',
+ '#FF7A45',
+ '#CF1D49',
+ ])
+ .shape('fill')
+ .style({
+ opacity: 0.8,
+ });
+ scene.addLayer(layer);
+ scene.render();
+
+ this.scene = scene;
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+}
diff --git a/tsconfig.build.json b/tsconfig.build.json
new file mode 100644
index 0000000000..6936cb3f22
--- /dev/null
+++ b/tsconfig.build.json
@@ -0,0 +1,16 @@
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "noEmit": false,
+ "emitDeclarationOnly": true,
+ "declaration": true,
+ "rootDir": "./",
+ "baseUrl": "./",
+ "paths": {
+ "@l7/*": ["packages/*/src"],
+ "*": ["node_modules", "packages"]
+ }
+ },
+ "exclude": ["**/*.story.*", "**/*.spec.*", "dist"],
+ "include": []
+}
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000000..3347c231f5
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,31 @@
+{
+ "compilerOptions": {
+ "noEmit": true,
+ "strict": true,
+ "strictPropertyInitialization": false,
+ "downlevelIteration": true,
+ "jsx": "react",
+ "target": "es5",
+ "lib": ["es6", "dom"],
+ "types": ["reflect-metadata", "jest"],
+ "module": "esnext",
+ "moduleResolution": "node",
+ "esModuleInterop": true,
+ "experimentalDecorators": true,
+ "emitDecoratorMetadata": true,
+ "resolveJsonModule": true,
+ "rootDir": "./",
+ "baseUrl": "./",
+ "paths": {
+ "@l7/*": ["packages/*/src"],
+ "*": ["node_modules", "packages"]
+ }
+ },
+ "awesomeTypescriptLoaderOptions": {
+ "useBabel": true,
+ "babelCore": "@babel/core",
+ "useCache": false
+ },
+ "include": ["packages"],
+ "exclude": ["node_modules", "packages/**/dist"],
+}
\ No newline at end of file
diff --git a/tslint.json b/tslint.json
new file mode 100644
index 0000000000..25de824011
--- /dev/null
+++ b/tslint.json
@@ -0,0 +1,24 @@
+{
+ "extends": [
+ "tslint:latest",
+ "tslint-react",
+ "tslint-plugin-prettier",
+ "tslint-config-prettier"
+ ],
+ "rules": {
+ "prettier": true,
+ "quotemark": [
+ true,
+ "single",
+ "avoid-escape",
+ "avoid-template",
+ "jsx-double"
+ ],
+ "no-bitwise": false,
+ "object-literal-sort-keys": false,
+ "no-implicit-dependencies": false
+ },
+ "globals": {
+ "AMap": true
+ }
+}
diff --git a/tslint.prod.json b/tslint.prod.json
new file mode 100644
index 0000000000..24d12a308b
--- /dev/null
+++ b/tslint.prod.json
@@ -0,0 +1,9 @@
+{
+ "extends": ["./tslint.json"],
+ "rules": {
+ "no-implicit-dependencies": true
+ },
+ "linterOptions": {
+ "exclude": ["**/*.d.ts", "**/*.{test,story}.ts{,x}"]
+ }
+}
diff --git a/tslint.test.json b/tslint.test.json
new file mode 100644
index 0000000000..f07a4a2a3c
--- /dev/null
+++ b/tslint.test.json
@@ -0,0 +1,9 @@
+{
+ "extends": ["./tslint.json"],
+ "rules": {
+ "no-implicit-dependencies": [false, "dev"]
+ },
+ "linterOptions": {
+ "exclude": ["**/*.d.ts"]
+ }
+}
\ No newline at end of file