TopoGeo_addLinestring ============begin=============
SELECT topology.ST_AddIsoNode(atopology, NULL, firstpoint) INTO firstnode;
SELECT topology.ST_AddIsoNode(atopology, NULL, lastpoint) INTO lastnode;
SELECT topology.ST_AddIsoEdge(atopology, firstnode, lastnode, aline)
TopoGeo_addLinestring =============end================
ST_AddIsoNode(atopology, aface, apoint)=============begin=================
ST_AddIsoNode(atopology, aface, apoint)=============end==================
//======================================================================
struct lwgeom_backend_definition lwgeom_backends[LWGEOM_NUM_BACKENDS] = {
{ .name = "geos",
.intersects_fn = geos_intersects,
.intersects3d_fn = intersects3d_dwithin,
.intersection_fn = geos_intersection,
.area_fn = LWGEOM_area_polygon,
.distance_fn = LWGEOM_mindistance2d,
.distance3d_fn = LWGEOM_mindistance3d
},
#if HAVE_SFCGAL
{ .name = "sfcgal",
.intersects_fn = sfcgal_intersects,
.intersects3d_fn = sfcgal_intersects3D,
.intersection_fn = sfcgal_intersection,
.area_fn = sfcgal_area,
.distance_fn = sfcgal_distance,
.distance3d_fn = sfcgal_distance3D
}
#endif
};
struct lwgeom_backend_definition* lwgeom_backend = &lwgeom_backends[0];
PG_FUNCTION_INFO_V1(intersects);
Datum intersects(PG_FUNCTION_ARGS)
{
return (*lwgeom_backend->intersects_fn)( fcinfo );
}
//==============================================================================
//===========================================================
GEOSTopologyPreserveSimplify();
GEOSTopologyPreserveSimplify_r();
//===========================================================
'WITH areas AS ( SELECT ST_Union(topology.ST_GetFaceGeometry(quote_literal(toponame) || . 'element_id)) as g FROM '
|| quote_ident(toponame)
|| '.relation WHERE topogeo_id = '
|| topogeom.id || ' AND layer_id = '
|| topogeom.layer_id || ' AND element_type = 3), '
|| 'lines AS ( SELECT ST_LineMerge(ST_Collect(e.geom)) as g FROM '
|| quote_ident(toponame) || '.edge e, '
|| quote_ident(toponame) || '.relation r '
|| ' WHERE r.topogeo_id = ' || topogeom.id
|| ' AND r.layer_id = ' || topogeom.layer_id
|| ' AND r.element_type = 2 '
|| ' AND abs(r.element_id) = e.edge_id ), '
|| ' points as ( SELECT st_union(n.geom) as g FROM '
|| quote_ident(toponame) || '.node n, '
|| quote_ident(toponame) || '.relation r '
|| ' WHERE r.topogeo_id = ' || topogeom.id
|| ' AND r.layer_id = ' || topogeom.layer_id
|| ' AND r.element_type = 1 '
|| ' AND r.element_id = n.node_id ), '
|| ' un as ( SELECT g FROM areas UNION ALL SELECT g FROM lines '
|| ' UNION ALL SELECT g FROM points ) '
|| 'SELECT ST_Multi(ST_Collect(g)) FROM un';
EXECUTE sql INTO geom;