Javascript 谷歌地图只需单击鼠标,即可添加新标记并删除旧标记

Javascript 谷歌地图只需单击鼠标,即可添加新标记并删除旧标记,javascript,google-maps,google-maps-markers,Javascript,Google Maps,Google Maps Markers,我正在尝试将Google地图嵌入JavaFX网络视图。我在程序开始时显示的markers[]-数组中有一个标记 当我点击地图时,会出现一个新的标记。所以我有两个 如果我单击一个按钮,该按钮调用方法deleteOldMarkers()第一个标记将被删除。到目前为止还不错 我想做的是删除旧标记,同时创建一个新标记,而不必一直单击按钮。 但是如果我将函数deleteOldMarker()与addNewMarkers()-函数一起调用,它只会添加标记,而不会删除旧的标记 我的FXML项目如下所示: FX

我正在尝试将Google地图嵌入JavaFX网络视图。我在程序开始时显示的
markers[]
-数组中有一个标记

当我点击地图时,会出现一个新的标记。所以我有两个

如果我单击一个按钮,该按钮调用方法
deleteOldMarkers()
第一个标记将被删除。到目前为止还不错

我想做的是删除旧标记,同时创建一个新标记,而不必一直单击按钮。

但是如果我将函数
deleteOldMarker()
addNewMarkers()
-函数一起调用,它只会添加标记,而不会删除旧的标记

我的FXML项目如下所示:

FXMLDocument.fxml:

<AnchorPane id="AnchorPane" prefHeight="578.0" prefWidth="905.0"    
xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com 
/fxml/1" fx:controller="googlemapstestproject.FXMLDocumentController">
    <children>
        <WebView fx:id="view" layoutX="32.0" layoutY="16.0"    
prefHeight="553.0" prefWidth="848.0" />
    </children>
</AnchorPane>
FXMLDocumentController.java:

@FXML
private WebView view;
@FXML
private WebEngine webEngine;
final URL urlGoogleMaps = getClass().getResource("Map.html");

@Override
public void initialize(URL url, ResourceBundle rb) {

    webEngine = view.getEngine();
    webEngine.setJavaScriptEnabled(true);

    webEngine.load(urlGoogleMaps.toString());
    }
}

最后是Map.html:

<html>
    <head>
        <title></title>
        <script src="https://maps.googleapis.com/maps/api/js?key=  
    AIzaSyAOzn0IHzu49M3kuocoMdcDC_BPMUVNA84&signed_in=true"></script>
        <style>#mapcanvas { height: 100%; width: 100%}</style>

    </head>
    <body>
        <h1></h1>
        <div id="mapcanvas">
            <script type="text/javascript">

                var markers = [];

                document.map = new 
google.maps.Map(document.getElementById("mapcanvas"));
                var latlng = new google.maps.LatLng(48.8, 9.2);
                var Options = {
                    zoom: 15,
                    center: latlng,
                    mapTypeId: google.maps.MapTypeId.ROADMAP,
                    streetViewControl: false,
                    zoomControl: false,
                    mapTypeControl: false,
                };
                var map = new  
google.maps.Map(document.getElementById("mapcanvas"), Options);

                map.addListener('click', function (event) {
                    deleteMarker();
                    addNewMarkers(event.latLng)
                });


                var map;
                var markers = [];

                // Adds a new marker at the current mouse position when 
                   clicked
                map.addListener('click', function (event) {
                    deleteMarker();
                    addNewMarkers(event.latLng);
                });

                // Adds a marker to the map and pushes it into markers 
                   array
                function addNewMarkers(location) {
                    var marker = new google.maps.Marker({
                        position: location,
                        map: map,
                        icon: "http://maps.google.com/mapfiles/ms/icons
                               /yellow-dot.png",
                    });
                    markers.push(marker);
                }

                function deleteMarker() {
                    var i;
                    for (i = 0; i < markers.length; i++) {
                        markers[i].setMap(null);
                    }
                    markers = [];
                }
                ;

            </script>
        </div>
    </body>
</html>

#mapcanvas{高度:100%;宽度:100%}
var标记=[];
document.map=新建
google.maps.Map(document.getElementById(“mapcanvas”);
var latlng=新的google.maps.latlng(48.8,9.2);
变量选项={
缩放:15,
中心:拉特林,
mapTypeId:google.maps.mapTypeId.ROADMAP,
街景控制:错误,
动物控制:错误,
mapTypeControl:false,
};
var-map=new
Map(document.getElementById(“mapcanvas”),选项);
map.addListener('click',函数(事件){
删除标记();
addNewMarkers(event.latLng)
});
var映射;
var标记=[];
//在以下情况下,在当前鼠标位置添加新标记:
点击
map.addListener('click',函数(事件){
删除标记();
添加新标记(事件latLng);
});
//将标记添加到地图并将其推入标记中
排列
函数addNewMarkers(位置){
var marker=new google.maps.marker({
位置:位置,,
地图:地图,
图标:“http://maps.google.com/mapfiles/ms/icons
/黄点.png“,
});
标记器。推(标记器);
}
函数deleteMarker(){
var i;
对于(i=0;i
  • 更改
    deleteMarker
    以删除所有标记(如果已将第一个标记添加到数组中,则不希望留下第一个标记,希望留下最后一个标记)

  • 在调用
    addNewMarkers

  • 您不需要
    deleteOldMarkers

  • 代码片段:

    函数初始化(){
    map=新建google.maps.map(
    document.getElementById(“地图画布”){
    中心:新google.maps.LatLng(37.4419,-122.1419),
    缩放:13,
    mapTypeId:google.maps.mapTypeId.ROADMAP
    });
    map.addListener('click',函数(事件){
    删除标记();
    addNewMarkers(event.latLng)
    });
    }
    var映射;
    var标记=[];
    google.maps.event.addDomListener(窗口“加载”,初始化);
    //将标记添加到地图并将其推入标记数组
    函数addNewMarkers(位置){
    var marker=new google.maps.marker({
    位置:位置,,
    地图:地图,
    图标:“http://maps.google.com/mapfiles/ms/icons/yellow-dot.png",
    });
    标记器。推(标记器);
    }
    函数deleteMarker(){
    对于(var i=0;i
    
    html,
    身体,
    #地图画布{
    身高:100%;
    宽度:100%;
    边际:0px;
    填充:0px
    }
    
    
    deleteMarker()应该在addNewMarkers()之后调用,但是如果我在addNewMarkers(event.latLng)之后编写deleteMarker(),旧的标记仍然没有被删除,它只是继续创建新的标记。请检查标记数组的长度,以及它是否是全局的,请提供一个示例来说明您的问题。@geocodezip,我添加了整个项目的代码,现在应该可以通过复制和粘贴来运行了。我快疯了,我可以看到你的代码工作得很完美,我看不出我的代码有什么不同。但它与我的代码不兼容。我照你的建议做了。deleteMarker()-函数删除所有标记。但它只在我不将函数放在addNewMarkers()函数前面的情况下工作。如果我将deleteMarker()函数放在addListener中addNewMarkers(location,map)-函数的前面,那么旧的标记将保留。即使我通过单击“delete”按钮调用deleteOldMarkers方法,也只会删除最后一个标记,其他所有标记现在都被删除了,我看到了问题所在。标记将被删除,但仅在我放大/缩小时才会被“删除”。为什么在您的示例@geocodezip中它会自动刷新?问题是否可能是我正在JavaFX WebView中显示它,而它没有在应该的时候重新加载?您的问题没有说明任何关于JavaFX WebView的内容。是的,对此表示歉意,我编辑了我的原始帖子。
    <html>
        <head>
            <title></title>
            <script src="https://maps.googleapis.com/maps/api/js?key=  
        AIzaSyAOzn0IHzu49M3kuocoMdcDC_BPMUVNA84&signed_in=true"></script>
            <style>#mapcanvas { height: 100%; width: 100%}</style>
    
        </head>
        <body>
            <h1></h1>
            <div id="mapcanvas">
                <script type="text/javascript">
    
                    var markers = [];
    
                    document.map = new 
    google.maps.Map(document.getElementById("mapcanvas"));
                    var latlng = new google.maps.LatLng(48.8, 9.2);
                    var Options = {
                        zoom: 15,
                        center: latlng,
                        mapTypeId: google.maps.MapTypeId.ROADMAP,
                        streetViewControl: false,
                        zoomControl: false,
                        mapTypeControl: false,
                    };
                    var map = new  
    google.maps.Map(document.getElementById("mapcanvas"), Options);
    
                    map.addListener('click', function (event) {
                        deleteMarker();
                        addNewMarkers(event.latLng)
                    });
    
    
                    var map;
                    var markers = [];
    
                    // Adds a new marker at the current mouse position when 
                       clicked
                    map.addListener('click', function (event) {
                        deleteMarker();
                        addNewMarkers(event.latLng);
                    });
    
                    // Adds a marker to the map and pushes it into markers 
                       array
                    function addNewMarkers(location) {
                        var marker = new google.maps.Marker({
                            position: location,
                            map: map,
                            icon: "http://maps.google.com/mapfiles/ms/icons
                                   /yellow-dot.png",
                        });
                        markers.push(marker);
                    }
    
                    function deleteMarker() {
                        var i;
                        for (i = 0; i < markers.length; i++) {
                            markers[i].setMap(null);
                        }
                        markers = [];
                    }
                    ;
    
                </script>
            </div>
        </body>
    </html>