Ok andiamo.
(a)
SELECT MAX(A.kend) - MIN( A.kstart) as a
FROM Table A
(b)
MODIFICATO Supponendo che gid sia PK per la tabella B ...
with CTE( max_kend, min_x) as (
SELECT MAX(A.kend), NULL
FROM TableA A
)
select B.gid, MAX(CTE.max_kend) - B.min_x as b
FROM TableB B
cross join CTE
(c)
with CTE( max_kend, min_x) as (
SELECT MAX(A.kend), NULL
FROM TableA A
),
r_b as (
select B.gid, MAX(CTE.max_kend) - B.min_x as b
FROM TableB B
cross join CTE
),
r_a as (
SELECT MAX(A.kend) - MIN( A.kstart) as a
FROM Table A
)
select r_b.gid, r_a.a / r_b.b as my_ratio
from r_a cross join r_b
(d)
with CTE( max_kend, min_x) as (
SELECT MAX(A.kend), NULL
FROM TableA A
),
r_b as (
select B.gid, MAX(CTE.max_kend) - B.min_x as b
FROM TableB B
cross join CTE
),
r_a as (
SELECT MAX(A.kend) - MIN( A.kstart) as a
FROM Table A
),
r_ratio as (
select r_b.gid, r_a.a / r_b.b as my_ratio
from r_a cross join r_b
)
select ST_Interpolate(A.the_geom, r_ratio.my_ratio )
from TableB B
inner join r_ratio on B.gid = r_ratio.gid
(e, f)
with CTE( max_kend, min_x) as (
SELECT MAX(A.kend), NULL
FROM TableA A
),
r_b as (
select B.gid, MAX(CTE.max_kend) - B.min_x as b
FROM TableB B
cross join CTE
),
r_a as (
SELECT MAX(A.kend) - MIN( A.kstart) as a
FROM Table A
),
r_ratio as (
select r_b.gid, r_a.a / r_b.b as my_ratio
from r_a cross join r_b
),
r_new_int as (
select ST_Interpolate(A.the_geom, r_ratio.my_ratio ) as new_int
from TableB B
inner join r_ratio on B.gid = r_ratio.gid
)
UPDATE tableB
set tableB.the_geom = n.new_int
from r_new_int n
where
n.gid = tableB.gid and
tableB.the_geom is NULL
disclaimer, non testet.
MODIFICATO
with CTE( max_kend) as (
SELECT MAX(A.kend)
FROM centerline A
),
r_b as (
select B.ctrl_sec_no,B.gid, MAX(CTE.max_kend) - B.km as b
FROM land_inventory B cross join CTE group by B.gid,B.ctrl_sec_no,B.km
),
r_a as (
SELECT MAX(A.kend) - MIN(A.kstart) as a
FROM centerline A
),
r_ratio as (
select r_b.gid, r_b.b / r_a.a as my_ratio
from r_a cross join r_b
),
r_new_int as (
select
B.gid,
r_ratio.my_ratio,
B.ctrl_sec_no,B.km,
ST_AsText(ST_Envelope(ST_Collect(
ST_line_interpolate_point(A.the_geom, r_ratio.my_ratio
)))) as new_int
from
centerline A inner join
land_inventory B
on A.ctrl_sec_no = B.ctrl_sec_no
inner join
r_ratio on B.gid = r_ratio.gid
group by B.ctrl_sec_no,B.gid,r_ratio.my_ratio,B.km order by B.ctrl_sec_no
)
UPDATE land_inventory
set the_geom = n.new_int
from r_new_int n
where
n.gid = land_inventory.gid and
land_inventory.the_geom is NULL;