44 lines
1.2 KiB
Python
Executable File
44 lines
1.2 KiB
Python
Executable File
import os
|
|
import pandas as pd
|
|
import numpy as np
|
|
from shapely.geometry import base as shapely_base
|
|
from shapely.geometry.base import BaseGeometry
|
|
from datetime import datetime
|
|
|
|
|
|
def safe_json(value):
|
|
"""Konversi aman untuk semua tipe numpy/pandas/shapely ke tipe JSON-serializable"""
|
|
if isinstance(value, (np.int64, np.int32)):
|
|
return int(value)
|
|
if isinstance(value, (np.float64, np.float32)):
|
|
return float(value)
|
|
if isinstance(value, pd.Timestamp):
|
|
return value.isoformat()
|
|
if isinstance(value, shapely_base.BaseGeometry):
|
|
return str(value) # convert to WKT string
|
|
if pd.isna(value):
|
|
return None
|
|
return value
|
|
|
|
|
|
def str_to_date(raw_date: str):
|
|
if raw_date:
|
|
try:
|
|
return datetime.strptime(raw_date, "%Y-%m-%d").date()
|
|
except Exception as e:
|
|
print("[WARNING] Tidak bisa parse dateCreated:", e)
|
|
return None
|
|
|
|
|
|
def save_xml_to_sld(xml_string, filename):
|
|
folder_path = 'style_temp'
|
|
os.makedirs(folder_path, exist_ok=True)
|
|
|
|
file_path = os.path.join(folder_path, f"{filename}.sld")
|
|
|
|
with open(file_path, "w", encoding="utf-8") as f:
|
|
f.write(xml_string)
|
|
|
|
return file_path
|
|
|