ThinkGeo.com    |     Documentation    |     Premium Support

Current Extent around wrap

Hi All,


Just wondering if there's a way to set the extent of a map to go around the edge/wrap.  For instance, how would I set a global map's extent to include Australia and South America, but not Africa, assuming the edge of the map is the Internation Date Line?  Thanks a lot!


-Dustin



Dustin,



You can turn the wrap dateline on by the following JavaScript:var OnMapCreating = function(map) {
    OpenLayers.Layer.WMS = OpenLayers.Class(OpenLayers.Layer.WMS, {
       wrapDateLine : true 
    });
}

Currently, I’ve no idea to have an extent to including Australia and South America. The following server code may helps.Map1.ZoomTo(new PointShape(180, 0), Map1.ClientZoomLevelScales[2]);
If you have any questions please let me know.



Thanks,



Howard



Howard, 
 Thanks for the help. Currently, I’m turning the wrap on server side, which works perfectly fine. 
 I don’t think I phrased my question properly, though, so I’ll try to be more detailed.  Essentially, I’m trying to move my current extent to a part of the world map that contains Australia.  I have a top left point of (N26, E70) and a bottom right point of (S50, W165).  With these coordinates, the box created would wrap over the edge of the image, but I cannot seem to find a way to accomplish this.  Are there any provisions for something of this nature?

Hi Dustin,


I’m not sure whether my idea is a good one, but I think it can fix you issue.


First of all, make you current extent to a valid extent, for example you extent is (N26, E70), (S50, W165), and the new extent equals new RectangleShape(70, 26, 195, -50); get center of the new Extent Center (132.5, -12) which you can use in the following method:
Map1.ZoomTo(new PointShape(132, -12), Map1.ClientZoomLevelScales[2]);


Hope it helps.


Thanks,


Howard



Hi Howard, 
 That’s a really good idea, and I see where you’re going with it, however, it’s not quite what I’m looking for.  Unfortunately, I need the bounding points to be exact, instead of just an approximate zoom.  I’m still searching for an answer, though, so if you think of anything else, please do let me know.

Dustin,



Currently, we don’t support any API to satisfy your requirement. However, there still exists a method to find the scale of a bounding box. Please see the method below which you can use in my method I posted before.public static double GetScaleFromBoundingBox(RectangleShape boundingBox, double mapWidthInPixel, double mapHeightInPixel, GeographyUnit unit)
{
    double resolution = Math.Max(boundingBox.Width/mapWidthInPixel, boundingBox.Height/mapHeightInPixel);
    double returnScale;

    double ratio;
    switch (unit)
    {
        case GeographyUnit.DecimalDegree: ratio = 419976384; break;
        case GeographyUnit.Feet: ratio = 1152; break;
        case GeographyUnit.Meter: ratio = 3779.5296; break;
        default: ratio = double.NaN;
    }

    if (!double.IsNaN(ratio))
    {
        returnScale = ratio * resolution;
    }

    return returnScale;
}

If you have any questions please let me know.



Thanks,



Howard