从CSV创建Google地图的KML文件

时间:2013-01-10 10:32:06

标签: python google-maps csv kml

我一直在研究有关问题的日子......我是KML的新手,我想用以下信息创建一个文件:

Email
address
postcode
country
telephone
fax
internet
name
image
license
Call number
lat
lng

维护csv文件。如果有工具我会很高兴。否则,如果我知道语法,我会手动编写。

我正在使用mac,因此Windows KML创建者不会受到质疑......我尝试了很多工具,但没有一个是我想要的。

我发现的最佳工具是http://batchgeo.com/de/,但不再有KML文件了。

[编辑]

有没有一种很好的方法可以在python脚本中解决这个问题?我已经有了.csv!

最好的问候柯蒂斯

3 个答案:

答案 0 :(得分:4)

如果您已导入csv数据,请使用simplekml

从其介绍页面:

import simplekml
kml = simplekml.Kml()
kml.newpoint(name="Kirstenbosch", coords=[(18.432314,-33.988862)])
kml.save("botanicalgarden.kml")

答案 1 :(得分:3)

要读取.csv文件,您可以使用csv模块,如下所示:

reader = csv.reader(open("file.csv"))
for row in reader:
  for value in row:
    ...  

当您的文件采用UTF-8编码时,您可能会遇到麻烦,因为csv不支持该文件。但是有一个wrapper可以解决这个问题。

当然,您也可以逐行阅读文件并用逗号分隔:values=line.split(',')

由于kml格式不是很复杂,创建数据表示的最艰难的部分是决定它应该是什么样子。插入从csv文件读取的值的一段非常简单的代码可能如下所示:

# read field labels from first line in file
header = reader.next()
# prepare static output
templates = [('  <Placemark>\n   <name>{}</name>\n', 'name'),
         ('   <description>\n    <![CDATA[\n     <img src="{}"/>\n', 'image'),
         ('     {}\n', 'address'),
         ('     {}\n', 'postcode'),
         ('     {}\n', 'country'),
         ('     Tel: <span class="tel">{}</span>\n', 'telephone'),
         ('     Mail: <span class="mail">{}</span>\n', 'Email'),
         ('   </description>\n   <Point>\n    <coordinates>{},', 'lat'),
         ('{}</coordinates>\n   </Point>\n  </Placemark>\n', 'lng')]
# lookup function for field values. leading and trailing whitespace will be removed
value = lambda field, array: array[header.index(field)].lstrip().rstrip()

# start output
print '''<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
 <Document>'''
# insert values into xml
for row in reader:
    for t, f in templates:
        print t.format(value(f, row)),

print ' </Document>\n</kml>'

答案 2 :(得分:0)

我相信BatchGEO在Google地球标签上支持KML:http://batchgeo.com/features/google-earth-kml/

如果您希望动态运行或在CSV更新后重新创建,我建议如下:

  1. 选择已建立的KML解析/生成库(ruby,java,C#[我真的喜欢SharpKML for .Net],PHP等)的任何语言。
  2. 使用该库创建KML对象,然后迭代使用地标(或其他)填充KML文档对象的CSV文件
  3. 根据需要导出KML
  4. 评论中发布的脚本也一定有效,但我会使用现有的KML库。