从CSV文件创建Google Maps的KML文件

3

我已经研究了好几天一个问题... 我是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文件!

最好的问候 Curtis


您可以查看GDAL库的ogr2ogr。如果无法将csv转换为kml,则可以先将其转换为shapefile(使用GIS如QuantumGIS或其他),然后再将其转换为kml。 - Below the Radar
或者您可以尝试使用这个工具:http://kmltools.nobletech.com/csv2kml - Below the Radar
我先尝试了这个工具,但现在我还在测试几次。 - CTSchmidt
另一个想法是,您可以在Google Drive的fusiontablelayer中导入您的csv。然后,您可以在Google地图或OpenLayers中显示它,但如果您有免费的Google API密钥,则表可能是公共的。 - Below the Radar
1
请关注这个问题:https://dev59.com/nGsz5IYBdhLWcg3w-89v - Below the Radar
显示剩余2条评论
3个回答

4

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

以下为其介绍页面:

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

4

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

0

我相信BatchGEO支持在Google Earth选项卡上使用KML:http://batchgeo.com/features/google-earth-kml/

如果您希望在CSV更新时实时运行或重新创建它,我建议采用以下方法:

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

评论中发布的脚本肯定也可以工作,但我会使用现有的KML库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接