Ticket #87: routing_core_wrappers_031207.patch

File routing_core_wrappers_031207.patch, 3.2 KB (added by rodj59, 3 years ago)
  • .sql

    old new  
    280280$$ 
    281281DECLARE  
    282282BEGIN 
     283        EXECUTE 'select update_cost_from_distance('||quote_literal(geom_table) ||',''the_geom'',''length'')'; 
     284        RETURN; 
     285END; 
     286$$ 
     287LANGUAGE 'plpgsql' VOLATILE STRICT;  
     288CREATE OR REPLACE FUNCTION update_cost_from_distance(geom_table varchar,geocol varchar)  
     289       RETURNS VOID AS 
     290$$ 
     291DECLARE  
     292BEGIN 
     293        EXECUTE 'select update_cost_from_distance('||quote_literal(geom_table) ||','||quote_literal(geocol)||',''length'')'; 
     294        RETURN; 
     295END; 
     296$$ 
     297LANGUAGE 'plpgsql' VOLATILE STRICT;  
     298 
     299CREATE OR REPLACE FUNCTION update_cost_from_distance(geom_table varchar,geocol varchar,geodistfn varchar)  
     300       RETURNS VOID AS 
     301$$ 
     302DECLARE  
     303BEGIN 
     304        EXECUTE 'SELECT update_cost_from_distance('||quote_literal(geom_table)||','||quote_literal(geocol)||','||quote_literal(geodistfn)||',''cost'')'; 
     305$$ 
     306LANGUAGE 'plpgsql' VOLATILE STRICT;  
     307 
     308 
     309CREATE OR REPLACE FUNCTION update_cost_from_distance(geom_table varchar,geocol varchar,geodistfn varchar,costcol varchar)  
     310       RETURNS VOID AS 
     311$$ 
     312DECLARE  
     313BEGIN 
    283314        BEGIN 
    284315          EXECUTE 'CREATE INDEX ' || quote_ident(geom_table) ||  
    285316                  '_edge_id_idx ON ' || quote_ident(geom_table) ||  
     
    289320                RAISE NOTICE 'Not creating index, already there'; 
    290321        END; 
    291322 
     323    BEGIN 
     324                EXECUTE 'ALTER TABLE '||quote_ident(geom_table)||'_edges  add column '||quote_ident(costcol)||' double precision'; 
     325        EXCEPTION 
     326                WHEN DUPLICATE_COLUMN THEN 
     327                RAISE NOTICE 'Not creating cost column, already there'; 
     328        END; 
    292329        EXECUTE 'UPDATE ' || quote_ident(geom_table) ||  
    293               '_edges SET cost = (SELECT sum( length( g.the_geom ) ) FROM ' ||  
     330              '_edges SET '||quote_ident(costcol)||' = (SELECT sum( '||quote_ident(geodistfn)||'( g.'||quote_ident(geocol)||' ) ) FROM ' ||  
    294331              quote_ident(geom_table) ||  
    295332              ' g WHERE g.edge_id = id GROUP BY id)'; 
    296  
    297         RETURN; 
    298333END; 
    299334$$ 
    300335LANGUAGE 'plpgsql' VOLATILE STRICT;  
    301336 
     337CREATE OR REPLACE FUNCTION time_wgs84(geom geometry,tname varchar,geocol varchar) 
     338RETURNS DOUBLE PRECISION AS 
     339$$ 
     340DECLARE 
     341        len DOUBLE PRECISION; 
     342        speed DOUBLE PRECISION; 
     343        astxt varchar; 
     344BEGIN 
     345                SELECT length_wgs84(geom) into len; 
     346                SELECT astext(geom) into astxt;  -- someone might know a better way to do this ??? 
     347                EXECUTE 'SELECT speed FROM '||quote_ident(tname)||' where astext('||quote_ident(geocol)||') = '||quote_literal(astxt) INTO speed ; 
     348                return (len/1000.0)/speed; 
     349END 
     350$$ 
     351LANGUAGE 'plpgsql' VOLATILE STRICT; 
     352 
     353-- 
     354-- A demo only function, neet to specify table name & geometry column name for particlar app. 
     355-- 
     356CREATE OR REPLACE FUNCTION time_wgs84(geom geometry) 
     357RETURNS DOUBLE PRECISION AS 
     358$$ 
     359DECLARE 
     360        ans DOUBLE PRECISION; 
     361BEGIN 
     362                SELECT  time_wgs84(geom,'splitroadnet','wkb_geometry') into ans; 
     363                return ans; 
     364END 
     365$$ 
     366LANGUAGE 'plpgsql' VOLATILE STRICT; 
     367 
     368 
     369CREATE OR REPLACE FUNCTION length_wgs84(geom geometry) 
     370RETURNS DOUBLE PRECISION AS 
     371$$ 
     372DECLARE 
     373        ans DOUBLE PRECISION; 
     374BEGIN 
     375                SELECT st_length_spheroid(geom,'SPHEROID["WGS_1984",6378173,298.257223563]') INTO ans; 
     376                return ans ; 
     377END 
     378$$ 
     379LANGUAGE 'plpgsql' VOLATILE STRICT; 
    302380 
    303381CREATE TYPE geoms AS 
    304382(