【问题标题】:Create KML file for Google Maps from CSV从 CSV 为 Google 地图创建 KML 文件
【发布时间】:2013-01-10 10:32:06
【问题描述】:

我一直在研究一个问题...我是 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!

最好的问候柯蒂斯

【问题讨论】:

  • 你可以查看GDAL库的ogr2ogr。如果无法将 csv 转换为 kml,您可以先将 csv 转换为 shapefile(使用 GIS,例如 QuantumGIS 或其他),然后再将其转换为 kml。
  • 或者你可以试试这个工具:kmltools.nobletech.com/csv2kml
  • 我首先尝试了这个工具,但现在我又测试了几次
  • 另一个想法,你可以在谷歌驱动器的fusiontablelayer中导入你的csv。然后,您可以在 google maps 或 openlayers 中显示它,但如果您有免费的 google API 密钥,该表可能是公开的。

标签: python google-maps csv kml


【解决方案1】:

要读取 .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】:

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

    从它的介绍页面:

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

    【讨论】:

      【解决方案3】:

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

      如果您希望即时运行或在更新 CSV 后重新创建,我建议您执行以下操作:

      1. 选择任何已建立 KML 解析/生成库的语言(ruby、java、C# [我非常喜欢 SharpKML for .Net]、PHP 等)。
      2. 使用库创建您的 KML 对象,然后迭代您的 CSV 文件,使用地标(或其他)填充您的 KML 文档对象
      3. 根据需要导出您的 KML

      在 cmets 中发布的脚本当然也可以,但我会使用现有的 KML 库。

      【讨论】:

        猜你喜欢
        • 2016-06-21
        • 2023-03-05
        • 2021-07-31
        • 1970-01-01
        • 1970-01-01
        • 2012-05-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多