Split an edge by a node, replacing it with two new edges.
1211{
1215 const LWGEOM *oldedge_geom;
1216 const LWGEOM *newedge_geom;
1219 int ret;
1220
1221 split_col =
_lwt_EdgeSplit( topo, edge, pt, skipISOChecks, &oldedge );
1222 if ( ! split_col ) return -1;
1223 oldedge_geom = split_col->
geoms[0];
1224 newedge_geom = split_col->
geoms[1];
1225
1227 ((
LWGEOM*)newedge_geom)->srid = split_col->
srid;
1228
1229
1234 {
1238 return -1;
1239 }
1243
1244 lwerror(
"Backend coding error: "
1245 "insertNodes callback did not return node_id");
1246 return -1;
1247 }
1248
1249
1252 if ( ret == -1 ) {
1256 return -1;
1257 }
1258
1259
1261 if ( newedges[0].edge_id == -1 ) {
1265 return -1;
1266 }
1268 if ( newedges[1].edge_id == -1 ) {
1272 return -1;
1273 }
1274
1275
1285 else
1288
1289 if ( ! newedges[0].geom ) {
1292 lwerror(
"first geometry in lwgeom_split output is not a line");
1293 return -1;
1294 }
1295
1296
1306 else
1309
1310 if ( ! newedges[1].geom ) {
1313 lwerror(
"second geometry in lwgeom_split output is not a line");
1314 return -1;
1315 }
1316
1317
1319 if ( ret == -1 ) {
1322 return -1;
1323 } else if ( ret == 0 ) {
1326 lwerror(
"Insertion of split edge failed (no reason)");
1327 return -1;
1328 }
1329
1330
1331
1338 NULL, 0);
1339 if ( ret == -1 ) {
1343 return -1;
1344 }
1345
1352 NULL, 0);
1353 if ( ret == -1 ) {
1357 return -1;
1358 }
1359
1366 NULL, 0);
1367 if ( ret == -1 ) {
1371 return -1;
1372 }
1373
1380 NULL, 0);
1381 if ( ret == -1 ) {
1385 return -1;
1386 }
1387
1388
1390 if ( ! ret ) {
1394 return -1;
1395 }
1396
1399
1400
1402}
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