You might also keep in mind, that they are using <a href="http://arcgis.com">arcgis.com</a> now. Perhaps some more info is there?<br><br><div class="gmail_quote">On Mon, Jul 19, 2010 at 9:17 PM, Vadim Bokin <span dir="ltr">&lt;<a href="mailto:vbokin@gmail.com">vbokin@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Robert,<br>
<br>
I&#39;ve made good progress with your suggestion.  I created a new class<br>
and just extended XYZ.js with the 2 methods you provided.  But I still<br>
have a problem.<br>
<br>
Old Code: locations where close, but kept jumping around north or<br>
south of the right location<br>
<br>
New code: locations are almost exactly 41.0 miles North of where they<br>
should be. But they are off by a fixed amount.  So when I zoom in and<br>
out they are staying put where they are, but they are still off.  So<br>
if I try to put a point on the beach in Santa Monica, on the map it<br>
looks to be between Santa Clarita and Palmdale.   As soon as I change<br>
base maps to Google or a epsg:4326 map, all is well and points are in<br>
perfect location.<br>
<br>
So it&#39;s 1 step forward (locations don&#39;t jump) and 1 step back<br>
(locations are pretty far north).<br>
<br>
I read tileOrigin from the AGS layer spec, e.g.<br>
<a href="http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer" target="_blank">http://server.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer</a>.<br>
 And I&#39;ve made sure it is correct by testing in firebug and just<br>
dumping out map.baseLayer.tileOrigin.<br>
<br>
Did you do anything else to modify XYZ to make this work?  Does 41.0<br>
miles mean anything?  to me it doesn&#39;t look like 1 degree, or anything<br>
else.  But it&#39;s a fixed distance difference between plotted and viewed<br>
points.  Some kind of error in calculation or my setup of the layer?<br>
<br>
Thank you!<br>
<br>
-Vadim<br>
<br>
<br>
On Mon, Jul 19, 2010 at 6:24 PM, Robert Sanson<br>
&lt;<a href="mailto:Robert.Sanson@asurequality.com">Robert.Sanson@asurequality.com</a>&gt; wrote:<br>
&gt; Hi Vadim<br>
&gt;<br>
&gt; What layer type are you using? ArcGIS tilecaches have a tile origin in the<br>
&gt; top left. The standard layer.XYZ in OpenLayers is built to support a lower<br>
&gt; left tile origin. You need a patched XYZ.js with setMap and<br>
&gt; calculateGridLayout copied from Zoomify.js:<br>
&gt;<br>
&gt; * APIMethod: setMap<br>
&gt;      * When the layer is added to a map, then we can fetch our origin<br>
&gt;      *    (if we don&#39;t have one.)<br>
&gt;      *<br>
&gt;      * Parameters:<br>
&gt;      * map - {&lt;OpenLayers.Map&gt;}<br>
&gt;      */<br>
&gt;     setMap: function(map) {<br>
&gt;         OpenLayers.Layer.Grid.prototype.setMap.apply(this, arguments);<br>
&gt;         if (!this.tileOrigin) {<br>
&gt;             this.tileOrigin = new OpenLayers.LonLat(this.maxExtent.left,<br>
&gt;                                                 //this.maxExtent.bottom);<br>
&gt;                                                 this.map.maxExtent.top);<br>
&gt; //patched to be similar to Zoomify<br>
&gt;         }<br>
&gt;     },<br>
&gt;<br>
&gt;     /**<br>
&gt;      * Method: calculateGridLayout //patched from Zoomify<br>
&gt;      * Generate parameters for the grid layout. This<br>
&gt;      *<br>
&gt;      * Parameters:<br>
&gt;      * bounds - {&lt;OpenLayers.Bound&gt;}<br>
&gt;      * extent - {&lt;OpenLayers.Bounds&gt;}<br>
&gt;      * resolution - {Number}<br>
&gt;      *<br>
&gt;      * Returns:<br>
&gt;      * Object containing properties tilelon, tilelat, tileoffsetlat,<br>
&gt;      * tileoffsetlat, tileoffsetx, tileoffsety<br>
&gt;      */<br>
&gt;     calculateGridLayout: function(bounds, extent, resolution) {<br>
&gt;         var tilelon = resolution * this.tileSize.w;<br>
&gt;         var tilelat = resolution * this.tileSize.h;<br>
&gt;<br>
&gt;         var offsetlon = bounds.left - extent.left;<br>
&gt;         var tilecol = Math.floor(offsetlon/tilelon) - this.buffer;<br>
&gt;         var tilecolremain = offsetlon/tilelon - tilecol;<br>
&gt;         var tileoffsetx = -tilecolremain * this.tileSize.w;<br>
&gt;         var tileoffsetlon = extent.left + tilecol * tilelon;<br>
&gt;<br>
&gt;         var offsetlat = extent.top - bounds.top + tilelat;<br>
&gt;         var tilerow = Math.floor(offsetlat/tilelat) - this.buffer;<br>
&gt;         var tilerowremain = tilerow - offsetlat/tilelat;<br>
&gt;         var tileoffsety = tilerowremain * this.tileSize.h;<br>
&gt;         var tileoffsetlat = extent.top - tilelat*tilerow;<br>
&gt;<br>
&gt;         return {<br>
&gt;           tilelon: tilelon, tilelat: tilelat,<br>
&gt;           tileoffsetlon: tileoffsetlon, tileoffsetlat: tileoffsetlat,<br>
&gt;           tileoffsetx: tileoffsetx, tileoffsety: tileoffsety<br>
&gt;         };<br>
&gt;     },<br>
&gt;<br>
&gt; Using the above works perfectly.<br>
&gt;<br>
&gt; regards,<br>
&gt;<br>
&gt; Robert Sanson<br>
&gt;<br>
&gt;&gt;&gt;&gt; Vadim Bokin &lt;<a href="mailto:vbokin@gmail.com">vbokin@gmail.com</a>&gt; 20/07/2010 11:53 a.m. &gt;&gt;&gt;<br>
<div><div></div><div class="h5">&gt;<br>
&gt; Hi,<br>
&gt;<br>
&gt; Does anyone have the _exact_ proj4js definition for ESRI projections<br>
&gt; EPSG:102100 and the older EPSG:102113?<br>
&gt;<br>
&gt; My maps have a y-coordinate shift (both north and south at different zooms)<br>
&gt; off by many map pixels.  Always close, but no cigar. X-coordinate is always<br>
&gt; dead on.<br>
&gt;<br>
&gt; I can add in ArcGIS online content as dynamic layer without any problems.<br>
&gt; But when adding cached tiles, there&#39;s always this shift.  Has anyone seen<br>
&gt; this before and/or been able to resolve it?  I need to be able to use the<br>
&gt; cached tiles.<br>
&gt;<br>
&gt; I&#39;ve used the one from <a href="http://spatialreference.org" target="_blank">spatialreference.org</a>, as well as set it directly to<br>
&gt; be equal to Google&#39;s EPSG:900913 but there&#39;s always a shift.  I&#39;ve tried<br>
&gt; many different variations with  +a and +rf and others but I feel like the<br>
&gt; definition is missing a +towgs84=...  adjustment to properly correct for the<br>
&gt; shift on the map but I have no way of knowing what those parameters should<br>
&gt; be and whether it should be the 3-parameter adjustment or the 7-parameter<br>
&gt; one.<br>
&gt;<br>
&gt; Here&#39;s my current definition:<br>
&gt;<br>
&gt; Proj4js.defs[&quot;EPSG:102100&quot;] = &quot;+proj=merc +lon_0=0 +x_0=0 +y_0=0 +a=6378137<br>
&gt; +b=6378137  +units=m +nadgrids=@null&quot;;<br>
&gt;<br>
&gt; +towgs84=0,0,0,0,0,0,0  doesn&#39;t help, but I feel like the right values in<br>
&gt; there will fix the problem.<br>
&gt;<br>
&gt; Thank you,<br>
&gt;<br>
&gt; -Vadim<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; View this message in context:<br>
&gt; <a href="http://osgeo-org.1803224.n2.nabble.com/ArcGIS-Online-Cached-tiles-datum-shift-tp5314596p5314596.html" target="_blank">http://osgeo-org.1803224.n2.nabble.com/ArcGIS-Online-Cached-tiles-datum-shift-tp5314596p5314596.html</a><br>


&gt; Sent from the OpenLayers Users mailing list archive at Nabble.com.<br>
&gt; _______________________________________________<br>
&gt; Users mailing list<br>
&gt; <a href="mailto:Users@openlayers.org">Users@openlayers.org</a><br>
&gt; <a href="http://openlayers.org/mailman/listinfo/users" target="_blank">http://openlayers.org/mailman/listinfo/users</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
</div></div>&gt; This message has been scanned for malware by SurfControl plc.<br>
&gt; <a href="http://www.surfcontrol.com" target="_blank">www.surfcontrol.com</a><br>
<div><div></div><div class="h5">_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@openlayers.org">Users@openlayers.org</a><br>
<a href="http://openlayers.org/mailman/listinfo/users" target="_blank">http://openlayers.org/mailman/listinfo/users</a><br>
</div></div></blockquote></div><br>