2011-09-23 27 views
8

Python'da yeni. Gps dosyaları üzerinde çalışıyorum. Tüm gps verilerini içeren bir CSV dosyasını kml dosyasına dönüştürmem gerekiyor. Aşağıda kullanıyorum Python kodu:Python'da csv'den kml oluştur

import csv 
#Input the file name. 
fname = raw_input("Enter file name WITHOUT extension: ") 
data = csv.reader(open(fname + '.csv'), delimiter = ',') 
#Skip the 1st header row. 
data.next() 
#Open the file to be written. 
f = open('csv2kml.kml', 'w') 

#Writing the kml file. 
f.write("<?xml version='1.0' encoding='UTF-8'?>\n") 
f.write("<kml xmlns='http://earth.google.com/kml/2.1'>\n") 
f.write("<Document>\n") 
f.write(" <name>" + fname + '.kml' +"</name>\n") 
for row in data: 
    f.write(" <Placemark>\n") 
    f.write("  <name>" + str(row[1]) + "</name>\n") 
    f.write("  <description>" + str(row[0]) + "</description>\n") 
    f.write("  <Point>\n") 
    f.write("   <coordinates>" + str(row[3]) + "," + str(row[2]) + "," + str(row[4]) + "</coordinates>\n") 
    f.write("  </Point>\n") 
    f.write(" </Placemark>\n") 
f.write("</Document>\n") 
f.write("</kml>\n") 
print "File Created. " 
print "Press ENTER to exit. " 
raw_input() 

kullanıyorum csv dosyası burada mevcuttur: dip12Sep11newEdited.csv oluşturulan kml dosyası burada mevcuttur: csv2kml.kml Ama kml dosyası doğru oluşturulan almıyor. Görünüşe göre, csv'deki bazı satırlardan sonra kod, daha fazla Yer İşareti oluşturamıyor. Yinelemek mümkün değil. Oluşturulan kml dosyasının son bölümüne doğru kaydırarak görebilirsiniz.

Bazı küçük csv dosyaları için düzgün çalıştığından ve tam olarak kml dosyaları oluşturduğundan, herhangi biri koddaki hatayı bulmama yardımcı olabilir.

Teşekkürler.

+0

Daha fazla Yer İşareti üretemediğini nereden biliyorsunuz?('Dosya Oluşturuldu mu?] Diye sordu – KevinDTimm

+0

Evet,' File Creted 'yazıyor. Ancak, kml dosyasını not defterinde açarsanız, dosyanın tamamen yazmadığını görebilirsiniz. – Darkpain

cevap

7

Yukarıdaki sorguyu vermediniz, ancak benim hatam, çıkış dosyanızı kapatmamanızdır (bu da han senin çıktınız).

f.close() 
+0

kml dosyasını kontrol ederseniz aniden sona erdiğini görebilirsiniz. – Darkpain

+2

Sorun buydu. Sadece f.close() ekledim ve bir cazibe gibi çalıştı. Çok teşekkürler. – Darkpain

1

Thie simplekml paket çok iyi çalışıyor ve bu tür şeylerin çalışmayı kolaylaştırır.

Ubuntu'ya yüklemek için, en son sürümü indirin ve arşiv içeriğini içeren dizinden aşağıdakileri çalıştırın.

sudo python setup.py install 

da başlangıç ​​için some tutorials vardır.

0

Bu kod yazılmıştır, yazı için teşekkürler. CSV'imi .py koduyla aynı dizine koyarak çalışmam gerekiyor.

Ben

import csv 
#Input the file name."JoeDupes3_forearth" 
fname = input("Enter file name WITHOUT extension: ") 
data = csv.reader(open(fname + '.csv'), delimiter = ',') 
#Skip the 1st header row. 
#data.next() 
#Open the file to be written. 
f = open('csv2kml.kml', 'w') 

#Writing the kml file. 
f.write("<?xml version='1.0' encoding='UTF-8'?>\n") 
f.write("<kml xmlns='http://earth.google.com/kml/2.1'>\n") 
f.write("<Document>\n") 
f.write(" <name>" + fname + '.kml' +"</name>\n") 
for row in data: 
    f.write(" <Placemark>\n") 
    f.write("  <name>" + str(row[1]) + "</name>\n") 
    f.write("  <description>" + str(row[3]) + "</description>\n") 
    f.write("  <Point>\n") 
    f.write("   <coordinates>" + str(row[10]) + "," + str(row[11]) + "," + str() + "</coordinates>\n") 
    f.write("  </Point>\n") 
    f.write(" </Placemark>\n") 
f.write("</Document>\n") 
f.write("</kml>\n") 
print ("File Created. ") 
print ("Press ENTER to exit. ") 
input() 
f.close() 

3,3 verilerinizi dönüştürmek için çalışıyorsanız Umarım yardımcı olur py getirmek için birkaç düzenleme yaptı.

1

Bir cevap size xml biçimi hardcode gerekmez "etree" bir avantaj söz:, elbette davanıza ayarlamak gerekir benim örneklerinden biri Aşağıda

, ancak ilke alabilirsiniz nasıl etree eserlerin fikri:

:

bu kodu kullanabilirsiniz bu

<OGRVRTDataSource> 
<OGRVRTLayer name="GW1AM2_201301010834_032D_L1SGRTBR_1110110_channel89H"> 
    <SrcDataSource>G:\AMSR\GW1AM2_201301010834_032D_L1SGRTBR_1110110_channel89H.csv</SrcDataSource> 
    <GeometryType>wkbPoint</GeometryType> 
    <GeometryField encoding="PointFromColumns" x="lon" y="lat" z="brightness" /> 
</OGRVRTLayer> 
</OGRVRTDataSource> 

gibi bir şey almak için 210

da biraz daha fazla bilgi here

+0

Notumun daha özlü olması için yazımda bir düzeltme yaptığımı unutmayın. Metni veya tek bir özniteliği ayarladığınız ve alt öğeleri eklemek için referans tutmanıza gerek olmayan herhangi bir öğe, tek bir satırda yapılabilir. Örneğin: "ET.SubElement (OGRVRTLayer," GeometryType "). Text =" wkbPoint " – ssokolow