ThinkGeo.com    |     Documentation    |     Premium Support

QueryTools.GetFeaturesWithinDistanceOf

  



Collection<Feature> selectedFeatures =
PipelineShapeLayer.QueryTools.GetFeaturesNearestTo(pointShape2,
GeographyUnit.DecimalDegree,
maxitems, ReturningColumnsType.AllColumns);       



This routine throws this error: 

Cannot get the projection’s InternalGeographyUnit, please provide it by overriding the Projection’s GetInternalGeographyUnitCore() method.







So, I tried to set the GeoType earlier with::

            GeographyUnit GeoType = PipelineShapeLayer.FeatureSource.Projection.GetInternalGeographyUnit();

and on debug it returns "null", i uncommented the other line and the
error remains. i am certain that my Target layer is in GeoDetic



Collection<Feature> selectedFeatures =
PipelineShapeLayer.QueryTools.GetFeaturesNearestTo(pointShape2, GeoType, maxitems,
ReturningColumnsType.AllColumns);       



Error that i get: Cannot get the projection’s InternalGeographyUnit, please provide it by overriding the Projection’s GetInternalGeographyUnitCore() method.


on the 1st instance, the error message should have been: The value for the enumeration is not one of the valid values.

Question:

I’m using rotateProjection to make the moving map point UP in the direction of travel. Does this invalidate using this method. 



All of these methods work:

           Collection<Feature> selectedFeatures = PipelineShapeLayer.QueryTools.GetFeaturesContaining(areaShape, ReturningColumnsType.AllColumns);

            Collection<Feature> selectedFeatures = PipelineShapeLayer.QueryTools.GetFeaturesByColumnValue(“Name”, “D - Alabama St”, ReturningColumnsType.AllColumns);

            Collection<Feature> selectedFeatures = PipelineShapeLayer.QueryTools.GetFeaturesInsideBoundingBox(pointShape2, ReturningColumnsType.AllColumns);

            Collection<Feature> selectedFeatures = PipelineShapeLayer.QueryTools.GetFeaturesWithin(areaShape, ReturningColumnsType.AllColumns);



Except:

             Collection<Feature> selectedFeatures = PipelineShapeLayer.QueryTools.GetFeaturesNearestTo(pointShape2, GeoType, maxitems, ReturningColumnsType.AllColumns);

            Collection<Feature> selectedFeatures = PipelineShapeLayer.QueryTools.GetFeaturesWithinDistanceOf(pointShape2, GeoType, DistType, DistRadius, ReturningColumnsType.AllColumns);

  

I solved my issue. The map is a Moving Map so that the Center point and rotation angle is constantly changing. The projection in this state is not available. I made a ManagedProj4Projection. When I did this, the GetFeaturesWithinDistanceOf worked; however the feature geometry query is still not correct. Since I needed to only query one layer from the set being displayed, i created a static version of this layer and did not let it get projected. When i query the layer on a given GPS location, it correctly identifies the features within a given distance supplied. 
  
 GetFeaturesNearestTo still is not behaving properly; however, at this time i dont need it.

Hi Dan, 
  
 Thanks for let us know this problem and share your solution about it, we will try to reproduced that and solve possible issue. 
  
 Any further question please feel free to let us know. 
  
 Regards, 
  
 Don

i just purchased the full version of the Desktop edition.



the code that has always worked for me is now broken.



something
in the full version of the DesktopEdition and the MapSuiteCore is
different. the movingmap is centered and the dynamic vehicle moves
out-of-frame. it should be centered and the frame update should always
show the vehicle’s position in centerframe. can you send me the code
change that repairs this issue.

Somehow this code in the interface is no longer valid…





            //First, centers the map to the location of the moving vehicle

            mapEngine.CenterAt(new PointShape(pointShape.X, pointShape.Y), Map.Width, Map.Height);



            //Second, rotates the map to the angle of the direction of the moving vehicle.

            rotateProjection.Angle = (float)angle;

            mapEngine.CurrentExtent = rotateProjection.GetUpdatedExtent(mapEngine.CurrentExtent);



            //Updates RotateAngle property of CompassAdornmentLayer (Compass) according to the new value of

            //Angle property of RotationProjection.

            CompassAdornmentLayer compassAdornmentLayer = (CompassAdornmentLayer)mapEngine.AdornmentLayers[0];

            compassAdornmentLayer.RotateAngle = 360 - (float)rotateProjection.Angle;



            DrawImage();

Hi Dan, 
  
 It looks your code comes from ServiceEdition but not DesktopEdition, because we don’t use mapEngine and DrawImage in desktop edition. 
  
 And I think your eval version should be 7.0 and full version is used 8.0, if you found some API cannot works that maybe because API changes. 
  
 Could you please make sure the questions and if that still don’t works for you, could you please upload a real simple sample to help us reproduce your problem and help you solve that? 
  
 Regards, 
  
 Don

Don,



everything works the same except the CenterAt function does not update the map.

PipeCamMovingMapDisplay.csproj (7.4 KB)

Don, 
  
 MapEngine comes from Desktop Core. why don’t these functions work in my purchased edition but they do work in the eval edition?

Don, 
  
 I have received the Desktop Evaluation 7 edition of the MapSuiteCore Dll and it works as it did. 
  
 When I link with the Desktop 8 Full edition, it doesn’t update my center location each iteration, only difference, but a necessary one for me.

Hi Dan, 
  
 I just tested the DesktopEdition and ServiceEdition(MapSuiteCore), the API of CenterAt work for both of them. 
  
 Please package your project and upload it again, it looks you just upload a project file. 
  
 Simple test code: 
  
 Desktop Edition 
  
 winformsMap1.CenterAt(20, 20); 
 winformsMap1.Refresh(); 
  
  
 Service Edition 
  
 mapEngine.CenterAt(new PointShape(20, 20), map.Width, map.Height); 
 DrawImage(); 
  
 Regards, 
  
 Don