ThinkGeo.com    |     Documentation    |     Premium Support

"Object reference" error when using AllowLineCarriage=true

Hello,


I have a very simple program--one shapefile of municipal polygons--which throws an "object reference not set to an instance of an object" when I try to set AllowLineCarriage to true for the TextStyle.  If I change to other text columns in the shapefile, the error still occurs, so it doesn't appear to be related to data.  If I set AllowLineCarriage to false it doesn't fail, of course.  Here's the code:



 


 


Here's the MapSuite part of the stack trace:


   at ThinkGeo.MapSuite.Core.PositionStyle.GetLabelingCandidateForOnePolygon(PolygonShape polygon, String text, GeoCanvas canvas)

   at ThinkGeo.MapSuite.Core.PositionStyle.GetLabelingCandidateForOnePartOfMultipolygon(MultipolygonShape multipolygonShape, String text, GeoCanvas canvas)

   at ThinkGeo.MapSuite.Core.PositionStyle.GetLabelingCandidateForMultipolygon(MultipolygonShape multipolygonShape, String text, GeoCanvas canvas)

   at ThinkGeo.MapSuite.Core.PositionStyle.GetLabelingCandidateCore(Feature feature, GeoCanvas canvas)

   at ThinkGeo.MapSuite.Core.PositionStyle.GetLabelingCandidates(Feature feature, GeoCanvas canvas)

   at ThinkGeo.MapSuite.Core.PositionStyle.DrawOneFeature(Feature feature, GeoCanvas canvas, Collection`1 labelsInThisLayer, Collection`1 labelsInAllLayers)

   at ThinkGeo.MapSuite.Core.PositionStyle.DrawCore(IEnumerable`1 features, GeoCanvas canvas, Collection`1 labelsInThisLayer, Collection`1 labelsInAllLayers)

   at ThinkGeo.MapSuite.Core.Style.Draw(IEnumerable`1 features, GeoCanvas canvas, Collection`1 labelsInThisLayer, Collection`1 labelsInAllLayers)

   at ThinkGeo.MapSuite.Core.ZoomLevel.DrawCore(GeoCanvas canvas, IEnumerable`1 features, Collection`1 currentLayerLabels, Collection`1 allLayerLabels)

   at ThinkGeo.MapSuite.Core.ZoomLevel.Draw(GeoCanvas canvas, IEnumerable`1 features, Collection`1 currentLayerLabels, Collection`1 allLayerLabels)

   at ThinkGeo.MapSuite.Core.FeatureLayer.DrawCore(GeoCanvas canvas, Collection`1 labelsInAllLayers)

   at ThinkGeo.MapSuite.Core.Layer.Draw(GeoCanvas canvas, Collection`1 labelsInAllLayers)

   at ThinkGeo.MapSuite.DesktopEdition.LayerOverlay.DrawCore(GeoCanvas canvas)

   at ThinkGeo.MapSuite.DesktopEdition.Overlay.MainDraw(GeoCanvas canvas)

   at ThinkGeo.MapSuite.DesktopEdition.Overlay.Draw(GeoCanvas canvas)

   at ThinkGeo.MapSuite.DesktopEdition.WinformsMap.x03e3d48bcfe7bb6c(IEnumerable`1 xa6f0db4f183189f1)

   at ThinkGeo.MapSuite.DesktopEdition.WinformsMap.xff5b27c00f9678c2(RectangleShape x178b193eec228e6e)

   at ThinkGeo.MapSuite.DesktopEdition.WinformsMap.xe3cee4adb9c72451()

   at ThinkGeo.MapSuite.DesktopEdition.WinformsMap.x9ac8c50f434f4b39(Int32 xb565f4681f05557a)

   at ThinkGeo.MapSuite.DesktopEdition.WinformsMap.Refresh()

   at AllowLineCarriageError.Form1.Form1_Load(Object sender, EventArgs e) in C:\Documents and Settings\ahuber.ICMC\My Documents\Visual Studio 2008\Projects\AllowLineCarriageError\AllowLineCarriageError\Form1.cs:line 55

 


Any thoughts?  I searched the forums and didn't see too much on this labeling attribute. 


Thanks,


Allen Huber


 


 


 


 


 


 



             winformsMap1.MapUnit = GeographyUnit.Meter;


            GeoPen outlinePen = new GeoPen(GeoColor.FromArgb(0, 250, 245, 230), 4);

            GeoSolidBrush solidBrush = new GeoSolidBrush(GeoColor.FromArgb(255, 255, 255, 0));

            AreaStyle areaStyle = new AreaStyle(outlinePen, solidBrush);


            DrawingFontStyles fontStyles = DrawingFontStyles.Bold | DrawingFontStyles.Italic;

            GeoFont font = new GeoFont("Arial",10, fontStyles);

            TextStyle textStyle = new TextStyle("ZONE", font, new GeoSolidBrush(GeoColor.FromArgb(255,100,100,100)));

            textStyle.AllowLineCarriage = true;


            ShapeFileFeatureLayer.BuildIndexFile(Application.StartupPath + @"\zones.shp");

            ShapeFileFeatureLayer zones = new ShapeFileFeatureLayer(Application.StartupPath + @"\zones.shp");

            zones.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = areaStyle;

            zones.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level08;


            zones.ZoomLevelSet.ZoomLevel09.DefaultAreaStyle = areaStyle;

            zones.ZoomLevelSet.ZoomLevel09.DefaultTextStyle = textStyle;

            zones.ZoomLevelSet.ZoomLevel09.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;


            zones.Open();

            RectangleShape extent = zones.GetBoundingBox();

            zones.Close();


            LayerOverlay overlay = new LayerOverlay();

            overlay.Layers.Add(zones);


            winformsMap1.Overlays.Add(overlay);

            winformsMap1.CurrentExtent = extent;

            winformsMap1.Refresh();



Something when wrong with the copying of the code...it's at the bottom below the stack trace.



I don’t think we ever saw that error being caused by setting the AllowLineCarriage set to true before. It might be because of something peculiar about your shapefile that we are not handling adequately. Can you send to us your zones.shp shapefile? If you do not feel comfortable attaching it to this Discussion Forum post, you can send it to support@thinkgeo.com. If the shapefile is too big to be emailed, let us know and we will set you up with a FTP account. Thank you.

Val, 
  
 I don’t think sharing it will be a problem.  It covers several counties so it is too large for the forum (about 1.5 M), but I can get someone here to reduce it to a single county.  I’ll make sure it still fails with the reduced set (and if it doesn’t that might be a clue itself) and then will post it here.   
  
 Alleb

Allen, 
  
 Let me know when you done to provide the data, and also which way you choose. 
  
 Thanks 
 James

OK, I've attached a shapefile which is a single-county extract of the original data.  It still fails.  One thing you might want to check first is that Lancaster City has a number of holes in it which are areas of an adjacent municipality. 


I believe we've used the same style on a different data set which I don't think has these holes and it doesn't fail.


Happy hunting!


Allen



zone_snippet.zip (356 KB)

Allen, 
  
 I downloaded and got to display your shapefile. I immediately noticed that there are features on top of each other which is an uncommon but valid characteristic for an area based layer. I am doing some further tests this afternoon and I will let you know what I find.

Val, 
  
 Oh yeah…I forgot about that.  Our app has an “ID at click point” function and I came across that when I’d click on the map and got more than one intersecting municipality back.  I don’t know where we got some of this data from, but in town I’ve seen street segments with address ranges duplicated a half-dozen times. If it’s a problem with the data I guess we just have to clean it up.  I’m anxious to hear what you find. 
  
 Allen

Allen, Val,


I found it's a bug and I have fixed it, you can test again by using new verison DLL, 4.5.58.0 or 4.5.0.58 or higher, which will generate by our Daily Builder, you can download it from custom portal. The screen-shot below is what my result:



Thanks


James



James, 
  
 Ah, now that looks a lot better.  I’ll make a note to grab a daily build when I get a chance.  Thanks everyone for tracking this down and fixing it.   
  
 Allen

Allen,


Thanks for your feedback and letting us know your status.
 
Any more questions or concerns please do not hesitate to let me know.
 
Thanks.
 
Yale

James,


  Thank you for assisting me and fixing the bug.


Allen,


  Although this is not the main topic of this post, I think this is still worthwhile to let you know of the oddity of your data as I mentioned earlier. I like to display polygon based layer with the fill color being slightly transparent because it shows in evidence imperfections of the data as you can see in the screen shot below. For example, you can see that the feature 4236415 is completely covered by feature 4236209 which would be missed if the fill were opaque.


 Having features on top of each other on the same polygon based layer is geometrically valid but it is generally bad GIS practice and such a layer is usually the result of some error in the geoprocessing creating the layer. I don't know your data but I suspect that 4236415 is actually an enclave of 4236209 which should have an inner ring. I don't know what your decision is going to be on that but rest assure that we can also provide you the tools with Map Suite to do the necessary cleaning up of your data.




Val, 
  
 I agree 100% with what you’re saying.  Generally our data comes from the counties, and some is great, some is not so great, and at times we find unexpected artifacts as a result of the processing we do internally.  After I discovered this I passed the issue on to someone more involved with the maintenance of our data PLUS I still have it listed as an issue on my dry erase board as well.  I try to stay away from dealing with data; I have enough grief some days writing code. 
  
 Allen

Allen, 
   
   Yes, I understand that dealing with GIS data is not necessarily the funniest part :-). Let us know how things are going in that process and if you guys run into some road blocks, we would be more than happy to continue helping.

I just got around to downloading the latest daily build (4.5.80.0) and wanted to note that this is now working, so I’ve switched its status to “resolved”.  Thanks! 
  
 Allen

Allen, 
  
 I am glad this issue is resolved. Please feel free to let me know if you have more questions. 
  
 Thanks, 
 James