[OpenLayers-Users] ArcGIS Online Cached tiles datum shift

Mike Swope mswope at gmail.com
Tue Jul 20 00:08:03 EDT 2010


You might also keep in mind, that they are using arcgis.com now. Perhaps
some more info is there?

On Mon, Jul 19, 2010 at 9:17 PM, Vadim Bokin <vbokin at gmail.com> wrote:

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


More information about the Users mailing list