import json from shapely.geometry import MultiPoint, Point def get_convex_hull_from_json(json_data): """ JSON 형식의 위경도 데이터로 Convex Hull을 계산합니다. :param json_data: 위경도 데이터가 포함된 JSON 리스트 :return: Convex Hull의 좌표 리스트 (폴리곤 또는 포인트) """ # JSON 데이터를 파싱하여 [longitude, latitude] 형태로 변환 points = [(point["lon"], point["lat"]) for point in json_data] # 중복 제거 unique_points = list(set(points)) if len(unique_points) < 3: if len(unique_points) == 1: return unique_points # 단일 포인트 반환 elif len(unique_points) == 2: return unique_points + [unique_points[0]] # 두 점은 선분으로 처리 else: raise ValueError("Convex Hull을 계산하려면 최소 3개의 고유한 포인트가 필요합니다.") # MultiPoint로 Convex Hull 계산 multi_point = MultiPoint(unique_points) hull = multi_point.convex_hull # 결과가 폴리곤일 경우 좌표 리스트 반환, 단일 포인트일 경우 포인트 반환 if isinstance(hull, Point): return [list(hull.coords)[0]] else: # 폴리곤의 외곽 좌표 (폐쇄된 형태로 첫 포인트 반복) return list(hull.exterior.coords)