[OpenLayers-Trac] Re: [OpenLayers] #2213: Yahoo reloads all tiles on moveend

OpenLayers trac-20090302 at openlayers.org
Sun Feb 27 19:33:54 EST 2011


#2213: Yahoo reloads all tiles on moveend
-------------------------+--------------------------------------------------
 Reporter:  Specious     |       Owner:  euzuro      
     Type:  bug          |      Status:  new         
 Priority:  minor        |   Milestone:  2.11 Release
Component:  Layer.Yahoo  |     Version:  SVN         
 Keywords:               |       State:  Review      
-------------------------+--------------------------------------------------

Comment(by crschmidt):

 This behavior is the result of the following:
  1. When dragging the map, we use the 'dragging' flag. This flag causes
 the EventPane layer to use the this.dragPanMapObject call to set the
 center, rather than calling drawCenterAndZoom.
  2. Because of pixel->lonlat rounding errors, most of the time when we
 drop the map, we end up one pixel off. (This is probably in part because
 of the projection change as well.) If you turn on sphericalMercator and
 drag only horizontally, you'll see that the map doesn't redraw (if you
 drag slowly): this is because the last mousemove was in the same place as
 the mouseup, so the setCenter code doesn't get called.

 Dropping this last moveTo has this as a side effect, but it also has other
 negative side effects: basically, if you drag quickly on a slow computer,
 your map will get left behind when you pick up your mouse, because we
 don't move the map unless we're dragging. Something better might be to use
 the dragPan handlers more often: that is, to use a looser definition of
 when to use the dragPan handlers. (I'll be attaching a patch that does
 this.) However, that would probably require more intimate understanding of
 the underlying APIs than we'll ever get: given that the dragPan handlers
 are usually hidden APIs, their behavior is not always well defined.

 Instead, the Yahoo layer could specifically subclass moveTo and implement
 it in this way; that would probably be the solution with the least
 resistance (especially given the somewhat limited use that the Yahoo layer
 currently has), and would fix the problem without potentially breaking
 others.

 Basically, on Yahoo!, it seems drawCenterAndZoom is really only meant to
 be used rarely, not like the setCenter/moveTo in OpenLayers, or the
 setCenter in most other APIs, which are 'cheap'. Instead, it does a full
 redraw. (Googling for "moveByXy", I found someone who had expanded the
 compressed Yahoo! code; it is very clear that panByXy is cheap, and
 drawZoomAndCenter is 'expensive'.)

 I'll attach two patches. The former might be good someday, for someone who
 has time to test all our eventpane subclasses. The latter is the one I'd
 recommend now, which would help actually fix this issue without much risk.
 Tests continue to pass (though that doesn't mean much).

-- 
Ticket URL: <http://trac.openlayers.org/ticket/2213#comment:4>
OpenLayers <http://openlayers.org/>
A free AJAX map viewer


More information about the Trac mailing list