import geojson def convert_coordinates_to_geom(coordinates, geometry_type): """ Returns a string with a valid PostGIS command for creating a geometry from an array of coordinates """ if geometry_type == 'POINT': res = f'ST_GeomFromText(\'POINT({coordinates[0]} {coordinates[1]})\'),' return res def import_geosjon_as_sql(filename, sql_filename, schema_name, table_name, column_list, values_list): """ Import a geojson """ with open(filename) as f: g = geojson.load(f) sql_f = open(sql_filename,'w') for f in g['features']: #print(f) sql = f'INSERT INTO "{schema_name}"."{table_name}" (' col_name = '' col_value = '' for i,c in enumerate(column_list): if values_list[i] == 'UUID': col_name += f'"{c}",' col_value += 'uuid_generate_v4(),' elif values_list[i] == 'NOW': col_name += f'"{c}",' col_value += 'now()::timestamptz,' elif c == 'geom': col_name += f'"{c}",' col_value += convert_coordinates_to_geom(f.geometry.coordinates, values_list[i]) elif values_list[i].startswith('properties.'): col_name += f'"{c}",' prop = values_list[i].split('.')[1] col_value += f'\'{f.properties[prop]}\',' else: col_name += f'"{c}",' col_value += f'\'{values_list[i]}\',' sql += f'{col_name[:-1]}) VALUES ({col_value[:-1]});\n' sql_f.write(sql) sql_f.close() if __name__ == '__main__': filename = './gis/arbres.geojson' sql_filename = 'arbres.sql' schema_name= 'gnc_sites' table_name = 't_sites' column_list = ['uuid_sinp', 'id_program', 'name', 'geom', 'timestamp_create', 'id_type', 'obs_txt'] values_list = ['UUID', '2', 'import arbres remarquables', 'POINT', 'NOW', '1', 'import' ] import_geosjon_as_sql(filename, sql_filename, schema_name, table_name, column_list, values_list) # add CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; ??