📄 ogr_api.cpp
字号:
* * The vertex count of the line string is increased by one, and assigned from * the passed location value. * * @param hGeom handle to the geometry to add a point to. * @param dfX x coordinate of point to add. * @param dfY y coordinate of point to add. * @param dfZ z coordinate of point to add. */void OGR_G_AddPoint( OGRGeometryH hGeom, double dfX, double dfY, double dfZ ){ switch( wkbFlatten(((OGRGeometry *) hGeom)->getGeometryType()) ) { case wkbPoint: { ((OGRPoint *) hGeom)->setX( dfX ); ((OGRPoint *) hGeom)->setY( dfY ); ((OGRPoint *) hGeom)->setZ( dfZ ); } break; case wkbLineString: ((OGRLineString *) hGeom)->addPoint( dfX, dfY, dfZ ); break; default: CPLAssert( FALSE ); break; }}/************************************************************************//* OGR_G_GetGeometryCount() *//************************************************************************//** * Fetch the number of elements in a geometry. * * @param hGeom geometry from which to get the number of elements. * @return the number of elements. */int OGR_G_GetGeometryCount( OGRGeometryH hGeom ){ switch( wkbFlatten(((OGRGeometry *) hGeom)->getGeometryType()) ) { case wkbPolygon: if( ((OGRPolygon *)hGeom)->getExteriorRing() == NULL ) return 0; else return ((OGRPolygon *)hGeom)->getNumInteriorRings() + 1; case wkbMultiPoint: case wkbMultiLineString: case wkbMultiPolygon: case wkbGeometryCollection: return ((OGRGeometryCollection *)hGeom)->getNumGeometries(); default: return 0; }}/************************************************************************//* OGR_G_GetGeometryRef() *//************************************************************************//** * Fetch geometry from a geometry container. * * This function returns an handle to a geometry within the container. * The returned geometry remains owned by the container, and should not be * modified. The handle is only valid untill the next change to the * geometry container. Use OGR_G_Clone() to make a copy. * * This function relates to the SFCOM * IGeometryCollection::get_Geometry() method. * * This function is the same as the CPP method * OGRGeometryCollection::getGeometryRef(). * * @param hGeom handle to the geometry container from which to get a * geometry from. * @param iSubGeom the index of the geometry to fetch, between 0 and * getNumGeometries() - 1. * @return handle to the requested geometry. */OGRGeometryH OGR_G_GetGeometryRef( OGRGeometryH hGeom, int iSubGeom ){ switch( wkbFlatten(((OGRGeometry *) hGeom)->getGeometryType()) ) { case wkbPolygon: if( iSubGeom == 0 ) return (OGRGeometryH) ((OGRPolygon *)hGeom)->getExteriorRing(); else return (OGRGeometryH) ((OGRPolygon *)hGeom)->getInteriorRing(iSubGeom-1); case wkbMultiPoint: case wkbMultiLineString: case wkbMultiPolygon: case wkbGeometryCollection: return (OGRGeometryH) ((OGRGeometryCollection *)hGeom)->getGeometryRef( iSubGeom ); default: return 0; }}/************************************************************************//* OGR_G_AddGeometry() *//************************************************************************//** * Add a geometry to a geometry container. * * Some subclasses of OGRGeometryCollection restrict the types of geometry * that can be added, and may return an error. The passed geometry is cloned * to make an internal copy. * * There is no SFCOM analog to this method. * * This function is the same as the CPP method * OGRGeometryCollection::addGeometry. * * @param hGeom existing geometry container. * @param hNewSubGeom geometry to add to the container. * * @return OGRERR_NONE if successful, or OGRERR_UNSUPPORTED_GEOMETRY_TYPE if * the geometry type is illegal for the type of existing geometry. */OGRErr OGR_G_AddGeometry( OGRGeometryH hGeom, OGRGeometryH hNewSubGeom ){ switch( wkbFlatten(((OGRGeometry *) hGeom)->getGeometryType()) ) { case wkbPolygon: { OGRLinearRing *poRing = (OGRLinearRing *) hNewSubGeom; if( poRing->WkbSize() != 0 || poRing->getGeometryType() != wkbLineString ) return OGRERR_UNSUPPORTED_GEOMETRY_TYPE; else { ((OGRPolygon *)hGeom)->addRing( poRing ); return OGRERR_NONE; } } case wkbMultiPoint: case wkbMultiLineString: case wkbMultiPolygon: case wkbGeometryCollection: return ((OGRGeometryCollection *)hGeom)->addGeometry( (OGRGeometry *) hNewSubGeom ); default: return OGRERR_UNSUPPORTED_OPERATION; }}/************************************************************************//* OGR_G_AddGeometryDirectly() *//************************************************************************//** * Add a geometry directly to an existing geometry container. * * Some subclasses of OGRGeometryCollection restrict the types of geometry * that can be added, and may return an error. Ownership of the passed * geometry is taken by the container rather than cloning as addGeometry() * does. * * This function is the same as the CPP method * OGRGeometryCollection::addGeometryDirectly. * * There is no SFCOM analog to this method. * * @param hGeom existing geometry. * @param hNewSubGeom geometry to add to the existing geometry. * * @return OGRERR_NONE if successful, or OGRERR_UNSUPPORTED_GEOMETRY_TYPE if * the geometry type is illegal for the type of geometry container. */OGRErr OGR_G_AddGeometryDirectly( OGRGeometryH hGeom, OGRGeometryH hNewSubGeom ){ switch( wkbFlatten(((OGRGeometry *) hGeom)->getGeometryType()) ) { case wkbPolygon: { OGRLinearRing *poRing = (OGRLinearRing *) hNewSubGeom; if( poRing->WkbSize() != 0 || poRing->getGeometryType() != wkbLineString ) return OGRERR_UNSUPPORTED_GEOMETRY_TYPE; else { ((OGRPolygon *)hGeom)->addRingDirectly( poRing ); return OGRERR_NONE; } } case wkbMultiPoint: case wkbMultiLineString: case wkbMultiPolygon: case wkbGeometryCollection: return ((OGRGeometryCollection *)hGeom)->addGeometryDirectly( (OGRGeometry *) hNewSubGeom ); default: return OGRERR_UNSUPPORTED_OPERATION; }}/************************************************************************//* OGR_G_RemoveGeometry() *//************************************************************************//** * Remove a geometry from an exiting geometry container. * * Removing a geometry will cause the geometry count to drop by one, and all * "higher" geometries will shuffle down one in index. * * There is no SFCOM analog to this method. * * This function is the same as the CPP method * OGRGeometryCollection::removeGeometry(). * * @param hGeom the existing geometry to delete from. * @param iGeom the index of the geometry to delete. A value of -1 is a * special flag meaning that all geometries should be removed. * * @param bDelete if TRUE the geometry will be destroyed, otherwise it will * not. The default is TRUE as the existing geometry is considered to own the * geometries in it. * * @return OGRERR_NONE if successful, or OGRERR_FAILURE if the index is * out of range. */OGRErr OGR_G_RemoveGeometry( OGRGeometryH hGeom, int iGeom, int bDelete ){ switch( wkbFlatten(((OGRGeometry *) hGeom)->getGeometryType()) ) { case wkbPolygon: { CPLError( CE_Failure, CPLE_AppDefined, "OGR_G_RemoveGeometry() not supported on polygons yet." ); return OGRERR_UNSUPPORTED_OPERATION; } case wkbMultiPoint: case wkbMultiLineString: case wkbMultiPolygon: case wkbGeometryCollection: return ((OGRGeometryCollection *)hGeom)->removeGeometry( iGeom,bDelete); default: return OGRERR_UNSUPPORTED_OPERATION; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -