Name

AsTopoJSON — Gibt die TopoJSON-Darstellung einer TopoGeometry zurück.

Synopsis

text AsTopoJSON(topogeometry tg, regclass edgeMapTable);

Beschreibung

Gibt eine TopoGeometry in der TopoJSON-Darstellung zurück. Wenn edgeMapTable nicht NULL ist, wird diese als Lookup/Speicher für die Abbildung der Identifikatoren der Kanten auf die Indizes der Kreisbögen verwendet. Dadurch wird ein kompaktes Feld "arcs" im endgültigen Dokument ermöglicht.

Wenn die Tabelle angegeben ist, wird die Existenz der Attribute "arc_id" vom Datentyp "serial" und "edge_id" vom Typ "integer" vorausgesetzt; da der Code die Tabelle nach der "edge_id" abfragt, sollte ein Index für dieses Attribut erstellt werden.

[Note]

Die Kreisbögen in der TopoJSON Ausgabe sind von 0 weg indiziert, während sie in der Tabelle "edgeMapTable" 1-basiert sind.

Ein vollständiges TopoJson Dokument benötigt zusätzlich zu den von dieser Funktion ausgegebenen Schnipseln, die tatsächlichen Bögen und einige Header. SieheTopoJSON specification.

Verfügbarkeit: 2.1.0

Erweiterung: 2.2.1 Unterstützung für punktförmige Eingabewerte hinzugefügt

Siehe auch

ST_AsGeoJSON

Beispiele

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]]
 ]}