ThinkGeo.com    |     Documentation    |     Premium Support

WFS displaying with thinkgeo

Hi, 



I am new to the thinkgeo toolkit and evaluating for our GIS implementation.



I am currently attempting to use an ESRI WFS and get this displayed and interacting with the thinkgeo tools.



I have the solution ArcGISServerRestOverlay working and can see that this is taking the export layer (sampleserver1.arcgisonline.c…ver/export) and overlaying a PNG. I do not require a PNG as I need the end user to interact with the polylines/polygons that are available on the layer - sampleserver1.arcgisonline.c…apServer/1 



I cannot seem to find a sample that uses the Arch GIS in this way. 



Any help would be greatly appreciated.





Jon

Hi Jonathan, 
  
 Thanks for your post, but I am sorry to say that currently we don’t support “interact with the polylines/polygons” in ArcGISServerRestOverlay, You can vote this enhancement to helpdesk.thinkgeo.com/EnhancementTracker. This captures the enhancement request and provides visibility to the customer letting them know that the enhancement is on a list somewhere and that popularity of the enhancement helps set the priority of when the enhancement would be added to the product. This option doesn’t carry any cost for you.  
  
 Or if you need this function immediately, your account rep can contact you for a professional services.  
  
 Best Regards 
  
 Summer

Hi Summer,



Thank you for your reply.  Is it therefore possible to do it with a WFS?



Many thanks



Jon

Hi Jon, 
  
 Thanks for your query, because, as far as I know, the ArceGIS rest Service doesn’t have xml format response, but WFSFeatureSouce.GetAllFeatures() is used to parse xml format feature, so WFSFeatureLayer is also not possible. 
  
 Thanks, 
  
 Summer

Thanks Summer,



I’m now looking into OSS versions.



I have tried the following but getting a Error 404, do you have another URL I could use?




01.Map1.MapUnit = GeographyUnit.Meter;
02.Map1.CurrentExtent = new RectangleShape(455417.2, 4992437.4, 485795.9, 4960950.6);
03.Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"));
04. 
05. 
06. 
07.WfsFeatureLayer wfsFeatureLayer = new WfsFeatureLayer("<a href="datafinder.org/wfsconnector/com.esri.wfs.Esrimap/MN_MetroGIS_DataFinder_WFS_Water_Resources">datafinder.org/wfsconnec..._Resources</a>"“Watersheds-watersheds_2_a”);
08. 
09. 
10.wfsFeatureLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1;
11.wfsFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
12. 
13.Map1.StaticOverlay.Layers.Add(wfsFeatureLayer);


Hi Jonathan, 



Thanks for your query, but from datafinder.org/services/index.asp#layerinfo ,we can see the datafinder doesn’t support WFS service. but it supports WMS service, so  



WmsRasterLayer a = new WmsRasterLayer(new Uri( @"gis2.metc.state.mn.us/arcgis/services/MetroGIS/Water_Resources/MapServer/WmsServer?")); 



could be an option. 



if you have any more question, please feel free to let us know.  



Thanks, 



Summer

Hi Jonathan, 



Thanks for your question. 

Here is some sample code that might work well for you given this WFS server is hosted in the UK: 


protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                Map1.MapUnit = GeographyUnit.DecimalDegree;
                Map1.CurrentExtent = new RectangleShape(-0.01, 51, 0, 50.99);
                Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"));
                 
                WfsFeatureLayer test = new WfsFeatureLayer(@"<a href=“osmgb.org.uk/ogc/wfs” tabindex=“0”>osmgb.org.uk/ogc/wfs</a>",“OSM-GB-Vector:Lines4326”);
                test.ZoomLevelSet.ZoomLevel05.DefaultLineStyle = LineStyles.LocalRoad1;
                test.ZoomLevelSet.ZoomLevel05.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
                 
                Map1.StaticOverlay.Layers.Add(“WfsFeatureLayer”, test);
            }
        }

Here’s a link to their main page: 

osmgb.org.uk/osm-gb-wiki/index.php/Main_Page

WFS information page: osmgb.org.uk/osm-gb-wiki/index.php/WFS

Hi Jonathan, 



Here is a sample that can help you to query the features from a WFSFeatureLayer. You will notice that we are setting the LayerOverlay to SingleTile mode. This is necessary as in MultiTile mode we use a multithreaded process to generate the tiles and for the WFSFeatureLayer we are unable to query the Layer during the tile generation.  To eliminate the multithread issue we simply set the LayerOverlay to SingleTile so the Web Edition will only render one tile for the specified LayerOverlay. Also by setting this overlay to SingleTile you can easily prevent your users from clicking the LayerOverlay before it is finished rendering. Please also note that are not returning any columns (ReturningColumnsType.NoColumns) with our query so if you need to get additional information about a Feature you will need to modify the request to query the appropriate columns.


using System;
using System.Collections.ObjectModel;
using System.Collections.Generic;
using System.Diagnostics;
using ThinkGeo.MapSuite.Core;
using ThinkGeo.MapSuite.WebEdition;
 
namespace CSSamples.Samples.DataProviders
{
    public partial class LoadWfsFeatureLayer : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                Map1.MapUnit = GeographyUnit.DecimalDegree;
                Map1.CurrentExtent = new RectangleShape(-0.01, 51, 0, 50.99);
                Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"));
 
                WfsFeatureLayer testWFSLayer = new WfsFeatureLayer(@"<a href="osmgb.org.uk/ogc/wfs">osmgb.org.uk/ogc/wfs</a>", "OSM-GB-Vector:Lines4326");
                 
                testWFSLayer.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.LocalRoad1;
                testWFSLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
 
                LayerOverlay overlay = new LayerOverlay();
                overlay.TileType = TileType.SingleTile;
                overlay.IsBaseOverlay = true;
                overlay.Layers.Add(testWFSLayer);
 
                Map1.CustomOverlays.Add(overlay);
            }
        }
 
        protected void Map1_Click(object sender, ThinkGeo.MapSuite.WebEdition.MapClickedEventArgs e)
        {
            LayerOverlay newOverlay = (LayerOverlay)(Map1.CustomOverlays[0]);
            WfsFeatureLayer test1 = (WfsFeatureLayer)newOverlay.Layers[0];
             
            test1.Open();
            Collection<Feature> features = test1.QueryTools.GetFeaturesWithinDistanceOf(e.Position, GeographyUnit.DecimalDegree, DistanceUnit.Meter, 1000, ReturningColumnsType.NoColumns);
            test1.Close();
        }
    }
}