GISarabia.org
PostGIS › الدليل الرسمي › 9. الطوبولوجيا › 9.12. دوال إخراج TopoGeometry
PostGIS 3.6 · Official Manual · ترجمة عربية

AsTopoJSON

الصفحة الأصلية بالإنجليزية postgis.net ↗

الاسم

AsTopoJSON — تُعيد تمثيل TopoJSON لكائن TopoGeometry.

المختصر

text AsTopoJSON(topogeometry tg, regclass edgeMapTable);

الوصف

تُعيد تمثيل TopoJSON لكائن TopoGeometry. إذا لم يكن edgeMapTable فارغًا (null)، فسيُستخدم جدولَ بحث/تخزين لربط معرّفات الحواف بفهارس الأقواس. والغرض من ذلك إتاحة مصفوفة "arcs" مضغوطة في المستند النهائي.

يُتوقع أن يحتوي الجدول، إن أُعطي، على حقل "arc_id" من النوع "serial" وحقل "edge_id" من النوع integer؛ وستستعلم الشيفرة الجدولَ عن "edge_id" لذا يُنصح بإضافة فهرس على ذلك الحقل.

[ملاحظة]

تبدأ فهارس الأقواس في مخرجات TopoJSON من 0، لكنها تبدأ من 1 في الجدول "edgeMapTable".

يجب أن يحتوي مستند TopoJSON الكامل، إضافة إلى المقاطع التي تُعيدها هذه الدالة، على الأقواس الفعلية وبعض الترويسات. راجع مواصفة TopoJSON.

متاحة منذ: 2.1.0

حُسّنت في: 2.2.1 أضيف دعم المدخلات النقطية

انظر أيضًا

ST_AsGeoJSON

أمثلة

CREATE TEMP TABLE edgemap(arc_id serial, edge_id int unique);

-- header
SELECT '{ "type": "Topology", "transform": { "scale": [1,1], "translate": [0,0] }, "objects": {'

-- objects
UNION ALL SELECT '"' || feature_name || '": ' || AsTopoJSON(feature, 'edgemap')
FROM features.big_parcels WHERE feature_name = 'P3P4';

-- arcs
WITH edges AS (
  SELECT m.arc_id, e.geom FROM edgemap m, city_data.edge e
  WHERE e.edge_id = m.edge_id
), points AS (
  SELECT arc_id, (st_dumppoints(geom)).* FROM edges
), compare AS (
  SELECT p2.arc_id,
         CASE WHEN p1.path IS NULL THEN p2.geom
              ELSE ST_Translate(p2.geom, -ST_X(p1.geom), -ST_Y(p1.geom))
         END AS geom
  FROM points p2 LEFT OUTER JOIN points p1
  ON ( p1.arc_id = p2.arc_id AND p2.path[1] = p1.path[1]+1 )
  ORDER BY arc_id, p2.path
), arcsdump AS (
  SELECT arc_id, (regexp_matches( ST_AsGeoJSON(geom), '\[.*\]'))[1] as t
  FROM compare
), arcs AS (
  SELECT arc_id, '[' || array_to_string(array_agg(t), ',') || ']' as a FROM arcsdump
  GROUP BY arc_id
  ORDER BY arc_id
)
SELECT '}, "arcs": [' UNION ALL
SELECT array_to_string(array_agg(a), E',\n') from arcs

-- footer
UNION ALL SELECT ']}'::text as t;

-- Result:
{ "type": "Topology", "transform": { "scale": [1,1], "translate": [0,0] }, "objects": {
"P3P4": { "type": "MultiPolygon", "arcs": [[[-1]],[[6,5,-5,-4,-3,1]]]}
}, "arcs": [
 [[25,30],[6,0],[0,10],[-14,0],[0,-10],[8,0]],
 [[35,6],[0,8]],
 [[35,6],[12,0]],
 [[47,6],[0,8]],
 [[47,14],[0,8]],
 [[35,22],[12,0]],
 [[35,14],[0,8]]
 ]}