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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
noharu36
December 01, 2025
Programming
27
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
39
自作オブジェクトストレージをRustで
noharu36
0
61
ファミコンに思いを馳せる〜エミュレータ自作を添えて〜
noharu36
0
33
shell自作した話
noharu36
0
27
Rustを布教したい
noharu36
0
26
neofetchよ、永遠に
noharu36
0
32
ISSの軌道計算をRustで
noharu36
0
26
Other Decks in Programming
See All in Programming
「エンジニアインターン、どうやって取った?」準備のリアルを語るLT会 Progate BAR
akiomatic
0
130
Developing with AI Agents — Codex, Claude Code & Cowork Practical Guide
x5gtrn
PRO
0
1.3k
AIだと陥りがちなJakarta EE最新技術への移行時の落とし穴と解決策
tnagao7
0
110
Signal Forms: Beyond the Basics @ngBaguette 2026 in Paris
manfredsteyer
PRO
0
250
メソッドのジェネリクスでGoの夢は広がるか? / Kyoto.go #65
utgwkk
3
760
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
130
Claspは野良GASの夢をみるか
takter00
0
190
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
21
6.6k
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
110
The NotImplementedError Problem in Ruby
koic
1
780
Creating Composable Callables in Contemporary C++
rollbear
0
130
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
780
Featured
See All Featured
KATA
mclloyd
PRO
35
15k
AI: The stuff that nobody shows you
jnunemaker
PRO
8
710
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
180
The Language of Interfaces
destraynor
162
27k
It's Worth the Effort
3n
188
29k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
970
Embracing the Ebb and Flow
colly
88
5.1k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.7k
Building an army of robots
kneath
306
46k
Claude Code のすすめ
schroneko
67
230k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
440
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
56k
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までに完成させるかも。でも浮気して別のことやるかも