67 lines
2.4 KiB
Python
67 lines
2.4 KiB
Python
from xml.dom import minidom
|
|
import numpy as np
|
|
import transformer
|
|
import pandas as pd
|
|
import xml.etree.ElementTree as ET
|
|
|
|
|
|
def prettify(elem):
|
|
"""Return a pretty-printed XML string for the Element.
|
|
"""
|
|
rough_string = ET.tostring(
|
|
elem, encoding="utf-8", method="xml", xml_declaration=True
|
|
)
|
|
reparsed = minidom.parseString(rough_string)
|
|
return reparsed.toprettyxml(indent="\t")
|
|
|
|
|
|
def main():
|
|
df = pd.read_excel("成果表-0120.xlsx")
|
|
needed_df = df.iloc[:120, :3]
|
|
# print(needed_df)
|
|
trans = transformer.Projector(
|
|
transformer.EPSG_CGCS_2000_108E, transformer.EPSG_WGS_84
|
|
)
|
|
y_array = needed_df["北坐标(m)"].to_numpy()
|
|
x_array = needed_df["东坐标(m)"].to_numpy()
|
|
yx_array = np.array([y_array, x_array]).transpose()
|
|
wgs_84_point = np.array([trans.transform(y, x) for y, x in yx_array])
|
|
name_lat_lon_df = pd.DataFrame(
|
|
{"桩号": needed_df["点号"], "纬度": wgs_84_point[:, 0], "经度": wgs_84_point[:, 1]}
|
|
)
|
|
xml_f = ET.parse("sgt.kml")
|
|
ET.register_namespace("", "http://www.opengis.net/kml/2.2")
|
|
root = xml_f.getroot()
|
|
ns = {
|
|
"NS": r"http://www.opengis.net/kml/2.2",
|
|
}
|
|
folders_has_placemark = root.findall(r"NS:Document//NS:Folder[NS:Placemark]", ns)
|
|
point_folder = None
|
|
for fld in folders_has_placemark:
|
|
if fld.find(r"NS:name", ns).text == "点":
|
|
point_folder = fld
|
|
break
|
|
# remove all placemark
|
|
# for child in point_folder:
|
|
# if child.tag == "{" + ns["NS"] + "}Placemark":
|
|
# point_folder.remove(child)
|
|
point_folder.clear()
|
|
for _, row in name_lat_lon_df.iterrows():
|
|
name = row["桩号"]
|
|
lon = row["经度"]
|
|
lat = row["纬度"]
|
|
ele_placemark = ET.SubElement(point_folder, "Placemark")
|
|
ele_name = ET.SubElement(ele_placemark, "name")
|
|
ele_name.text = name
|
|
ele_point = ET.SubElement(ele_placemark, "Point")
|
|
coordinates = ET.SubElement(ele_point, "coordinates")
|
|
coordinates.text = "{lon},{lat},0".format(lon=lon, lat=lat)
|
|
# xml_f.write("out.kml",encoding='utf-8',method='xml',pretty_print=True)
|
|
# print(xml_f.toString())
|
|
with open("out.kml", "w") as f:
|
|
f.write(prettify(root))
|
|
|
|
# with open('84.txt','w') as f:
|
|
# for point in wgs_84_point:
|
|
# f.write('{point[1]},{point[0]},0 \n'.format(point=point))
|