tools: bounds importer
This commit is contained in:
55
tools/import_bounds/save_queries.py
Normal file
55
tools/import_bounds/save_queries.py
Normal file
@ -0,0 +1,55 @@
|
||||
import os
|
||||
import json
|
||||
|
||||
# Root directory where the folders are located
|
||||
ROOT_DIR = "./"
|
||||
OUTPUT_FILES = {}
|
||||
|
||||
def get_insert_query(entity_id, entity_type, geometry):
|
||||
"""Generate SQL insert query for bounds."""
|
||||
# If it's a GeometryCollection, extract and convert to MultiPolygon
|
||||
if geometry.get('type') == 'GeometryCollection':
|
||||
geometry = {
|
||||
"type": "MultiPolygon",
|
||||
"coordinates": [
|
||||
geom["coordinates"] for geom in geometry["geometries"] if geom["type"] == "Polygon"
|
||||
]
|
||||
}
|
||||
|
||||
geojson_str = json.dumps(geometry).replace("'", "''") # Escape single quotes for SQL
|
||||
|
||||
query = f"""
|
||||
INSERT INTO bounds (entity_id, entity_type, geometry)
|
||||
VALUES ({entity_id}, '{entity_type}',
|
||||
ST_Transform(
|
||||
ST_Multi(
|
||||
ST_GeomFromGeoJSON('{geojson_str}'::JSON)
|
||||
),
|
||||
3857)
|
||||
);
|
||||
"""
|
||||
return query
|
||||
|
||||
def process_geojson_files():
|
||||
"""Process all GeoJSON files and write SQL inserts to appropriate files."""
|
||||
for folder in os.listdir(ROOT_DIR):
|
||||
folder_path = os.path.join(ROOT_DIR, folder)
|
||||
if os.path.isdir(folder_path):
|
||||
entity_type = folder
|
||||
sql_filename = f"{entity_type}.sql"
|
||||
|
||||
with open(sql_filename, "w", encoding="utf-8") as sql_file:
|
||||
for file in os.listdir(folder_path):
|
||||
if file.endswith(".geojson"):
|
||||
try:
|
||||
entity_id = int(os.path.splitext(file)[0])
|
||||
file_path = os.path.join(folder_path, file)
|
||||
with open(file_path, "r", encoding="utf-8") as f:
|
||||
geometry = json.load(f)
|
||||
query = get_insert_query(entity_id, entity_type, geometry)
|
||||
sql_file.write(query + "\n")
|
||||
except Exception as e:
|
||||
print(f"Error processing {file}: {e}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
process_geojson_files()
|
Reference in New Issue
Block a user