ThinkGeo.com    |     Documentation    |     Premium Support

Join a database

Hi 

Is it possible to join the data of a Sqlite table with a ShapeFile.

I want to use this data for label on the map.



Thanks

Laurent M

Hi Maumet,



I think it is possible, would you please try the blow codes see if it is fit for your case:


   ShapeFileFeatureLayer layer = new ShapeFileFeatureLayer();
            layer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.County1("label");
            layer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            layer.DrawingFeatures += layer_DrawingFeatures;
 
void layer_DrawingFeatures(object sender, DrawingFeaturesEventArgs e)
        {
            foreach (Feature item in e.FeaturesToDraw)
            {
                // Get addtional information from sqlite database.
                string extentLabel = getInforFromSqlite(item.ColumnValues["name"]);
                item.ColumnValues.Add("label",extentLabel);
            }
        }

Please let us know if any questions.



Thanks,



Troy

Hi



I try this code:


ShapeFileFeatureLayer layer = new ShapeFileFeatureLayer();
         layer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.County1("label");
         layer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
         layer.DrawingFeatures += layer_DrawingFeatures; 
 
    void layer_DrawingFeatures(object sender, DrawingFeaturesEventArgs e)
     {
         foreach (Feature item in e.FeaturesToDraw)
         {
             string extentLabel = getInforFromSqlite(item.ColumnValues["IdUnique"]);
             item.ColumnValues.Add("label", extentLabel);
         }
     }
 
     private string getInforFromSqlite(string valjoin){
         return "test";
     }

There is an error:

The given key was not present in the dictionary.  (IdUnique ??)



If I try with 

layer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.County1("IdUnique");



The given key is ok but, of course, the labels are my IdUnique.



It is necessary that the column "label" exist in the shpfile ?



Thanks

Laurent M

Hi Maumet,



Oh, sorry to forget the column won’t be added into the DrawingFeatures by default, we need to add additional required column for style:


layer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.County1(“label”);
layer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.RequiredColumnNames.Add(“IdUnique”);

For question “It is necessary that the column “label” exist in the shpfile ?”: the shape file don’t have to exist a “label” column in it, we can register the CustomColumnFetch event in FeatureSource to append the label column into feature.


void FeatureSource_CustomColumnFetch(object sender, CustomColumnFetchEventArgs e)
        {
            if (e.ColumnName == “label”)
            {
                e.ColumnValue = ???
            }
        }

Please let us know if any questions.



Thanks,



Troy