@@ -14,61 +14,35 @@ async def get_tree_by_id(session: AsyncSession, tree_id: int):
1414 return row
1515
1616async def get_tree_by_species (session : AsyncSession ):
17- # Alias for subquery
18- gef = aliased (StreetTreeRegister )
19-
20- stmt = (
21- select (
22- StreetTreeRegister .id ,
23- StreetTreeRegister .tree_number ,
24- StreetTreeRegister .street ,
25- StreetTreeRegister .species ,
26- StreetTreeRegister .type ,
27- func .round (
28- func .ST_X (func .ST_Transform (StreetTreeRegister .geom , 4326 )).cast ('numeric' ),
29- 6
30- ).label ("lon" ),
31- func .round (
32- func .ST_Y (func .ST_Transform (StreetTreeRegister .geom , 4326 )).cast ('numeric' ),
33- 6
34- ).label ("lat" ),
35- case (
36- (
37- StreetTreeRegister .species .ilike ("%Tilia%" ), 1 ,
38- ),
39- (
40- StreetTreeRegister .species .ilike ("%Acer%" ), 2 ,
41- ),
42- (
43- StreetTreeRegister .species .ilike ("%Quercus%" ), 3 ,
44- ),
45- (
46- StreetTreeRegister .species .ilike ("%Fagus%" ), 4 ,
47- ),
48- (
49- StreetTreeRegister .species .ilike ("%Betula%" ), 5 ,
50- ),
51- (
52- StreetTreeRegister .species .ilike ("%Carpinus%" ), 6 ,
53- ),
54- else_ = 0 ,
55- ).label ("species_index" )
56- )
57- .where (
58- StreetTreeRegister .type == 'bestand' ,
59- not_ (
60- exists ()
61- .where (
62- and_ (
63- gef .type == 'gefaellt' ,
64- gef .tree_number == StreetTreeRegister .tree_number ,
65- gef .street == StreetTreeRegister .street ,
66- )
67- )
68- )
69- )
70- .order_by (StreetTreeRegister .species )
71- )
17+ stmt = text ('''
18+ SELECT
19+ tr.id,
20+ tr.tree_number,
21+ tr.street,
22+ tr.species,
23+ tr.type,
24+ ROUND(ST_X(ST_Transform(tr.geom, 4326))::numeric, 6) AS lon,
25+ ROUND(ST_Y(ST_Transform(tr.geom, 4326))::numeric, 6) AS lat,
26+ CASE
27+ WHEN tr.species ILIKE '%Tilia%' THEN 1
28+ WHEN tr.species ILIKE '%Acer%' THEN 2
29+ WHEN tr.species ILIKE '%Quercus%' THEN 3
30+ WHEN tr.species ILIKE '%Fagus%' THEN 4
31+ WHEN tr.species ILIKE '%Betula%' THEN 5
32+ WHEN tr.species ILIKE '%Carpinus%' THEN 6
33+ ELSE 0
34+ END AS species_index
35+ FROM flensburg.street_tree_register tr
36+ WHERE tr.type = 'bestand'
37+ AND NOT EXISTS (
38+ SELECT 1
39+ FROM flensburg.street_tree_register gef
40+ WHERE gef.type = 'gefaellt'
41+ AND gef.tree_number = tr.tree_number
42+ AND gef.street = tr.street
43+ )
44+ ORDER BY tr.species
45+ ''' )
7246
7347 result = await session .execute (stmt )
7448 rows = result .mappings ().all ()
0 commit comments