I have a map containign some layers in a user-defined spatial-reference (some version of the German DE_DHDN_3GK2). As of the docs my map gets the spatial-reference of ther very first layer, which is identical to the mentioned one.
However when I assign another reference-sytem to my map, nothing happens:
<SPAN class="keyword token">var</SPAN> myMap <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">(</SPAN>IMxDocument<SPAN class="punctuation token">)</SPAN>myApp<SPAN class="punctuation token">.</SPAN>Document<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>FocusMap<SPAN class="punctuation token">;</SPAN>
myMap<SPAN class="punctuation token">.</SPAN>SpatialReference <SPAN class="operator token">=</SPAN> anotherWorkspace<SPAN class="punctuation token">.</SPAN>SpatialReference<SPAN class="punctuation token">;</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN></SPAN>
In particular when I query the properties of the maps spatial-reference I get its old values:
<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">(</SPAN>ISpatialReferenceResolution<SPAN class="punctuation token">)</SPAN>myMap<SPAN class="punctuation token">.</SPAN>SpatialReference<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">get_XYResolution</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">false</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN></SPAN>
The same applies when I use this:
<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">(</SPAN>ISpatialReference<SPAN class="punctuation token">)</SPAN>myMap<SPAN class="punctuation token">.</SPAN>SpatialReference<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">GetFalseOriginAndUnits</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="keyword token">out</SPAN> <SPAN class="keyword token">var</SPAN> falseX<SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">out</SPAN> <SPAN class="keyword token">var</SPAN> falseY<SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">out</SPAN> <SPAN class="keyword token">var</SPAN> xyUnits<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN></SPAN>
So I wonder if assigning a spatial-reference to a map has any purpose at all.
When I compare the spatial references using
<SPAN class="keyword token">var</SPAN> transformEqual <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">(</SPAN>IClone<SPAN class="punctuation token">)</SPAN>myMap<SPAN class="punctuation token">.</SPAN>SpatialReference<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="token function">IsEqual</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">(</SPAN>IClone<SPAN class="punctuation token">)</SPAN>anotherWorkspace<SPAN class="punctuation token">.</SPAN>SpatialReference<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN>
myMap<SPAN class="punctuation token">.</SPAN>SpatialReference<SPAN class="punctuation token">.</SPAN><SPAN class="token function">IsPrecisionEqual</SPAN><SPAN class="punctuation token">(</SPAN>anothrWorkspace<SPAN class="punctuation token">.</SPAN>SpatialReference<SPAN class="punctuation token">,</SPAN> <SPAN class="keyword token">out</SPAN> <SPAN class="keyword token">var</SPAN> precisionEqual<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">;</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN></SPAN>
I get true for transformEqual and false for precisionEqual, which makes me assume that the setter for IMap.SpatialReference checks for IClone.IsEqual first and does nothing in case of true.
The above code runs in an AddIn on ArcMap 10.6.1.