2013-01-10 4 views
2

J'ai fait des recherches jours sur un problème ... Je suis nouveau à KML et je veux créer un fichier avec les informations folowing:Créer un fichier KML pour Google Maps de CSV

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

Le fichier csv est maintenu. S'il y a un outil, je serais très heureux. Sinon, je l'écrirais manuellement, si je connais la syntaxe.

J'utilise un mac pour que les créateurs de KML Windows ne soient pas remis en question ... J'ai essayé de nombreux outils et aucun n'était ce que je voulais.

Le meilleur outil que j'ai trouvé était http://batchgeo.com/de/ mais il n'y a plus de fichier KML.

[EDIT]

est-il un bon moyen de résoudre ce dans un script python? J'ai déjà un .csv!

Meilleures salutations Curtis

+0

Vous pouvez regarder dans ogr2ogr de la bibliothèque GDAL. S'il est impossible de convertir csv en kml, vous pouvez convertir csv en shapefile avant (en utilisant un SIG comme QuantumGIS ou autre) et ensuite le convertir en kml. –

+0

Ou vous pouvez essayer cet outil: http://kmltools.nobletech.com/csv2kml –

+0

j'ai essayé cet outil en premier, mais maintenant je tester autour de quelques fois de plus – CTSchmidt

Répondre

3

Pour la lecture des fichiers .csv, vous pouvez utiliser le module csv comme ceci:

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

Vous pourriez avoir des ennuis lorsque votre fichier est UTF-8 codé, car csv ne supporte pas. Mais il y a un wrapper qui s'occupera de cela. Bien sûr, vous pouvez simplement lire votre fichier ligne par ligne et le diviser par des virgules: values=line.split(','). Étant donné que le format kml n'est pas très compliqué, la partie la plus difficile de la création d'une représentation de vos données est de décider à quoi cela devrait ressembler. Un morceau très simple de code pour insérer les valeurs lues à partir du fichier csv pourrait ressembler à ceci:

# 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

Je crois BatchGEO soutient KML sur l'onglet Google Earth: http://batchgeo.com/features/google-earth-kml/

Si vous cherchez à avoir cette course à la volée ou être recréés quand une mise à jour du CSV a été Je suggère ce qui suit:

  1. Choisissez ne importe quelle langue une bibliothèque parsing/génération KML créé (Ruby, java, C# [Je aime vraiment SharpKML pour .Net], PHP, etc).
  2. Utilisation de la bibliothèque créer vos objets KML, itérer alors votre fichier CSV peuplant votre objet document KML avec Placemarks (ou autre)
  3. Exporter votre KML et le cas échéant

Le script affiché dans les commentaires seront aussi certainement travailler, mais j'utiliserais une bibliothèque KML existante.

3

Utilisez simplekml si vous avez déjà importé vos données csv.

Depuis sa page d'introduction:

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