look for shadePythonを用いた日影の計算PyData.Fukuoka Meetup #42019/06/18yrarchi
View Slide
今回のテーマもうすぐ、暑い夏がやってくる!少しでも、日陰を歩きたい…どの道を通ると日陰が多いんだろう?何時に出かけると日陰が多いんだろう?道路の何%が日陰になるか、Pythonで計算してみよう!
日影のできかたを決める要素は何か?- 緯度・経度:福岡市 (福岡県庁の緯度経度を 使用) - 日付:夏至(2019/6/22) - 時間:日の出〜日の入まで15分ごと に変えて計算
道路にかかる影の割合を決める要素は何か?- 建物形状・高さ:6.0m * 6.0m * 6.0m - 道路幅員:4.0m - 道路からの離れ・隣棟間隔:1.0m - 道路の方位角:22.5°ずつ変えて計算
計算過程_1①モデル建物画像 読込み②モデル画像回転③建物の輪郭を検出 ↓ コーナーの座標を 求めるimport cv2model = 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) * -1shade_y = shade_longth * math.cos(A) * -1return 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 oximport networkx as nxG = 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/