如何定期从javafx向google地图添加/删除标记?

如何定期从javafx向google地图添加/删除标记?,javafx,google-maps-markers,Javafx,Google Maps Markers,我是javaFx新手,尝试创建一个简单的应用程序,定期在google地图上添加和删除标记。我让我的javaFx加载google地图,但我无法让它添加标记。错误是: netscape.javascript.JSException:ReferenceError:找不到变量: 清晰标记 以下是我的java代码: public class WebMap extends Application { private Scene scene; private MyBrowser myBrow

我是javaFx新手,尝试创建一个简单的应用程序,定期在google地图上添加和删除标记。我让我的javaFx加载google地图,但我无法让它添加标记。错误是:

netscape.javascript.JSException:ReferenceError:找不到变量: 清晰标记

以下是我的java代码:

public class WebMap extends Application {

    private Scene scene;
    private MyBrowser myBrowser;
//    private LocationClickHandler handler;
//    private Vector<Button> buttons;

    @Override
    public void start(Stage primaryStage) {

//        buttons = new Vector<Button>();
        //moderator = new Moderator();
//        handler = new LocationClickHandler();
        primaryStage.setTitle("tracking-simulator");

        myBrowser = new MyBrowser();
        //moderator.registerAddIconListener(myBrowser);
        VBox mainbox = new VBox();
        mainbox.getChildren().add(myBrowser);

        // mainbox.getChildren().add(generateEntitiesButtonBox());
//  mainbox.getChildren().add(generateSensorsButtonBox());
        scene = new Scene(mainbox, 1280, 760);

        primaryStage.setScene(scene);

        primaryStage.show();

    }

    public static void main(String[] args) {
        Application.launch(args);
    }

    class MyBrowser extends Region {

        HBox toolbar;

        WebView webView = new WebView();
        WebEngine webEngine = webView.getEngine();
//        ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);

        public MyBrowser() {
            webView.setMinSize(1280, 400);
            final URL urlGoogleMaps = getClass().getResource("googlemap.html");
            webEngine.load(urlGoogleMaps.toExternalForm());

            getChildren().add(webView);

            for (int n = 0; n < 10; n++) {
                Platform.runLater(new UpdateGroupTrack());
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {
                    Logger.getLogger(WebMap.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

        }

        private class UpdateGroupTrack implements Runnable {

            @Override
            public void run() {
                try {
                    double lat = 37.39822;
                    double lon = -121.9643936;
                    Random ran = new Random();

                    lat = lat + 100.0 / ran.nextInt(1000);
                    lon = lon + 100.0 / ran.nextInt(1000);
                    System.out.println("RUNNING===============");
//                    webEngine.executeScript("addMarker('" + lat + "', '" + lon + "');");   
                    webEngine.executeScript("clearMarkers()");
                } catch (Throwable t) {
                    t.printStackTrace();
                }
            }
        }
    }
}
公共类WebMap扩展应用程序{
私密场景;
私用浏览器;
//私有位置ClickHandler;
//专用向量按钮;
@凌驾
公共无效开始(阶段primaryStage){
//按钮=新向量();
//主持人=新主持人();
//handler=新位置ClickHandler();
primaryStage.setTitle(“跟踪模拟器”);
myBrowser=新建myBrowser();
//主持人。registerAddIconListener(myBrowser);
VBox mainbox=新的VBox();
mainbox.getChildren().add(myBrowser);
//mainbox.getChildren().add(generateEntitiesButtonBox());
//mainbox.getChildren().add(generateSensorsButtonBox());
场景=新场景(mainbox,1280760);
初级阶段。场景(场景);
primaryStage.show();
}
公共静态void main(字符串[]args){
应用程序启动(args);
}
类MyBrowser扩展区域{
HBox工具栏;
WebView WebView=新建WebView();
WebEngine WebEngine=webView.getEngine();
//ScheduledExecutorService executor=执行者。newScheduledThreadPool(1);
公共MyBrowser(){
setMinSize(1280400);
最终URL urlGoogleMaps=getClass().getResource(“googlemap.html”);
load(urlGoogleMaps.toExternalForm());
getChildren().add(webView);
对于(int n=0;n<10;n++){
runLater(新的UpdateGroupTrack());
试一试{
睡眠(1000);
}捕获(中断异常例外){
Logger.getLogger(WebMap.class.getName()).log(Level.SEVERE,null,ex);
}
}
}
私有类UpdateGroupTrack实现可运行{
@凌驾
公开募捐{
试一试{
双lat=37.39822;
双lon=-121.9643936;
Random ran=新的Random();
lat=lat+100.0/ran.nextInt(1000);
lon=lon+100.0/ran.nextInt(1000);
System.out.println(“运行====================”;
//executeScript(“addMarker(“+lat+”,“+lon+”);”;
executeScript(“clearMarkers()”);
}捕获(可丢弃的t){
t、 printStackTrace();
}
}
}
}
}
这是我的html:

<!DOCTYPE html>
<html>
    <head>
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
        <style type="text/css">
            html { height: 100% }
            body { height: 100%; margin: 0px; padding: 0px }
            #map_canvas { height: 100%; background-color: #666970; }
        </style>
        <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false">
        </script>
        <script type="text/javascript">
            var map;
            var markers = [];

            function initialize() {
                var latlng = new google.maps.LatLng(37.39822, -121.9643936);
                var myOptions = {
                    zoom: 14,
                    center: latlng,
                    mapTypeId: google.maps.MapTypeId.ROADMAP,
                    mapTypeControl: false,
                    navigationControl: false,
                    streetViewControl: false,
                    backgroundColor: "#666970"
                };

                document.geocoder = new google.maps.Geocoder();
                map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

                document.zoomIn = function zoomIn() {
                    var zoomLevel = document.map.getZoom();
                    if (zoomLevel <= 20)
                        document.map.setZoom(zoomLevel + 1);
                }

                document.zoomOut = function zoomOut() {
                    var zoomLevel = document.map.getZoom();
                    if (zoomLevel > 0)
                        document.map.setZoom(zoomLevel - 1);
                }

                document.setMapTypeRoad = function setMapTypeRoad() {
                    document.map.setMapTypeId(google.maps.MapTypeId.ROADMAP);
                }
                document.setMapTypeSatellite = function setMapTypeSatellite() {
                    document.map.setMapTypeId(google.maps.MapTypeId.SATELLITE);
                }
                document.setMapTypeHybrid = function setMapTypeHybrid() {
                    document.map.setMapTypeId(google.maps.MapTypeId.HYBRID);
                }
                document.setMapTypeTerrain = function setMapTypeTerrain() {
                    document.map.setMapTypeId(google.maps.MapTypeId.TERRAIN);
                }

                document.goToLocation = function goToLocation(searchString) {
                    document.geocoder.geocode({'address': searchString}, function(results, status) {
                        if (status == google.maps.GeocoderStatus.OK) {
                            document.map.setCenter(results[0].geometry.location);
                        } else {
                            alert("Geocode was not successful for the following reason: " + status);
                        }
                    });
                }




            }
            // Add a marker to the map and push to the array.
            function addMarker(lat, lon) {
                var location = new google.maps.LatLng(lat, lon);
                var marker = new google.maps.Marker({
                    position: location,
                    map: map
                });
                markers.push(marker);
            }

            // Sets the map on all markers in the array.
            function setAllMap(map) {
                for (var i = 0; i < markers.length; i++) {
                    markers[i].setMap(map);
                }
            }

            // Removes the markers from the map, but keeps them in the array.
            function clearMarkers() {
                setAllMap(null);
            }

            // Shows any markers currently in the array.
            function showMarkers() {
                setAllMap(map);
            }
        </script>
    </head>
    <body onload="initialize()">
        <div id="map_canvas" style="width:100%; height:100%"></div>
    </body>
</html>

html{高度:100%}
正文{高度:100%;边距:0px;填充:0px}
#地图画布{高度:100%;背景色:#666970;}
var映射;
var标记=[];
函数初始化(){
var latlng=新的google.maps.latlng(37.39822,-121.9643936);
变量myOptions={
缩放:14,
中心:拉特林,
mapTypeId:google.maps.mapTypeId.ROADMAP,
mapTypeControl:false,
导航控制:错误,
街景控制:错误,
背景颜色:“666970”
};
document.geocoder=新的google.maps.geocoder();
map=new google.maps.map(document.getElementById(“map_canvas”),myOptions);
document.zoomIn=函数zoomIn(){
var zoomLevel=document.map.getZoom();
如果(缩放级别0)
document.map.setZoom(zoomLevel-1);
}
document.setMapTypeRoad=函数setMapTypeRoad(){
document.map.setMapTypeId(google.maps.MapTypeId.ROADMAP);
}
document.setMapTypeSatellite=函数setMapTypeSatellite(){
document.map.setMapTypeId(google.maps.MapTypeId.SATELLITE);
}
document.setMapTypeHybrid=函数setMapTypeHybrid(){
document.map.setMapTypeId(google.maps.MapTypeId.HYBRID);
}
document.setMapTypeTerrain=函数setMapTypeTerrain(){
document.map.setMapTypeId(google.maps.MapTypeId.TERRAIN);
}
document.goToLocation=函数goToLocation(searchString){
document.geocoder.geocode({'address':searchString}),函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK){
document.map.setCenter(结果[0].geometry.location);
}否则{
警报(“地理编码因以下原因未成功:“+状态”);
}
});
}
}
//将标记添加到地图并推送到阵列。
功能添加标记(横向、纵向){
var location=new google.maps.LatLng(lat,lon);
var marker=new google.maps.marker({
位置:位置,,
地图:地图
});
标记器。推(标记器);
}
//在阵列中的所有标记上设置贴图。
函数setAllMap(映射){
对于(var i=0;i