We use ThinkGeo.Core / UI.Wpf 15.0.0-beta154 in a WPF desktop GIS. These are gaps in the classic (CPU) renderer and the data readers. We have a workaround for each, but they cost us code we would rather not keep.
1. Shapefiles with Z get no labels A shapefile of type PolygonZ, PolyLineZ, PointZ or MultiPointZ draws fine, but never shows a label. The shape keeps its Z flag, and the label placement then produces nothing, at every zoom level. The vertices are plain X/Y anyway. Our workaround: a ShapeFileFeatureSource subclass rebuilds every drawn feature as a 2D shape. Ask: label placement should ignore Z.
2. WFS 2.0: geometry missing from GetFeature, and namespace needed for BBOX With some services (German ATKIS) the PROPERTYNAME list the SDK sends to GetFeature leaves out the geometry, because the geometry is inherited and the SDK reads the GML reference as a normal property. The service then returns features without positions. The same services also reject a BBOX filter unless the request carries a NAMESPACES=xmlns(prefix,uri) parameter for the feature type. Our workaround: a WfsV2AsyncLayer subclass removes PROPERTYNAME from GET requests and adds the namespace binding, which it reads from the capabilities. Ask: keep the geometry in the property list, and add the namespace binding when the type name has a prefix.
3. WFS: no way to learn the geometry type of a feature type We need to know whether a WFS type is points, lines or polygons before we style it. The SDK does not expose it. Our workaround: we wrap the HTTP response and read the GML element names as they stream past. Ask: expose the geometry type from DescribeFeatureType , for example a property on WfsV2AsyncLayer or its feature source.
4. WMS: advertised scale ranges are ignored Services declare MinScaleDenominator / MaxScaleDenominator (or ScaleHint ). WmsOverlay does not read them, so outside that range the map requests tiles and gets blank images. Our workaround: we parse the capabilities XML ourselves and show the range to the user. Ask: expose the advertised ranges on WmsOverlay (per layer), and ideally skip requests outside them.
5. LayerOverlay.TileCache cannot be swapped while drawing The overlay reads TileCache again after every tile it draws. If we replace the cache while a draw is running, some tiles go to the old cache and some to the new one. Our workaround: an overlay subclass that gates and cancels every draw around a cache change. Ask: either read the cache once per draw, or offer a safe way to rotate it.