Donc, j'ai une situation où j'ai une tonne de lignes de lignes d'une route brisée, où j'ai besoin de les unir ensemble en utilisant Shapely LineMerge ou Union OU PostGIS ST_Union.Importer un type de géométrie PostGIS dans Python en tant que type de géométrie à partir de Shapely?
Mon idée maintenant est d'utiliser Shapely pour importer le Linestrings en tant que types de géométrie. Associez-les ou fusionnez-les à l'aide de Shapely, puis réexportez-les vers une table de résultats dans la base de données.
Cependant, le type de géométrie dans la base de données PostGIS est juste un tas de charabia. Comme ...
01020000020e61000....
Comment puis-je traduire de la base de données à un type de géométrie Python à l'aide Shapely, faire quelques manipulations, puis l'exporter de nouveau à une base de données?
Actuellement, il s'agit de mon code, il s'agit simplement d'importer la chaîne d'objet geom de la base de données et de lancer des erreurs car ce n'est pas un type de géométrie.
def create_shortest_route_geom(shortest_routes):
conn = connect_to_database()
cur = conn.cursor()
shortest_route_geoms = []
for route in shortest_routes:
source = str(int(route[1]))
target = str(int(route[2]))
query = 'SELECT the_geom FROM public.ways WHERE target_osm = ' + target + ' AND source_osm = ' + source + ' OR target_osm = ' + source + ' AND source_osm = ' + target + ';'
cur.execute(query)
total_geom = cur.fetchone()
for index, node in enumerate(route):
try:
source = str(int(node))
target = str(int(route[index + 1]))
query = 'SELECT the_geom FROM public.ways WHERE target_osm = ' + target + ' AND source_osm = ' + source + ' OR target_osm = ' + source + ' AND source_osm = ' + target + ';'
cur.execute(query)
geom = cur.fetchone()
query = "SELECT ST_Union("+str(geom[0])+","+str(total_geom[0])+")"
cur.execute(query)
total_geom = cur.fetchone()
except IndexError:
print "Last element"
shortest_route_geoms.insert(total_geom)
return shortest_route_geoms
Au lieu de chaînes de concaténation de valeurs à des requêtes SQL s'il vous plaît utiliser des espaces réservés. Rend le code plus lisible, supprime le besoin de gérer manuellement les citations et réduit le risque d'injections en général. –