非常抱歉标题比较含糊,我真的无法想到更好的总结方法。欢迎提出建议。
我正在开发一个项目,这个项目并不需要谷歌地图,但是如果使用它会增加额外的开销。但是,我目前还没找到一种不使用谷歌地图的方法……
如果我在谷歌地图上放置了一个楼层平面图的图形叠加,则可以使用浏览器位置来近似用户的位置。对于这个非常大的场所来说,精度还有很大的提升空间。
现在我要做的是,在知道覆盖物的范围之后,将图像放到一个div中,然后根据用户的浏览器经纬度计算其在div中的位置。
通过使用具有水平和垂直上边缘的正方形图像(因为它们创建了我的区域),我能够接近实现该目标。但由于世界上没有任何东西是这样的,所以我需要一个不正方形的区域来看起来像是正方形。我遇到了数学上的难题。
这里有一个测试我的概念的链接,但是没有考虑需要在地图上旋转的图像:http://www.freeptools.com/mapster/singlerun/maptest.php
就像我说的那样,我相信这是可以做到的,但我还没有找到正确的数学方法。这让我很疯狂。
这是执行此操作的代码。一个函数获取浏览器坐标并将它们发送到初始化函数。然后根据之前自己绘制的地图,我有了我要映射的图像的边界。我使用haversine公式尝试在用户位置处得到高度和宽度(因为地图曲线,其它任何位置都会不准确),然后从最左侧和最上方的点的距离中取出左端距离和上端距离,再将左/上距离除以宽度/高度,以得到他们离左侧/顶部的距离所占的百分比,以定位点的位置。这个想法,虽然我无法超级精确,但在这个例子中起作用,因为图像在地图上水平对齐。我的问题是如果该图像在地图上被旋转,我该如何计算这些距离?我无法找到那个数学方法。
function initialize(y3, x3) { //lat, lon
//var overlayBounds = new google.maps.LatLngBounds(new google.maps.LatLng(41.11246878918085, -90.5712890625), new google.maps.LatLng(47.68652571374621, -82.001953125));
var box = $("#map_canvas");
//image bounds
var x1 = -82.001953125;
var x2 = -90.5712890625;
var y1 = 41.11246878918085;
var y2 = 47.68652571374621;
var boxWidth = x2 - x1;
var boxHeight = y2 - y1;
//now we need to figure out where this rests, first we get the percentage
//var posLeft = haversine(y3, x1, y3, x3); //(x3 - x1);
var posLeft = (x3 - x1);
var posLeftPct = (posLeft/boxWidth)*100;
//var posTop = haversine(y2, x3, y3, x3); //(y2 - y3);
var posTop = (y2 - y3);
var posTopPct = (posTop/boxHeight)*100;
box.append('<img src="http://www.freeptools.com/mapster/icons/icon23.png" style="position:absolute; z-index:200; right:'+posLeftPct+'%; top:'+posTopPct+'%">');
}