Changeset adc0078 in osmose-backend


Ignore:
Timestamp:
Jan 13, 2013 2:17:06 PM (7 years ago)
Author:
Frédéric Rodrigo <frodrigo@…>
Branches:
master
Children:
e53467c
Parents:
c5c826f
git-author:
Frédéric Rodrigo <frodrigo@…> (13/01/2013 11:25:20)
git-committer:
Frédéric Rodrigo <frodrigo@…> (13/01/2013 14:17:06)
Message:

Add support for Missing power tower or pole on analyser_osmosis_powerline

File:
1 edited

Legend:

Unmodified
Added
Removed
  • analysers/analyser_osmosis_powerline.py

    r08bcd03 radc0078  
    181181""" 
    182182 
     183sql50 = """ 
     184CREATE TEMP TABLE power_segement AS 
     185SELECT 
     186    id, 
     187    ST_MakeLine(p1, p2) AS seg, 
     188    ST_Length(ST_MakeLine(p1, p2)::geography) AS l 
     189FROM 
     190    ( 
     191    SELECT 
     192        ways.id, 
     193        generate_series(1,ST_NPoints(linestring)-1) AS n, 
     194        ST_PointN(linestring, generate_series(1,ST_NPoints(linestring)-1)) AS p1, 
     195        ST_PointN(linestring, generate_series(2,ST_NPoints(linestring))) AS p2 
     196    FROM 
     197        {0}ways AS ways 
     198    WHERE 
     199        ways.tags?'power' AND 
     200        ways.tags->'power' = 'line' AND 
     201        (NOT ways.tags?'tunnel' OR NOT ways.tags->'tunnel' IN ('yes', 'true')) AND 
     202        (NOT ways.tags?'submarine' OR NOT ways.tags->'submarine' IN ('yes', 'true')) AND 
     203        array_length(nodes, 1) >= 30 
     204    ) AS d 
     205""" 
     206 
     207sql51 = """ 
     208CREATE TEMP TABLE power_segement_stddev AS 
     209SELECT 
     210    id, 
     211    stddev(l) AS ll, 
     212    avg(l) AS a 
     213FROM 
     214    power_segement 
     215WHERE 
     216    l > 50 AND l < 800 
     217GROUP BY 
     218    id 
     219HAVING 
     220    stddev(l)/avg(l) < 0.25 AND 
     221    COUNT(*) > 20 
     222""" 
     223 
     224sql52 = """ 
     225SELECT 
     226    power_segement.id, 
     227    ST_AsText(ST_Line_Interpolate_Point( 
     228        power_segement.seg, 
     229        generate_series(1, (power_segement.l / power_segement_stddev.a)::int-1) 
     230            /round(power_segement.l / power_segement_stddev.a) 
     231    )) 
     232FROM 
     233    power_segement 
     234    JOIN power_segement_stddev ON 
     235        power_segement.id = power_segement_stddev.id AND 
     236        power_segement.l / power_segement_stddev.a > 1.8 
     237WHERE 
     238    power_segement.l / power_segement_stddev.a < 8 
     239ORDER BY 
     240    power_segement.id, 
     241    power_segement.l / power_segement_stddev.a 
     242""" 
     243 
    183244class Analyser_Osmosis_Powerline(Analyser_Osmosis): 
    184245 
     
    189250        self.classs[3] = {"item":"7040", "level": 3, "tag": ["power"], "desc":{"fr":"Connexion entre différents voltages", "en":"Connection between different voltages"} } 
    190251        self.classs_change[4] = {"item":"7040", "level": 3, "tag": ["power"], "desc":{"en":"Non power node on power way"} } 
     252        self.classs_change[5] = {"item":"7040", "level": 3, "tag": ["power"], "desc":{"fr": "Pylône ou poteau électrique manquant", "en":"Missing power tower or pole"} } 
    191253        self.callback40 = lambda res: {"class":4, "data":[self.node_full, self.positionAsText]} 
     254        self.callback50 = lambda res: {"class":5, "data":[self.way_full, self.positionAsText]} 
    192255 
    193256    def analyser_osmosis(self): 
     
    198261    def analyser_osmosis_all(self): 
    199262        self.run(sql40.format(""), self.callback40) 
     263        self.run(sql50.format("")) 
     264        self.run(sql51) 
     265        self.run(sql52, self.callback50) 
    200266 
    201267    def analyser_osmosis_touched(self): 
    202268        self.run(sql40.format("touched_"), self.callback40) 
     269        self.run(sql50.format("touched_")) 
     270        self.run(sql51) 
     271        self.run(sql52, self.callback50) 
Note: See TracChangeset for help on using the changeset viewer.