ThinkGeo.com    |     Documentation    |     Premium Support

Postgres connection

Dear All,


I am new to Map suite. I wanted to connect the postgresql layer (postgis enabled) to mapsuite. Can anyone poit me to the sample code for this and what extensions I need to install.


 


-Ashitosh Prabhu



Hi Ashitosh, 
  
 I think you can find the dll you need here: "…\Developer Reference\Spatial Extensions\Postgre Extension&#34
  
 Sorry we haven’t some exsiting sample for how to use PostgreSqlFeatureLayer class in silverlight edition, but I think that should be the same like how you use them in desktop or web edition. 
  
 Here is the online document about this layer: wiki.thinkgeo.com/wiki/ThinkGeo.MapSuite.Core.PostgreSqlFeatureLayer 
  
 And I think this post contains some code should helpful for you: 
 gis.thinkgeo.com/Support/DiscussionForums/tabid/143/aff/12/aft/8247/afv/topic/Default.aspx 
  
 Regards, 
  
 Don

Thanks Don for your quick reply.


Actually I searched the dll later at night. However, Even after adding the dll and the code, I wasnt able to see the features. The extent area is fine and the features are correct. I am using silverlight developer extension and I am adding the postgres layer in codebehind of asp.net and then adding as a server layer.


Below is the asp.net code behind



ServerLayerOverlay layerOverlay = new ServerLayerOverlay("ServerSideOverlay");
 string connectString = "Server=localhost;User Id=postgres;Password=mypassword;DataBase=Mumbai;pooling=false;";
NpgsqlConnection connection = new NpgsqlConnection(connectString);
PostgreSqlFeatureLayer PoiLayer = new PostgreSqlFeatureLayer(connection, "pincode_boundaries", "gid",4326,"public","the_geom");
PoiLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.CreateSimpleAreaStyle(GeoColor.FromArgb(0, 255, 0, 0), GeoColor.FromArgb(255, 218, 193, 163), 1);
layerOverlay.Layers.Add(PoiLayer);
SilverlightMapConnector1.ServerLayerOverlays.Add(layerOverlay);

Below is the silverlight code



Map1.MapUnit = GeographyUnit.DecimalDegree;
Map1.MapTools.MouseCoordinate.IsEnabled = true;
Map1.MapTools.MouseCoordinate.MouseCoordinateType = MouseCoordinateType.LongitudeLatitude;
//I add the postgres server layer below
ServerLayerOverlay serverLayerOverlay = new ServerLayerOverlay("ServerSideOverlay", "SilverlightMapConnector1");
Map1.Overlays.Add("serverOverlay", serverLayerOverlay);
Map1.CurrentExtent = new RectangleShape(72.72605, 19.43787, 73.20519, 19.00193);


 Have I missed anything? Thanks



Hi Ashitosh,  
  
 Sorry reply you late. 
  
 I cannot build a sample local for reproduce your problem because that related with your database and I don’t have a environment. 
  
 I just see your code, it looks in asp.net code behind you missed this code: 
 PoiLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; 
  
 I haven’t found other problem from your code. 
  
 And if you still cannot shows the feature, could you test the PostgreSqlFeatureLayer in our desktop or web edition first so that we can make sure whether that caused by SilverLight edition? 
  
 Regards, 
  
 Don

Don,


Adding the zoomlevel solved the problem.  Also I had to open the npgsql connection. Any idea when should I close this connection?


Thanks a lot.



Hi Ashitosh, 
  
 Why you have to open the npgsql connection? 
 You can use other constructor to create the PostgreSqlFeatureLayer directly from connectString. 
 What you need is open the layer after that like this. 
  
 PostgreSqlFeatureLayer layer = new PostgreSqlFeatureLayer(connectionString, tableName, featureIdColumn); 
             layer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; 
             layer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1; 
             layer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.Canal1; 
             layer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.Capital1; 
             layer.Srid = 4326; 
             layer.Open(); 
  
 And don’t worry about close connection. 
  
 Our layer will close that after we connection to database each time. 
  
 Regards, 
  
 Don