Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
look_for_shade
yrarchi
June 18, 2019
Technology
0
140
look_for_shade
yrarchi
June 18, 2019
Tweet
Share
Other Decks in Technology
See All in Technology
greymd
0
620
natsusan
0
160
shimacos
2
320
humank
0
220
neo_analytics
1
1k
smzksts
0
230
nkjzm
1
830
yuyaabo
0
260
yosshi_
3
200
ocise
1
940
ocise
0
130
sasakendayo
2
390
Featured
See All Featured
sugarenia
233
830k
lara
172
9.5k
danielanewman
200
19k
ufuk
56
5.4k
marktimemedia
6
330
frogandcode
127
20k
tenderlove
52
3.4k
malarkey
119
16k
afnizarnur
176
14k
roundedbygravity
84
7.8k
kastner
54
1.9k
qrush
285
18k
Transcript
look for shade Pythonを用いた日影の計算 PyData.Fukuoka Meetup #4 2019/06/18 yrarchi
今回のテーマ もうすぐ、暑い夏がやってくる! 少しでも、日陰を歩きたい… どの道を通ると 日陰が多いんだろう? 何時に出かけると 日陰が多いんだろう? 道路の何%が日陰になるか、Pythonで計算してみよう!
日影のできかたを決める要素は何か? - 緯度・経度:福岡市 (福岡県庁の緯度経度を 使用) - 日付:夏至(2019/6/22) -
時間:日の出〜日の入まで15分ごと に変えて計算
道路にかかる影の割合を決める要素は何か? - 建物形状・高さ:6.0m * 6.0m * 6.0m - 道路幅員:4.0m
- 道路からの離れ・隣棟間隔:1.0m - 道路の方位角:22.5°ずつ変えて計算
道路にかかる影の割合を決める要素は何か? - 建物形状・高さ:6.0m * 6.0m * 6.0m - 道路幅員:4.0m
- 道路からの離れ・隣棟間隔:1.0m - 道路の方位角:22.5°ずつ変えて計算
計算過程_1 ①モデル建物画像 読込み ②モデル画像回転 ③建物の輪郭を検出 ↓ コーナーの座標を 求める import cv2
model = cv2.imread("img/model.png") … for angle in [angle/10 for angle in range(0, 1800, 225)]: img = rotate_img(angle, model) … contours = find_contours() approx_contours = approximate_contours() … 画像処理を行うライブラリ OpenCVを利用
⑥道路のうち、影と 重なる割合を求める ⑤影の座標を求める 計算過程_2 ④諸条件より太陽の 方位角・高度を出す def calc_coordinate_of_shade(): h =
calc_solar_altitude() A = calc_azimuth() shade_longth = bldg_h_pixel / math.tan(h) shade_x = shade_longth * math.sin(A) * -1 shade_y = shade_longth * math.cos(A) * -1 return shade_x, shade_y … for time in [i / 100 for i in range(500, 2000, 25)]: … shade_x, shade_y = calc_coordinate_of_shade() shade_msk, hull_points = make_shade_mask() road_shade_per = calc_per_of_shade_on_road() …
結果 日の出 日の入り 南中時刻 0° 45° 90°
実際の道路で求めてみる_1 天神駅 福岡県庁 道路の方位角を取得して、経路上の影の割合を出してみる import osmnx as ox import networkx
as nx G = ox.graph_from_point((latitude, longitude), distance=1800, network_type="walk") … origin_node = ox.get_nearest_node(G, origin_point) destination_node = ox.get_nearest_node(G, destination_point) route = nx.shortest_path(G, origin_node, destination_node, weight="length") … G = ox.add_edge_bearings(G) bearings = pd.Series(ox.get_route_edge_attributes(G, route, "bearing")) … OpenStreetMapのデータを利用して街路網の計算を行えるOSMnxを 利用
実際の道路で求めてみる_2 例えば、16時に出かければ 道路の80%超は日陰に なっている (※ 経路上の建物が全て モデル通りならば!)
まとめ 今回できたこと: - モデル建物における道路を占める影の割合 の算出 課題: - 実際の建物の形状・高さを用いた計算 資料: https://github.com/yrarchi/look_for_shade https://yrarchi.net/look_for_shade/