前提・実現したいこと
CSVからKMLを作成しているのですがサンプルのようなXMLの配置にできません
StyleとStyleMapはDocumentの下
PlacemarkをFolderの下に
サンプルと同じような配置するにはどうすればいいのでしょうか
よろしくお願いいたします。
サンプル
xml
1<?xml version="1.0" encoding="UTF-8"?> 2<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2"> 3 <Document> 4 <Style></Style> 5 <Style></Style> 6 <StyleMap></StyleMap> 7 <StyleMap></StyleMap> 8 9 <Folder> 10 <Placemark></Placemark> 11 <Placemark></Placemark> 12 </Folder> 13 </Document> 14</kml>
Folderなし(Folderがない)
xml
1<?xml version="1.0" encoding="UTF-8"?> 2<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2"> 3 <Document> 4 <Style></Style> 5 <Style></Style> 6 <StyleMap></StyleMap> 7 <StyleMap></StyleMap> 8 9 <Placemark></Placemark> 10 <Placemark></Placemark> 11 </Document> 12</kml>
Folderあり(StyleとStylemapがFolderの下に配置される)
xml
1<?xml version="1.0" encoding="UTF-8"?> 2<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2"> 3 <Document> 4 <Folder> 5 <Style></Style> 6 <Style></Style> 7 <StyleMap></StyleMap> 8 <StyleMap></StyleMap> 9 10 <Placemark></Placemark> 11 <Placemark></Placemark> 12 </Folder> 13 </Document> 14</kml>
該当のソースコード
python
1import io 2 3import pandas as pd 4import simplekml 5 6data = """\ 7name,lon,lat 8東京駅,139.766389,35.681340 9有楽町駅,139.763360,35.675056 10新宿駅,139.700432,35.690938 11池袋駅,139.711570,35.730235 12秋葉原駅,139.774091,35.698704 13上野駅,139.777195,35.713714 14""" 15 16df = pd.read_csv(io.StringIO(data)) 17 18df 19 20kml = simplekml.Kml(name="yamanote") 21 22icon_blue = simplekml.IconStyle() 23icon_blue.icon.href = "http://maps.google.com/mapfiles/kml/pushpin/blue-pushpin.png" 24 25icon_red = simplekml.IconStyle() 26icon_red.icon.href = "http://maps.google.com/mapfiles/kml/pushpin/red-pushpin.png" 27 28 29first_stylemap = simplekml.StyleMap() 30first_stylemap.normalstyle = simplekml.Style(iconstyle=icon_blue) 31first_stylemap.highlightstyle = simplekml.Style(iconstyle=icon_red) 32 33icon_green = simplekml.IconStyle() 34icon_green.icon.href = "http://maps.google.com/mapfiles/kml/pushpin/grn-pushpin.png" 35 36icon_pink = simplekml.IconStyle() 37icon_pink.icon.href = "http://maps.google.com/mapfiles/kml/pushpin/pink-pushpin.png" 38 39second_stylemap = simplekml.StyleMap() 40second_stylemap.normalstyle = simplekml.Style(iconstyle=icon_green) 41second_stylemap.highlightstyle = simplekml.Style(iconstyle=icon_pink) 42 43# Folderありの場合はコメント削除 44# fol = kml.newfolder(name="station") 45 46for i, r in df.iterrows(): 47 48 # Folderなし 49 pnt = kml.newpoint(name=r["name"], coords=[(r["lon"], r["lat"])]) 50 51 # Folderありの場合は上をコメントアウト、下をコメント削除 52 # pnt = fol.newpoint(name=r["name"], coords=[(r["lon"], r["lat"])]) 53 54 if i % 2 == 0: 55 pnt.stylemap = first_stylemap 56 57 else: 58 pnt.stylemap = second_stylemap 59 60 ex_data = simplekml.ExtendedData() 61 62 for n, v in r.items(): 63 64 ex_data.newdata(name=str(n), value=str(v)) 65 66 pnt.extendeddata = ex_data 67 68kml.save("yamanote.kml")
試したこと
Folderにnewpointでstylemapを登録するとFolderの下に配置される
documentのstylemapに登録後、呼び出すとstylemapがひとつの場合はできるが
2つ以上の場合は1つしか登録できない
kml.document.stylemap = first_stylemap
pnt.stylemap = kml.document.stylemap
fol.stylemapをkml.document.stylemapに登録しても1つしか登録できない
kml.document.stylemap = fol.stylemap
stylemapを2つ登録できない
補足情報(FW/ツールのバージョンなど)
Python 3.7.11
simplekml==1.3.5
https://simplekml.readthedocs.io/en/latest/
KML
https://developers.google.com/kml/documentation/kml_tut?hl=ja
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/04 16:06