ThinkGeo.com    |     Documentation    |     Premium Support

Custom Data Question

I’m looking for help with some samples.  I’m evaluating the product for implementation in my application.  I’m having a difficult time grasping how I would bind to my own data.  I see the custom data and the custom column fetch, but it still feels “wrong”.



As an example, I was trying to take the Dot Density example and drive it off of my own column for sales in each state.  So that I can show management how I could depict regional sales, which change on a daily basis (or more frequently).

Hi AAron, 
  
 Do you meant you try this sample: wiki.thinkgeo.com/wiki/Source_Code_WpfDesktopEditionSample_MultipleDotDensityStyles_CS_101110.zip 
  
 And replace your data in it, but not works? 
  
 If that’s your goal, could you please upload a small test data so we can help you make sure where is the problem? 
  
 If I misunderstand your requirement please feel free to let me know. 
  
 Regards, 
  
 Don

Specifically I need to be able to provide my data more dynamically.  I need to query it from a DB and then add it as a layer to the map.  I’m looking for the best practice approach to doing that. 
  
 I was using the dot density as an example.  I want to query the data from my own DB table for how many dots to draw and then use that as opposed to the column coming from the default .dbf file.

Hi AAron, 
  
 Our MsSql2008FeatureLayer shouldn’t work together with DotDensityStyle. 
  
 So for your requirement, I think you can try implement that like this: 
  
 1. Directly assign DotDensityStyle to your layer. 
  
 2. Get feature from DB and put them into local feature layer, here I suggest you can try using InmemoryFeatureLayer instead of ShapeFileFeatureLayer for test. 
  
 3. Refresh this layer. 
  
 In fact maybe we can have another try for override DrawCore function of DotDensityStyle, we will connect to DB and query feature in the overrided function, but I am not sure whether that can works well and it may have performance problems. 
  
 Regards, 
  
 Don

Hi Don, 
  
 Thank you for the reply.  Sorry I’m still very new to this map suite and not sure how to fill in the blanks about getting feature from the DB.  Based on the example, I just want to query out the population density from my database and use those numbers instead of the data coming from the POP1990 column in the dbf.  So something like “select state, population from mystatedata”, and use that array returned to seed the layer.

Hi Aaron,



Sorry Don may not descript it clear. As for your case, you can follow the below steps:


        
  1. get your sales data from mssql.

  2.     
  3. create a new layer container let say InMemoryFeatureLayer.

  4.     
  5. define the DotDensityStyle for your new layer.

  6.     
  7. fill the data into the new layer.

  8.     
  9. add the new layer into map.


Here I also attached the codes to show those steps, and you can modify some hard codes like column names to fit your needs.


// get data from sql server
            string connectString = “User ID=xxx;Password=xxxxxx;Data Source=192.168.0.44;Initial Catalog=InteralDB;”;
            MsSql2008FeatureSource sqlFeatureSource = new MsSql2008FeatureSource(connectString, “cntry02”“ID”);
            sqlFeatureSource.Open();
            Collection<Feature> selectedFeatrues = sqlFeatureSource.GetAllFeatures(new string[] { “CNTRY_NAME”“POP_CNTRY” });
 
            // create new layer.
            Collection<FeatureSourceColumn> columns = new Collection<FeatureSourceColumn>();
            columns.Add(new FeatureSourceColumn(“NAME”));
            columns.Add(new FeatureSourceColumn(“POP”));
            InMemoryFeatureLayer densityLayer = new InMemoryFeatureLayer(columns, new Feature[] { });
 
            DotDensityStyle dotDensityStyle = new DotDensityStyle();
            dotDensityStyle.ColumnName = “POP”;
            dotDensityStyle.PointToValueRatio = 0.00002;
            dotDensityStyle.CustomPointStyle = new PointStyle(PointSymbolType.Circle, new GeoSolidBrush(GeoColor.FromArgb(180, GeoColor.StandardColors.OrangeRed)), 4);
            densityLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(dotDensityStyle);
            densityLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
 
            // fill data into the new layer.
            densityLayer.Open();
            densityLayer.FeatureSource.BeginTransaction();
            foreach (Feature item in selectedFeatrues)
            {
                Feature newFeature = new Feature(item.GetShape());
                newFeature.ColumnValues.Add(“NAME”, item.ColumnValues[“CNTRY_NAME”]);
                newFeature.ColumnValues.Add(“POP”, item.ColumnValues[“POP_CNTRY”]);
                densityLayer.FeatureSource.AddFeature(newFeature);
            }
            densityLayer.FeatureSource.CommitTransaction();
 
            Map1.StaticOverlay.Layers.Add(“densityLayer”, densityLayer);

If anything confused, don’t hesitate to let us know.

Regards,

Troy