1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
import json
def determine_geometry(coords):
if isinstance(coords[0], (float, int)): # Point
return "Point", coords
elif isinstance(coords[0][0], (float, int)): # LineString or Polygon
if coords[0] == coords[-1]:
return "Polygon", [coords]
else:
return "LineString", coords
elif isinstance(coords[0], list): # MultiPolygon
return "MultiPolygon", [coords]
else:
raise ValueError("Unknown geometry type")
def create_feature(name, code, parentcode, gisdata):
geom_type, geom_coords = determine_geometry(gisdata)
return {
"type": "Feature",
"properties": {"name": name, "code": code, "parentcode": parentcode}, # 附加的字段信息
"geometry": {"type": geom_type, "coordinates": geom_coords}
}
# 示例数据
places = [
{"name": "地方A", "code": "001", "parentcode": "000", "gisdata": [30, 10]}, # 点
{"name": "地方B", "code": "002", "parentcode": "000", "gisdata": [[10, 10], [20, 20], [10, 30]]}, # 线
{"name": "地方C", "code": "003", "parentcode": "000", "gisdata": [[35, 10], [45, 45], [15, 40], [10, 20], [35, 10]]} # 多边形
# 添加更多地方...
]
# 创建GeoJSON
geojson = {"type": "FeatureCollection", "features": []}
for place in places:
feature = create_feature(place["name"], place["code"], place["parentcode"], place["gisdata"])
geojson["features"].append(feature)
# 输出GeoJSON
print(json.dumps(geojson, indent=4))
|