<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Solution - switching between tiled services in different projections. in ArcGIS Viewer for Flex Questions</title>
    <link>https://community.esri.com/t5/arcgis-viewer-for-flex-questions/solution-switching-between-tiled-services-in/m-p/156778#M5019</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi everyone, I would like to share with you some thoughts about the topic of this discussion. We had to edit the Flex Viewer source code to enable changing map spatial reference for our project and I saw that a lot of people were asking similar question here so I think I can give you my solution.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;First of all I would like to thank Dasa Paddock for some thoughts in this thread: &lt;/SPAN&gt;&lt;A href="http://forums.arcgis.com/threads/69340-Reload-all-operational-layers-is-it-possible" rel="nofollow noopener noreferrer" target="_blank"&gt;http://forums.arcgis.com/threads/69340-Reload-all-operational-layers-is-it-possible&lt;/A&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm aware my solution might not be the best solution out there but still it might give someone some insight on the topic. Before I start with some code I need to make sure you understand that this is solution specific for our project! Few things are needed but few things you will have to adjust to your needs(i will mark them in code).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Ok let's start:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Config.xml -&amp;gt; map tag, change the mapwraparound180 to false.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;In MapManager.mxml we defined these variables:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
//needed
private var opLayerArr:Array = new Array();
private var timer:Timer = new Timer(200); // delay of the timer is 
private var visibleLayers:ArrayCollection;
private var mPoint:MapPoint;
private var visibleBasemaps:ArrayCollection = new ArrayCollection();
private var tiled:String = "tiled";
private var osm:String = "osm";
private var bing:String = "bing";
//for our project
private var webMercator:Number = 102100;
private var pol92:Number = 2180;
private var Compass:String = "Compass";
&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;Now i want to populate opLayerArr with operational layers loaded from config.xml. So in MapManager.mxml find function "addLayerToMap", change the definition of this function:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
private function addLayerToMap(layerObject:Object&lt;SPAN style="color:&amp;quot;#FF0000&amp;quot;;"&gt;, isOperationalLayer:Boolean&lt;/SPAN&gt;):void
//next inside this function add:
if(isOperationalLayer == true)
{ 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; opLayerArr.push(layer);
}
&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;Now find functions: &lt;/SPAN&gt;&lt;SPAN style="font-style:italic;"&gt;private function loadNextOpertionalLayer():void&lt;/SPAN&gt;&lt;SPAN&gt; and &lt;/SPAN&gt;&lt;SPAN style="font-style:italic;"&gt;private function loadNextBasemapLayer():void&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
private function loadNextBasemapLayer():void
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var basemapLayerObject:Object = m_basemapLayers[m_basemapLayerIndex];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addLayerToMap(basemapLayerObject&lt;SPAN style="color:&amp;quot;#FF0000&amp;quot;;"&gt;, false&lt;/SPAN&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; configureLayerRenderer(basemapLayerObject, false);
}
private function loadNextOpertionalLayer():void
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var optLayerObject:Object = m_operationalLayers[m_operationalLayerIndex];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addLayerToMap(optLayerObject&lt;SPAN style="color:&amp;quot;#FF0000&amp;quot;;"&gt;, true&lt;/SPAN&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; configureLayerRenderer(optLayerObject, true);
}
&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;Now go to &lt;/SPAN&gt;&lt;SPAN style="font-style:italic;"&gt;private function basemapSwitchHandler(event:AppEvent):void&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
if (layer.id == basemapLabel)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (layer.id == selectedLabel)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color:&amp;quot;#FF0000&amp;quot;;"&gt;var layerType:String = configBasemaps&lt;SPAN style="font-style:italic;"&gt;.type; //get type of the basemap service
 LoadBaseMaps(selectedLabel, layerType, layer, i, layers);&lt;/SPAN&gt; //call LoadBaseMaps function
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; layer.visible = false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
} 
&lt;/SPAN&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;Now function LoadBaseMaps:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
var currentCenterPoint:MapPoint = map.extent.center;
var currentWKID:Number = map.spatialReference.wkid;
if(layerType == tiled || layerType == osm || layerType == bing)
{
 var toWKID:Number;
 (selectedLabel == Compass) ? toWKID = pol92 : toWKID = webMercator; &lt;SPAN style="color:&amp;quot;#FF0000&amp;quot;;"&gt;// ok this is for our project you 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // will have to adjust this to your needs- we know that only one mapservice has different spatial reference and rest is in 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // web mercator&lt;/SPAN&gt;
 if(toWKID != currentWKID)
 {
&amp;nbsp; ProjectPoint(currentCenterPoint, toWKID);
&amp;nbsp; ChangeSpatialRef(toWKID);
&amp;nbsp; map.lods = layers&lt;I&gt;.tileInfo.lods;
&amp;nbsp; visibleBasemaps.addItem(layer);
 }
 else
 {
&amp;nbsp; layer.visible = true;
&amp;nbsp; map.lods = layers&lt;I&gt;.tileInfo.lods;
 }
}
else
{
 layer.visible = true;
}
//if layer is tiled(or bing or osm) do some logic, else just turn it visible
&lt;/I&gt;&lt;/I&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;Now project map.extent.center to new spatial reference so we can pan the map to the right place:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
private function ProjectPoint(mapPoint:MapPoint, toWKID:Number):void
{
 try
 {
&amp;nbsp; var projectParams:ProjectParameters =&amp;nbsp; new ProjectParameters();
&amp;nbsp; projectParams.geometries = [mapPoint];
&amp;nbsp; projectParams.outSpatialReference = new SpatialReference(toWKID);
&amp;nbsp; geometryService.project(projectParams);
 }
 catch(er:Error)
 {
&amp;nbsp; //your logic for error&amp;nbsp;&amp;nbsp; 
 }
} 
&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;Next is ChangeSpatialRef function:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
private function ChangeSpatialRef(toWKID:Number):void
{
 map.spatialReference.wkid = toWKID;
 RefreshLayers();
}
&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;After changing spatial reference we need to refresh all operational layers plus I want to 'remember' which op layers were visible:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
private function RefreshLayers():void
{
 visibleLayers = new ArrayCollection();
 for each (var layer:Layer in opLayerArr)//this is what why we need the opLayerArr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
 {
&amp;nbsp; for each(var layerW:Layer in map.layers)
&amp;nbsp; {
&amp;nbsp;&amp;nbsp; if(layer == layerW)
&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(layerW.visible == true)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; visibleLayers.addItem(layerW);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; layerW.visible = false;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; layerW.refresh();
&amp;nbsp;&amp;nbsp; }
&amp;nbsp; }
 }
}
&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;Now when the Geometry Service completes projection do this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
private function onProjectComplete(event:GeometryServiceEvent):void
{
 mPoint = event.result[0] as MapPoint;
 map.centerAt(mPoint);
 timer.start();//i want to be sure that map recentered so i will check it with timer 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // in &lt;I&gt;private function this_creationCompleteHandler():void add -&amp;gt; timer.addEventListener(TimerEvent.TIMER, CheckExtent); 
}
&lt;/I&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;Ok so let's check the extent(to be precise - let's check the center point of extent). I dont know why but honestly from the beginning there was a problem with recentering the map in onProjectComplete function so we had to add timer to make sure the extent will change.&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
private function CheckExtent(event:TimerEvent):void
{
 if(map.extent.center != mPoint) 
 {
&amp;nbsp; map.centerAt(mPoint);
&amp;nbsp; SetLayersVisible();
&amp;nbsp; timer.stop();
 }
 else
 {
&amp;nbsp; SetLayersVisible();
&amp;nbsp; timer.stop();
 }
}
&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;And the last function(note: I wanted to be sure that I turn on layers only when the extent is correct so making them visible is the last thing to do)&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
private function SetLayersVisible():void
{
 for each(var l:Layer in visibleBasemaps)
 {
&amp;nbsp; l.visible = true;
 }
 for each(var layer:Layer in visibleLayers)
 {
&amp;nbsp; for each(var lay:Layer in map.layers)
&amp;nbsp; {
&amp;nbsp;&amp;nbsp; if(layer == lay)
&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; lay.visible = true;
&amp;nbsp;&amp;nbsp; }
&amp;nbsp; }
 }
 visibleBasemaps.removeAll();
 visibleLayers.removeAll();
}
&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;So this is it. I'm aware many of you would do this better, faster etc. but this is a discussion so you can point me few things that should be done different.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Few notes:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;1.You will have to deal with LODs for dynamic/wms map services - if you don't want them just clear the map.lods array -&amp;gt; you can show dynamic services in scales of one of your tiled service. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2.We tested this with LayerListWidget, Legend and few other(CoordinateMenuWidget, BookmarkWidget&lt;/SPAN&gt;&lt;LI&gt;, DrawAndMeasureWidget..) and they all works. No errors at all.&lt;/LI&gt;&lt;BR /&gt;&lt;SPAN&gt;3.As I said - adjust this to your project!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;4.Solution for OverviewMap in next post - this is already too long;)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*In bookmark widget you'll have to make few changes to make it work in all spatial refenerces in your project.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regards&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;MDruzgala&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 11 Dec 2021 08:19:00 GMT</pubDate>
    <dc:creator>MarcinDruzgala</dc:creator>
    <dc:date>2021-12-11T08:19:00Z</dc:date>
    <item>
      <title>Solution - switching between tiled services in different projections.</title>
      <link>https://community.esri.com/t5/arcgis-viewer-for-flex-questions/solution-switching-between-tiled-services-in/m-p/156778#M5019</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi everyone, I would like to share with you some thoughts about the topic of this discussion. We had to edit the Flex Viewer source code to enable changing map spatial reference for our project and I saw that a lot of people were asking similar question here so I think I can give you my solution.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;First of all I would like to thank Dasa Paddock for some thoughts in this thread: &lt;/SPAN&gt;&lt;A href="http://forums.arcgis.com/threads/69340-Reload-all-operational-layers-is-it-possible" rel="nofollow noopener noreferrer" target="_blank"&gt;http://forums.arcgis.com/threads/69340-Reload-all-operational-layers-is-it-possible&lt;/A&gt;&lt;SPAN&gt;.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm aware my solution might not be the best solution out there but still it might give someone some insight on the topic. Before I start with some code I need to make sure you understand that this is solution specific for our project! Few things are needed but few things you will have to adjust to your needs(i will mark them in code).&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Ok let's start:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Config.xml -&amp;gt; map tag, change the mapwraparound180 to false.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;In MapManager.mxml we defined these variables:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
//needed
private var opLayerArr:Array = new Array();
private var timer:Timer = new Timer(200); // delay of the timer is 
private var visibleLayers:ArrayCollection;
private var mPoint:MapPoint;
private var visibleBasemaps:ArrayCollection = new ArrayCollection();
private var tiled:String = "tiled";
private var osm:String = "osm";
private var bing:String = "bing";
//for our project
private var webMercator:Number = 102100;
private var pol92:Number = 2180;
private var Compass:String = "Compass";
&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;Now i want to populate opLayerArr with operational layers loaded from config.xml. So in MapManager.mxml find function "addLayerToMap", change the definition of this function:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
private function addLayerToMap(layerObject:Object&lt;SPAN style="color:&amp;quot;#FF0000&amp;quot;;"&gt;, isOperationalLayer:Boolean&lt;/SPAN&gt;):void
//next inside this function add:
if(isOperationalLayer == true)
{ 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; opLayerArr.push(layer);
}
&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;Now find functions: &lt;/SPAN&gt;&lt;SPAN style="font-style:italic;"&gt;private function loadNextOpertionalLayer():void&lt;/SPAN&gt;&lt;SPAN&gt; and &lt;/SPAN&gt;&lt;SPAN style="font-style:italic;"&gt;private function loadNextBasemapLayer():void&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
private function loadNextBasemapLayer():void
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var basemapLayerObject:Object = m_basemapLayers[m_basemapLayerIndex];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addLayerToMap(basemapLayerObject&lt;SPAN style="color:&amp;quot;#FF0000&amp;quot;;"&gt;, false&lt;/SPAN&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; configureLayerRenderer(basemapLayerObject, false);
}
private function loadNextOpertionalLayer():void
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var optLayerObject:Object = m_operationalLayers[m_operationalLayerIndex];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; addLayerToMap(optLayerObject&lt;SPAN style="color:&amp;quot;#FF0000&amp;quot;;"&gt;, true&lt;/SPAN&gt;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; configureLayerRenderer(optLayerObject, true);
}
&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;Now go to &lt;/SPAN&gt;&lt;SPAN style="font-style:italic;"&gt;private function basemapSwitchHandler(event:AppEvent):void&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
if (layer.id == basemapLabel)
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (layer.id == selectedLabel)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color:&amp;quot;#FF0000&amp;quot;;"&gt;var layerType:String = configBasemaps&lt;SPAN style="font-style:italic;"&gt;.type; //get type of the basemap service
 LoadBaseMaps(selectedLabel, layerType, layer, i, layers);&lt;/SPAN&gt; //call LoadBaseMaps function
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; layer.visible = false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
} 
&lt;/SPAN&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;Now function LoadBaseMaps:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
var currentCenterPoint:MapPoint = map.extent.center;
var currentWKID:Number = map.spatialReference.wkid;
if(layerType == tiled || layerType == osm || layerType == bing)
{
 var toWKID:Number;
 (selectedLabel == Compass) ? toWKID = pol92 : toWKID = webMercator; &lt;SPAN style="color:&amp;quot;#FF0000&amp;quot;;"&gt;// ok this is for our project you 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // will have to adjust this to your needs- we know that only one mapservice has different spatial reference and rest is in 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // web mercator&lt;/SPAN&gt;
 if(toWKID != currentWKID)
 {
&amp;nbsp; ProjectPoint(currentCenterPoint, toWKID);
&amp;nbsp; ChangeSpatialRef(toWKID);
&amp;nbsp; map.lods = layers&lt;I&gt;.tileInfo.lods;
&amp;nbsp; visibleBasemaps.addItem(layer);
 }
 else
 {
&amp;nbsp; layer.visible = true;
&amp;nbsp; map.lods = layers&lt;I&gt;.tileInfo.lods;
 }
}
else
{
 layer.visible = true;
}
//if layer is tiled(or bing or osm) do some logic, else just turn it visible
&lt;/I&gt;&lt;/I&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;Now project map.extent.center to new spatial reference so we can pan the map to the right place:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
private function ProjectPoint(mapPoint:MapPoint, toWKID:Number):void
{
 try
 {
&amp;nbsp; var projectParams:ProjectParameters =&amp;nbsp; new ProjectParameters();
&amp;nbsp; projectParams.geometries = [mapPoint];
&amp;nbsp; projectParams.outSpatialReference = new SpatialReference(toWKID);
&amp;nbsp; geometryService.project(projectParams);
 }
 catch(er:Error)
 {
&amp;nbsp; //your logic for error&amp;nbsp;&amp;nbsp; 
 }
} 
&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;Next is ChangeSpatialRef function:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
private function ChangeSpatialRef(toWKID:Number):void
{
 map.spatialReference.wkid = toWKID;
 RefreshLayers();
}
&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;After changing spatial reference we need to refresh all operational layers plus I want to 'remember' which op layers were visible:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
private function RefreshLayers():void
{
 visibleLayers = new ArrayCollection();
 for each (var layer:Layer in opLayerArr)//this is what why we need the opLayerArr&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
 {
&amp;nbsp; for each(var layerW:Layer in map.layers)
&amp;nbsp; {
&amp;nbsp;&amp;nbsp; if(layer == layerW)
&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; if(layerW.visible == true)
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; visibleLayers.addItem(layerW);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; layerW.visible = false;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&amp;nbsp;&amp;nbsp;&amp;nbsp; layerW.refresh();
&amp;nbsp;&amp;nbsp; }
&amp;nbsp; }
 }
}
&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;Now when the Geometry Service completes projection do this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
private function onProjectComplete(event:GeometryServiceEvent):void
{
 mPoint = event.result[0] as MapPoint;
 map.centerAt(mPoint);
 timer.start();//i want to be sure that map recentered so i will check it with timer 
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // in &lt;I&gt;private function this_creationCompleteHandler():void add -&amp;gt; timer.addEventListener(TimerEvent.TIMER, CheckExtent); 
}
&lt;/I&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;Ok so let's check the extent(to be precise - let's check the center point of extent). I dont know why but honestly from the beginning there was a problem with recentering the map in onProjectComplete function so we had to add timer to make sure the extent will change.&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
private function CheckExtent(event:TimerEvent):void
{
 if(map.extent.center != mPoint) 
 {
&amp;nbsp; map.centerAt(mPoint);
&amp;nbsp; SetLayersVisible();
&amp;nbsp; timer.stop();
 }
 else
 {
&amp;nbsp; SetLayersVisible();
&amp;nbsp; timer.stop();
 }
}
&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;And the last function(note: I wanted to be sure that I turn on layers only when the extent is correct so making them visible is the last thing to do)&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
private function SetLayersVisible():void
{
 for each(var l:Layer in visibleBasemaps)
 {
&amp;nbsp; l.visible = true;
 }
 for each(var layer:Layer in visibleLayers)
 {
&amp;nbsp; for each(var lay:Layer in map.layers)
&amp;nbsp; {
&amp;nbsp;&amp;nbsp; if(layer == lay)
&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp; lay.visible = true;
&amp;nbsp;&amp;nbsp; }
&amp;nbsp; }
 }
 visibleBasemaps.removeAll();
 visibleLayers.removeAll();
}
&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;So this is it. I'm aware many of you would do this better, faster etc. but this is a discussion so you can point me few things that should be done different.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Few notes:&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;1.You will have to deal with LODs for dynamic/wms map services - if you don't want them just clear the map.lods array -&amp;gt; you can show dynamic services in scales of one of your tiled service. &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2.We tested this with LayerListWidget, Legend and few other(CoordinateMenuWidget, BookmarkWidget&lt;/SPAN&gt;&lt;LI&gt;, DrawAndMeasureWidget..) and they all works. No errors at all.&lt;/LI&gt;&lt;BR /&gt;&lt;SPAN&gt;3.As I said - adjust this to your project!&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;4.Solution for OverviewMap in next post - this is already too long;)&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;*In bookmark widget you'll have to make few changes to make it work in all spatial refenerces in your project.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Regards&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;MDruzgala&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 08:19:00 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-viewer-for-flex-questions/solution-switching-between-tiled-services-in/m-p/156778#M5019</guid>
      <dc:creator>MarcinDruzgala</dc:creator>
      <dc:date>2021-12-11T08:19:00Z</dc:date>
    </item>
    <item>
      <title>Re: Solution - switching between tiled services in different projections.</title>
      <link>https://community.esri.com/t5/arcgis-viewer-for-flex-questions/solution-switching-between-tiled-services-in/m-p/156779#M5020</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Solution for OverviewMap is much shorter(thank God!) &lt;span class="lia-unicode-emoji" title=":winking_face:"&gt;😉&lt;/span&gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;Adjust it to you project!&lt;/STRONG&gt;&lt;BR /&gt;&lt;SPAN&gt;1.Go to OverviewMapComponent.mxml&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Add this:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
private var webMercator:Number = 102100;
private var pol92:Number = 2180;
private var Compass:String = "Compass";
&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;Find function private function showCurrentBaseMap(currentBaseMapId:String):void&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
if (layer.id == selectedLabel)
{
 var overMapWKID:Number = overviewMap.spatialReference.wkid;
 var toWKID:Number;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var type:String = configBasemaps&lt;I&gt;.type;
 (selectedLabel == Compass) ? toWKID = pol92 : toWKID = webMercator;
 if(toWKID != overMapWKID)
 {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ChangeSpatialRef(toWKID);
 }
 if(type == "tiled" || type == "osm" || type == "bing")
 {
&amp;nbsp; overviewMap.lods = layers&lt;I&gt;.tileInfo.lods;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; layer.visible = true;
 }
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else
 {
&amp;nbsp; layer.visible = true;
 } 
}
else
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; layer.visible = false;
}
&lt;/I&gt;&lt;/I&gt;&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;Function ChangeSpatialRef:&lt;/SPAN&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;
private function ChangeSpatialRef(toWKID:Number):void
{
 overviewMap.spatialReference.wkid = toWKID;
}
&lt;/PRE&gt;&lt;BR /&gt;&lt;SPAN&gt;Again &lt;/SPAN&gt;&lt;STRONG&gt;deal with the overviewMap.lods&lt;/STRONG&gt;&lt;SPAN&gt; for dynamic services.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Cheers&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;MDruzgala&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 16:07:11 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-viewer-for-flex-questions/solution-switching-between-tiled-services-in/m-p/156779#M5020</guid>
      <dc:creator>MarcinDruzgala</dc:creator>
      <dc:date>2021-12-12T16:07:11Z</dc:date>
    </item>
  </channel>
</rss>

