Я пытаюсь внедрить Google Maps в JavaFX WebView. У меня есть один маркер в markers[]
-Array, который отображается в начале моей программы.Google Maps добавляет новый маркер и удаляет старый маркер одним щелчком мыши
Когда я нажимаю на карту, появляется новый маркер. Итак, у меня есть два.
Если я нажму кнопку, которая вызывает метод 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>
GoogleMapsTestProject.java:
public class GoogleMapsTestProject extends Application {
@Override
public void start(Stage stage) throws Exception {
Parent root =
FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
}
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>
deleteMarker() должна вызываться после addNewMarkers() –
но Если я wright deleteMarker() после addNewMarkers (event.latLng), старые маркеры по-прежнему не удаляются, он просто продолжает создавать новые – Evo
проверил ли вы длину вашего маркерного массива, а также если он глобальный или нет –