楽天電測用マップ作成

データ

列指定後のデータ

番号 場所 場所補足 状況 eNB-LCID 緯度 経度
1 今治市立花町二丁目 open 737335-1,2,3 34.0523 132.999
2 今治市中寺① 今治中寺郵便局付近 open 737331-1,2,3 34.0375 132.991
3 今治市桜井四丁目 志島ヶ原・綱敷天満神社付近 open 737342-7,8,9 34.0174 133.041
4 今治市登畑 レデイ薬局今治国分店付近 open 737352-10,11,12 34.0195 133.016
5 今治市阿方① ファミリーマート今治阿方店付近 open 737354-4,5,6 34.0612 132.971
6 今治市阿方② マックスバリュ今治阿方店付近 open 737354-1,2,3 34.0625 132.965
7 今治市波止浜 ディオ今治北店付近 open 737346-7,8,9 34.0985 132.971
8 今治市大新田町五丁目 今治市営球場付近 open 737378-1,2,3 34.0809 132.989
9 今治市国分三丁目 今治国分郵便局付近 open 737374-10,11,12 34.0271 133.02
10 今治市玉川町大野 ファミリーマート玉川店付近 open 737376-3,4,5 34.0198 132.942

インストール

!pip install pandas
!pip install simplekml

設定

# スプレッドシート
url = "https://docs.google.com/spreadsheets/d/e/2PACX-1vRE1NoYtNw1FmjRQ8wcdPkcE0Ryeoc2mfFkCQPHjzwL5CpwNKkLXnBl_F7c0LZjrtbLtRLH55ZVi6gQ/pub?gid=0&single=true&output=csv"

# レイヤー名
name="愛媛県"

# アイコンファイル名
files = ["open.png", "close.png", "ready.png", "check.png"]

# 列番号指定
usecols=[0, 1, 2, 7, 11, 13, 14]

プログラム

import pandas as pd
import simplekml

df = (
    pd.read_csv(url, index_col=0, usecols=usecols, dtype=str)
    .dropna(how="all")
    .fillna("")
)

df

# 空白文字を除去
df["場所"] = df["場所"].str.strip()

# KML作成

kml = simplekml.Kml(name=name)

# スタイル

for file in files:

    fn = kml.addfile(file)

    def make_style(fn, scale=1):

        kmlstyle = simplekml.Style()
        kmlstyle.iconstyle.scale = scale
        kmlstyle.iconstyle.icon.href = fn

        return kmlstyle

    kmlstylemap = simplekml.StyleMap()
    kmlstylemap.normalstyle = make_style(fn)
    kmlstylemap.highlightstyle = make_style(fn)

    kml.document.stylemaps.append(kmlstylemap)

# 位置情報

fol = kml.newfolder()

for i, r in df.iterrows():

    # 座標
    pnt = fol.newpoint(name=r["場所"])
    pnt.coords = [(r["経度"], r["緯度"])]

    # 開局
    if r["状況"] == "open":
        pnt.stylemap = kml.document.stylemaps[0]
        pnt.description = f'eNB-LCID: {r["eNB-LCID"]}'

    # 未開局
    elif r["状況"] == "close":
        pnt.stylemap = kml.document.stylemaps[1]

    # 開局準備
    elif r["状況"] == "ready":
        pnt.stylemap = kml.document.stylemaps[2]

    # 調査
    else:
        pnt.stylemap = kml.document.stylemaps[3]

    ex_data = simplekml.ExtendedData()

    for k, v in r.items():

        ex_data.newdata(name=str(k), value=str(v))

    pnt.extendeddata = ex_data

# KML保存

kml.savekmz("rakuten.kmz")