[fdo-users] How to Create Spatial Filter

surrounded Rob.Sosnowski at itd.idaho.gov
Thu Oct 2 14:24:10 EDT 2008


Gavin,

You were right, once I moved away from curvepolygon to polygon, the code as
existed worked.  Thanks for the suggestion.



surrounded wrote:
> 
> Gavin,
> 
> With your example you confirmed that the logic is in order, so I guess
> it's time to move away from the circle and try other geometries.  The unit
> tests have bailed me out a time or two already.    Thanks....
> 
> 
> 
> 
> Gavin Cramer wrote:
>> 
>> The unit tests are a good source of working example code.  It is mostly
>> unmanaged C++, but the concepts and most classes/methods have virtually
>> the same names.  Here is a snippet:
>> 
>> SpatialFilterTests::runSpatialQuery( FdoString* class_name,
>> FdoSpatialOperations spOp, FdoIPolygon* poly)
>> {
>>     int count = 0;
>> 
>>     try
>>     {
>>         FdoPtr<FdoISelect> select =
>> (FdoISelect*)mConnection->CreateCommand(FdoCommandType_Select);
>> 
>>         select->SetFeatureClassName( class_name );
>> 
>>         FdoPtr<FdoFgfGeometryFactory> gf =
>> FdoFgfGeometryFactory::GetInstance();
>> 
>>         FdoPtr<FdoByteArray> polyfgf = gf->GetFgf(poly);
>>         FdoPtr<FdoGeometryValue> gv = FdoGeometryValue::Create(polyfgf);
>> 
>>         FdoPtr<FdoSpatialCondition> filter =
>> FdoSpatialCondition::Create(L"Geometry", spOp, gv);
>> 
>>         select->SetFilter(filter);
>> 
>>         FdoPtr<FdoIFeatureReader> reader = select->Execute();
>> 
>>         while (reader->ReadNext())
>>         {
>> ...
>> 
>> 
>> Have you tried a simple rectangle or other polygon instead of a circle? 
>> SHP as a datastore does not support circular arcs.  I am not sure whether
>> the spatial filtering does, but using regular Polygon instead of a
>> CurvePolygon would be a good way to rule that out as a factor.
>> 
>> Gavin
>> 
>> 
>> -----Original Message-----
>> From: fdo-users-bounces at lists.osgeo.org
>> [mailto:fdo-users-bounces at lists.osgeo.org] On Behalf Of surrounded
>> Sent: Thursday, October 02, 2008 1:21 PM
>> To: fdo-users at lists.osgeo.org
>> Subject: [fdo-users] How to Create Spatial Filter
>> 
>> 
>> I am trying to create a filter that will allow me to intersect a circle
>> geometry with a shapefile layer, returning only the features from the
>> shapefile that meet the intersection criteria.  The following code does
>> not
>> produce errors, BUT the reader object has no values in it.  PLEASE LET ME
>> KNOW WHERE MY LOGIC IS WRONG OR IF YOU HAVE AN EXAMPLE SPATIAL QUERY THAT
>> I
>> COULD TWEAK TO WORK FOR MY NEEDS.    THANKS .....
>> 
>> 
>> //CREATE CIRCLE GEOMETRY
>> FgfGeometryFactory gFac = new FgfGeometryFactory();
>> IDirectPosition startPos = gFac.CreatePositionXY(longitude - 1.0,
>> latitude);
>> IDirectPosition midPos = gFac.CreatePositionXY(longitude, latitude +
>> 1.0);
>> IDirectPosition endPos = gFac.CreatePositionXY(longitude - 1.0,
>> latitude);
>> ICircularArcSegment pCircleSegs = gFac.CreateCircularArcSegment(startPos,
>> midPos, endPos);
>> CurveSegmentCollection pCSC = new CurveSegmentCollection();
>> pCSC.Add(pCircleSegs);
>> IRing pRing = gFac.CreateRing(pCSC);
>> RingCollection pRC = new RingCollection();
>> pRC.Add(pRing);
>> ICurvePolygon pCPoly = gFac.CreateCurvePolygon(pRing, pRC);
>> //IEnvelope pEnv = pCPoly.Envelope;
>> IGeometry pGeom = gFac.CreateGeometry(pCPoly);
>> 
>> //CONVERT GEOMETRY INTO BYTE ARRAY TO CREATE FILTER
>> byte[] pByte = gFac.GetFgf(pGeom);
>> OSGeo.FDO.Expression.GeometryValue pGVal = new GeometryValue(pByte);
>> 
>> //BUILD THE SPATIAL FILTER
>> OSGeo.FDO.Expression.Identifier pPropName = new Identifier("Geometry");
>> IdentifierCollection pIDColl = sel.PropertyNames;
>> pIDColl.Add(pPropName);
>> OSGeo.FDO.Filter.Filter pPtLineFilter = new
>> OSGeo.FDO.Filter.SpatialCondition(pPropName,
>> OSGeo.FDO.Filter.SpatialOperations.SpatialOperations_Inside, pGVal);
>> 
>> OSGeo.FDO.Commands.Feature.IFeatureReader reader = sel.Execute();
>> while (reader.ReadNext())
>> {
>>     ....CODE....
>> }
>> --
>> View this message in context:
>> http://n2.nabble.com/How-to-Create-Spatial-Filter-tp1134432p1134432.html
>> Sent from the FDO Users mailing list archive at Nabble.com.
>> 
>> _______________________________________________
>> fdo-users mailing list
>> fdo-users at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/fdo-users
>> _______________________________________________
>> fdo-users mailing list
>> fdo-users at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/fdo-users
>> 
>> 
> 
> 

-- 
View this message in context: http://n2.nabble.com/How-to-Create-Spatial-Filter-tp1134432p1134605.html
Sent from the FDO Users mailing list archive at Nabble.com.



More information about the fdo-users mailing list