Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
検証!会津は本当に地盤が硬いのか?
Search
noharu36
December 01, 2025
Programming
34
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
検証!会津は本当に地盤が硬いのか?
noharu36
December 01, 2025
More Decks by noharu36
See All by noharu36
皆さんはHaskellをご存知です_しかし皆さんはHaskellが読めません_.pdf
noharu36
0
44
自作オブジェクトストレージをRustで
noharu36
0
75
ファミコンに思いを馳せる〜エミュレータ自作を添えて〜
noharu36
0
37
shell自作した話
noharu36
0
34
Rustを布教したい
noharu36
0
39
neofetchよ、永遠に
noharu36
0
37
ISSの軌道計算をRustで
noharu36
0
32
Other Decks in Programming
See All in Programming
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.4k
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
350
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
380
言葉の格闘技のススメ~紙とペンと言葉から始める、キャリアの描き方~
progresscicada
2
170
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
530
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
230
「つくるAI」だけではバグは見つからない ~テストに必要な「見つけるAI」を分離させる戦略~
mfunaki
0
140
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
190
VibeCodingからAgenticWorkflowへ
starfish719
0
750
170k Jobs a Day on GKE: Scaling Mercari's CI Platform - and What's Next for AI-Native Development
junyaokabe
0
120
Built Our Own Background Agent at LayerX
layerx
PRO
10
5.9k
AWS DevOps AgentのAzure接続機能を検証して見えた活用法/Use Cases Verified for the AWS DevOps Agent's Azure Connectivity Feature
masakiokuda
1
260
Featured
See All Featured
Done Done
chrislema
186
16k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
500
Crafting Experiences
bethany
1
260
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.5k
AI: The stuff that nobody shows you
jnunemaker
PRO
9
930
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
170
Between Models and Reality
mayunak
4
400
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
430
Technical Leadership for Architectural Decision Making
baasie
3
520
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Transcript
検証!会津は本当に地盤が硬いのか? 学部2年 harukun
自己紹介 { name: 能島明希 handle: harukun origin: 広島->岡山->大阪->東京->会津 tech: {
front-end: React+TS backend: Rust, Go etc: Rust, Haskell Rust: Rust } favorites: Game, Tobacco, BoyScout, Rust, Neovim Twitter(x): https://twitter.com/pieceofharuki Blog: https://zenn.dev/haru_blog }
会津、地盤硬いってよく言われる気がする ... それ本当?
技術スタック
[dependencies] reqwest = { version = "0.12.9", features = ["json"]
} tokio = { version = "1.41.1", features = ["full"] } serde = { version = "1.0.215", features = ["derive"] } serde_json = "1.0.133" chrono = {version = "0.4.38", features = ["serde"] } scraper = "0.21.0" plotters = "0.3.7" geojson = "0.24.1" geo-types = "0.7.14" 使用した外部クレート
説明 • requwest: HTTPリクエストを送信するためのライブラリ • tokio: 非同期処理をするためのライブラリ • serde, serde_json:
シリアライズ、デシリアライズを行うためのライブラリ • chrono: 時刻を扱うライブラリ • scraper: スクレイピングをするためのライブラリ • plotters:いわゆる描画ライブラリ。いろんな形式をサポートしている • geojson: GeoJsonを読み込むためのライブラリ • geo-types: Rustで地理空間情報を扱うための基本的なデータ型と構造体を提供するライブラリ
やりたいこと (それなりの大きさの)地震は複数の観測点を持つ 同じ震度を観測した観測点は(概ね)(例外はあるが)(一概には言えないが)扇形の弧のように並ぶはず 同じ震度の点を繋いで、その線の内側を震度ごとに色分けして、複数の地震の情報を重ねてあげれば、地震が 多い||強い揺れをよく観測する地域は濃い色に、地震が少ない ||小さな揺れのみを観測している地域は薄い色 になるはず 色分けは、単純に震度で考えると間違っているので(震度6は震度3の倍の強さではない) Galで計算してあげれ ば論理的に色分けできる気がする
いめーじ
が... 扇形の弧、どうやって求めんねん! 作れたとしても、その弧どうやって描画すんねん! 弧の内側どうやって描画すんねん! となったので一旦断念 とりあえず都道府県ごとに色付けしてみることにする
気象庁の地震速報 参考: https://www.p2pquake.net/develop/json_api_v2 async fn main() -> Result<(), Box<dyn std::error::Error>>
{ create_point_list().await?; let url = "https://api.p2pquake.net/v2/jma/quake"; let params = [ ("limit", "100"), ("order", "-1"), ("quake_type", "ScalePrompt"), ("min_scale", "20"), ]; let client = reqwest::Client::new(); let response = client .get(url) .query(¶ms) .header("accept", "application/json") .send() .await?; let json: serde_json::Value = response.json().await?; let quakes = parse_json(json)?; Ok(()) } apiを叩いて、とってきたJsonをstructに変換する
震度観測点と座標の変換 地震速報では震度観測点名称しかわからないので、気象庁のサ イトをスクレイピングして震度間測定名と座標を対応づける 変換した値はグローバル変数で保持 #[derive(Debug, Default, Deserialize, Clone)] pub struct
Addr { pub addr: String, pub latitude: f64, pub longitude: f64, } pub static POINT_MAP: OnceLock<HashMap<String, Addr>> = OnceLock::new();
{ "quakes": [ "Quake": { "time": "2024-12-09T21:00:00", "points": [ {
"location": { "addr": "九戸郡洋野町種市第23地割27(洋野町役場種市庁舎)", "latitude": 40.40833333333333, "longitude": 141.71833333333333 }, "scale": 30 }, { "location": { "addr": "八幡平市大更第35地割62(旧八幡平市役所西根総合支所)", "latitude": 39.92666666666667, "longitude": 141.095 }, "scale": 30 } ] } ] } #[derive(Deserialize, Debug)] pub struct Quake { #[serde(deserialize_with = "deserialize_naive_date_time_from_str")] pub time: NaiveDateTime, #[serde(deserialize_with = "create_point")] pub points: Vec<Point>, } #[derive(Deserialize, Debug)] pub struct Point { pub location: Addr, pub scale: usize, } 取得したデータの例→
日本地図の描画 geojsonという形式のデータを持ってきて、それを描画ライブラリでこねこねすると (理論上)日本地図が描画できてかつ都道府県と描画エリア(ポリゴン)を対応づけられる
なんかうまくいかない ...
なんとか解決しようと試みるも ... なんだか小島のあたりで縦線が沢山生じているので描画方法を変えてみた → うまく行きそうなので小島かどうかの判別(描画方法の決定) をする関数を書いた fn decide_area_or_line(v: &Vec<(f64, f64)>)
-> bool { let (min_x, max_x, min_y, max_y) = v.iter().fold( (f64::INFINITY, f64::NEG_INFINITY, f64::INFINITY, f64::NEG_INFINITY), |(acc_min_x, acc_max_x, acc_min_y, acc_max_y), &(x, y)| { ( acc_min_x.min(x), acc_max_x.max(x), acc_min_y.min(y), acc_max_y.max(y), ) }, ); let diff_x = max_x - min_x; let diff_y = max_y - min_y; if diff_x >= 1.0 || diff_y >= 1.0 { return true } false }
うまくいかない ... 小島はうまく描画できているっぽい? 東京近辺と大阪近辺で描画が失敗している
今後の展望 なんとかうまいこと日本地図を描画できるようにしたい →それができればとってきた地震のデータを描画して、都道府県に紐づけるのは簡単 とりあえず都道府県ごとに色分けして表示できるようにしたい 大LTまでに完成させるかも。でも浮気して別のことやるかも