ThinkGeo.com    |     Documentation    |     Premium Support

Multi-threading on tiling?

Hi,


I overrode the Layer's DrawCore() so that my map control gets images from my web server that uses MapEngine to draw images instead.  I believe there is multi-threading on tiling for the web map control but it looks to me that the images on my web page are drawn successively instead of simultaneously.  Do I lose multi-threading funtionality when having the DrawCore() overridden.  If so, would you suggest or provide an algorithm so that I can add the multi-threading back?


 Thanks,


Tracy



Hi Tracy,



If your map app needs multi-thread, there are two conditions. First of all, we need the web browser supports. As far as I know, IE sends two requests at one time by default; it's more in firefox. Secondly, we need the asynchronize supports in your server. 



There is no special things in the Layer.DrawCore logic. It doesn't matter whether it runs in multi-thread or not. It only focus its only draw algorithm.



I'm not sure how do you implement your web server, but here is an article which leads you creating your own async web service.

msdn.microsoft.com/en-us/lib...S.71).aspx



Hope it makes sense.



Thanks,

Howard



Hi,


It seems the DrawCore() in SimpleCustomLayer.cs is not called anymore when I published my code to IIS 7.  In IIS 6 and VS2008 are absolutely fine.  Is there anything I need to configure or do for using web edition on IIS 7.


Thanks,


Tracy



Tracy,



There is an issue if you publish your code to IIS 7 and set Application Pool to DefaultAppPool, but we have fixed this bug in the last public release version that is 3.1.299.



Here is a workaround for you temporary, you need to configure the web xml configuration file; add the code below to handlers subnode of  system.webServer section:




<add name="GeoResource" path="*_GeoResource.axd" verb="*" type="ThinkGeo.MapSuite.WebEdition.GeoResourceFactory" />



Hope it will help you. Any more question please let me know.



Thanks,



Johnny



 


I am using 3.1.299 and the line already exists in my web.config.

I noticed that when using IIS 6, the content type returned from GeoResource.axd is image/png.


The following is what I see from fiddler, the application I used to debug my web server.


/tile_GeoResource.axd?OVERLAYID=CustomOverlay&FORMAT=image%2Fpng&CACHEID=CustomOverlay&PAGENAME=Default&STYLES=&CLIENTID=Map1&EXTRA=220437113711&SRS=EPSG%3A4326&BBOX=-14932799.002289,68224.363158829,-9932457.8804728,5068565.4849746&WIDTH=256&HEIGHT=256&ZOOM=0


However, for IIS 7, the content type is text/html.  I got all pink tiles when using IIS 7 while IIS 6 works fine.


 



Tracy, 
  
 Sorry to say that we can’t recreate your problem. We have deployed our installed samples on ii7.0 of  Windows 2008 32bit; it works well, if you still have problem on it, do you mind providing us a simple sample, so we will fix it quickly if we could recreate the problem. 
  
 Thanks, 
  
 Johnny

Hi Johnny,


Here is a simple sample I made from our project.  We use SimpleCustomLayer to override the DrawCore to get map image from our own web service. 


Thank you very much for your help.


Tracy



Tracy, 
  
 The issue is caused by projection, maybe permission of some folders but not very clearly now. 
 FeatureSource is projected many times, and that will cause some performance problems with the demo you have provided, the. We are not sure what your requirements. 
  
 Any more question please let me know. 
  
 Thanks, 
  
 Johnny  






 



Hi, 
  
 Our shapefiles are in degree and we would like our map to look like google map which is in meter.  Our web server is accessed to retrieve map image by our another application besides the default.aspx page; and the other application sends in the coordinates in degrees instead.  Also, in our real program, our server only opens each layer once and the projection is only assigned to the featureSource once for each layer. 
  
 I now removed the conversions in my default.aspx and simpleCustomLayer.cs files and made my web server take in meter coordinates instead.  However, I still get pink tiles.  it seems the only way I can make it return a complete map is to remove the projection to the FeatureSource; but it is a requirement for our map to be projected in the same way as google map. 
  
 We developed our cache algorithm.  Thus, performance so far is not an issue for me.   
  
 I also noticed that once this line “tile_GeoResource.axd?OVERLAYID=CustomOverlay&FORMAT=image%…” takes a bit too long to return, the rest of the return results from GeoResource became text/html instead of image/png.   
  
 Please advice what I should do so that it will work like in IIS 6 that I don’t get pink tiles while my map projects like google map. 
  
 Thanks, 
 Tracy  
  


Tracy,






Here is workaround for you temporarily; you could project the shape file to Google projection (900913). So you don’t need to set projection to the FeatureSource at runtime.




The code likes below:





Projection googleProjection = new Proj4Projection(Proj4Projection.GetEpsgParametersString(4326), Proj4Projection.GetGoogleMapParametersString());
ShapeFileFeatureSource.SaveToProjection(sourceShapeFilePath, targetShapeFilePath, googleProjection, OverwriteMode.Overwrite);



Any more question please let me know.


Thanks,


Johnny





I saw this thread and am running into an issue much like this and believe the projection is causing the issue. I tried this code and my system locks when it tries to execute the  SaveToProjection method. Please let me know what you think I am doing wrong.


Thanks!


 Proj4Projection projection = new Proj4Projection();
projection.InternalProjectionParametersString = "+proj=utm +zone=16 +ellps=GRS80 +datum=NAD83 +units=m +no_defs";
projection.ExternalProjectionParametersString = "+proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs";
ShapeFileFeatureSource.SaveToProjection(SourceMMShapeFile, DestMMShapeFile, projection, OverwriteMode.Overwrite);



David,


It seems that there is no problem with the posted code. I also did a test with that, but all works fine. Please check the permission of directory where shape file locates. Here is my test code, and you can post it into the installed sample "GettingStarted/DisplayASimpleMap.aspx" to have a try.


 Proj4Projection projection = new Proj4Projection();
                projection.InternalProjectionParametersString = "+proj=utm +zone=16 +ellps=GRS80 +datum=NAD83 +units=m +no_defs";
                projection.ExternalProjectionParametersString = "+proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs";
                ShapeFileFeatureSource.SaveToProjection(MapPath("~/SampleData/world/cntry02.shp"), MapPath("~/SampleData/world/cntry02Projected.shp"), projection, OverwriteMode.Overwrite);
            


Thanks,


Johnny



Johnny, 
  
 This worked perfectly for me when I ran this through the test page. I forgot that my map generation app is winforms. I don’t understand why the winform app would hang but the web app worked great. 
  
 Thanks for the help! 
 David

Hi, David 
  
 In web app or winforms app, and we also use the same MapSuiteCore library to change the projection of shape file. If you still have this problem in your winforms app; please try to set full permission for the directory where you store the projected shape files, and you could put the code below into DesktopEdition installed sample "Getting Started/DisplayASimpleMap.cs" and try it. 
             Proj4Projection projection = new Proj4Projection(); 
             projection.InternalProjectionParametersString = "+proj=utm +zone=16 +ellps=GRS80 +datum=NAD83 +units=m +no_defs"; 
             projection.ExternalProjectionParametersString = "+proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs"; 
             ShapeFileFeatureSource.SaveToProjection(@"…\SampleData\Data\Countries02.shp", @"…\SampleData\Data\ProjectedCountries02.shp", projection, OverwriteMode.Overwrite); 
  
 Thanks, 
 Khalil