ThinkGeo.com    |     Documentation    |     Premium Support

Adding a Sid Ortho Layer

I am Just trying to add in a SID ortho layer but cant seem to get it to work


private void mAddIndividualOrthoLayer01()
       {
           if(!Map1.CustomOverlays.Contains(SessionHandler.WebOrtho01Location))
           {
           string wMapFileLoct = SessionHandler.WebOrtho01Location;
           MrSidRasterLayer wilsonOrthoLayer = new MrSidRasterLayer(SessionHandler.WebOrtho01Location);
           wilsonOrthoLayer.UpperThreshold = double.MaxValue;
           wilsonOrthoLayer.LowerThreshold = 0;
           wilsonOrthoLayer.Transparency = 180;
           Proj4Projection proj4 = new Proj4Projection();
           int projkey = Convert.ToInt32(SessionHandler.WebProjection);
           proj4.InternalProjectionParametersString = Proj4Projection.GetEpsgParametersString(projkey);
           proj4.ExternalProjectionParametersString = Proj4Projection.GetGoogleMapParametersString();
           proj4.Open();
           wilsonOrthoLayer.Open();
           //LayerOverlay ovlOrtho01 = new LayerOverlay(SessionHandler.WebOrtho01Name, true, TileType.SingleTile);
           //ovlOrtho01.Layers.Add(wilsonOrthoLayer);
           Map1.StaticOverlay.Layers.Add(wilsonOrthoLayer);
           }
       }


Hi Gordon, 
  
 Could you please let me know what’s the value of “projkey” now? 
  
 In fact you can search the proj4 string here: spatialreference.org 
  
 And directly assign the string to proj4.InternalProjectionParametersString. 
  
 Regards, 
  
 Don

The project key is 3420 , i looked at spatial reference and that is the projection that needs to be used

Hi Gordon, 
  
 We can get the projection string from here: spatialreference.org/ref/epsg/3420/proj4/ 
  
 And please directly assign the value of 4320 to the projection: 
  
 proj4.InternalProjectionParametersString = “+proj=lcc +lat_1=38.56666666666667 +lat_2=37.26666666666667 +lat_0=36.66666666666666 +lon_0=-98.5 +x_0=399999.99998984 +y_0=399999.99998984 +ellps=GRS80 +datum=NAD83 +to_meter=0.3048006096012192 +no_defs”; 
 proj4.ExternalProjectionParametersString = Proj4Projection.GetGoogleMapParametersString(); 
  
 If that still don’t works please let us know, and a simple project contains a test data should be very helpful. 
  
 Regards, 
  
 Don

Hey Troy this still didnt work, the map is still blank and i cant create a simple project since the Ortho is really large would there be any other reason that this wouldnt work?

It looks like the Program finds the file but still only shows a white screen. i could upload it to the FTP if that would work for you.



Update 

I uploaded a test program to the FTP under Ortho Test app 

Hi Gordon,



I just checked your FTP folder and did not find any new files called "Ortho Test app". 



Thanks!

The File is now on the FTP please take a look at it and get back to me as soon as you can THank you

Hi Gordon, 
  
 Thanks for your sample, we found the problem is you haven’t use correct map unit and extent, please modify that like this: 
  
  
<div>  
        @{Html.ThinkGeo().Map(“Map1”, new System.Web.UI.WebControls.Unit(100, System.Web.UI.WebControls.UnitType.Percentage), 510)  
          .MapBackground(new BackgroundLayer(new GeoSolidBrush(GeoColor.StandardColors.White)))  
          .MapUnit(GeographyUnit.Meter)
          .CurrentExtent(2046000, 1716000, 2178000, 1584000)  
          .StaticOverlay(overlay =>  
          {  
              MrSidRasterLayer sidImageLayer = new MrSidRasterLayer(Server.MapPath(@"~\App_Data\overview.sid"));  
              sidImageLayer.UpperThreshold = double.MaxValue;  
              sidImageLayer.LowerThreshold = 0;  
  
              overlay.Layer(sidImageLayer);  
          }  
    ).Render();}  
    </div>
 
  
 Regards, 
  
 Don

ok this works to get the Ortho to show up but i need it to be in the exact place that the google location is since the google extent is Map1.CurrentExtent = new RectangleShape(-11414900, 4870300, -10518700, 4427600); how do i make the ortho appear at the same location, Also there is a sample within that program that adds the Ortho in inside the controller which is the way we would like to do it. Is there a way to add the ortho to the map in the controller?

Hi Gordon, 
  
 Please see the code as below: 
  
  
  

Index.cshtml:
<div class="twelve columns" id="main">
    <div id="map" style="width: 100%; height: 100%">
        @{Html.ThinkGeo().Map(Model).Render();}
    </div>   
</div>


HomeController.cs

public ActionResult Index()
        {
            Map1 = new Map("Map1",
           new System.Web.UI.WebControls.Unit(100, System.Web.UI.WebControls.UnitType.Percentage),
           new System.Web.UI.WebControls.Unit(600, System.Web.UI.WebControls.UnitType.Pixel));

            //set map unit to meter for google maps 
            Map1.MapUnit = GeographyUnit.Meter;
            Map1.CurrentExtent = new RectangleShape(-11414900, 4870300, -10518700, 4427600);

            // add the google layer
            GoogleOverlay googlelayer = new GoogleOverlay("Google Map");
            googlelayer.GoogleMapType = GoogleMapType.Normal;
            googlelayer.IsBaseOverlay = true;
            Map1.CustomOverlays.Add(googlelayer);
            
            // add any maptools that we want in our program 
            Map1.MapTools.MouseCoordinate.Enabled = true;
            Map1.MapTools.MeasureMapTool.MeasureUnitType = MeasureUnitType.English;
            Map1.MapTools.MeasureMapTool.Geodesic = true;
            Map1.MapTools.MiniMap.Enabled = true;
            Map1.MapTools.ScaleLine.Enabled = true;
            Map1.MapTools.KeyboardMapTool.Enabled = true;
            Map1.MapTools.PanZoomBar.Enabled = true;
            Map1.MapTools.MouseMapTool.Enabled = true;
            Map1.MapTools.OverlaySwitcher.BaseOverlayTitle = "Photography";
            Map1.MapTools.OverlaySwitcher.DynamicOverlayTitle = "Layers";
            Map1.MapTools.OverlaySwitcher.Enabled = true;           

            MrSidRasterLayer sidImageLayer = new MrSidRasterLayer(Server.MapPath(@"~\App_Data\overview.sid"));
            sidImageLayer.UpperThreshold = double.MaxValue;
            sidImageLayer.LowerThreshold = 0;

            ManagedProj4Projection proj4 = new ManagedProj4Projection();
            proj4.InternalProjectionParametersString = ManagedProj4Projection.GetEpsgParametersString(3420);
            proj4.ExternalProjectionParametersString = ManagedProj4Projection.GetGoogleMapParametersString();

            sidImageLayer.ImageSource.Projection = proj4;           

            Map1.StaticOverlay.Layers.Add(sidImageLayer);


            return View(Map1);
        }

 
  
 That works in your sample in my end. 
  
 Regards, 
  
 Don

Does this have to be in a Static layer or can we change it to a OVerlay so we can server cache it?

Hi Gordon, 
  
 You can put it in Overlay, I put it in StaticOverlay is because I see you did that before. 
  
 Regards, 
  
 Don

Hmm is there a problem with Server Cacheing a huge amount? because it has broken our website kansasmaps.co/Wilson/adornment_GeoResource.axd?PageName=kNLghtkEK0uw…78,4458107.5549741,-10516183.875522,4577196.4450259&WIDTH=1856&HEIGHT=779& Failed to load resource: the server responded with a status of 500 (Internal Server Error) 

i keep getting this error but when i delete the server cache everything is ok, it keeps saying that parameter is not valid 

Hi Gordon, 
  
 Does that only occur when you deploy to IIS? Will you get same exception when you debug it and open server cache? 
  
 Regards, 
  
 Don