Работают ли новые версии версий javascript карты Google на JavaFx-WebView - PullRequest
4 голосов
/ 18 июня 2019

Я пытаюсь загрузить карту Google на JavaFx-WebView , и она не показывает ничего, кроме цвета фона HTML-тела, который я кодировал в HTML-файле. Также я попробовал несколько примеров поиска Google, все результаты были старше. Ничего из этого не работает. Моя версия Java "1.8.0_121"

Я написал HTML-файл и запустил его. Он успешно загрузил карты Google. Затем я загружаю html-файл в webview, используя метод webEngine.load ("path"). он не показывает ничего, кроме цвета фона.

После этого я попробовал http://rterp.github.io/GMapsFX

  • запускает ClusteredMainApp.java (поставьте мой ключ API Google)
  • выходов приставок:
  • "Hier"
  • "clustererimages / м"
  • «Скрыть направления называются»
  • "loadMapLibrary"
  • «loadMapLibrary done»
  • "initMap"
  • "LatLong: (47.606189, -122.33584200000001)"
  • "netscape.javascript.JSException: ошибка: Google Maps JavaScript API не поддерживает этот браузер. (Не определено, 0) "

Также я не смог найти решения этой ошибки

Файл HTML

CSS:

#map_canvas { height: 100%; background-color: blue; }

JavaScript:

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();
                document.map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

}

HTML:

<body onload="initialize()">
    <div id="map_canvas" style="width:100%; height:100%"></div>
   </body>

JavaFX:

public class WebMap extends Application {

    @Override public void start(Stage stage) {
        // create web engine and view
        final WebView webView = new WebView();
        final WebEngine webEngine = webView.getEngine();
        webEngine.load(getClass().getResource("WebMap.html").toString());
        // create scene
        stage.setTitle("Web Map");
        Scene scene = new Scene(webView,1000,700, Color.web("#666970"));
        stage.setScene(scene);
        // show stage
        stage.show();
    }

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

1 Ответ

0 голосов
/ 18 июня 2019

Если вы хотите использовать GMapsFX, вы можете скачать образец кода по вашей ссылке.

Если вы посмотрите поближе, вы увидите, что у библиотеки есть класс GoogleMapView, и он содержит WebView

код от GMapsFX

public class GoogleMapView extends AnchorPane {

private static final Logger LOG = LoggerFactory.getLogger(GoogleMapView.class);

protected static final String GOOGLE_MAPS_API_LINK = "https://maps.googleapis.com/maps/api/js?v=3.exp";
protected static final String GOOGLE_MAPS_API_VERSION = "3.exp";

private boolean usingCustomHtml;

protected String language;
protected final String region;
protected String key;
protected WebView webview; <-- Own WebView
protected JavaFxWebEngine webengine;
protected boolean initialized = false;
protected final CyclicBarrier barrier = new CyclicBarrier(2);
protected final List<MapComponentInitializedListener> mapInitializedListeners = new ArrayList<>();
protected final List<MapReadyListener> mapReadyListeners = new ArrayList<>();
protected GoogleMap map;
protected DirectionsPane direc;
protected boolean disableDoubleClick = false;

Поэтому, если вы хотите использовать библиотеку, вам не следует создавать свою собственную WebView.

Вы можете начать с образца

import com.lynden.gmapsfx.GoogleMapView;
import com.lynden.gmapsfx.javascript.event.GMapMouseEvent;
import com.lynden.gmapsfx.javascript.event.UIEventType;
import com.lynden.gmapsfx.javascript.object.GoogleMap;
import com.lynden.gmapsfx.javascript.object.LatLong;
import com.lynden.gmapsfx.javascript.object.MapOptions;
import com.lynden.gmapsfx.javascript.object.MapTypeIdEnum;
import java.net.URL;
import java.text.DecimalFormat;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.web.WebView;

public class LatLongFXMLController implements Initializable {

    @FXML
    private Label latitudeLabel;

    @FXML
    private Label longitudeLabel;

    @FXML
    private GoogleMapView googleMapView;

    private GoogleMap map;

    private DecimalFormat formatter = new DecimalFormat("###.00000");

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        googleMapView.addMapInitializedListener(() -> configureMap());
    }

    protected void configureMap() {
        MapOptions mapOptions = new MapOptions();

        mapOptions.center(new LatLong(47.6097, -122.3331))
                .mapType(MapTypeIdEnum.ROADMAP)
                .zoom(9);
        map = googleMapView.createMap(mapOptions, false);

        map.addMouseEventHandler(UIEventType.click, (GMapMouseEvent event) -> {
            LatLong latLong = event.getLatLong();
            latitudeLabel.setText(formatter.format(latLong.getLatitude()));
            longitudeLabel.setText(formatter.format(latLong.getLongitude()));
        });

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...