完成基本功能。
This commit is contained in:
34
transformer/__init__.py
Normal file
34
transformer/__init__.py
Normal file
@@ -0,0 +1,34 @@
|
||||
from pyproj import Transformer
|
||||
|
||||
|
||||
class Projector:
|
||||
def __init__(self, from_epsg, to_epsg):
|
||||
self._transformer = Transformer.from_crs(from_epsg, to_epsg)
|
||||
|
||||
def transform(self, y_lat, x_lon):
|
||||
transformer = self._transformer
|
||||
lat_y, lon_x = transformer.transform(y_lat, x_lon)
|
||||
return lat_y, lon_x
|
||||
|
||||
|
||||
EPSG_WGS_84 = "epsg:4326"
|
||||
EPSG_Xian_1980_105E = "epsg:4507"
|
||||
EPSG_CGCS_2000_108E = "epsg:4545"
|
||||
# _transformer_84_yx = Transformer.from_crs("epsg:4326", "epsg:4507")
|
||||
# _transformer_yx_84 = Transformer.from_crs("epsg:4507", "epsg:4326")
|
||||
|
||||
# WGS 84 坐标转平面
|
||||
# latitude 纬度
|
||||
# longitude 经度
|
||||
|
||||
|
||||
# def wgs_84_yx(latitude, longitude, _elevation):
|
||||
# y, x = _transformer_84_yx.transform(latitude, longitude) # lon 和lat 可以是元组
|
||||
# return y, x
|
||||
#
|
||||
#
|
||||
# def yx_wgs_84(y, x, _elevation):
|
||||
# latitude, longitude = _transformer_yx_84.transform(y, x) # lon 和lat 可以是元组
|
||||
# return latitude, longitude
|
||||
#
|
||||
# def yx_2000_wgs_84(y, x, _elevation):
|
||||
66
transformer/exporter.py
Normal file
66
transformer/exporter.py
Normal file
@@ -0,0 +1,66 @@
|
||||
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))
|
||||
Reference in New Issue
Block a user