GeoShake Verisini ObsPy ile Kullanmak: Uygulamalı Rehber
GeoShake sismik verisini CC BY 4.0 lisansıyla açık yayınlıyor — hesap yok, API anahtarı yok, başvuru formu yok. ObsPy kullanıyorsanız, otuz saniye içinde ağdan yer hareketi okuyor olabilirsiniz.
Bu rehber bunun tam olarak nasıl yapılacağını gösteriyor; gerçek komutlar ve gerçek çıktılarıyla. Ayrıca bu verinin ne için uygun olmadığını da açıkça söylüyor — o kısım rehberin kendisinden daha önemli.
Neler var
| Servis | Uç nokta | Ne alırsınız |
|---|---|---|
| FDSN station | https://api.geoshake.org/fdsnws/station/1/ |
İstasyon metadatası (ağ, kod, konum) |
| FDSN event | https://api.geoshake.org/fdsnws/event/1/ |
Tespit edilen olay kataloğu |
| SeedLink | seedlink.geoshake.org:18000 |
Canlı 1 Hz yer hareketi akışı |
| SAC indirme | api.geoshake.org/api/stations/…/sac |
Olay dalga formu burst'leri (~110 Hz) |
Hepsi anonim ve kimlik doğrulamasız. Lisans CC BY 4.0 — ticari kullanın, makalede kullanın, yalnızca ağa atıf verin.
İstasyon metadatası
from obspy.clients.fdsn import Client
client = Client("https://api.geoshake.org", timeout=40)
inventory = client.get_stations(network="GW", level="station")
print(inventory)
Gerçek çıktı:
Inventory created at 2026-08-04T21:03:40.034000Z
Created by: GeoShake
Sending institution: GeoShake (GeoShake Community Seismic Network)
Contains:
Networks (1):
GW
Stations (9):
GW.GEO274YU (GEO-274YU)
GW.GEO2TRS8 (GEO-2TRS8)
GW.GEOA73T7 (GEO-A73T7)
GW.GEOBH2JN (GEO-BH2JN)
GW.GEODQZFV (GEO-DQZFV)
GW.GEOFVYSA (GEO-FVYSA)
GW.GEOQA2HF (GEO-QA2HF)
GW.GEOT7ND5 (GEO-T7ND5)
GW.GEOT9ZBK (GEO-T9ZBK)
Channels (0):
Channels (0) satırına dikkat. Bu bir hata değil — aşağıdaki Bu veri ne değildir bölümüne bakın.
Coğrafi filtreleme beklendiği gibi çalışıyor:
inv = client.get_stations(
network="GW", minlatitude=40, maxlatitude=42, level="station"
)
print(len(inv[0]), "istasyon") # -> 6 istasyon
Olay kataloğu
catalog = client.get_events()
print(catalog)
4 Event(s) in Catalog:
2026-07-02T09:42:24.533000Z | +36.824, +30.257 | 4.7 MMI | automatic
2026-07-02T13:18:54.640000Z | +36.574, +31.007 | 2.5 MMI | automatic
2026-07-10T10:10:36.932000Z | +36.574, +31.057 | 2.1 MMI | automatic
2026-07-12T09:26:49.467000Z | +37.272, +31.105 | 4.5 MMI | automatic
Burada iki şeyi dikkatle okuyun. Büyüklük tipi MMI — ağdan türetilmiş bir sarsıntı şiddeti sınıfı, moment magnitüdü değil. Ve her olay automatic işaretli: hiçbirini bir sismolog gözden geçirmedi. Bir olay kataloğa, üç veya daha fazla istasyon tetiklendiğinde ve yaklaşık 6 km/s hızla yayılan tek bir kaynakla tutarlı bir moveout testinden geçtiğinde giriyor.
Katalog küçük, çünkü ağ genç. Büyüyecek.
SeedLink ile canlı akış
Her istasyon LNZ kanalında sürekli olarak 1 Hz'lik bir aktivite zarfı yayınlıyor.
from obspy.clients.seedlink.basic_client import Client as SeedLinkClient
from obspy import UTCDateTime
sl = SeedLinkClient("seedlink.geoshake.org", port=18000, timeout=30)
print(sl.get_info(level="station"))
[('GW', 'BH2JN'), ('GW', 'FVYSA'), ('GW', 'QA2HF')]
Son üç dakikayı çekelim:
end = UTCDateTime()
stream = sl.get_waveforms("GW", "BH2JN", "00", "LNZ", end - 180, end)
print(stream)
4 Trace(s) in Stream:
GW.BH2JN.00.LNZ | 2026-08-04T21:02:06Z - 2026-08-04T21:02:12Z | 1.0 Hz, 7 samples
GW.BH2JN.00.LNZ | 2026-08-04T21:02:14Z - 2026-08-04T21:03:11Z | 1.0 Hz, 58 samples
GW.BH2JN.00.LNZ | 2026-08-04T21:03:13Z - 2026-08-04T21:04:10Z | 1.0 Hz, 58 samples
GW.BH2JN.00.LNZ | 2026-08-04T21:04:12Z - 2026-08-04T21:05:06Z | 1.0 Hz, 58 samples
Trace'ler arasındaki boşluklar gerçek. İstasyonlar ev internet bağlantılarında barınıyor ve bir paket düştüğünde bir iki saniye kayboluyor. Sürekli bir trace gerekiyorsa stream.merge(method=1) ile birleştirin.
Aynı sunucu jAmaSeis ile de çalışıyor; bu da onu sınıfta kullanılabilir kılıyor: seedlink.geoshake.org:18000 adresini girin, öğrenciler canlı bir istasyonu izlesin.
Olay dalga formları
Tetiklenen olaylar kısa ve yüksek örnekleme hızlı burst'ler olarak saklanıyor ve SAC olarak sunuluyor:
import urllib.request
from obspy import read
url = ("https://api.geoshake.org/api/stations/"
"GEO-BH2JN/waveforms/85/sac?comp=mag")
urllib.request.urlretrieve(url, "event.sac")
st = read("event.sac")
tr = st[0]
print(tr)
print(f"tepe {abs(tr.data).max():.4f} m/s^2")
GW.BH2JN..MAG | 2026-07-15T19:30:52.279000Z - 2026-07-15T19:30:58.619796Z | 109.1 Hz, 693 samples
tepe 0.2447 m/s^2
İstasyon koordinatları SAC başlığında geliyor (stla, stlo), yani ObsPy mesafe hesabı için gerekene sahip. Kullanılabilir bileşenler: x, y, z ve mag (vektör büyüklüğü). Pencere, tetikten yaklaşık 2,3 saniye önce başlayıp 4 saniye sonra bitiyor — tetik öncesi geçmiş, cihaz üzerindeki bir halka tampondan geliyor.
Bu veri ne değildir
Bu bölüm, üstündeki her şeyden daha önemli.
Sensörler kalibre değil. GeoShake istasyonları tüketici sınıfı MEMS ivmeölçerler. Enstrüman yanıtı yayınlanmıyor; istasyon metadatasının istasyon seviyesinde durmasının ve Channels alanının boş dönmesinin sebebi bu. Genlikler gösterge niteliğinde, metrolojik olarak izlenebilir değil. Analiziniz bilinen bir transfer fonksiyonu gerektiriyorsa, bu yanlış veri kümesi.
Ağ kodu geçici. GW altında yayın yapıyoruz ve GW FDSN'e tescilli değil. Önceki kodumuz GS'in Amerika Jeoloji Araştırmaları Kurumu'na (USGS) ait olduğunu fark ettikten sonra buna geçtik — ortak bir arşivi kirletecek bir isim çakışmasıydı. Tescil, ağ kalıcı bir kodu hak edecek büyüklüğe ulaştığında planlanıyor. O zamana kadar GW'yi yerel bir tanımlayıcı olarak görün ve kalıcı olduğunu varsayarak ortak bir arşive katmayın.
Tespitler otomatik ve gözden geçirilmemiş. Yanlış pozitifler var. Bir kamyon, çarpan bir kapı ve küçük bir deprem — üçü de bir istasyonu tetikleyebilir; çoklu istasyon ilişkilendirmesi bunun çoğunu eler, hepsini değil.
Kapsama alanı düzensiz ve genç. Dokuz istasyon, çoğu bir arada. En erken sürekli kayıt 2026-07-11'de başlıyor.
Karşılaşacağınız iki pürüz. ObsPy, servislerimizin starttime, endtime, location (station) ve mindepth, maxdepth, orderby (event) parametrelerini ilan etmediğine dair uyarı basıyor. İstasyon servisi starttime parametresini hata vermeden kabul ediyor ama yok sayıyor — filtrelenmiş bir küme yerine tüm istasyonları alırsınız, üstelik hiçbir uyarı olmadan. Şimdilik istemci tarafında filtreleyin. Ayrıca SeedLink şu an üç istasyon taşırken FDSN istasyon servisi dokuz tane listeliyor; yeni istasyonlar henüz akışa girmedi.
Bunların hiçbiri veriyi kullanışsız yapmıyor. Özel yapıyor: profesyonel ağlarla rekabet eden değil, onları tamamlayan yoğun, ucuz, düşük çözünürlüklü bir kapsama.
Atıf
Bu veri yayımladığınız bir işe girerse, lütfen atıf verin:
Duymak isteriz — bize yazın.
Yazılım da açık
Bir tespitin tam olarak nasıl yapıldığını kataloğa güvenmek yerine kendiniz görmek istiyorsanız: firmware GPL-3.0 ile açık, sinyal işlemesinin doğrulandığı TypeScript referans implementasyonuyla birlikte. Cihaz, C kodunun bu referansla eşleştiğini her açılışta doğruluyor ve eşleşmezse sessizce başlamayı reddediyor.
Bir sismoloğun en çok kurcalamasını istediğimiz kısım burası: github.com/GeoShake/geoshake
Burada geçmeyen uç noktalar dahil tüm API dokümantasyonu api.geoshake.org/developer adresinde.
Kapsam konusunda net olalım: firmware, muhafaza tasarımları ve veri açık. PCB tasarımı ve bulut altyapısı kapalı — yani cihazın bütünü açık kaynak donanım değil ve biz de öyle tanımlamıyoruz.
Ağa katılmaya hazır mısınız?
GeoShake T1 sensörünü edinin ve evde deprem tespitine başlayın.