使用python读取kml文件

使用python读取kml文件,python,Python,几天来,我一直在努力使用python中的fastkml库来读取坐标LineString。 我已经在我的主程序中导入了几何模块。我是这样读的。 我的kml文件存储在名为doc X = Geometry Z=x._get,_coordinates(doc) 我有个错误,上面写着 模块对象没有找到的属性 从fastkml导入kml 进口稀土 从fastkml.geometry导入几何体 从lxml导入etree 从xml.etree导入元素树 从io导入StringIO,字节io def打印子功能

几天来,我一直在努力使用python中的
fastkml库来读取坐标
LineString

我已经在我的主程序中导入了几何模块。我是这样读的。
我的kml文件存储在名为
doc

X = Geometry
Z=x._get,_coordinates(doc)
我有个错误,上面写着

模块对象没有找到的属性

从fastkml导入kml 进口稀土 从fastkml.geometry导入几何体 从lxml导入etree 从xml.etree导入元素树 从io导入StringIO,字节io

def打印子功能(元素):

def打印儿童2功能(元素): “”“以递归方式打印给定元素的每个子节点的名称”“” 如果不是getattr(元素“features”,无): 返回 对于元素中的要素。要素() 打印feature.name 打印儿童2功能(功能)

def get_距离(坐标_str): “”“获取一条路径到坐标字符串的距离,格式为: 14.81363432237944,53.57016581501523,0 14.81411766813742,53.56923005549378,0 14.81880340335202,53.56879451890311 ... 看看: """ 距离总和=0.0 arr=[] 坐标=[] 如果“”在坐标中_str: arr=坐标与横截面分割(“”) 如果len(arr)>1: 对于arr中的s: 如果在s中有“,”,则: pt=s.split(',') pos_latt=(浮点(pt[0].strip()),0,0) pos_long=(浮点(pt[1].strip()),0,0) 位置=(横向位置,纵向位置) 坐标。追加(位置) 如果坐标: 对于范围内的i(len(坐标)-1): 开始=坐标[i] 停止=坐标[i+1] 距离总和+=距离。点2距离(开始、停止) 返回和距离

如果name='main':

#fname = input("Enter KML file name ")
fname = "DBN.kml"
k = kml.KML()
with open(fname) as kmlFile:
    k.from_string(kmlFile.read()) 
x = Geometry()

doc = print_child_features(k)
z= x._get_coordinates(doc)
print z
length=0
if length <= 10:
   print("Transciver is LR")
elif length > 10 and length <= 40:
   print("Transciver is ER")
else:
   print("Transciver is ER")
#fname=input(“输入KML文件名”)
fname=“DBN.kml”
k=kml.kml()
将open(fname)作为kmlFile:
k、 从\u字符串(kmlFile.read())
x=几何体()
doc=打印子要素(k)
z=x.\u获取坐标(doc)
打印z
长度=0

如果长度为10且长度我没有得到您编写的代码。但我已经编写了使用fastkml库从线串和其他几何体读取坐标的代码,所以我可以提供帮助

# import necessary modules 
from fastkml import kml, geometry 

k = kml.KML() # create fastkml object
k.from_string(doc.encode('utf-8')) # read doc string
document = list(k.features())
self.parse_placemarks(document) 

# parse features throughout the KML File
def parse_placemarks(self, document):
        for feature in document:
            if isinstance(feature, kml.Placemark):  # when there is no folder
                placemark = feature
                self.parse_geometries(placemark)
        for feature in document:
            if isinstance(feature, kml.Folder):
                self.parse_placemarks(list(feature.features()))
            if isinstance(feature, kml.Document):
                self.parse_placemarks(list(feature.features()))

# parse geometry 
def parse_geometries(self, placemark):
   if hasattr(placemark, "geometry"):
      if isinstance(placemark.geometry, geometry.LineString):
         self.linestring(placemark)

# parse linestring
def linestring(self, line):
x, y = self.compute_coordinates(line.geometry)

# find coordinates
def compute_coordinates(self, geometry):
        lons = []
        lats = []
        for coordinates in geometry.coords:
            lons.append(coordinates[0])
            lats.append(coordinates[1])
        return (lons, lats)

您可以在此处找到如何提取其他几何图形的坐标以及有关fastkml的更多信息:

请共享实际代码和错误消息。。
# import necessary modules 
from fastkml import kml, geometry 

k = kml.KML() # create fastkml object
k.from_string(doc.encode('utf-8')) # read doc string
document = list(k.features())
self.parse_placemarks(document) 

# parse features throughout the KML File
def parse_placemarks(self, document):
        for feature in document:
            if isinstance(feature, kml.Placemark):  # when there is no folder
                placemark = feature
                self.parse_geometries(placemark)
        for feature in document:
            if isinstance(feature, kml.Folder):
                self.parse_placemarks(list(feature.features()))
            if isinstance(feature, kml.Document):
                self.parse_placemarks(list(feature.features()))

# parse geometry 
def parse_geometries(self, placemark):
   if hasattr(placemark, "geometry"):
      if isinstance(placemark.geometry, geometry.LineString):
         self.linestring(placemark)

# parse linestring
def linestring(self, line):
x, y = self.compute_coordinates(line.geometry)

# find coordinates
def compute_coordinates(self, geometry):
        lons = []
        lats = []
        for coordinates in geometry.coords:
            lons.append(coordinates[0])
            lats.append(coordinates[1])
        return (lons, lats)