使用python读取kml文件
几天来,我一直在努力使用python中的使用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打印子功能
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)