From 2a4d48ef88c7e470edfa4e82f32a32de193fb983 Mon Sep 17 00:00:00 2001 From: navispatial <88932567+navispatial@users.noreply.github.com> Date: Tue, 16 Apr 2024 17:32:14 +0300 Subject: [PATCH] feat(geodata): support decoding GeoJSONL input on GeoJSONFeatureClient #217 --- dart/geodata/CHANGELOG.md | 3 + .../client/geojson_feature_client.dart | 50 +++++----- .../service/client/ogc_feature_client.dart | 10 +- .../lib/src/utils/feature_future_adapter.dart | 29 +++++- .../lib/src/utils/feature_http_adapter.dart | 23 +++-- dart/geodata/test/data/london.geojson | 29 ++++++ dart/geodata/test/data/london.geojsonl | 2 + .../test/geojson_feature_client_test.dart | 94 +++++++++++++++++++ .../test/usgs/summary/2.5_day.geojsonl | 37 ++++++++ 9 files changed, 234 insertions(+), 43 deletions(-) create mode 100644 dart/geodata/test/data/london.geojson create mode 100644 dart/geodata/test/data/london.geojsonl create mode 100644 dart/geodata/test/geojson_feature_client_test.dart create mode 100644 dart/geodata/test/usgs/summary/2.5_day.geojsonl diff --git a/dart/geodata/CHANGELOG.md b/dart/geodata/CHANGELOG.md index 0f2e6503..be97c436 100644 --- a/dart/geodata/CHANGELOG.md +++ b/dart/geodata/CHANGELOG.md @@ -4,6 +4,9 @@ NOTE: Version 1.1.0 currently under development (1.1.0-dev.0). +🧩 Features: +* [Support for GeoJSON Text Sequences](https://github.com/navibyte/geospatial/issues/217) + 🛠 Maintenance: * Adding trailing commas to avoid "Missing a required trailing comma" message. diff --git a/dart/geodata/lib/src/geojson/service/client/geojson_feature_client.dart b/dart/geodata/lib/src/geojson/service/client/geojson_feature_client.dart index e1e4bacb..4b51e4b9 100644 --- a/dart/geodata/lib/src/geojson/service/client/geojson_feature_client.dart +++ b/dart/geodata/lib/src/geojson/service/client/geojson_feature_client.dart @@ -1,4 +1,4 @@ -// Copyright (c) 2020-2023 Navibyte (https://navibyte.com). All rights reserved. +// Copyright (c) 2020-2024 Navibyte (https://navibyte.com). All rights reserved. // Use of this source code is governed by a “BSD-3-Clause”-style license that is // specified in the LICENSE file. // @@ -19,7 +19,7 @@ import '/src/utils/feature_future_adapter.dart'; import '/src/utils/feature_http_adapter.dart'; /// A class with static factory methods to create feature sources conforming to -/// the GeoJSON format. +/// [GeoJSON] or [GeoJSONL] formats. class GeoJSONFeatures { /// A client for accessing a `GeoJSON` data resource at [location] via http(s) /// conforming to [format]. @@ -38,9 +38,9 @@ class GeoJSONFeatures { /// overridden by the feature source implementation). /// /// When [format] is not given, then [GeoJSON] with default settings is used - /// as a default. Note that currently only GeoJSON is supported, but it's - /// possible to inject another format implementation (or with custom - /// configuration) to the default one. + /// as a default. Note that currently only [GeoJSON] and [GeoJSONL] format are + /// tested, but it's possible to inject other format implementations too (or + /// adapt formats mentioned with a custom configuration). /// /// Use [crs] to give hints (like axis order, and whether x and y must /// be swapped when read in) about coordinate reference system in text input. @@ -67,9 +67,9 @@ class GeoJSONFeatures { /// resource or other sources. Contents must be GeoJSON compliant data. /// /// When [format] is not given, then [GeoJSON] with default settings is used - /// as a default. Note that currently only GeoJSON is supported, but it's - /// possible to inject another format implementation (or with custom - /// configuration) to the default one. + /// as a default. Note that currently only [GeoJSON] and [GeoJSONL] format are + /// tested, but it's possible to inject other format implementations too (or + /// adapt formats mentioned with a custom configuration). /// /// Use [crs] to give hints (like axis order, and whether x and y must /// be swapped when read in) about coordinate reference system in text input. @@ -144,18 +144,18 @@ class _GeoJSONFeatureSource implements BasicFeatureSource { Future> itemsAllPaged({int? limit}) { final src = source; - // fetch data as JSON Object + parse GeoJSON feature or feature collection + // fetch data as text + parse GeoJSON feature collection if (src is Uri) { // read web resource and convert to entity - return adapter!.getEntityFromJsonObject( + return adapter!.getEntityFromText( src, - toEntity: (data, _) => _parseFeatureItems(limit, data, format, crs), + toEntity: (text, _) => _parseFeatureItems(limit, text, format, crs), ); } else if (src is Future Function()) { // read a future returned by a function - return readEntityFromJsonObject( + return readEntityFromText( src, - toEntity: (data) => _parseFeatureItems(limit, data, format, crs), + toEntity: (text) => _parseFeatureItems(limit, text, format, crs), ); } @@ -166,14 +166,14 @@ class _GeoJSONFeatureSource implements BasicFeatureSource { _GeoJSONPagedFeaturesItems _parseFeatureItems( int? limit, - Map data, + String text, TextReaderFormat format, CoordRefSys? crs, ) { // NOTE: get count without actually parsing the whole feature collection // get the whole collection to get count - final collection = FeatureCollection.fromData(data, format: format, crs: crs); + final collection = FeatureCollection.parse(text, format: format, crs: crs); final count = collection.features.length; // analyze if only a first set or all items should be returned @@ -187,7 +187,7 @@ _GeoJSONPagedFeaturesItems _parseFeatureItems( } // return as paged collection (paging through already fetched data) - return _GeoJSONPagedFeaturesItems.parse(format, crs, data, count, range); + return _GeoJSONPagedFeaturesItems.parse(format, crs, text, count, range); } class _GeoJSONPagedFeaturesItems with Paged { @@ -196,20 +196,20 @@ class _GeoJSONPagedFeaturesItems with Paged { this.crs, this.features, this.count, [ - this.data, + this.text, this.nextRange, ]); factory _GeoJSONPagedFeaturesItems.parse( TextReaderFormat format, CoordRefSys? crs, - Map data, + String text, int count, _Range? range, ) { // parse feature items for the range and - final collection = FeatureCollection.fromData( - data, + final collection = FeatureCollection.parse( + text, format: format, crs: crs, options: range != null @@ -234,7 +234,7 @@ class _GeoJSONPagedFeaturesItems with Paged { // return a paged result either with ref to next range or without return nextRange != null - ? _GeoJSONPagedFeaturesItems(format, crs, items, count, data, nextRange) + ? _GeoJSONPagedFeaturesItems(format, crs, items, count, text, nextRange) : _GeoJSONPagedFeaturesItems(format, crs, items, count); } @@ -244,24 +244,24 @@ class _GeoJSONPagedFeaturesItems with Paged { final FeatureItems features; final int count; - final Map? data; + final String? text; final _Range? nextRange; @override FeatureItems get current => features; @override - bool get hasNext => !(nextRange == null || data == null); + bool get hasNext => !(nextRange == null || text == null); @override Future?> next() async { - if (nextRange == null || data == null) { + if (nextRange == null || text == null) { return null; } return _GeoJSONPagedFeaturesItems.parse( format, crs, - data!, + text!, count, nextRange, ); diff --git a/dart/geodata/lib/src/ogcapi_features/service/client/ogc_feature_client.dart b/dart/geodata/lib/src/ogcapi_features/service/client/ogc_feature_client.dart index 743ae8e4..fcd889c3 100644 --- a/dart/geodata/lib/src/ogcapi_features/service/client/ogc_feature_client.dart +++ b/dart/geodata/lib/src/ogcapi_features/service/client/ogc_feature_client.dart @@ -1,9 +1,11 @@ -// Copyright (c) 2020-2023 Navibyte (https://navibyte.com). All rights reserved. +// Copyright (c) 2020-2024 Navibyte (https://navibyte.com). All rights reserved. // Use of this source code is governed by a “BSD-3-Clause”-style license that is // specified in the LICENSE file. // // Docs: https://github.com/navibyte/geospatial +import 'dart:convert'; + import 'package:geobase/common.dart'; import 'package:geobase/coordinates.dart'; import 'package:geobase/meta.dart'; @@ -157,9 +159,11 @@ class _OGCFeatureClientHttp extends OGCClientHttp implements OGCFeatureService { _cachedConformance.getAsync(() { // fetch data as JSON Object, and parse conformance classes final url = resolveSubResource(endpoint, 'conformance'); - return adapter.getEntityFromJson( + return adapter.getEntityFromText( url, - toEntity: (data, _) { + toEntity: (text, _) { + final data = json.decode(text); + if (data is Map) { // standard: root has JSON Object with "conformsTo" containing // conformance classes diff --git a/dart/geodata/lib/src/utils/feature_future_adapter.dart b/dart/geodata/lib/src/utils/feature_future_adapter.dart index 7ef0ca7f..a355d8ea 100644 --- a/dart/geodata/lib/src/utils/feature_future_adapter.dart +++ b/dart/geodata/lib/src/utils/feature_future_adapter.dart @@ -1,4 +1,4 @@ -// Copyright (c) 2020-2023 Navibyte (https://navibyte.com). All rights reserved. +// Copyright (c) 2020-2024 Navibyte (https://navibyte.com). All rights reserved. // Use of this source code is governed by a “BSD-3-Clause”-style license that is // specified in the LICENSE file. // @@ -14,14 +14,14 @@ import '/src/core/features/feature_failure.dart'; /// Maps a JSON Object read from [source] to an entity using [toEntity]. /// /// The source function returns a future that fetches data from a file, a web -/// resource or other sources. Contents must be GeoJSON compliant data. +/// resource or other sources. Content must be GeoJSON compliant data. @internal Future readEntityFromJsonObject( Future Function() source, { required T Function(Map data) toEntity, }) async { try { - // read contents as text + // read content as text final text = await source(); // decode JSON and expect a JSON Object as `Map` @@ -36,3 +36,26 @@ Future readEntityFromJsonObject( throw ServiceException(FeatureFailure.clientError, cause: e, trace: st); } } + +/// Maps text data read from [source] to an entity using [toEntity]. +/// +/// The source function returns a future that fetches data from a file, a web +/// resource or other sources. Content must be GeoJSON compliant data. +@internal +Future readEntityFromText( + Future Function() source, { + required T Function(String text) toEntity, +}) async { + try { + // read content as text + final text = await source(); + + // map text to an entity + return toEntity(text); + } on ServiceException { + rethrow; + } catch (e, st) { + // other exceptions (including errors) + throw ServiceException(FeatureFailure.clientError, cause: e, trace: st); + } +} diff --git a/dart/geodata/lib/src/utils/feature_http_adapter.dart b/dart/geodata/lib/src/utils/feature_http_adapter.dart index 5a0becae..45d70dcf 100644 --- a/dart/geodata/lib/src/utils/feature_http_adapter.dart +++ b/dart/geodata/lib/src/utils/feature_http_adapter.dart @@ -1,4 +1,4 @@ -// Copyright (c) 2020-2023 Navibyte (https://navibyte.com). All rights reserved. +// Copyright (c) 2020-2024 Navibyte (https://navibyte.com). All rights reserved. // Use of this source code is governed by a “BSD-3-Clause”-style license that is // specified in the LICENSE file. // @@ -54,21 +54,23 @@ class FeatureHttpAdapter { Map? headers = _acceptJSON, List? expect = _expectJSON, }) => - getEntityFromJson( + getEntityFromText( url, - toEntity: (data, responseHeaders) => - toEntity(data as Map, responseHeaders), + toEntity: (text, responseHeaders) { + final data = json.decode(text); + return toEntity(data as Map, responseHeaders); + }, headers: headers, expect: expect, ); /// Makes `GET` request to [url] with optional [headers]. /// - /// Returns an entity mapped from JSON element using [toEntity]. - Future getEntityFromJson( + /// Returns an entity mapped from body text using [toEntity]. + Future getEntityFromText( Uri url, { required T Function( - dynamic data, + String text, Map responseHeaders, ) toEntity, Map? headers = _acceptJSON, @@ -101,11 +103,8 @@ class FeatureHttpAdapter { } } - // decode JSON - final data = json.decode(response.body); - - // map JSON data to an entity - return toEntity(data, response.headers); + // map response body text to an entity + return toEntity(response.body, response.headers); case 302: throw const ServiceException(FeatureFailure.found); case 303: diff --git a/dart/geodata/test/data/london.geojson b/dart/geodata/test/data/london.geojson new file mode 100644 index 00000000..e39e6202 --- /dev/null +++ b/dart/geodata/test/data/london.geojson @@ -0,0 +1,29 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "id": "ROG", + "geometry": { + "type": "Point", + "coordinates": [-0.0014, 51.4778, 45.0] + }, + "properties": { + "title": "Royal Observatory", + "place": "Greenwich" + } + }, + { + "type": "Feature", + "id": "TB", + "geometry": { + "type": "Point", + "coordinates": [-0.075406, 51.5055] + }, + "properties": { + "title": "Tower Bridge", + "built": 1886 + } + } + ] + } \ No newline at end of file diff --git a/dart/geodata/test/data/london.geojsonl b/dart/geodata/test/data/london.geojsonl new file mode 100644 index 00000000..988db088 --- /dev/null +++ b/dart/geodata/test/data/london.geojsonl @@ -0,0 +1,2 @@ +{"type":"Feature","id":"ROG","geometry":{"type":"Point","coordinates":[-0.0014,51.4778,45]},"properties":{"title":"Royal Observatory","place":"Greenwich"}} +{"type":"Feature","id":"TB","geometry":{"type":"Point","coordinates":[-0.075406,51.5055]},"properties":{"title":"Tower Bridge","built":1886}} \ No newline at end of file diff --git a/dart/geodata/test/geojson_feature_client_test.dart b/dart/geodata/test/geojson_feature_client_test.dart new file mode 100644 index 00000000..36bd26c9 --- /dev/null +++ b/dart/geodata/test/geojson_feature_client_test.dart @@ -0,0 +1,94 @@ +// Copyright (c) 2020-2024 Navibyte (https://navibyte.com). All rights reserved. +// Use of this source code is governed by a “BSD-3-Clause”-style license that is +// specified in the LICENSE file. +// +// Docs: https://github.com/navibyte/geospatial + +// ignore_for_file: avoid_redundant_argument_values + +// importing `dart:io` not supported on the Flutter web platform +import 'dart:io' show File; + +import 'package:geobase/vector.dart'; +import 'package:geobase/vector_data.dart'; +import 'package:geodata/geojson_client.dart'; + +import 'package:test/test.dart'; + +void main() { + group('GeoJSON feature client', () { + test('Test accessing a local GeoJSON file (London)', () async { + final source = GeoJSONFeatures.any( + () async => File('test/data/london.geojson').readAsString(), + format: GeoJSON.feature, + ); + + final items = await source.itemsAll(); + _testLondonFeatureCollection(items.collection); + }); + + test('Test accessing a local GeoJSONL file (London)', () async { + final source = GeoJSONFeatures.any( + () async => File('test/data/london.geojsonl').readAsString(), + format: GeoJSONL.feature, + ); + + final items = await source.itemsAll(); + _testLondonFeatureCollection(items.collection); + }); + + test('Test accessing a local GeoJSON file (USGS)', () async { + final source = GeoJSONFeatures.any( + () async => File('test/usgs/summary/2.5_day.geojson').readAsString(), + format: GeoJSON.feature, + ); + + await _testUSGSFeatureCollection(source); + }); + + test('Test accessing a local GeoJSONL file (USGS)', () async { + final source = GeoJSONFeatures.any( + () async => File('test/usgs/summary/2.5_day.geojsonl').readAsString(), + format: GeoJSONL.feature, + ); + + await _testUSGSFeatureCollection(source); + }); + }); +} + +Future _testUSGSFeatureCollection( + BasicFeatureSource source, +) async { + final itemsAll = await source.itemsAll(); + final all = itemsAll.collection.features; + expect(all.length, 37); + expect(all[17].properties['place'], '12km SW of Searles Valley, CA'); + + final itemsById14 = await source.itemById('nn00801358'); + expect(itemsById14.feature.id, 'nn00801358'); + expect(itemsById14.feature.properties['place'], '28 km SSE of Mina, Nevada'); + + final itemsPaged0 = await source.itemsAllPaged(limit: 20); + final paged0 = itemsPaged0.current.collection.features; + expect(paged0.length, 20); + expect(paged0[17].properties['place'], '12km SW of Searles Valley, CA'); + + expect(itemsPaged0.hasNext, true); + final itemsPaged1 = await itemsPaged0.next(); + if (itemsPaged1 != null) { + final paged1 = itemsPaged1.current.collection.features; + expect(paged1.length, 17); + expect(paged1[1].properties['place'], '116 km ENE of Luwuk, Indonesia'); + + expect(itemsPaged1.hasNext, false); + } +} + +void _testLondonFeatureCollection(FeatureCollection collection) { + expect(collection.features.length, 2); + + final greenwich = collection.features.first; + expect(greenwich.id, 'ROG'); + expect(greenwich.geometry, Point.build([-0.0014, 51.4778, 45])); +} diff --git a/dart/geodata/test/usgs/summary/2.5_day.geojsonl b/dart/geodata/test/usgs/summary/2.5_day.geojsonl new file mode 100644 index 00000000..6e7b58ad --- /dev/null +++ b/dart/geodata/test/usgs/summary/2.5_day.geojsonl @@ -0,0 +1,37 @@ +{"type":"Feature","properties":{"mag":5.3,"place":"3 km SSW of Point MacKenzie, Alaska","time":1614452365398,"updated":1614457817216,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/ak0212o88mof","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak0212o88mof.geojson","felt":3244,"cdi":7.1,"mmi":4.96,"alert":"green","status":"reviewed","tsunami":1,"sig":1142,"net":"ak","code":"0212o88mof","ids":",ak0212o88mof,at00qp7bez,us7000de78,","sources":",ak,at,us,","types":",dyfi,ground-failure,impact-link,losspager,moment-tensor,oaf,origin,phase-data,shakemap,","nst":null,"dmin":null,"rms":0.86,"gap":null,"magType":"mww","type":"earthquake","title":"M 5.3 - 3 km SSW of Point MacKenzie, Alaska"},"geometry":{"type":"Point","coordinates":[-149.9991,61.3286,42.1]},"id":"ak0212o88mof"} +{"type":"Feature","properties":{"mag":2.92,"place":"19km SSE of Shaver Lake, CA","time":1614447965480,"updated":1614455120558,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/nc73528961","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nc73528961.geojson","felt":29,"cdi":3.3,"mmi":null,"alert":null,"status":"automatic","tsunami":0,"sig":141,"net":"nc","code":"73528961","ids":",nc73528961,","sources":",nc,","types":",dyfi,focal-mechanism,nearby-cities,origin,phase-data,scitech-link,","nst":35,"dmin":0.1553,"rms":0.28,"gap":71,"magType":"ml","type":"earthquake","title":"M 2.9 - 19km SSE of Shaver Lake, CA"},"geometry":{"type":"Point","coordinates":[-119.2480011,36.9420013,28.99]},"id":"nc73528961"} +{"type":"Feature","properties":{"mag":2.9,"place":"120 km ENE of Chignik, Alaska","time":1614443293536,"updated":1614454512040,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/ak0212o6v3f1","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak0212o6v3f1.geojson","felt":0,"cdi":1,"mmi":null,"alert":null,"status":"automatic","tsunami":0,"sig":129,"net":"ak","code":"0212o6v3f1","ids":",ak0212o6v3f1,us7000de6j,","sources":",ak,us,","types":",dyfi,origin,phase-data,","nst":null,"dmin":null,"rms":0.58,"gap":null,"magType":"ml","type":"earthquake","title":"M 2.9 - 120 km ENE of Chignik, Alaska"},"geometry":{"type":"Point","coordinates":[-156.5058,56.5384,70.3]},"id":"ak0212o6v3f1"} +{"type":"Feature","properties":{"mag":2.9,"place":"31 km WSW of Minto, Alaska","time":1614442680499,"updated":1614454344040,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/ak0212o6su1n","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak0212o6su1n.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"automatic","tsunami":0,"sig":129,"net":"ak","code":"0212o6su1n","ids":",us7000de6i,ak0212o6su1n,","sources":",us,ak,","types":",origin,phase-data,","nst":null,"dmin":null,"rms":0.68,"gap":null,"magType":"ml","type":"earthquake","title":"M 2.9 - 31 km WSW of Minto, Alaska"},"geometry":{"type":"Point","coordinates":[-149.9558,65.0352,14.7]},"id":"ak0212o6su1n"} +{"type":"Feature","properties":{"mag":4.8,"place":"Falkland Islands region","time":1614438985974,"updated":1614447849260,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/us7000de65","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us7000de65.geojson","felt":1,"cdi":1,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":355,"net":"us","code":"7000de65","ids":",us7000de65,","sources":",us,","types":",dyfi,origin,phase-data,","nst":null,"dmin":2.63,"rms":0.86,"gap":69,"magType":"mb","type":"earthquake","title":"M 4.8 - Falkland Islands region"},"geometry":{"type":"Point","coordinates":[-59.7401,-54.0978,11.45]},"id":"us7000de65"} +{"type":"Feature","properties":{"mag":2.54,"place":"19km SE of Lone Pine, CA","time":1614437861060,"updated":1614448623119,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/ci39803792","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci39803792.geojson","felt":0,"cdi":1,"mmi":null,"alert":null,"status":"automatic","tsunami":0,"sig":99,"net":"ci","code":"39803792","ids":",ci39803792,","sources":",ci,","types":",dyfi,focal-mechanism,nearby-cities,origin,phase-data,scitech-link,","nst":16,"dmin":0.09874,"rms":0.21,"gap":84,"magType":"ml","type":"earthquake","title":"M 2.5 - 19km SE of Lone Pine, CA"},"geometry":{"type":"Point","coordinates":[-117.9005,36.4905,7.28]},"id":"ci39803792"} +{"type":"Feature","properties":{"mag":2.54,"place":"2 km NNW of Coyle, Oklahoma","time":1614437685618,"updated":1614438350868,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/ok2021ebhe","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ok2021ebhe.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"automatic","tsunami":0,"sig":99,"net":"ok","code":"2021ebhe","ids":",ok2021ebhe,","sources":",ok,","types":",origin,phase-data,","nst":73,"dmin":0.1086511165,"rms":0.5829870705,"gap":26.22185898,"magType":"ml","type":"earthquake","title":"M 2.5 - 2 km NNW of Coyle, Oklahoma"},"geometry":{"type":"Point","coordinates":[-97.24862671,35.97587967,2.350581646]},"id":"ok2021ebhe"} +{"type":"Feature","properties":{"mag":4,"place":"off the coast of Oregon","time":1614432794470,"updated":1614447055367,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/us7000de5r","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us7000de5r.geojson","felt":2,"cdi":2.7,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":247,"net":"us","code":"7000de5r","ids":",us7000de5r,","sources":",us,","types":",dyfi,origin,phase-data,","nst":null,"dmin":2.033,"rms":0.88,"gap":231,"magType":"mb","type":"earthquake","title":"M 4.0 - off the coast of Oregon"},"geometry":{"type":"Point","coordinates":[-129.0813,43.8404,10]},"id":"us7000de5r"} +{"type":"Feature","properties":{"mag":4.3,"place":"227 km SSW of Bengkulu, Indonesia","time":1614430719285,"updated":1614432072040,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/us7000de5m","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us7000de5m.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":284,"net":"us","code":"7000de5m","ids":",us7000de5m,","sources":",us,","types":",origin,phase-data,","nst":null,"dmin":1.929,"rms":0.72,"gap":196,"magType":"mb","type":"earthquake","title":"M 4.3 - 227 km SSW of Bengkulu, Indonesia"},"geometry":{"type":"Point","coordinates":[101.5989,-5.746,10]},"id":"us7000de5m"} +{"type":"Feature","properties":{"mag":4.8,"place":"18 km NNW of Turangi, New Zealand","time":1614426174313,"updated":1614427269040,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/us7000de5b","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us7000de5b.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":354,"net":"us","code":"7000de5b","ids":",us7000de5b,","sources":",us,","types":",origin,phase-data,","nst":null,"dmin":0.76,"rms":0.5,"gap":58,"magType":"mb","type":"earthquake","title":"M 4.8 - 18 km NNW of Turangi, New Zealand"},"geometry":{"type":"Point","coordinates":[175.7342,-38.8381,123.49]},"id":"us7000de5b"} +{"type":"Feature","properties":{"mag":3.7,"place":"25 km NE of Stanley, Idaho","time":1614424382401,"updated":1614456637987,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/us7000de55","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us7000de55.geojson","felt":11,"cdi":3.8,"mmi":3.456,"alert":null,"status":"reviewed","tsunami":0,"sig":215,"net":"us","code":"7000de55","ids":",us7000de55,mb80489429,","sources":",us,mb,","types":",dyfi,origin,phase-data,shakemap,","nst":null,"dmin":0.253,"rms":0.63,"gap":71,"magType":"ml","type":"earthquake","title":"M 3.7 - 25 km NE of Stanley, Idaho"},"geometry":{"type":"Point","coordinates":[-114.7195,44.3844,10]},"id":"us7000de55"} +{"type":"Feature","properties":{"mag":4.3,"place":"35 km SW of Champerico, Guatemala","time":1614422632904,"updated":1614424226040,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/us7000de51","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us7000de51.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":284,"net":"us","code":"7000de51","ids":",us7000de51,","sources":",us,","types":",origin,phase-data,","nst":null,"dmin":0.627,"rms":0.62,"gap":182,"magType":"mb","type":"earthquake","title":"M 4.3 - 35 km SW of Champerico, Guatemala"},"geometry":{"type":"Point","coordinates":[-92.1807,14.1072,58.83]},"id":"us7000de51"} +{"type":"Feature","properties":{"mag":4.6,"place":"35 km WSW of Champerico, Guatemala","time":1614421661847,"updated":1614422655040,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/us7000de4x","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us7000de4x.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":326,"net":"us","code":"7000de4x","ids":",us7000de4x,","sources":",us,","types":",origin,phase-data,","nst":null,"dmin":0.613,"rms":0.99,"gap":190,"magType":"mb","type":"earthquake","title":"M 4.6 - 35 km WSW of Champerico, Guatemala"},"geometry":{"type":"Point","coordinates":[-92.2214,14.1829,36.74]},"id":"us7000de4x"} +{"type":"Feature","properties":{"mag":2.5,"place":"7 km SE of Ratliff City, Oklahoma","time":1614421640488,"updated":1614421844815,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/ok2021eayj","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ok2021eayj.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"automatic","tsunami":0,"sig":96,"net":"ok","code":"2021eayj","ids":",ok2021eayj,","sources":",ok,","types":",origin,phase-data,","nst":47,"dmin":0.05201647058,"rms":0.8200114118,"gap":73.84472656,"magType":"ml","type":"earthquake","title":"M 2.5 - 7 km SE of Ratliff City, Oklahoma"},"geometry":{"type":"Point","coordinates":[-97.43962097,34.40753555,0.9311784506]},"id":"ok2021eayj"} +{"type":"Feature","properties":{"mag":2.5,"place":"28 km SSE of Mina, Nevada","time":1614414395630,"updated":1614415364040,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/nn00801358","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/nn00801358.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"automatic","tsunami":0,"sig":96,"net":"nn","code":"00801358","ids":",us7000de4e,nn00801358,","sources":",us,nn,","types":",origin,phase-data,","nst":18,"dmin":0.014,"rms":0.42,"gap":49.41,"magType":"ml","type":"earthquake","title":"M 2.5 - 28 km SSE of Mina, Nevada"},"geometry":{"type":"Point","coordinates":[-117.9768,38.1565,9.4]},"id":"nn00801358"} +{"type":"Feature","properties":{"mag":4.8,"place":"Volcano Islands, Japan region","time":1614414055383,"updated":1614415182040,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/us7000de4g","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us7000de4g.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":354,"net":"us","code":"7000de4g","ids":",us7000de4g,","sources":",us,","types":",origin,phase-data,","nst":null,"dmin":4.036,"rms":0.76,"gap":127,"magType":"mb","type":"earthquake","title":"M 4.8 - Volcano Islands, Japan region"},"geometry":{"type":"Point","coordinates":[142.971,23.1051,114.54]},"id":"us7000de4g"} +{"type":"Feature","properties":{"mag":4.3,"place":"35 km ESE of San Pedro de Atacama, Chile","time":1614413978063,"updated":1614425389573,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/us7000de4d","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us7000de4d.geojson","felt":1,"cdi":1,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":285,"net":"us","code":"7000de4d","ids":",us7000de4d,","sources":",us,","types":",dyfi,origin,phase-data,","nst":null,"dmin":0.282,"rms":0.52,"gap":89,"magType":"mb","type":"earthquake","title":"M 4.3 - 35 km ESE of San Pedro de Atacama, Chile"},"geometry":{"type":"Point","coordinates":[-67.9048,-23.0794,132.4]},"id":"us7000de4d"} +{"type":"Feature","properties":{"mag":3.14,"place":"12km SW of Searles Valley, CA","time":1614413846900,"updated":1614456512725,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/ci39803680","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci39803680.geojson","felt":17,"cdi":3.4,"mmi":null,"alert":null,"status":"automatic","tsunami":0,"sig":157,"net":"ci","code":"39803680","ids":",ci39803680,us7000de4c,","sources":",ci,us,","types":",dyfi,focal-mechanism,nearby-cities,origin,phase-data,scitech-link,","nst":48,"dmin":0.09531,"rms":0.19,"gap":50,"magType":"ml","type":"earthquake","title":"M 3.1 - 12km SW of Searles Valley, CA"},"geometry":{"type":"Point","coordinates":[-117.4761658,35.6813316,8.59]},"id":"ci39803680"} +{"type":"Feature","properties":{"mag":5.2,"place":"8 km SW of Álftanes, Iceland","time":1614413266875,"updated":1614434051911,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/us7000de48","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us7000de48.geojson","felt":21,"cdi":4.8,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":426,"net":"us","code":"7000de48","ids":",us7000de48,","sources":",us,","types":",dyfi,origin,phase-data,","nst":null,"dmin":0.785,"rms":0.83,"gap":45,"magType":"mww","type":"earthquake","title":"M 5.2 - 8 km SW of Álftanes, Iceland"},"geometry":{"type":"Point","coordinates":[-22.1376,64.0487,10]},"id":"us7000de48"} +{"type":"Feature","properties":{"mag":4.3,"place":"Kermadec Islands region","time":1614409599345,"updated":1614412034040,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/us7000de3y","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us7000de3y.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":284,"net":"us","code":"7000de3y","ids":",us7000de3y,","sources":",us,","types":",origin,phase-data,","nst":null,"dmin":1.776,"rms":1.09,"gap":124,"magType":"mb","type":"earthquake","title":"M 4.3 - Kermadec Islands region"},"geometry":{"type":"Point","coordinates":[-179.4573,-30.4288,297.1]},"id":"us7000de3y"} +{"type":"Feature","properties":{"mag":4.4,"place":"West Chile Rise","time":1614409187005,"updated":1614425571180,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/us7000de3v","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us7000de3v.geojson","felt":1,"cdi":1,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":298,"net":"us","code":"7000de3v","ids":",us7000de3v,","sources":",us,","types":",dyfi,origin,phase-data,","nst":null,"dmin":7.344,"rms":0.55,"gap":204,"magType":"mb","type":"earthquake","title":"M 4.4 - West Chile Rise"},"geometry":{"type":"Point","coordinates":[-83.716,-43.4304,10]},"id":"us7000de3v"} +{"type":"Feature","properties":{"mag":4.4,"place":"116 km ENE of Luwuk, Indonesia","time":1614408793608,"updated":1614410111040,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/us7000de3t","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us7000de3t.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":298,"net":"us","code":"7000de3t","ids":",us7000de3t,","sources":",us,","types":",origin,phase-data,","nst":null,"dmin":1.089,"rms":0.78,"gap":80,"magType":"mb","type":"earthquake","title":"M 4.4 - 116 km ENE of Luwuk, Indonesia"},"geometry":{"type":"Point","coordinates":[123.7991,-0.6777,49.93]},"id":"us7000de3t"} +{"type":"Feature","properties":{"mag":3.23,"place":"76 km N of Culebra, Puerto Rico","time":1614403844630,"updated":1614408693040,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/pr2021058004","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/pr2021058004.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":161,"net":"pr","code":"2021058004","ids":",us7000de3q,pr2021058004,","sources":",us,pr,","types":",origin,phase-data,","nst":14,"dmin":1.001,"rms":0.27,"gap":317,"magType":"md","type":"earthquake","title":"M 3.2 - 76 km N of Culebra, Puerto Rico"},"geometry":{"type":"Point","coordinates":[-65.3225,18.9936,15]},"id":"pr2021058004"} +{"type":"Feature","properties":{"mag":4.4,"place":"93 km WNW of Luwuk, Indonesia","time":1614401366957,"updated":1614402450040,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/us7000de2n","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us7000de2n.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":298,"net":"us","code":"7000de2n","ids":",us7000de2n,","sources":",us,","types":",origin,phase-data,","nst":null,"dmin":0.876,"rms":0.77,"gap":105,"magType":"mb","type":"earthquake","title":"M 4.4 - 93 km WNW of Luwuk, Indonesia"},"geometry":{"type":"Point","coordinates":[122.0644,-0.5209,10]},"id":"us7000de2n"} +{"type":"Feature","properties":{"mag":2.8,"place":"9 km SE of York, Arizona","time":1614397145870,"updated":1614443628059,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/us7000de2a","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us7000de2a.geojson","felt":12,"cdi":3,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":124,"net":"us","code":"7000de2a","ids":",us7000de2a,","sources":",us,","types":",dyfi,origin,phase-data,","nst":null,"dmin":0.272,"rms":0.53,"gap":65,"magType":"ml","type":"earthquake","title":"M 2.8 - 9 km SE of York, Arizona"},"geometry":{"type":"Point","coordinates":[-109.1383,32.8236,5]},"id":"us7000de2a"} +{"type":"Feature","properties":{"mag":3.2,"place":"55 km W of Happy Valley, Alaska","time":1614394849176,"updated":1614453339161,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/ak0212nyyj7t","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ak0212nyyj7t.geojson","felt":3,"cdi":2.2,"mmi":null,"alert":null,"status":"automatic","tsunami":0,"sig":158,"net":"ak","code":"0212nyyj7t","ids":",ak0212nyyj7t,us7000de23,","sources":",ak,us,","types":",dyfi,origin,phase-data,","nst":null,"dmin":null,"rms":0.67,"gap":null,"magType":"ml","type":"earthquake","title":"M 3.2 - 55 km W of Happy Valley, Alaska"},"geometry":{"type":"Point","coordinates":[-152.7168,60.0131,90.6]},"id":"ak0212nyyj7t"} +{"type":"Feature","properties":{"mag":2.45,"place":"6 km ESE of La Parguera, Puerto Rico","time":1614394403610,"updated":1614401844900,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/pr2021058002","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/pr2021058002.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":92,"net":"pr","code":"2021058002","ids":",pr2021058002,","sources":",pr,","types":",origin,phase-data,","nst":21,"dmin":0.0537,"rms":0.13,"gap":195,"magType":"md","type":"earthquake","title":"M 2.5 - 6 km ESE of La Parguera, Puerto Rico"},"geometry":{"type":"Point","coordinates":[-66.9918,17.9578,7]},"id":"pr2021058002"} +{"type":"Feature","properties":{"mag":4.5,"place":"111 km SE of Sarangani, Philippines","time":1614393173166,"updated":1614394278040,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/us7000de1z","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us7000de1z.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":312,"net":"us","code":"7000de1z","ids":",us7000de1z,","sources":",us,","types":",origin,phase-data,","nst":null,"dmin":2.402,"rms":1.27,"gap":115,"magType":"mb","type":"earthquake","title":"M 4.5 - 111 km SE of Sarangani, Philippines"},"geometry":{"type":"Point","coordinates":[126.2229,4.7386,91.65]},"id":"us7000de1z"} +{"type":"Feature","properties":{"mag":5.6,"place":"293 km E of Levuka, Fiji","time":1614391981910,"updated":1614399319677,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/us7000de1v","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us7000de1v.geojson","felt":null,"cdi":null,"mmi":1.455,"alert":"green","status":"reviewed","tsunami":0,"sig":482,"net":"us","code":"7000de1v","ids":",us7000de1v,","sources":",us,","types":",losspager,origin,phase-data,shakemap,","nst":null,"dmin":3.883,"rms":0.92,"gap":33,"magType":"mww","type":"earthquake","title":"M 5.6 - 293 km E of Levuka, Fiji"},"geometry":{"type":"Point","coordinates":[-177.9418,-18.5079,553.86]},"id":"us7000de1v"} +{"type":"Feature","properties":{"mag":2.6,"place":"49 km NW of Toyah, Texas","time":1614389195819,"updated":1614389867040,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/us7000de1m","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us7000de1m.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":104,"net":"us","code":"7000de1m","ids":",us7000de1m,","sources":",us,","types":",origin,phase-data,","nst":null,"dmin":0.262,"rms":0.4,"gap":57,"magType":"mb_lg","type":"earthquake","title":"M 2.6 - 49 km NW of Toyah, Texas"},"geometry":{"type":"Point","coordinates":[-104.2093,31.5837,5]},"id":"us7000de1m"} +{"type":"Feature","properties":{"mag":3.65,"place":"132 km N of Charlotte Amalie, U.S. Virgin Islands","time":1614387923840,"updated":1614404152169,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/pr2021058000","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/pr2021058000.geojson","felt":2,"cdi":2.2,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":205,"net":"pr","code":"2021058000","ids":",us7000de1l,pr2021058000,","sources":",us,pr,","types":",dyfi,origin,phase-data,","nst":16,"dmin":1.737,"rms":0.31,"gap":315,"magType":"md","type":"earthquake","title":"M 3.7 - 132 km N of Charlotte Amalie, U.S. Virgin Islands"},"geometry":{"type":"Point","coordinates":[-64.8155,19.5383,47]},"id":"pr2021058000"} +{"type":"Feature","properties":{"mag":2.9,"place":"7 km SSW of El Indio, Texas","time":1614387711526,"updated":1614389721061,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/us7000de1k","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us7000de1k.geojson","felt":1,"cdi":2.7,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":130,"net":"us","code":"7000de1k","ids":",us7000de1k,","sources":",us,","types":",dyfi,origin,phase-data,","nst":null,"dmin":0.831,"rms":0.65,"gap":190,"magType":"mb_lg","type":"earthquake","title":"M 2.9 - 7 km SSW of El Indio, Texas"},"geometry":{"type":"Point","coordinates":[-100.3282,28.4425,5]},"id":"us7000de1k"} +{"type":"Feature","properties":{"mag":4.4,"place":"109 km E of Iquique, Chile","time":1614381613861,"updated":1614450834492,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/us7000de1e","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us7000de1e.geojson","felt":4,"cdi":2,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":299,"net":"us","code":"7000de1e","ids":",us7000de1e,","sources":",us,","types":",dyfi,origin,phase-data,","nst":null,"dmin":0.203,"rms":0.8,"gap":61,"magType":"mb","type":"earthquake","title":"M 4.4 - 109 km E of Iquique, Chile"},"geometry":{"type":"Point","coordinates":[-69.1156,-20.3426,107.01]},"id":"us7000de1e"} +{"type":"Feature","properties":{"mag":4.8,"place":"4 km S of Mosfellsbær, Iceland","time":1614379127051,"updated":1614400059002,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/us7000de17","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us7000de17.geojson","felt":6,"cdi":3.6,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":357,"net":"us","code":"7000de17","ids":",us7000de17,","sources":",us,","types":",dyfi,origin,phase-data,","nst":null,"dmin":0.643,"rms":0.87,"gap":67,"magType":"mb","type":"earthquake","title":"M 4.8 - 4 km S of Mosfellsbær, Iceland"},"geometry":{"type":"Point","coordinates":[-21.7106,64.1282,10]},"id":"us7000de17"} +{"type":"Feature","properties":{"mag":4.2,"place":"29 km SSW of Ashkāsham, Afghanistan","time":1614375319236,"updated":1614376382040,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/us7000de0q","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/us7000de0q.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":271,"net":"us","code":"7000de0q","ids":",us7000de0q,","sources":",us,","types":",origin,phase-data,","nst":null,"dmin":2.701,"rms":1.23,"gap":185,"magType":"mb","type":"earthquake","title":"M 4.2 - 29 km SSW of Ashkāsham, Afghanistan"},"geometry":{"type":"Point","coordinates":[71.4131,36.4316,106.9]},"id":"us7000de0q"} +{"type":"Feature","properties":{"mag":2.82,"place":"4 km SSW of Guánica, Puerto Rico","time":1614374389250,"updated":1614376248500,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/pr2021057009","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/pr2021057009.geojson","felt":null,"cdi":null,"mmi":null,"alert":null,"status":"reviewed","tsunami":0,"sig":122,"net":"pr","code":"2021057009","ids":",pr2021057009,","sources":",pr,","types":",origin,phase-data,","nst":21,"dmin":0.0604,"rms":0.13,"gap":211,"magType":"md","type":"earthquake","title":"M 2.8 - 4 km SSW of Guánica, Puerto Rico"},"geometry":{"type":"Point","coordinates":[-66.9201,17.9306,13]},"id":"pr2021057009"} +{"type":"Feature","properties":{"mag":3.02,"place":"3km E of Simi Valley, CA","time":1614372710230,"updated":1614457872397,"tz":null,"url":"https://earthquake.usgs.gov/earthquakes/eventpage/ci39803176","detail":"https://earthquake.usgs.gov/earthquakes/feed/v1.0/detail/ci39803176.geojson","felt":964,"cdi":3.8,"mmi":3.542,"alert":null,"status":"reviewed","tsunami":0,"sig":507,"net":"ci","code":"39803176","ids":",ci39803176,us7000de0b,","sources":",ci,us,","types":",dyfi,focal-mechanism,nearby-cities,origin,phase-data,scitech-link,shakemap,","nst":110,"dmin":0.03701,"rms":0.22,"gap":31,"magType":"ml","type":"earthquake","title":"M 3.0 - 3km E of Simi Valley, CA"},"geometry":{"type":"Point","coordinates":[-118.7046667,34.2698333,10.93]},"id":"ci39803176"} \ No newline at end of file