Edutab Map made by Python3

Edutab Mapの作り方について説明します。

0. 準備

エラーが出るものについて、ターミナルでpip3 importを行う。

  • pip3 install geocoder
  • pip3 install folium
  • pip3 install geopy

細かい文法上の勉強はこちら

PyLearn MAP 01: 地図プロの基礎
PyLearn MAP 02: 人口データとヒートマップ
PyLearn MAP 03: コロプレス図と施設配置
PyLearn MAP 04: 公共施設の最適配置問題

In [1]:
import geocoder as ge
import folium as fl
import folium.map
import folium.plugins

1. 研究開発グループの経度・緯度取得

In [2]:
# +++ マーカポイントの経度・緯度取得 +++ 
TargetName_Research =[
    "長岡技術科学大学",
    "上越教育大学", 
    "山梨県立大学", 
    "日本大学生産工学部", 
    "デジタルアライアンス"
]

TargetAddress_Research =[
    "新潟県長岡市上富岡町1603−1", # 長岡
    "新潟県上越市山屋敷町1", # 上越教育大学
    "山梨県甲府市飯田5丁目11", # 山梨県立大学飯田c
    "千葉県習志野市泉町1丁目2−1", # 日本大学生産工学部津田沼c
    "山梨県甲府市北口2丁目12−1" # DA
]

print("+++ 研究開発グループ(経度・緯度) +++")
Points_Research = []
for i in range(len(TargetAddress_Research)):
    Points_Research.append(ge.arcgis(TargetAddress_Research[i]).latlng) 
    print("機関名: ", TargetName_Research[i], " / ", Points_Research[i])
+++ 研究開発グループ(経度・緯度) +++
機関名:  長岡技術科学大学  /  [37.42443900000001, 138.77705250000002]
機関名:  上越教育大学  /  [37.136340000000004, 138.22526249999999]
機関名:  山梨県立大学  /  [35.66319300000001, 138.55584600000003]
機関名:  日本大学生産工学部  /  [35.691705, 140.05134450000003]
機関名:  デジタルアライアンス  /  [35.668665000000004, 138.571596]
In [15]:
# 地図に乗せる情報
URL_Research = [
    
    """
        長岡技術科学大学<br>
        <a href = 'http://kjs.nagaokaut.ac.jp/hirotaka/index.html' target='_blank' rel='noopener noreferrer'>
        数理工学宇宙物理学研究室</a><br>
        ・高橋 弘毅(准教授)<br>
        ・松下 将也(M1学生)<br>
        担当: データサイエンス、人工知能
        </a><br>
        <img src = "pict/takahashi.jpg" width = "150px">
    """,
    
    """
        上越教育大学<br>
        <a href = 'https://roomofmizuochi.jimdofree.com' target='_blank' rel='noopener noreferrer'>
        水落、大島、榊原研究室</a><br>
        ・水落 芳明(教授)<br>
        ・大島 崇行(准教授)<br>
        ・榊原 範久(准教授)<br>
        ・古屋 達朗(梨大教諭)<br>
        担当: 教育設計、実践評価
        </a><br>
        <img src = "pict/mizuochi.jpg" width = "150px">
    """,
    
    """
        山梨県立大学<br>
        <a href = 'http://www2.yamanashi-ken.ac.jp/~kaz/cgi-bin/pukiwiki/index.php' target='_blank' rel='noopener noreferrer'>
        八代研究室</a><br>
        ・八代 一浩(教授)<br>
        担当: ネットワーク、システム開発
        </a><br>
        <img src = "pict/yatsushiro.jpg" width = "150px">
    """,
    
    """
        日本大学生産工学部<br>
        <a href = 'http://int-info.com' target='_blank' rel='noopener noreferrer'>
        知能情報システム工学研究室</a><br>
        ・大前 佑斗(助教)<br>
        担当: データサイエンス、人工知能
        </a><br>
        <img src = "pict/omae.jpg" width = "150px">
    """,
    
    """
        <a href = 'https://www.digital-all.jp' target='_blank' rel='noopener noreferrer'>
        デジタルアライアンス</a><br>
        ・水越 一貴(研究員)<br>
        担当: ネットワーク、システム開発
        </a><br>
        <img src = "pict/mizukoshi.jpg" width = "150px">
    """
    
]

# <img src = "pict/ochima.jpg" width = "120px"> # 大島先生
# <img src = "pict/sakakibara.jpg" width = "120px"> # 榊原先生

2. 実践校の経度・緯度取得

In [16]:
# +++ マーカポイントの経度・緯度取得 +++ 
TargetName_School =[
    "山梨大付属小",
    "上越教育大付属小", 
    "斐太北小", 
    "塩山北小",
    "笛川小"
]

TargetAddress_School =[
    "山梨県甲府市北新1丁目4−1", # 梨大付属
    "新潟県上越市西城町1丁目7−1", # 上越付属
    "新潟県妙高市大字飛田690", # 斐太北
    "山梨県甲州市塩山千野3421", # 塩山
    "山梨県山梨市牧丘町窪平1200" # 笛川
]

print("+++ 実践校グループ(経度・緯度) +++")
Points_School = []
for i in range(len(TargetAddress_School)):
    Points_School.append(ge.arcgis(TargetAddress_School[i]).latlng) 
    print("機関名: ", TargetName_School[i], " / ", Points_School[i])
+++ 実践校グループ(経度・緯度) +++
機関名:  山梨大付属小  /  [35.679501, 138.56741549999998]
機関名:  上越教育大付属小  /  [37.11343500000001, 138.25336500000003]
機関名:  斐太北小  /  [37.057203, 138.24323550000003]
機関名:  塩山北小  /  [35.710857000000004, 138.73167]
機関名:  笛川小  /  [35.746578, 138.71338200000002]

3. 地図の作成と研究開発・実践校グループマーカ

In [17]:
# 描画中心座標(群馬の赤城山)
central_point = ge.arcgis("群馬県桐生市黒保根町宿廻").latlng

# 地図生成
m = fl.Map(location = central_point, zoom_start = 8)

# マーカクラスタの生成
cluster = folium.plugins.MarkerCluster(control=False)
m.add_child(cluster)
    
# 研究開発グループマーカ 
group1 = fl.plugins.FeatureGroupSubGroup(cluster, '研究開発グループ')
m.add_child(group1)
for i in range(len(TargetName_Research)):
    fl.Marker(location=Points_Research[i], 
                    icon=folium.Icon(color='green'),
                    popup = URL_Research[i]).add_to(group1)

# 実践校グループマーカ
group2 = fl.plugins.FeatureGroupSubGroup(cluster, '教育実践校')
m.add_child(group2)
for i in range(len(TargetName_School)):
    fl.Marker(location=Points_School[i],
                      icon=folium.Icon(color='red'),
                      popup = TargetName_School[i]).add_to(group2)

4. 教育実践マーカの登録

  • 遠隔協調学習をやるたびに追加していく項目
  • 増えてきたらfor文で行う
In [18]:
# +++ ここから下は実践のたびに積み上げていく +++

# 2020.02.28 遠隔協調学習(2ひだきた & 3えんざん)
s1, s2 = 2, 3 # 2箇所の学校ID
day = "2020.02" #実施日
Dist1 = fl.plugins.FeatureGroupSubGroup(cluster, day + " 遠隔協調学習")
m.add_child(Dist1)
html_text = day + ": " + TargetName_School[s1] + "と" + TargetName_School[s2] + "が遠隔協調学習を行いました!"
folium.Marker(location=Points_School[s1], icon=folium.Icon(color='red'), popup = TargetName_School[s1]).add_to(Dist1)
folium.Marker(location=Points_School[s2], icon=folium.Icon(color='red'), popup = TargetName_School[s2]).add_to(Dist1)
folium.PolyLine(locations=[Points_School[s1], Points_School[s2]], 
                    tooltip=html_text, color='blue', weight=10).add_to(Dist1)

# 2019.02.28 遠隔協調学習(0付属小 & 1付属小)
s1, s2 = 0, 1 # 2箇所の学校ID
day = "2019.09" #実施日
Dist2 = fl.plugins.FeatureGroupSubGroup(cluster, day + " 遠隔協調学習")
m.add_child(Dist2)
html_text = day + ": " + TargetName_School[s1] + "と" + TargetName_School[s2] + "が遠隔協調学習を行いました!"
folium.Marker(location=Points_School[s1], icon=folium.Icon(color='red'), popup = TargetName_School[s1]).add_to(Dist2)
folium.Marker(location=Points_School[s2], icon=folium.Icon(color='red'), popup = TargetName_School[s2]).add_to(Dist2)
folium.PolyLine(locations=[Points_School[s1], Points_School[s2]], 
                    tooltip=html_text, color='blue', weight=10).add_to(Dist2)

fl.LayerControl(collapsed=False).add_to(m)
Out[18]:
<folium.map.LayerControl at 0x1145aa9e8>

最後に、表示・保存して終了。jupyter上では文字化けしますが、生成するHTML上では表示されると思います。

In [19]:
# マップ表示
m
Out[19]:
In [20]:
# マップ保存
m.save("EdutabMap.html")

これをサーバにおいて外部公開すれば終了!