[OpenLayers-Users] Aspect Ratio/Projection Problem

Michael Langford michael.langford at rowdylabs.com
Fri Jun 6 03:33:28 EDT 2008


I tried Paul's suggestion and it didn't change anything.

I'll try to clarify and add code.

If you take OpenLayers out of the picture entirely, and you use GMaps
instead to do what we're trying to do, you'd use a GGroundOverlay on
google maps to plop say a custom map of New York City down on top
(completely obscuring their map). When you do this, the google does
not in any way stretch, modify, reproject, etc, the images we are
using. It might with other images, but ours come out the same as they
go in, probably indicating we have the same projection as Google Maps,
or at least close enough these areas overlay correctly. Here is an
example of using GGroundOverlay:
http://www.usnaviguide.com/ws-2008-02/ggroundoverlay_example.htm
Notice his picture *IS* reprojected to fit on the google map (ours is
not).

If we port our GGroundOverlay example from GMaps to open layers, we
throw down our custom map of say New York, then OpenLayers decides (at
least in the default setup), that it would like to stretch our custom
map overlay. Sure, it reports the correct lats and longs after doing
so, but it looks horrible, as there is lots of lettering and symbols
on the map which are stretched to near illegibility. We want to mimic
the projection that the screen map is in on Google Maps so as to avoid
any distortion.

When we use an OpenLayer.Layer.Image on top of the default map that
you get when you go new OpenLayers.Map("map"), the picture is
distorted as OpenLayers reprojects the image or something like that,
elongating it in the east west direction.

How can I use an image layer in OpenLayers to achieve the same
appearance as a GGroundOverlay in google maps, with no squishing and
stretching of the image overlay?

As a further modification, we're actually just using the image as the
base map. We're not using a google map, WMS server or anything like
that, nor are we tiling our image. We're justing using the single
image that we were overlaying now as the "base layer" of the map.
We're just interested in the controls, markers, and nice map
pixel->coordinate translations, as well as your wonderful vector
drawing api.

Remember when I say terms like "base layer" etc, I probably don't have
the same OpenLayers concepts you do, and I just mean its the map on
the bottom, we're not putting any pictures under it. Sorry if I used
terms different than they are in the Open Layers community.

          --Michael

Here is the code that initializes the map:
	var mapbounds = new OpenLayers.Bounds(-74.766667,
			39.166666667,
			-71.88333,
			40.88333);

      g_map = new OpenLayers.Map('map', options);

	var graphic = new OpenLayers.Layer.Image(
			'Overlay of Temperature Data',
			'http://www.rowdylabs.com/gmaps/oceantemp/area-ne06.gif',
			mapbounds,
			new OpenLayers.Size(1030,796),
			{maxExtext:mapbounds});

	g_map.addLayers([graphic]);
	g_map.setCenter(new OpenLayers.LonLat(-73,40), -1);

	g_markers = new OpenLayers.Layer.Markers( "Markers" );
	g_map.addLayer(g_markers);


On Fri, Jun 6, 2008 at 2:22 AM, Eric Lemoine <eric.c2c at gmail.com> wrote:
> On Fri, Jun 6, 2008 at 12:43 AM, Michael Langford
> <michael.langford at rowdylabs.com> wrote:
>> After switching to openlayers.org from google maps, we're almost ready
>> to launch my customer's new site.
>>
>> One problem though: His overlay image is "squished" on OpenLayers,
>> where it looks great using the image overlay of Google Maps API. It
>> involves way too many hours of hand lettered text on it to contemplate
>> redoing in the new aspect ratio, so I need to find a technical
>> solution to make OpenLayers.org display it properly.
>>
>> I've been fiddling with projections, and have not seen a way out of
>> this forest, as nothing appears to change the display of the image.
>>
>> When I look, I keep finding pointers on the web to the extremely brief
>> comment about projections on the FAQ, which doesn't help me at all.
>>
>> It seems like I'd like to display in EPSG:900313 as that is what
>> Google uses (that may not be the exact name, I deleted it after it
>> seemed clear it wasn't working).
>>
>> I'm not exactly sure the role the proj4js plays in this, but it seems
>> like it probably does.
>>
>> I've attached the picture of what the overlay looks like when applied
>> to google's map, and what the overlay looks like when applied to open
>> layers. In addition, it is available at
>> http://rowdylabs.com/ng/RightAndWrong.GIF in case the mailing list
>> doesn't like attachments.
>>
>> Hopefully someone can provide something like the following:
>>
>>   You properly include proj4js at the top of your html file like so,
>> and you create your map with arguments like so.
>
> Hello
>
> I'm not sure I understand your problem. But if what you want is have
> overlays over google maps you'll need to use SphericalMercator. See
> some doc here <http://trac.openlayers.org/wiki/SphericalMercator> and
> some example there
> <http://www.openlayers.org/dev/examples/spherical-mercator.html>. Hope
> this will help you do what you want.
>
> Cheers,
>
> --
> Eric
>



-- 
Michael Langford
Phone: 404-386-0495
Web: http://www.RowdyLabs.com



More information about the Users mailing list