お問い合わせ(笑)
小平飲食店MAPで今の所左側の「レイヤ」ってとこですか?は登録順になってまして、自分用に勝手に業種別色分けにしてますが、作り直しではなく何かの技???で業種別の並び方への変更などは可能ですか?
何か技を使わなければ、いちいち、GoogleMapで入れ直しをしていかないといけない。
これめんどくさいし、なかなか積極的な 「こだいら CivicTech」 になってきてますので、こういうことを簡単にできるようにするには・・・と考えてみました。
まずは、KMLファイルを解析
KMLファイルを除いてみると・・・
飲食店マップには、<Folder><name>色別登録</name> 中身のデータ </Folder> という組み合わせが、1つ。ほかのレイヤー分けされたKMLファイルをみると、これがいくつかに分かれています。
構造として
<Folder>
<name>色別登録</name>
<Placemark>
それぞれのデータ
</Placemark>
<Placemark>
それぞれのデータ
</Placemark>
</Folder>というような構造になっています。
それで、このデータの中に、業種別になっているものを探してみると、色別登録されていることから、<styleUrl>というタグに囲まれているところが、それぞれあることがわかりました。
<styleUrl>#icon-1899-FFD600</styleUrl>
たぶんマーカーの色を指定しているものですね。これをKeyにして、Folderをわけていくと良さそうです。
さて、KMLを簡単に編集できるエディターが。。。 ないんですよね。それで
FusionTableに一回入れて編集してみる。
Google FusionTableというマップ用のDBがあります。これも便利なんですが、こやつマーカーのスタイルを消して読み込みするようで、使えない(涙)
エディタで眺めていたら。。Pythonでやるか?って
KMLをいじれるライブラリに、FastKMLとかあったり、XMLをいじれるxml.etree.ElementTree などがあります。これらは、パーサーといって便利にいじれるはずなんですが。。おじさん。。使ったことないので、わからない(笑)
少しいじってみたけど、やりたいようにデータをいじれないので・・
まずは、何種類あるんだろう? ってPython で読んでみました。
myfile= open("C:\\Users\\tom2r\\Downloads\\最新飲食店マップ.kml", 'r', encoding="utf-8")
lines2 = myfile.readlines()
myfile.close()
i=0
styleurl=[]
for i in range(0,len(lines2)):
if lines2[i].find('<Placemark>')>0:
while lines2[i].find("</Placemark>")<0:
i=i+1
if lines2[i].find("styleUrl")>0:
styleurltemp=lines2[i]
if styleurl==[]:
styleurl.append(styleurltemp)
if styleurltemp not in styleurl :
styleurl.append(styleurltemp)
print(len(styleurl))
styleurl一行づつ読んで、<Placemark>と</Placemark>に囲まれたところにあるstyleUrlをとってきて、それを配列い入れて、同じものがなければ、新しく配列に追加していくというプログラムです。最後に何種類あるのか?と、全種類を出力しています。
[' <styleUrl>#icon-1899-FFD600</styleUrl>\n', ' <styleUrl>#icon-1899-FF5252</styleUrl>\n', ' <styleUrl>#icon-1899-0288D1</styleUrl>\n', ' <styleUrl>#icon-1899-7CB342</styleUrl>\n', ' <styleUrl>#icon-1899-880E4F</styleUrl>\n', ' <styleUrl>#icon-1899-9C27B0</styleUrl>\n', ' <styleUrl>#icon-1899-AFB42B</styleUrl>\n', ' <styleUrl>#icon-1899-FFEA00</styleUrl>\n', ' <styleUrl>#icon-1899-E65100</styleUrl>\n', ' <styleUrl>#icon-1899-558B2F</styleUrl>\n', ' <styleUrl>#icon-1899-006064</styleUrl>\n', ' <styleUrl>#icon-1899-BDBDBD</styleUrl>\n', ' <styleUrl>#icon-1899-097138</styleUrl>\n', ' <styleUrl>#icon-1899-A52714</styleUrl>\n', ' <styleUrl>#icon-1899-C2185B</styleUrl>\n']
ということで、種類わけするKeyが見つかりました。
今度は、この#icon-1899-なんちゃら っていう数字別にPlacemarkを並び変えるといいということですね。
で・・・一行づつみると、大変だわ。。ってことで、今度は、元のKmlファイルの<Placemark> から</Placemark> までを一行にしてみました。
ぼくはTerapadというエディタで、改行を一度全部とり、</Placemark>を</Placemark>+改行に全置換しました。
そのファイルを、今度は、一行づつ見て、上のstyleUrlごとに、<Folder>をわけて書き込めばよいことになります。
で。。今度は、こんなスクリプトを書いてみました。
styleurl=['<styleUrl>#icon-1899-FFD600</styleUrl>',
'<styleUrl>#icon-1899-FF5252</styleUrl>',
'<styleUrl>#icon-1899-0288D1</styleUrl>',
'<styleUrl>#icon-1899-7CB342</styleUrl>',
'<styleUrl>#icon-1899-880E4F</styleUrl>',
'<styleUrl>#icon-1899-9C27B0</styleUrl>',
'<styleUrl>#icon-1899-AFB42B</styleUrl>',
'<styleUrl>#icon-1899-FFEA00</styleUrl>',
'<styleUrl>#icon-1899-E65100</styleUrl>',
'<styleUrl>#icon-1899-558B2F</styleUrl>',
'<styleUrl>#icon-1899-006064</styleUrl>',
'<styleUrl>#icon-1899-BDBDBD</styleUrl>',
'<styleUrl>#icon-1899-097138</styleUrl>',
'<styleUrl>#icon-1899-A52714</styleUrl>',
'<styleUrl>#icon-1899-C2185B</styleUrl>']
myfile= open("C:\\Users\\tom2r\\OneDrive\\デスクトップ\\insyoku.txt", 'r', encoding="utf-8")
lines2 = myfile.readlines()
myfile.close()
catline=[]
for i in range(0,len(lines2)):
for j in range(0,len(styleurl)):
if lines2[i].find(styleurl[j])>0:
catline.append(j)
for j in range(0,14):
firstflg=0
for i in range(0,len(lines2)):
if catline[i]==j:
if firstflg==0:
print('<Folder><name>',j,'</name>')
firstflg=firstflg+1
print(lines2[i])
print('</Folder>')何をやってるかというと。。
一行づつ、styleUrlをみて、同じのがあれば、それをCatlineというリストに番号として入れていきます。
それから、ラインをみて、catlineの数字毎(styleurl)ごとに出力しました。
これを、最初のKMLのStyleの部分と合体させて、読み込ませれば・・・
うぉ~Google Mapはレイヤー10個までだった(笑)
で、読み込ませてみたら。。 あはは・・レイヤー10個までしかだめだった(笑)
120件分のデータが、15個のレイヤー(Folder)に分かれてしまったので、しかたなく
10個までと、11個以降の二つの地図にとりあえず分けておきました。
とりあえず、カテゴリーを10個以内にしてもらわなくては入らないですねぇ~(笑)
元の地図で、マーカーの色を10色までにしてもらうか?
この地図で、8個と2個くらいに一回して、KMLでダウンロードして、ひとつの地図にするか?
やっぱり、Scriptつくっておいてよかった。またもう一回する時は、ここを見ながらできます(笑)
[…] 【KML】PythonでKMLをいじれるようにする。飲食店マップのレイヤーわけ【Map】 […]