diadia

興味があることをやってみる。自分のメモを残しておきます。

kml:linestringファイル作成

ele1 = ["road1", 0, 120, 60]
ele2 = ["road1", 1, 122, 65]
ele3 = ["road1", 2, 125, 63]
ele4 = ["road2", 0, 123, 61]
ele5 = ["road2", 1, 113, 41]
ele6 = ["road3", 0, 173, 69]
ele7 = ["road3", 1, 113, 23]
ele8 = ["road4", 0, 123, 67]
ele8 = ["road4", 1, 143, 97]
ele9 = ["road5", 0, 133, 61]
ele10= ["road5", 1, 173, 91]

parent_list = [ele1, ele2, ele3, ele4, ele5, ele6, ele7 ,ele8, ele9, ele10]


key_list = []
for ele in parent_list:
    if ele[0] not in key_list:
        key_list.append(ele[0])


all_data = []
for ele in key_list:
    ele_dict = {}
    ele_dict.setdefault(ele,[])
    all_data.append(ele_dict)





for e in parent_list:
    road_name = e[0]
    for dic in all_data:
        key = [key for key in dic.keys()][0]
        if key == road_name:
            
            dic[key] = dic[key] + e[1:]



kml = ""

kml_head = """<?xml version="1.0" encoding="UTF-8"?> 
<kml xmlns="http://earth.google.com/kml/2.0"> <Document>"""
kml += kml_head

string = """
<Placemark>
<LineString>
<name>{road_name}</name>
<!--altitudeMode>clampToGround</altitudeMode-->
<altitudeMode>absolute</altitudeMode>
<!--altitudeMode>clampToGround</altitudeMode>
<altitudeMode>clampToGround</altitudeMode-->
<coordinates>
{contents}
</coordinates>
</LineString>
</Placemark>"""

kodo = "0.0"
for road in all_data:
    road_name = [key for key in road.keys()][0]
    info_base = road[road_name]
    set_quantity = int(len(info_base)/3)

    contents = ""
    for n in range(0,set_quantity):
        keido = str(info_base[3*n+1])
        ido   = str(info_base[3*n+2])
        #print(keido, ido)
        info = ",".join([keido, ido, kodo])+"\n"
        
        contents = contents + info
    

    placemark = string.format(road_name=road_name,contents=contents[:-2])
    kml += placemark


kml += "\n"+"</Document></kml>" 
print(kml) 


with open("output.kml", "a", encoding="utf-8") as f:
    f.write(kml)