Split an edge by a node, replacing it with two new edges.
1328{
1332 const LWGEOM *oldedge_geom;
1333 const LWGEOM *newedge_geom;
1336 int ret;
1337
1338 split_col =
_lwt_EdgeSplit( topo, edge, pt, skipISOChecks, &oldedge );
1339 if ( ! split_col ) return -1;
1340 oldedge_geom = split_col->
geoms[0];
1341 newedge_geom = split_col->
geoms[1];
1342
1344 ((
LWGEOM*)newedge_geom)->srid = split_col->
srid;
1345
1346
1351 {
1355 return -1;
1356 }
1360
1361 lwerror(
"Backend coding error: "
1362 "insertNodes callback did not return node_id");
1363 return -1;
1364 }
1365
1366
1369 if ( ret == -1 ) {
1373 return -1;
1374 }
1375
1376
1378 if ( newedges[0].edge_id == -1 ) {
1382 return -1;
1383 }
1385 if ( newedges[1].edge_id == -1 ) {
1389 return -1;
1390 }
1391
1392
1402 else
1405
1406 if ( ! newedges[0].geom ) {
1409 lwerror(
"first geometry in lwgeom_split output is not a line");
1410 return -1;
1411 }
1412
1413
1423 else
1426
1427 if ( ! newedges[1].geom ) {
1430 lwerror(
"second geometry in lwgeom_split output is not a line");
1431 return -1;
1432 }
1433
1434
1436 if ( ret == -1 ) {
1439 return -1;
1440 } else if ( ret == 0 ) {
1443 lwerror(
"Insertion of split edge failed (no reason)");
1444 return -1;
1445 }
1446
1447
1448
1455 NULL, 0);
1456 if ( ret == -1 ) {
1460 return -1;
1461 }
1462
1469 NULL, 0);
1470 if ( ret == -1 ) {
1474 return -1;
1475 }
1476
1483 NULL, 0);
1484 if ( ret == -1 ) {
1488 return -1;
1489 }
1490
1497 NULL, 0);
1498 if ( ret == -1 ) {
1502 return -1;
1503 }
1504
1505
1507 if ( ! ret ) {
1511 return -1;
1512 }
1513
1516
1517
1519}
void lwcollection_release(LWCOLLECTION *lwcollection)
void lwcollection_free(LWCOLLECTION *col)
LWLINE * lwgeom_as_lwline(const LWGEOM *lwgeom)
#define LWT_COL_EDGE_START_NODE
#define LWT_COL_EDGE_NEXT_RIGHT
#define LWT_COL_EDGE_EDGE_ID
Edge fields.
#define LWT_COL_EDGE_END_NODE
#define LWT_COL_EDGE_NEXT_LEFT
#define PGTOPO_BE_ERROR()
void void lwerror(const char *fmt,...) __attribute__((format(printf
Write a notice out to the error handler.
LWT_ELEMID lwt_be_getNextEdgeId(LWT_TOPOLOGY *topo)
int lwt_be_updateTopoGeomEdgeSplit(LWT_TOPOLOGY *topo, LWT_ELEMID split_edge, LWT_ELEMID new_edge1, LWT_ELEMID new_edge2)
int lwt_be_insertNodes(LWT_TOPOLOGY *topo, LWT_ISO_NODE *node, uint64_t numelems)
int lwt_be_updateEdges(LWT_TOPOLOGY *topo, const LWT_ISO_EDGE *sel_edge, int sel_fields, const LWT_ISO_EDGE *upd_edge, int upd_fields, const LWT_ISO_EDGE *exc_edge, int exc_fields)
int lwt_be_deleteEdges(LWT_TOPOLOGY *topo, const LWT_ISO_EDGE *sel_edge, int sel_fields)
void _lwt_release_edges(LWT_ISO_EDGE *edges, int num_edges)
int lwt_be_insertEdges(LWT_TOPOLOGY *topo, LWT_ISO_EDGE *edge, uint64_t numelems)
static LWCOLLECTION * _lwt_EdgeSplit(LWT_TOPOLOGY *topo, LWT_ELEMID edge, LWPOINT *pt, int skipISOChecks, LWT_ISO_EDGE **oldedge)
LWT_ELEMID containing_face