ThinkGeo.com    |     Documentation    |     Premium Support

Public property for geography in Feature

Hello, ThinkGeo Team!


 


In the structure Feature like to have a public property to set the geography, for example


public byte[] WellKnownBinary { get; set; }


This is due to the fact that the LINQ to Entities does not support parameterized constructors, and we have to use an extra operation to retrieve the data and then convert them into objects of Feature, which leads to excess consumption of memory.


As we do now:


public class FeatureDto

{

public long Id { get; set; }

public DbGeography Geography { get; set; }

}

...

IQueryable<FeatureDto> query = (_context.Geography.

Where(g => g.Geography.Intersects(extent)).

Select(g => new FeatureDto

{

Id = g.Id,

Geography = g.Geography

}));

FeatureDto[] features = query.ToArray();



InMemoryFeatureLayer layer = new InMemoryFeatureLayer();

layer.Open();

layer.FeatureSource.BeginTransaction();

foreach (var feature in features)

{

layer.FeatureSource.AddFeature(new Feature(

feature.Geography.AsBinary(),

feature.Id.ToString(CultureInfo.InvariantCulture)));

}

layer.FeatureSource.CommitTransaction();

layer.Close();


 


We want:


 


IQueryable<Feature> query = (_context.Geography.

Where(g => g.Geography.Intersects(extent)).

Select(g => new Feature

{

Id = g.Id.ToString(CultureInfo.InvariantCulture),  WellKnownBinary = g.Geography.AsBinary()

}));

...


Thank you.


 



Alex, 
  
   Using this method so you also need to be able to set the Id as well? 
  
 David

Alex, 
  
   Thank you for the well though out post, I understand the issue you are running into.   I went ahead and added the property as requested.  Please get the daily developers build version  5.5.109.0 or later and try it out.  I think in the future we may switch the feature from a structure to feature.  This is of course a big change but in the long run will make things much simpler for everyone.  Before we we would do that we would have a public discussion so don’t worry about this change happening without notice. 
  
 David

Hi, David! Thanks for the quick reply. 

New property works, but unfortunately LINQ to Entity does not support structures:( 


I think in the future we may switch the feature from a structure to feature. 

 Typo in the end? Feature from a structure to class? It would be cool!



Alex, 
  
   I did mean class.  We are playing around with this idea.  The first step would be to convert the feature to class then the next steps would be to phase out shapes.  In their place we would inherit from feature to create helper types of classes like PolygonFeature etc. to provide nice interface to iterate through rings etc.  If / when we decide to do this we will post it in the news and announcements area, I suggest you subscribe to that forum. :-) 
  
 David

Ok, I’ll wait.

Hello Alex, 
  
 Please feel free to let us know your problems. 
  
 Regards, 
  
 Gary

Hello, 
  
 when you redesign your feature implementation please think about serialisation issue: 
 gis.thinkgeo.com/Support/DiscussionForums/tabid/143/aff/21/aft/9249/afv/topic/Default.aspx 
  
 Thanks Thomas

Hello Thomas, 
  
 Thanks for your advise, I have replied that post, could you Please have a look at it? 
  
 Regards, 
  
 Gary