看起来从经度和纬度到X和Y坐标的转换有丰富的知识,但反过来却没有。
这是我根据 Kavrayskiy 的数学计算得出的函数
float xp = kavraX(radians(pv.x), radians(pv.y))*FACTOR;
float yp = kavraY(radians(pv.x), radians(pv.y))*FACTOR;
// mapping -- this gives you screen X and Y coords from LAT and LONG
float kavraX (float latitude, float longitude) // Kavra for Kavrayskiy
// formula from http://en.wikipedia.org/wiki/Kavrayskiy_VII_projection
{
return ((3 * longitude) / TWO_PI)*sqrt(pow(PI, 2)/3 - pow(latitude, 2));
}
float kavraY (float latitude, float longitude)
{
return latitude*-1;
}
在这种情况下,pv.x 可以简单地为 34(对于洛杉矶),而 pv.y 在这种情况下将为 -118。不过,我很难扭转这个局面。有任何想法吗?
好的,根据维基百科的数学,我设法反转了方程
// find latitude from Y coord
// height / 2 to make middle of map ZERO, *-1 to flip it, so south of equator is negative.
// divide by FACTOR to make it fit within bounds of larger map
float reMapY = ((mouseY - (height/2))*-1)/FACTOR;
println(degrees(reMapY));
// I have no idea what I'm doing
float temp = sqrt((pow(PI,2)/3 - pow(reMapY,2)));
float reMapX = (mouseX - (width/2))/FACTOR;
float temp2 = ((reMapX / temp) * TWO_PI) / 3;
println(degrees(temp2));
请记住,由于地图的大小,因子是我设计中固有的东西。我相信它应该是宽度= 5.47 * FACTOR。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)