Google mapをローカルでPOI-CSV変換する方法
webサービスでGoogleマップ POI・CSVコンバーターというのがあるので、それを使うと便利ですよ。
ですが、
- なぜか文字がエスケープ化してしまい、困った←自分です。
- 予期せぬURL流出は、ちとマズい
という人は、メリットあるかも。
以下、お手製XSLファイルを用い、ローカルPC上で、マイマップRSSからPOI用CSVを作成します。
方法
1.google maps のRSSをダウンロードする
2.ダウンロードしたRSSファイルに以下一文(★行)を加える
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="gmap.xsl"?> ←★コレです <rss version="2.0" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml"> <channel> ... </channel> </rss>
5.表示内容を全選択し、エディタ等にコピペ。CSVとして保存。
ブラウザのSaveAsで保存すると、勝手に改行が入る事があり、都合悪いです。
エディタでの保存は、普通に(Shift-JISで)保存して下さい。
6.POI-Loaderでアップロード
gmap.xsl
エディタ等でUTF-8で gmap.xslという名前で保存して下さい。
notepadでの保存例→
<?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:georss="http://www.georss.org/georss" > <xsl:output method="html" encoding="Shift_JIS" /> <xsl:template match="/"> <xsl:apply-templates /> </xsl:template> <xsl:template match="link" /> <xsl:template match="title" /> <xsl:template match="description" /> <xsl:template match="item"> <xsl:variable name="loc"><xsl:value-of select="normalize-space(georss:point)" /></xsl:variable> <xsl:variable name="desc1"><xsl:value-of select="substring-before(substring-after(description, '<div dir="ltr">'),'</div>')" /></xsl:variable> <xsl:variable name="desc2"> <xsl:call-template name="restr"> <xsl:with-param name="str" select="$desc1" /> </xsl:call-template> </xsl:variable> <xsl:variable name="desc"> <xsl:call-template name="crlf"> <xsl:with-param name="str" select="$desc2" /> </xsl:call-template> </xsl:variable> <xsl:value-of select="substring-after($loc, ' ')" />,<!-- --><xsl:value-of select="substring-before($loc, ' ')" />,<!-- --><xsl:value-of select="title" />,<!-- -->"<xsl:copy-of select="$desc" />"<br/> </xsl:template> <xsl:template name="restr"> <xsl:param name="str"/> <xsl:value-of select="translate($str, '0123456789−#*ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', '0123456789-#*ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz')" /> </xsl:template> <xsl:template name="crlf"> <xsl:param name="str"/> <xsl:variable name="match"><br></xsl:variable> <xsl:choose> <xsl:when test="contains($str,$match)" ><xsl:value-of select="substring-before($str,$match)" /><br /><xsl:call-template name="crlf"> <xsl:with-param name="str" select="substring-after($str,$match)"/> <xsl:with-param name="match" select="$match"/> </xsl:call-template></xsl:when> <xsl:otherwise><xsl:value-of select="$str"/></xsl:otherwise> </xsl:choose> </xsl:template> </xsl:stylesheet>
- RSSのコメント欄は、プレーンテキストしか想定していません。
- コメントの全角英数を半角に変換しています。
備考
- 本来はxsltをローカルで簡単に動かすには、msxsl.exeが良いらしいし、もっともだと思いますが、わざわざ入れるのも面倒なので、この様な方法を使いました。
- crlf templeteは a.hanai公開モノ置き場の「文字列置換」を参考に(というか、殆ど流用)させていただきました。ありがとうございます。
- Mac未確認です。動いたら教えてもらえるとうれしいかも。