जब मैं अपने JavaFX एप्लिकेशन के एक बटन पर क्लिक करता हूं, तो मैं मानचित्र पर एक मार्कर प्रदर्शित करने की कोशिश कर रहा हूं। तो क्या होता है जब मैं उस बटन पर क्लिक करता हूं, तो मैं एक JSON फ़ाइल में स्थिति लिखता हूं, यह फ़ाइल उस HTML फ़ाइल में लोड की जाएगी जिसमें नक्शा शामिल है। समस्या यह है कि यह पूरी तरह से काम करता है जब मैं ब्राउज़र में HTML पृष्ठ खोलता हूं, लेकिन जावाएफएक्स के वेब दृश्य में कुछ भी नहीं होता है, और मुझे पता है कि क्यों!
यह HTML फ़ाइल है:
<!DOCTYPE html>
<html>
<head>
<title>Simple Map</title>
<meta name="viewport" content="initial-scale=1.0">
<meta charset="utf-8">
<style>
/* Always set the map height explicitly to define the size of the div
* element that contains the map. */
/*#map {
height: 100%;
}*/
#map{width:100%;height:100%;margin:auto;}
/* Optional: Makes the sample page fill the window. */
html, body {
height: 100%;
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<div id="map"></div>
<script>
var map;
var marker;
// Multiple Markers
var markers = [];
var pos = {lat: 46.662388, lng: 0.3599617};
var itinerary_markers = [];
function initMap() {
var currentLat, currentLng;//Latitude et longtitude courante
$.ajax({
url: 'https://maps.googleapis.com/maps/api/geocode/json?address=My+ADDRESS&key=MY_KEY',
async: false,
dataType: 'json',
success: function (data) {
currentLat = data.results[0].geometry.location.lat;
currentLng = data.results[0].geometry.location.lng;
}
});
map = new google.maps.Map(document.getElementById('map'), {
center: {lat: currentLat, lng: currentLng},
zoom: 15,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
/*MARQUEUR*/
$.ajax({
async: false,
url: 'test.json',
data: "",
accepts:'application/json',
dataType: 'json',
success: function (data) {
for (var i = 0; i < data.hydrants.length; i++) {
markers.push( data.hydrants[i]);
}
}
});
var posi = new google.maps.LatLng(markers[0].Lat, markers[0].Lng);
marker = new google.maps.Marker({
position: posi,
map: map,
//title: markers[i][0]
title: markers[0].Name
});
}
</script>
<script
src="https://code.jquery.com/jquery-3.2.1.min.js"
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
crossorigin="anonymous">
</script>
<script src="https://maps.googleapis.com/maps/api/js?key=MY_KEY&callback=initMap&language=fr"
async defer></script>
</body>
</html>
जब मैं बटन पर क्लिक करता हूं, तो मैं JSON फाइल (जो पूरी तरह से काम करता है) को भरता हूं और फिर मैं इसे वेबव्यू को रिफ्रेश करने के लिए निष्पादित करता हूं:
this.webView.getEngine().load(getClass().getResource("/data/index.html").toString());
जैसा कि मैंने पहले कहा था, जब मैं उस ब्राउज़र पर फ़ाइल खोलता हूं जिसे मैं अपेक्षित परिणाम देखता हूं, लेकिन मुझे नहीं पता कि JavaFX के साथ क्या समस्या है। अगर ऐसा करने का कोई बेहतर तरीका है तो कृपया मुझे बताएं।
संपादित करें:
मुझे JavaFX से जावास्क्रिप्ट (निष्पादन) (विधि) का उपयोग करके सीधे डेटा (जीपीएस निर्देशांक) भेजकर समस्या का हल मिल गया, इसलिए मुझे दो प्लेटफार्मों के बीच पुल के रूप में एक json फ़ाइल की आवश्यकता नहीं है। तो यह एक उदाहरण है कि कोड कैसा दिखता है:
eng.executeScript("updateMarker(" + lat + ", " + lng + ")");//eng is a WebEngine instance
और यहाँ जावास्क्रिप्ट है:
/*The initial latitude and longtitude*/
var currentLat = the latitude;
var currentLng = the longtitude;
function initMap() {
map = new google.maps.Map(document.getElementById('map'), {
center: {lat: currentLat, lng: currentLng},
zoom: 15,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var posi = new google.maps.LatLng(currentLat, currentLng);
marker = new google.maps.Marker({
position: posi,
map: map,
visible: false
});
}
/*The method that is I call from JavaFX*/
function updateMarker(_lat, _lng){
marker.setPosition({lat: _lat, lng: _lng});
map.setCenter(new google.maps.LatLng(_lat, _lng));
marker.setVisible(true);
}
आपकी टिप्पणियों और उत्तरों के लिए धन्यवाद, और रेडिट के लिए एक विशेष गोलीबारी।
cache: false
कैश होने की स्थिति में अजाक्स कॉल को पास करें, और सुनिश्चित करें कि आपने सही फ़ाइल को लक्षित किया है। इसके अलावा कुछ लॉग यहां और समस्या की पहचान करने में मदद करेंगे।