الاسم
toTopoGeom — تحوّل شكلًا هندسيًا بسيطًا إلى TopoGeometry.
المختصر
topogeometry toTopoGeom(geometry geom, varchar toponame, integer layer_id, float8 tolerance);
topogeometry toTopoGeom(geometry geom, topogeometry topogeom, float8 tolerance);
الوصف
تحوّل شكلًا هندسيًا بسيطًا إلى TopoGeometry.
ستُضاف العناصر الطوبولوجية الأولية اللازمة لتمثيل الشكل الهندسي المُدخل إلى الطوبولوجيا الأساسية، مع احتمال تقسيم العناصر الموجودة، وستُربط بكائن TopoGeometry الناتج في جدول relation.
ستحتفظ كائنات TopoGeometry الموجودة (باستثناء محتمل لـ topogeom إن أُعطي) بأشكالها.
عند إعطاء tolerance فستُستخدم لالتقاط الشكل الهندسي المُدخل إلى العناصر الأولية الموجودة.
في الصيغة الأولى سيُنشأ كائن TopoGeometry جديد للطبقة المعطاة (layer_id) من الطوبولوجيا المعطاة (toponame).
في الصيغة الثانية ستُضاف العناصر الأولية الناتجة عن التحويل إلى كائن TopoGeometry الموجود مسبقًا (topogeom)، مع احتمال إضافة حيّز إلى شكله النهائي. ولكي يحل الشكل الجديد محل القديم بالكامل، راجع clearTopoGeom.
متاحة منذ: 2.0
حُسّنت في: 2.1.0 أضيفت الصيغة التي تأخذ كائن TopoGeometry موجودًا.
أمثلة
هذا سير عمل كامل مستقل بذاته
-- do this if you don't have a topology setup already
-- creates topology not allowing any tolerance
SELECT topology.CreateTopology('topo_boston_test', 2249);
-- create a new table
CREATE TABLE nei_topo(gid serial primary key, nei varchar(30));
--add a topogeometry column to it
SELECT topology.AddTopoGeometryColumn('topo_boston_test', 'public', 'nei_topo', 'topo', 'MULTIPOLYGON') As new_layer_id;
new_layer_id
-----------
1
--use new layer id in populating the new topogeometry column
-- we add the topogeoms to the new layer with 0 tolerance
INSERT INTO nei_topo(nei, topo)
SELECT nei, topology.toTopoGeom(geom, 'topo_boston_test', 1)
FROM neighborhoods
WHERE gid BETWEEN 1 and 15;
--use to verify what has happened --
SELECT * FROM
topology.TopologySummary('topo_boston_test');
-- summary--
Topology topo_boston_test (5), SRID 2249, precision 0
61 nodes, 87 edges, 35 faces, 15 topogeoms in 1 layers
Layer 1, type Polygonal (3), 15 topogeoms
Deploy: public.nei_topo.topo
-- Shrink all TopoGeometry polygons by 10 meters
UPDATE nei_topo SET topo = toTopoGeom(ST_Buffer(topo, -10), clearTopoGeom(topo), 0);
-- Get the no-one-lands left by the above operation
-- I think GRASS calls this "polygon0 layer"
SELECT ST_GetFaceGeometry('topo_boston_test', f.face_id)
FROM topo_boston_test.face f
WHERE f.face_id
> 0 -- don't consider the universe face
AND NOT EXISTS ( -- check that no TopoGeometry references the face
SELECT * FROM topo_boston_test.relation
WHERE layer_id = 1 AND element_id = f.face_id
);