お問い合わせ(笑)
小平飲食店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つくっておいてよかった。またもう一回する時は、ここを見ながらできます(笑)