更新位置后,Google地图标记会消失

时间:2014-02-12 09:20:10

标签: javascript primefaces

我想使用javascript更新谷歌地图标记。

以下是我的代码:

的index.xhtml

<h:form id="mapForm">
                    <p:gmap id="map" center="1.30, 103.80" fitBounds="true" zoom="11" type="ROADMAP" style="width:100%;height:100%" model="#{indexBean.mapModel}" mapTypeControl="false" widgetVar="mapWidget">
                    </p:gmap>
                    <script type="text/javascript">
                        //<![CDATA[
                        function handleComplete(xhr, status, args) {
                            var gmap = mapWidget.getMap();
                            for (var i in gmap.markers)
                            {
                                var newMarker = eval("args.marker" + i);
                                var oldMarker = gmap.markers[i];
                                oldMarker.icon = newMarker.icon;
                                oldMarker.title = newMarker.title;
                                oldMarker.position = newMarker.position;
                                oldMarker.setMap(gmap);
                            }
                        }
                        // ]]>
                    </script> 
</h:form>
<p:poll interval="3" listener="#{indexBean.updateMarkers}" oncomplete="handleComplete(xhr, status, args)"></p:poll>

IndexBean.java

public void updateMarkers()
{
    populateMapModelEntities();
    for (int i = 0; i < mapModel.getMarkers().size(); i++)
    {
        LatLng latLng = mapModel.getMarkers().get(i).getLatlng();
        double lat = latLng.getLat();
        lat+=.1;
        mapModel.getMarkers().get(i).setLatlng(new LatLng(lat, latLng.getLng()));

        RequestContext.getCurrentInstance().addCallbackParam("marker" + i, mapModel.getMarkers().get(i));
    }
}

每当我没有更新位置时,标记仍然可见。但如果我更新位置,标记就会消失。我需要你的帮助。

1 个答案:

答案 0 :(得分:0)

我不知道为什么,但是当javascript尝试恢复它时,缺少lat long信息。

这就是我所做的

在我的托管bean中,这是发送新数据的方法:

    public void ajaxPoll() {
    ILoadSrvc loadSrvc= new LoadSrvc();
    for(Marker marker:mapLoadModel.getMarkers()){
        Load load = loadSrvc.getLoadByRef(marker.getTitle());
        if(load != null){
            if(load.getLoadStatus().getLastLatitude()!=marker.getLatlng().getLat() ||
                    load.getLoadStatus().getLastLongitude()!= marker.getLatlng().getLng() ||
                    (load.getMaxAlert()!=null && load.getMaxAlert()=='H' && marker.getIcon().equals(Constants.POI_LOAD_OK)) ||
                    (load.getMaxAlert()==null && marker.getIcon().equals(Constants.POI_LOAD_ALERT))){
            marker.setLatlng(new LatLng(load.getLoadStatus().getLastLatitude(),load.getLoadStatus().getLastLongitude()));
            if(load.getMaxAlert()!=null && load.getMaxAlert()=='H'){
                marker.setIcon(Constants.POI_LOAD_ALERT);
            }else{
                marker.setIcon(Constants.POI_LOAD_OK);
            }
            logger.info("cambio coordenades de:"+marker.getTitle());
            }
        }
    }

      for (int i = 0; i < mapLoadModel.getMarkers().size(); i++){

          RequestContext.getCurrentInstance().addCallbackParam("marker" + i, mapLoadModel.getMarkers().get(i));

          RequestContext.getCurrentInstance().addCallbackParam("position" + i, mapLoadModel.getMarkers().get(i).getLatlng());
      }
      logger.info("refresco marcadores");
   }

这是XHTML的一部分

<ui:define name="scripts">
        <script src="https://maps.google.com/maps/api/js?sensor=false"
        type="text/javascript"></script>
        <script>
 //<![CDATA[
 function handleComplete(xhr, status, args){
var gmap = PF('gMapWV').getMap();
for(var i in gmap.markers)
{
  var newMarker = eval("args.marker"+i);
  var newPosition = eval("args.position"+i);
  var oldMarker = gmap.markers[i];
  oldMarker.setPosition(newPosition);
  oldMarker.icon=newMarker.icon;
  oldMarker.setMap(gmap);
 }   
 }
// ]]>
</script>
 </ui:define>

......

            <p:poll interval="#{manageLoadExecution.refreshInterval}" listener="#{manageLoadExecution.ajaxPoll}" oncomplete="handleComplete(xhr, status, args)" />
            <p:gmap widgetVar="gMapWV" id="gMapWV" center="#{manageLoadExecution.latitude} , #{manageLoadExecution.longitude}"  zoom="#{manageLoadExecution.zoomLevel}" fitBounds="false" type="ROADMAP"  style="width:900px;height:400px" model="#{manageLoadExecution.mapLoadModel}" >