質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1926閲覧

PythonのsimplekmlでstylemapをFolderより上位に配置したい

barobaro

総合スコア1286

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/08/02 05:33

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

kml.document.stylemaps.append(stylemap) で2つ以上のstylemapを登録することができました。

python

1>>> import simplekml 2>>> kml = simplekml.Kml() 3>>> first_stylemap = simplekml.StyleMap() 4>>> first_stylemap.normalstyle = simplekml.Style() 5>>> first_stylemap.highlightstyle = simplekml.Style() 6>>> second_stylemap = simplekml.StyleMap() 7>>> second_stylemap.normalstyle = simplekml.Style() 8>>> second_stylemap.highlightstyle = simplekml.Style() 9>>> kml.document.stylemaps.append(first_stylemap) 10>>> kml.document.stylemaps.append(second_stylemap) 11>>> fol = kml.newfolder() 12>>> pnt = fol.newpoint() 13>>> pnt.stylemap = first_stylemap 14>>> pnt = fol.newpoint() 15>>> pnt.stylemap = second_stylemap 16>>> print(kml.kml()) 17<?xml version="1.0" encoding="UTF-8"?> 18<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2"> 19 <Document id="1"> 20 <Style id="3"/> 21 <Style id="4"/> 22 <Style id="6"/> 23 <Style id="7"/> 24 <StyleMap id="2"> 25 <Pair> 26 <key>normal</key> 27 <styleUrl>#3</styleUrl> 28 </Pair> 29 <Pair> 30 <key>highlight</key> 31 <styleUrl>#4</styleUrl> 32 </Pair> 33 </StyleMap> 34 <StyleMap id="5"> 35 <Pair> 36 <key>normal</key> 37 <styleUrl>#6</styleUrl> 38 </Pair> 39 <Pair> 40 <key>highlight</key> 41 <styleUrl>#7</styleUrl> 42 </Pair> 43 </StyleMap> 44 <Folder id="8"> 45 <Placemark id="10"> 46 <styleUrl>#2</styleUrl> 47 <Point id="9"> 48 <coordinates>0.0, 0.0, 0.0</coordinates> 49 </Point> 50 </Placemark> 51 <Placemark id="12"> 52 <styleUrl>#5</styleUrl> 53 <Point id="11"> 54 <coordinates>0.0, 0.0, 0.0</coordinates> 55 </Point> 56 </Placemark> 57 </Folder> 58 </Document> 59</kml>

投稿2021/08/02 13:23

etherbeg

総合スコア1195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

barobaro

2021/08/04 16:06

ありがとうございます stylemapに追加できました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問