Create kml from csv in Python

前端 未结 5 1391
名媛妹妹
名媛妹妹 2021-02-06 03:54

I am new to Python. I am working on gps files. I need to convert a CSV file having all the gps data to kml file. Below is the code in python I am using :

import          


        
相关标签:
5条回答
  • 2021-02-06 04:08

    This code is well written thank you for the post. I got it to work by putting my CSV in the same directory as the .py code.

    I made a few edits to bring it to py 3.3

    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()
    

    Hope it helps if you are trying to convert your data.

    0 讨论(0)
  • 2021-02-06 04:25

    The simplekml package works very well, and makes easy work of such things.

    To install on Ubuntu, download the latest version and run the following from the directory containing the archive contents.

    sudo python setup.py install
    

    There are also some tutorials to get you started.

    0 讨论(0)
  • 2021-02-06 04:27

    use etree to create your file

    http://docs.python.org/library/xml.etree.elementtree.html

    It's included with Python and protects you from generating broken XML. (eg. because fname contained &, which has special meaning in XML.)

    0 讨论(0)
  • 2021-02-06 04:31

    One answer mentions the "etree", one advantage that you do not have to hardcode the xml format:

    Below one of my examples, of course you have to adjust it to your case, but you may get the principle idea of how etree works:

    to get something like this

    <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>
    

    you can use this code:

    import xml.etree.cElementTree as ET
    [....]
    root = ET.Element("OGRVRTDataSource")
    
    OGRVRTLayer  = ET.SubElement(root, "OGRVRTLayer")
    OGRVRTLayer.set("name", AMSRcsv_shortname)
    
    SrcDataSource = ET.SubElement(OGRVRTLayer, "SrcDataSource")
    SrcDataSource.text = AMSRcsv
    
    GeometryType = ET.SubElement(OGRVRTLayer, "GeometryType")
    GeometryType.text = "wkbPoint"
    
    GeometryField = ET.SubElement(OGRVRTLayer,"GeometryField")
    GeometryField.set("encoding", "PointFromColumns")
    
    GeometryField.set("x", "lon")
    GeometryField.set("y", "lat")
    GeometryField.set("z", "brightness")
    
    tree = ET.ElementTree(root)
    tree.write(AMSRcsv_vrt)
    

    also some more info here

    0 讨论(0)
  • 2021-02-06 04:34

    You didn't answer the query above, but my guess is that the error is that you're not closing your output file (which would flush your output).

    f.close()
    
    0 讨论(0)
提交回复
热议问题