sehe ich auch so.
Ich “probiere” da nichts aus, ich nehme die Daten so wie sie sind. Dabei interpretiere ich keinerlei irgendwie händisch eingetragenen Informationen wie “das ist die Sub-Area von der Master-Area”, sondern benutze dafür Spatiale Abfragen. “In welchen Grenzen liegt ein bestimmtes Gebiet?” - also allein die Geometrie der Objekte.
Dauert etwas (ca 20 Minuten für die 6699 Administrativen Grenzen Polens), sollte aber 100% sicher sein.
insert into boundaries
select -osm_id osm_id,'PL','admin',name,admin_level,wno_FindPath(-osm_id,1),st_multi(way),st_pointonsurface(way)
from planet_osm_polygon
where boundary = 'administrative'
and admin_level in ('2','3','4','5','6','7','8','9','10','11','12')
and osm_id < 0
and st_contains((select way from planet_osm_polygon where osm_id=-:country),pointonsurface)
;
und der Kern von wno_FindPath:
temp = (select array_agg("outer") from (
select o.admin_level,-o.osm_id "outer",-i.osm_id "inner"
from planet_osm_polygon o,
planet_osm_polygon i
where st_contains(o.way,i.pointonsurface)
and i.boundary='administrative'
and o.boundary='administrative'
and i.osm_id < 0
and o.osm_id < 0
and i.osm_id = -boundary_id
and o.admin_level::float <= al -- wegen 4x al 9.5 in Ungarn!!!
order by wno_number(o.admin_level)
) foo
right outer join generate_series(2,11) gal
on (foo.admin_level::int = gal)
);
Sorry, für den GIS-Laien wohl etwas undeutlich (und für einen richtigen GIS-Profi eventuell zu umständlich?) aber ich glaube, meine “Denke” sollte rüberkommen.
Gruss
walter