95 lines
2.2 KiB
Python
95 lines
2.2 KiB
Python
|
|
# from fastapi import FastAPI
|
||
|
|
# from qgis.core import QgsVectorLayer
|
||
|
|
# from qgis_bootstrap import start_qgis
|
||
|
|
|
||
|
|
# app = FastAPI()
|
||
|
|
|
||
|
|
# # Start QGIS headless
|
||
|
|
# qgs = start_qgis()
|
||
|
|
|
||
|
|
# @app.get("/")
|
||
|
|
# def root():
|
||
|
|
# return {"status": "QGIS API Ready"}
|
||
|
|
|
||
|
|
# @app.get("/extent")
|
||
|
|
# def extent():
|
||
|
|
# layer = QgsVectorLayer("data/exmpl.geojson", "jalan", "ogr")
|
||
|
|
|
||
|
|
# if not layer.isValid():
|
||
|
|
# return {"error": "Layer tidak valid"}
|
||
|
|
|
||
|
|
# ext = layer.extent()
|
||
|
|
# return {
|
||
|
|
# "xmin": ext.xMinimum(),
|
||
|
|
# "ymin": ext.yMinimum(),
|
||
|
|
# "xmax": ext.xMaximum(),
|
||
|
|
# "ymax": ext.yMaximum(),
|
||
|
|
# }
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
from fastapi import FastAPI, BackgroundTasks
|
||
|
|
from qgis_bootstrap import start_qgis
|
||
|
|
# from cleansing_service import load_layer, cleansing_layer
|
||
|
|
from full_cleansing_service import load_layer, cleansing_layer
|
||
|
|
|
||
|
|
app = FastAPI()
|
||
|
|
|
||
|
|
qgs = start_qgis()
|
||
|
|
|
||
|
|
@app.get("/")
|
||
|
|
def root():
|
||
|
|
return {"status": "QGIS Cleansing API Running"}
|
||
|
|
|
||
|
|
@app.get("/clean/{table_name}")
|
||
|
|
def clean_table(table_name: str):
|
||
|
|
|
||
|
|
layer = load_layer(table_name)
|
||
|
|
if not layer.isValid():
|
||
|
|
return {"error": f"Table '{table_name}' tidak valid atau tidak ditemukan."}
|
||
|
|
|
||
|
|
print(layer)
|
||
|
|
result = cleansing_layer(layer)
|
||
|
|
|
||
|
|
summary = result["summary"]
|
||
|
|
|
||
|
|
return {
|
||
|
|
"table": table_name,
|
||
|
|
"summary": summary,
|
||
|
|
"message": "Cleansing selesai"
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
@app.post("/process/{table_name}")
|
||
|
|
def process_table(table_name: str, background: BackgroundTasks):
|
||
|
|
background.add_task(run_clean_table, table_name)
|
||
|
|
return {"status": "ACCEPTED", "table": table_name}
|
||
|
|
|
||
|
|
|
||
|
|
def run_clean_table(table_name: str):
|
||
|
|
print(f"\n=== Mulai cleansing untuk tabel: {table_name} ===")
|
||
|
|
|
||
|
|
layer = load_layer(table_name)
|
||
|
|
if not layer.isValid():
|
||
|
|
print(f"[ERROR] Table '{table_name}' tidak valid atau tidak ditemukan.")
|
||
|
|
return
|
||
|
|
|
||
|
|
print("[OK] Layer valid, mulai cleansing...")
|
||
|
|
|
||
|
|
result = cleansing_layer(layer)
|
||
|
|
|
||
|
|
summary = result["summary"]
|
||
|
|
clean_layer = result["clean_layer"]
|
||
|
|
|
||
|
|
print("\n=== RINGKASAN CLEANSING ===")
|
||
|
|
for k, v in summary.items():
|
||
|
|
print(f"{k}: {v}")
|
||
|
|
|
||
|
|
# TODO: save back ke PostGIS
|
||
|
|
# save_to_postgis(clean_layer, table_name)
|
||
|
|
|
||
|
|
print(f"=== Cleansing selesai untuk tabel: {table_name} ===\n")
|