我的代码做了.pantolatlong然后.showinfobox

在信息框不会出现,除非我删除pantolatlong。我想这是停止它。我试着将它添加到endpan事件,但没有奏效。

什么是平移的图钉和用于它显示信息框的最简单的方法?

我用setcenter,但我发现,有时setcenter平底锅,这打破它。

有帮助吗?

解决方案

在一些疯狂的google搜索,我想出了一个解决方案,我会在这里分享,这样别人就希望没有我所经历的悲痛。

我创建并使用纯的JavaScript,没有SDK或iframe方案电源我的冰地图。在我的代码,我生成JavaScript添加所有我想要的地图引脚,并使用asp.net标签注入它。

如果您致电自己的Bing地图的setCenter()方法,它应该立即设置地图,意外的惊喜,到指定的坐标。而且它......大部分时间。不过,有时它决定点之间进行平移。如果你做一个SetCenter,随后ShowInfoBox,它会是不错的,除非它决定要出锅。

在溶液?作为优秀的程序员,我们是,我们潜入SDK,它揭示了存在的事件,我们可以挂接到处理这些。有一个onendpan事件,泛完成之后被触发。还有一个onchangeview情况下,当在地图上跳触发。

因此,我们挂接到这些事件,并尝试以显示我们的图钉形状的信息框......但没有任何反应。为什么呢?

您必须给它几毫秒到喘口气,不知什么原因,当被称为事件。使用的setTimeout与10毫秒似乎是罚款。在这之后你的对话框将会出现巨大的。

接下来的问题是,你只希望它时,它通过任何你用来使它的图钉轻弹之间出现平移(在我的情况,用的onclick方法表)。我创建/销毁在运行中的事件处理程序,虽然也有其它选项,例如使用全局变量来跟踪用户是否平移,或者如果系统响应于一个点击摇摄。

最后,你即来源于此的一个错误。如果您在列表中点击一个地方,它跳跃/平移到该位置,信息框就会显示效果细腻。如果用户将其关闭,虽然,然后再点击列表项,地图不动,因此没有事件被触发。

我到该溶液中是,为了检测通过记录其经度/纬度,并且使用另一种的setTimeout方法,检测是否他们后来改变为100ms,如果地图移动与否。如果他们没有,显示信息框。

有你需要跟踪的其他事情,因为没有办法,我能看到,所以我使用的全局JavaScript变量,这将参数传递到事件处理 - 你必须知道你正在显示其图钉形状,也跟踪先前mapcoordinates的检查,看他们是否改变之前。

我花了一段时间来拼凑这个都在一起,但它似乎工作。这是我的代码,一些部分被移除:

// An array of our pins to allow panning to them
var myPushPins = [];

// Used by the eventhandler
var eventPinIndex;
var oldMapCenter;

// Zoom in and center on a pin, then show its information box
function ShowPushPin(pinIndex) {
    eventPinIndex = pinIndex;
    oldMapCenter = map.GetCenter();
    map.AttachEvent("onendpan", EndPanHandler);
    map.AttachEvent("onchangeview", ChangeViewHandler);
    setTimeout("DetectNoMapChange();", 200);

    map.SetZoomLevel(9);
    map.SetCenter(myPushPins[pinIndex].GetPoints()[0]);

}


function EndPanHandler(e) {
    map.DetachEvent("onendpan", EndPanHandler);

    setTimeout("map.ShowInfoBox(myPushPins[eventPinIndex]);", 10);

}

function ChangeViewHandler(e) {
    map.DetachEvent("onchangeview", ChangeViewHandler);

    setTimeout("map.ShowInfoBox(myPushPins[eventPinIndex]);", 10);

}

function DetectNoMapChange(centerofmap) {

    if (map.GetCenter().Latitude == oldMapCenter.Latitude && map.GetCenter().Longitude == oldMapCenter.Longitude) {
        map.ShowInfoBox(myPushPins[eventPinIndex]);
    }
}

其他提示

下面是另一种方式:

    function addPushpin(lat,lon,pinNumber) {
    var pinLocation = new Microsoft.Maps.Location(lat, lon);

    var pin = new Microsoft.Maps.Pushpin(map.getCenter(), { text: pinNumber.toString() });

    pinInfobox = new Microsoft.Maps.Infobox(pinLocation,
            { title: 'Details',
                description: 'Latitude: ' + lat.toString() + ' Longitude: ' + lon.toString(),
                offset: new Microsoft.Maps.Point(0, 15)
            });


    map.entities.push(pinInfobox);
    map.entities.push(pin);

    pin.setLocation(pinLocation);
    map.setView({ center: pinLocation});
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top