351 lines
10 KiB
Python
351 lines
10 KiB
Python
import json
|
||
import uuid
|
||
|
||
from scipy.constants import point
|
||
from shapely.creation import points
|
||
|
||
from touying.ImageReproject_python.img_types import Point
|
||
|
||
|
||
# from Ai_tottle.touying.ImageReproject_python import Point
|
||
|
||
|
||
def generate_unique_id():
|
||
"""生成唯一ID"""
|
||
return str(uuid.uuid4())
|
||
|
||
|
||
def process_geojson_data(file_path):
|
||
try:
|
||
with open(file_path, 'r', encoding='utf-8') as f:
|
||
data = json.load(f)
|
||
|
||
# # 处理数据
|
||
# processed_data = process_geojson_data(data)
|
||
# print(processed_data)
|
||
# 写入输出文件
|
||
# with open(output_file, 'w', encoding='utf-8') as f:
|
||
# json.dump(processed_data, f, ensure_ascii=False, indent=2)
|
||
#
|
||
# print(f"数据处理完成,结果已保存到 {output_file}")
|
||
|
||
except FileNotFoundError:
|
||
print(f"错误:文件 {file_path} 未找到")
|
||
except json.JSONDecodeError:
|
||
print("错误:文件内容不是有效的JSON格式")
|
||
except Exception as e:
|
||
print(f"发生未知错误: {str(e)}")
|
||
|
||
"""处理GeoJSON数据,添加唯一ID"""
|
||
processed_data = {
|
||
"Point": [],
|
||
"LineString": [],
|
||
"Polygon": []
|
||
}
|
||
|
||
count = 0
|
||
# 处理Point数据
|
||
for point in data.get("Point", []):
|
||
new_point = point.copy()
|
||
# new_point["id"] = generate_unique_id()
|
||
new_point["coordinates"].append(count)
|
||
count=count+1
|
||
processed_data["Point"].append(new_point)
|
||
|
||
# 处理LineString数据
|
||
for line in data.get("LineString", []):
|
||
new_line = line.copy()
|
||
new_line["id"] = generate_unique_id()
|
||
for point in new_line["coordinates"]:
|
||
point.append(count)
|
||
count = count + 1
|
||
processed_data["LineString"].append(new_line)
|
||
|
||
# 处理Polygon数据
|
||
for polygon in data.get("Polygon", []):
|
||
new_polygon = polygon.copy()
|
||
new_polygon["id"] = generate_unique_id()
|
||
for point in new_polygon["coordinates"]:
|
||
point.append(count)
|
||
count = count + 1
|
||
processed_data["Polygon"].append(new_polygon)
|
||
|
||
return processed_data
|
||
|
||
|
||
def convert_processed_to_points(processed_data):
|
||
local_points = []
|
||
count=0
|
||
if processed_data["Point"] is not None and len(processed_data["Point"]) > 0:
|
||
for v in processed_data["Point"]:
|
||
if v["coordinates"] is not None and len(v["coordinates"]) > 0:
|
||
y = float(v["coordinates"][0]) # 103.99211191
|
||
x = float(v["coordinates"][1]) # 30.76381946
|
||
z = float(v["coordinates"][2]) # 高程
|
||
point_id = v["coordinates"][3]
|
||
point1 = Point(x, y, z, point_id)
|
||
count=count+1
|
||
local_points.append(point1)
|
||
if processed_data["LineString"] is not None and len(processed_data["LineString"]) > 0:
|
||
for v in processed_data["LineString"]:
|
||
if v["coordinates"] is not None and len(v["coordinates"]) > 0:
|
||
for vv in v["coordinates"]:
|
||
y = float(vv[0]) # 103.99211191
|
||
x = float(vv[1]) # 30.76381946
|
||
z = float(vv[2]) # 高程
|
||
point_id = vv[3]
|
||
point1 = Point(x, y, z, point_id)
|
||
count = count + 1
|
||
local_points.append(point1)
|
||
|
||
if processed_data["Polygon"] is not None and len(processed_data["Polygon"]) > 0:
|
||
for v in processed_data["Polygon"]:
|
||
if v["coordinates"] is not None and len(v["coordinates"]) > 0:
|
||
for vv in v["coordinates"]:
|
||
y = float(vv[0]) # 103.99211191
|
||
x = float(vv[1]) # 30.76381946
|
||
z = float(vv[2]) # 高程
|
||
point_id = vv[3]
|
||
point1 = Point(x, y, z, point_id)
|
||
count = count + 1
|
||
local_points.append(point1)
|
||
return local_points
|
||
|
||
|
||
def add_result_to_prcessdata(processed_data, result):
|
||
if processed_data["Point"] is not None and len(processed_data["Point"]) > 0:
|
||
for v in processed_data["Point"]:
|
||
if v["coordinates"] is not None and len(v["coordinates"]) >0:
|
||
# y = float(v["coordinates"][0]) # 103.99211191
|
||
# x = float(v["coordinates"][1]) # 30.76381946
|
||
# z = float(v["coordinates"][2]) # 高程
|
||
# point_id = v["id"]
|
||
# point1 = Point(x, y, z, point_id)
|
||
# local_points.append(point1)
|
||
for re in result:
|
||
if v["coordinates"][3] == re["id"]:
|
||
v["re"] = re
|
||
#
|
||
# point1 = {
|
||
# "u": 10,
|
||
# "v": 10,
|
||
# "id": 41
|
||
# }
|
||
# point2 = {
|
||
# "u": 1910,
|
||
# "v": 10,
|
||
# "id": 42
|
||
# }
|
||
# point3 = {
|
||
# "u": 10,
|
||
# "v": 540,
|
||
# "id": 41
|
||
# }
|
||
# point4 = {
|
||
# "u": 1910,
|
||
# "v": 540,
|
||
# "id": 41
|
||
# }
|
||
# point5 = {
|
||
# "u": 0,
|
||
# "v": 1070,
|
||
# "id": 41
|
||
# }
|
||
# point6 = {
|
||
# "u": 1910,
|
||
# "v": 1070,
|
||
# "id": 41
|
||
# }
|
||
# point7 = {
|
||
# "u": 960,
|
||
# "v": 540,
|
||
# "id": 41
|
||
# }
|
||
# processed_data["Point"].append({
|
||
# "re":point1
|
||
# })
|
||
# processed_data["Point"].append({
|
||
# "re":point2
|
||
# })
|
||
# processed_data["Point"].append({
|
||
# "re":point3
|
||
# })
|
||
# processed_data["Point"].append({
|
||
# "re":point4
|
||
# })
|
||
# processed_data["Point"].append({
|
||
# "re":point5
|
||
# })
|
||
# processed_data["Point"].append({
|
||
# "re":point6
|
||
# })
|
||
# processed_data["Point"].append(
|
||
# {
|
||
# "coordinates": [
|
||
# 103.9925256,
|
||
# 30.76395247,
|
||
# 471.192,
|
||
# 5
|
||
# ],
|
||
# "fillStyle": "red",
|
||
# "radius": 7,
|
||
# "comment": "point6",
|
||
# "re": {
|
||
# "u": 0,
|
||
# "v": 1070,
|
||
# "id": 41
|
||
# }
|
||
# }
|
||
# )
|
||
#
|
||
# processed_data["Point"].append(
|
||
# {
|
||
# "coordinates": [
|
||
# 103.9925256,
|
||
# 30.76395247,
|
||
# 471.192,
|
||
# 5
|
||
# ],
|
||
# "fillStyle": "red",
|
||
# "radius": 7,
|
||
# "comment": "point6",
|
||
# "re": {
|
||
# "u": 10,
|
||
# "v": 10,
|
||
# "id": 42
|
||
# }
|
||
# }
|
||
# )
|
||
#
|
||
# processed_data["Point"].append(
|
||
# {
|
||
# "coordinates": [
|
||
# 103.9925256,
|
||
# 30.76395247,
|
||
# 471.192,
|
||
# 5
|
||
# ],
|
||
# "fillStyle": "red",
|
||
# "radius": 7,
|
||
# "comment": "point6",
|
||
# "re": {
|
||
# "u": 1910,
|
||
# "v": 10,
|
||
# "id": 43
|
||
# }
|
||
# }
|
||
# )
|
||
#
|
||
# processed_data["Point"].append(
|
||
# {
|
||
# "coordinates": [
|
||
# 103.9925256,
|
||
# 30.76395247,
|
||
# 471.192,
|
||
# 5
|
||
# ],
|
||
# "fillStyle": "red",
|
||
# "radius": 7,
|
||
# "comment": "point6",
|
||
# "re": {
|
||
# "u": 10,
|
||
# "v": 540,
|
||
# "id": 44
|
||
# }
|
||
# }
|
||
# )
|
||
#
|
||
# processed_data["Point"].append(
|
||
# {
|
||
# "coordinates": [
|
||
# 103.9925256,
|
||
# 30.76395247,
|
||
# 471.192,
|
||
# 5
|
||
# ],
|
||
# "fillStyle": "red",
|
||
# "radius": 7,
|
||
# "comment": "point6",
|
||
# "re": {
|
||
# "u": 1910,
|
||
# "v": 540,
|
||
# "id": 45
|
||
# }
|
||
# }
|
||
# )
|
||
#
|
||
# processed_data["Point"].append(
|
||
# {
|
||
# "coordinates": [
|
||
# 103.9925256,
|
||
# 30.76395247,
|
||
# 471.192,
|
||
# 5
|
||
# ],
|
||
# "fillStyle": "red",
|
||
# "radius": 7,
|
||
# "comment": "point6",
|
||
# "re": {
|
||
# "u": 1910,
|
||
# "v": 1070,
|
||
# "id": 46
|
||
# }
|
||
# }
|
||
# )
|
||
#
|
||
# processed_data["Point"].append(
|
||
# {
|
||
# "coordinates": [
|
||
# 103.9925256,
|
||
# 30.76395247,
|
||
# 471.192,
|
||
# 5
|
||
# ],
|
||
# "fillStyle": "red",
|
||
# "radius": 7,
|
||
# "comment": "point6",
|
||
# "re": {
|
||
# "u": 960,
|
||
# "v": 540,
|
||
# "id": 47
|
||
# }
|
||
# }
|
||
# )
|
||
|
||
|
||
|
||
|
||
|
||
|
||
if processed_data["LineString"] is not None and len(processed_data["LineString"]) > 0:
|
||
for v in processed_data["LineString"]:
|
||
if v["coordinates"] is not None and len(v["coordinates"]) > 0:
|
||
v["re"] = []
|
||
#
|
||
# y = float(vv[0]) # 103.99211191
|
||
# x = float(vv[1]) # 30.76381946
|
||
# z = float(vv[2]) # 高程
|
||
# point_id = v["id"]
|
||
# point1 = Point(x, y, z, point_id)
|
||
# local_points.append(point1)
|
||
for re in result:
|
||
for vv in v["coordinates"]:
|
||
if vv[3]== re["id"]:
|
||
v["re"].append(re)
|
||
# if v["coordinates"][3] == re["id"]:
|
||
# v["re"].append(re)
|
||
|
||
|
||
if processed_data["Polygon"] is not None and len(processed_data["Polygon"]) > 0:
|
||
for v in processed_data["Polygon"]:
|
||
if v["coordinates"] is not None and len(v["coordinates"]) > 0:
|
||
v["re"] = []
|
||
for re in result:
|
||
for vv in v["coordinates"]:
|
||
if vv[3]== re["id"]:
|
||
v["re"].append(re)
|
||
# if v["coordinates"][3] == re["id"]:
|
||
# v["re"].append(re)
|
||
|
||
return processed_data
|