ThinkGeo.com    |     Documentation    |     Premium Support

ManagedProj4Projection Difference from 4.0 to 5.0 issue

 


Greetings,
I'm trying to update an application from ThinkGeo Desktop Edition 4.0 to 5.0 (file version 5.0.0.0).  In doing so, the only change I made was to swap out two libraries: DesktopEdition.dll and MapSuiteCore.dll.  Obviously changes have been made to the MapSuiteCore library and to ManagedProj4Projection.  I'm not sure what was done, but the change is readily apparent when I am querying a layer using the GetFeaturesWithinDistanceOf method. Here are values from my analysis:
ThinkGeo 4.0


        
  • ScreenPoint to delete: X = 207.0; Y = 67.0

  •     
  • Converted to WorldX and WorldY: 740511.51539313933 and 4788104.8605491966

  •     
  • Current Map Extent: 
        

              
    •  LowerLeftPoint             740159.566468168, 4787732.508788

    •         
    •   UpperRightPoint           741137.202370866, 4788218.77638482

    •     

        



        
  • Feature found within distance of my map click (screen point):  POINT(740514.915868744 4788103.16030698) .  Note: a feature was "found".

  •     
  • A sample point from the layer I was querying against: 740537.018941334,4787854.92579951 (within the extent of the map)

  •     
  • Field polygon from another layer.  Examined to look at values of vertices:


o    POLYGON((740449.935710071 4787771.17448949,740449.481905045 4787770.1566581,740450.909708012 4787766.6488568,740454.704628086 4787765.1154802,740474.335084136 4787766.69996168,740583.256644182 4787768.99875226,740611.316519173 4787773.77421585,740728.099673806 4787776.91133835,740838.418481925 4787778.82001477,740851.108653756 4787781.15982064,740853.49792156 4787782.5786283,740854.682979635 4787785.84617088,740854.230562033 4787835.31473816,740843.353468786 4788142.0663061,740849.007691531 4788170.73619135,740847.891932444 4788174.69811361,740842.305924549 4788180.83914532,740838.757561965 4788182.27004478,740802.089435776 4788181.74874222,740447.998864725 4788172.87491995,740438.590318039 4788172.09499496,740435.155046624 4788170.30709264,740434.198877173 4788167.49289123,740434.174206655 4788163.59918355,740443.017489257 4788134.33359721,740447.456119944 4788025.06853826,740454.135642975 4787801.9019822,740450.932581308 4787777.43555666,740449.935710071 4787771.17448949)).  
o    Again, within the extent of the map

        
  • External Projection: 26914

  •     
  • Internal Projection: 4326


ThinkGeo 5.0

        
  • ScreenPoint to delete: X = 207.0; Y = 67.0

  •     
  • Converted to WorldX and WorldY: 740511.51539313933 and 4788104.8605491966

  •     
  • Current Map Extent: 
        

              
    • LowerLeftPoint  740159.566468168, 4787732.508788

    •         
    •  UpperRightPoint              741137.202370866, 4788218.77638482

    •     

        

  •     
  • No features found within distance of.

  •     
  • A sample point from the layer I was querying against (same point as examine in 4.0 example): 488970.177972533 9996237.51404824 (not within the extent of the map and no longer shows when the overlay is refreshed).  Note the different values from the 4.0 example.

  •     
  • Field polygon from another layer (same field as examined in 4.0 example).  Examined to look at values of vertices:


·         POLYGON((488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824,488970.177972533 9996237.51404824)).  Not within extent of map and no longer shows when the overlay is refreshed.   Note the different values from the 4.0 example.
 

        
  • External Projection: 26914

  •     
  • Internal Projection: 4326 


 


As I mentioned, in using ThinkGeo 4.0 and ManagedProj4Projection, our layers were projecting correctly and now they are not.  Please clarify changes that have been made to ManagedProj4Projection.  Thank you!



Todd, 
  
 I remember we have fixed this issue after 5.0, please get the latest daily build version from help desk. 
  
 Let me know if you still have problem after trying. 
  
 Thanks, 
 James

Used the daily build for 8/3/2011.  I still have the issue.

Todd, 
  
 I am working on this issue and try to fix this bug, any progress I will let you know. 
  
 Thanks, 
  
 James

 Todd,


Could you provide a sample code to reproduce this issue? I use following code to test, but no luck:



        Private Sub Form_Load(ByVal sender As Object, ByVal e As EventArgs)


            winformsMap1.MapUnit = GeographyUnit.Meter


            winformsMap1.BackgroundOverlay.BackgroundBrush = New GeoSolidBrush(GeoColor.GeographicColors.ShallowOcean)


            winformsMap1.CurrentExtent = New RectangleShape(-10000000, 10000000, 10000000, -10000000)


 


            Dim inMemoryLayer As New InMemoryFeatureLayer()


            Dim proj4Projection As New ManagedProj4Projection()


            proj4Projection.InternalProjectionParametersString = ManagedProj4Projection.GetEpsgParametersString(4326)


            proj4Projection.ExternalProjectionParametersString = ManagedProj4Projection.GetGoogleMapParametersString()


            inMemoryLayer.FeatureSource.Projection = proj4Projection


 


            inMemoryLayer.InternalFeatures.Add("Rectangle", New Feature(New RectangleShape(65, 30, 95, 15)))


 


            inMemoryLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.FillSolidBrush.Color = GeoColor.FromArgb(100, GeoColor.StandardColors.RoyalBlue)


            inMemoryLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20


 


            Dim inMemoryOverlay As New LayerOverlay()


            inMemoryOverlay.Layers.Add("InMemoryFeatureLayer", inMemoryLayer)


            winformsMap1.Overlays.Add("InMemoryOverlay", inMemoryOverlay)


 


            winformsMap1.Refresh()


        End Sub


 


        Private Sub btnTest_Click(ByVal sender As Object, ByVal e As EventArgs)


            Dim inMemoryLayer As InMemoryFeatureLayer = CType(winformsMap1.FindFeatureLayer("InMemoryFeatureLayer"), InMemoryFeatureLayer)


            inMemoryLayer.Open()


            inMemoryLayer.FeatureSource.GetFeaturesWithinDistanceOf(New PointShape(207.0, 67.0), GeographyUnit.DecimalDegree, DistanceUnit.Meter, 2, New Collection(Of String)())


            winformsMap1.Refresh()


        End Sub


 


Thanks,


James




Todd, 
  
 Just check if you solve your problem or not, I am glad to help you do it, just could reproduce the problem, I think we have fixed another problem not this one. 
  
 Thanks, 
 James

James, I have been, without success trying to upload a sample application: 2 zip files (one is 10 MB and the other is 7 MB).  Is there any other mechanism to get you the files?  Please advise.  Thanks!

Todd, 
  
 You can sent file to forumsupport@thinkgeo.com and saying it’s for post 9442 and let him forward to James, or you can upload it to Customer FTP that you can contact with support@thinkgeo.com to know how to do it. 
  
 Thanks, 
 James

Hi Todd, 
  
 I got your sample code, but I couldn’t get the result you mentioned. I run the test application, it displayed blank map, and then I click the button, it keeps the same. Could you give me some description for how to reproduce your issue. 
  
 I am glad if you can provide more informations. 
  
 Thanks, 
  
 James

Hi James, 
   I just ran it to verify that it’s working.  It is.  If you’re running from the solution, please note the location of the shapefile that’s called in the mainForm_Load method of mainForm.cs.  See following line for reference: 
  
 fxfWinformMap1.AddBaseLayer(layerName, @“C:\FXF\BaseMaps\ShapeFiles\IA\Sioux”, true, false, false); // main map - base data 
  
 You can either create this location or put the shapefiles wherever you’d like; just be sure to change the file path in code. 
  
 Other than that, there’s not much to the app.  It adds a field boundary, a polygon.  It adds 4 points.  And then it adds base layers, the set of shapefiles.  And then finally, to set up the map, it zooms to the field boundary polygon. 
  
 Let me know if you have further questions.  Todd.

Todd, 
  
 I change that line of code to 
 fxfWinformMap1.AddBaseLayer(layerName, @“C:\Program Files\ThinkGeo\Map Suite Desktop Evaluation Edition 5.0\Samples\SampleData\Data\Countries02.shp”, true, false, false); // main map - base data 
  
 But still nothing displayed on the map, and your problem is related with GetFeaturesWithinDistanceOf, but I don’t see any place use it. 
  
 Could you provide more information to guide me reproduce your issue? 
  
 Thanks, 
 James

GetFeaturesWithinDistanceOf is used on button click event from mainForm.

 Todd,


I have modified your sample to try to reproduce your problem, first I load an InMemoryLayer with projection, and then i click the button that call GetFeaturesWithinDistanceOf method, but the feature is still there, didn't change. I have attached my sample code and screen-shot.


Please update my sample to guide me how to reproduce your problem.


Thanks,


James




SampleApp.zip (12 KB)

James, 
   The button isn’t supposed to remove any features.  It simply tells you how many features would be removed based on a hardcoded XY value.  Again, with 4.0, 1 feature is found; with 5.0, 0 features are found.  To reproduce: 1) With 4.0 libraries, click on button and see features returned (there should be 1), 2) With 5.0 libraries, click on the button and see the features returned (there will be 0).  I am not sure why you had to modify the application.  I sent all the shape files that I used.  All you should have to do is modify where the application is looking for those shapefiles.  Everything else is hardcode.  Thanks for your help!  Todd.

Todd, 
  
 I couldn’t run your application that I mentioned at 08-12-2011 10:00 AM, and also your code is a little complex so i create a simple sample according to your description, it always return empty features no mater 4.0 or 5.0, could you modify my sample to make it reproduce the problem?  
  
 Thanks, 
 James

James, 

I'd rather work from my sample application. It's based off my real application and it identifies the issue I'm having. Let's break it down: 1) the mainForm has a user control on it called fxfWinformMap1 (the user control in turn has thinkgeo winform map on it). 2) on the mainForm_Load method, there are three methods called from the fxfWinformMap1 user control: AddFieldFeatureLayer, AddProductUseLayer, and AddBaseLayer. The last method, ZoomToFeature, zooms the map to the field that was loaded in the AddFieldFeaturelayer, a simple polygon. At this point, you have a map loaded. You should be able to get to this point without issue. 3) There's a button on the form with the caption, "Remove Feature". Click on that button. I've hard coded UTM coordinates for the construction of a PointShape. That pointshape is passed into a method called, DeletePoint on the user control fxfWinformMap1. In that method, you'll see the query GetFeaturesWitinDistanceOf called. Focus your attention here. With ThinkGeo 4.0, you'll see that 1 feature is found. This is what I expect. With ThinkGeo 5.0, you'll see that 0 features are found. If you compare the coordinates of the features that I set up in the DeletePoint method for reference puroses, you'll notice the difference from version 4.0 to 5.0.



 



 



 Todd,


I would rather used your original sample code, but it threw exception that I couldn't run it.


Could not load file or assembly "NetTopologySuite, Version = 1.7.3.31740, Culture = neutral, PublicKeyToken = f580a05016ebada1" or one of its dependencies. System can not find the file specified.


 


   at ThinkGeo.MapSuite.Core.FeatureCache..ctor()


   at ThinkGeo.MapSuite.Core.FeatureSource..ctor()


   at ThinkGeo.MapSuite.Core.InMemoryFeatureSource..ctor(IEnumerable`1 featureSourceColumns, IEnumerable`1 features)


   at ThinkGeo.MapSuite.Core.InMemoryFeatureLayer..ctor(IEnumerable`1 featureSourceColumns, IEnumerable`1 features)


   at ThinkGeo.MapSuite.Core.InMemoryFeatureLayer..ctor()


   at ThinkGeo.MapSuite.DesktopEdition.TrackInteractiveOverlay..ctor()


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


   at Pioneer.Sales.GIS.ThinkGeoWrapper.fxfWinformMap.InitializeComponent() locate N:\fxf\ffp_thinkgeo\Pioneer.Sales.GIS.ThinkGeoWrapper\Controls\fxfWinformMap.Designer.cs:line 31


   at Pioneer.Sales.GIS.ThinkGeoWrapper.fxfWinformMap..ctor() locate N:\fxf\ffp_thinkgeo\Pioneer.Sales.GIS.ThinkGeoWrapper\Controls\fxfWinformMap.cs:line 363


   at test.mainForm.InitializeComponent() locate N:\fxf\ffp_thinkgeo\test\mainForm.Designer.cs:line 32


   at test.mainForm..ctor() locate N:\fxf\ffp_thinkgeo\test\mainForm.cs:line 19


   at test.Program.Main() locate N:\fxf\ffp_thinkgeo\test\Program.cs:line 18


   at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)


   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)


   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()


   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)


   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)


   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)


   at System.Threading.ThreadHelper.ThreadStart()


So could you look at it and help me resolve it to run your sample, and then I can reproduce your problem.


Thanks,


James


 



James,


  When you extracted my sample app, there should have been several files put into an ExternalReferences folder.  Copy all of those files, of which NetTopologySuite will be one, into the same folder as the exe (test.exe).  If you're running through Visual Studio, this will be ..\\Test\\bin\\Debug.  This should get you running.  Thanks.  Todd.