# 3D projected map: put locator from GPS coordinates

Hello I'm a newbie in maps and not so good (as I wish to be...) in math and geometrics stuffs.

So: I have a 2d google map.

I have to put a 2d projection of this map (not exactly this one but a handpainted one, so I will not violate any copyright) in an app (that must work offline, so I cannot use external API but only math resources on the smartphone):

I need to put a locator (on this projection) in real time, calculating it from GPS position of the user.

So, e.g. if the user is here (45.064768 N, 7.695454 E), I will put the locator here:

In other words, I need to know how can I calculate X and Y distance from the upper left corner of the projection (I know the GPS position of all four corners of the projection).

I understand that is a strange question, that I 've asked before on SO (but I was downvoted and informed about this site). I also seem to understand that this math calculation has something to do with a rotated perspective grid:

FYI, I will manage this "GPS coords to XY" manipulation using javascript.

Pls I don't need the final "copy and paste" solution but only an idea on how to proceed, explained in words as simple as possible.

UPDATE:

After some brainstorming I understand that I could start from a trapezoidal shape laying on a 2d map (from top):

Then, if I will observe this shape from behind, this isosceles trapezoidal view will become a perspective view (what I want to show in my app) but with a rectangular shape, due the inclination (no more from the top but e.g. from 45° degrees):

Considering a given point on the "flat" map, I can get distance and angle from the four vertex of the isosceles trapezoid.

Then, I must "transpose" these distance and their angles on the resulting rectangle. I think it can be quite easy to do so, although I believe there'll some errors doing in this way (due to a lot of missing other parameters):

• I believe you are looking for the en.m.wikipedia.org/wiki/Oblique_projection. There are implementations of thia on OpenCV, or you could create a Postgis function to do it. – John Powell Jan 21 '20 at 18:11
• Actually, I think you need the axonometric projection, as it appears to be rotated as well as tilted. This kind of map, as you have shown, ia generally called 2.5D. – John Powell Jan 21 '20 at 18:15
• I feel that I must find something less tricky. The top view is a way ugly for my app, but this projection is too hard to handle. – RikiRiocma Jan 21 '20 at 19:07
• In my opinion, the easiest thing would be to find out the coefficients of a matrix of projective transformation between one plane and another. Which I think would be possible by having 4 known coordinate points in both systems. When you put the coordinates, I deleted my comment requesting them because it (my comment) was no longer necessary, but now I don't know if you deleted the coordinates because they were not correct or because you thought they would no longer be necessary. – Gabriel De Luca Jan 23 '20 at 1:17
• The transformation is clearly not-affine: parallel lines cease to be parallel when mapped. However, an affine transformation differs from a projective one in the coefficients of the last row of the transformation matrix (en.wikipedia.org/wiki/Affine_transformation#Augmented_matrix). If we project the geographic coordinates of the corners to a plane (probably custom Transverse Mercator) we could try to find the matrix of a 2D to 2D projective transformation to the image plane. – Gabriel De Luca Jan 23 '20 at 1:25