在我看来,这个问题的示例解决方案总是只找到屏幕上当前地图的中心,就好像它总是你要点击的地方一样!无论如何,我编写了这个小函数来获取您在屏幕上单击的实际像素位置并为此返回一个 VELatLong。到目前为止,它似乎相当准确(尽管我认为这是一个巨大的、可怕的黑客攻击——但目前我们没有选择)。
它需要一个 VEPixel 作为输入,它是您在地图上单击的位置的 x 和 y 坐标。在传递给地图的 onclick 处理程序的鼠标事件上,您可以很容易地做到这一点。
function getBirdseyeViewLatLong(vePixel)
{
var be = map.GetBirdseyeScene();
var centrePixel = be.LatLongToPixel(map.GetCenter(), map.GetZoomLevel());
var currentPixelWidth = be.GetWidth();
var currentPixelHeight = be.GetHeight();
var mapDiv = document.getElementById("map");
var mapDivPixelWidth = mapDiv.offsetWidth;
var mapDivPixelHeight = mapDiv.offsetHeight;
var xScreenPixel = centrePixel.x - (mapDivPixelWidth / 2) + vePixel.x;
var yScreenPixel = centrePixel.y - (mapDivPixelHeight / 2) + vePixel.y;
var position = be.PixelToLatLong(new VEPixel(xScreenPixel, yScreenPixel), map.GetZoomLevel())
return (new _xy1).Decode(position);
}