[ka-Map-users] GeoCoordinates to Pixel position

Paul Spencer pspencer at dmsolutions.ca
Fri May 12 07:35:03 EDT 2006


Hi,

this is tricky math :)  The correct pixel position needs to be  
calculated in a number of steps depending on how you want to use the  
pixel position.

The math for taking a geographic position and calculating its pixel  
position is handled starting with addObjectGeo ... you can trace the  
calls from there.

The simple calculation is to take the geographic coordinates and  
multiply by the cellsize (geographic coordinates per pixel).

var px = gx * this.cellSize;
var py = gy * this.cellSize; //or myKaMap.cellSize

now you have to convert from geographic space to browser space  
because in the real world up is positive and in browser space, down  
is positive

py = -1 * py;

now you have to convert to viewport coordinates, which are mirrored  
on x/y to get the image to show up in the viewport:

px = -1*px;
py = -1*py;

now you have to adjust for a variable origin

px = px - this.xOrigin;
py = py - this.yOrigin;  // or maybe it is +?

px and py are now relative to the top, left of the viewport element.   
If you want page-relative coordinates, you need to find the top/left  
of the viewport and add px/py.

I may not have this exactly right, whenever I need to do something  
like this I usually end up spending time in the debugger tracing the  
values to figure out exactly which combination I need :(

The pixel coordinates are going to be different at every zoom scale  
because the origin and cell size changes.

You can get notified of changes in the scale by registering for  
KAMAP_SCALE_CHANGED event.

Cheers

Paul

PS not sure why you want to do this.  kaMap already includes  
functions for doing most of this in the other direction.  Is there a  
need for the reverse?

On 11-May-06, at 7:52 PM, Wei Yang, Ng - Wayne wrote:

> Hi Ramesh,
>     I am doing similar stuff and I am having the same problem. (The  
> map slides to anywhere else but the point that I want)A possible  
> solution
> (not tested) is to create a javascript function that kicks in when  
> the zoom level changes. (a few events trigger a zoom level change  
> eg. mouse scroll, icon click, KB +/-)
> The function finds out(a set variable perhaps) if the map is  
> supposed to zoom to a certain geographic coordinate and reinvokes  
> the function(supplying lat/long of course) that moves/slides to it.  
> This idea is based on the observation that while the map is  
> sliding, I am able to interrupt the action by dbl clicking anywhere  
> on the map.
>
> Cheers,
> Wayne
>> Hi,
>>
>> I am trying to figure out the correct pixel position
>> for a given geo-coordinates in all zoom levels.
>>
>> I looked at the code, and it looks like the following
>> sequence
>> p = kaMap.geoToPix(geox,geoy) newxy =  
>> kaMap.currentTool.adjustPixPosition(p[0]*-1,
>> p[1]*-1)
>>
>> seem to work fine if the zoom level is not changed but
>> only extents are changed.
>>
>> How do I calculate the correct pixel position when
>> zoom level(or scales) change?
>>
>> Thanks
>> Ramesh
> _______________________________________________
> ka-Map-users mailing list
> ka-Map-users at lists.maptools.org
> http://lists.maptools.org/mailman/listinfo/ka-map-users

+-----------------------------------------------------------------+
|Paul Spencer                           pspencer at dmsolutions.ca   |
+-----------------------------------------------------------------+
|Applications & Software Development                              |
|DM Solutions Group Inc                 http://www.dmsolutions.ca/|
+-----------------------------------------------------------------+






More information about the ka-Map-users mailing list