Diskuze: Jak přiřadit více text k markeru a ukázat ho po kliknutí
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 9 zpráv z 9.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, udělej normálně
list($lng, $lat) = explode(',', $name['souradnice']);
$list[] = ['lng' => $lng, 'lat' => $lat, 'info' => $name['info']];
a budeš to mít uložené ve stejné proměnné a tím i ve stejném JS objektu. Ty funkce list() a explode() jsou tam jen proto, že si souřadnice ukládáš společně v jednom sloupečku. Kdybys to po minulém dotazu opravil a rozdělil je, nemuselo by to tam být vůbec.
Jelikož řešíš víc markerů a jejich popisy, měl bys to chování definovat během cyklu pro každý z nich a ne až za ním. Hodnota bude v cyklu dostupná klasicky jako data[i].info.
Jinak pevně doufám, že tohle nemyslíš vážně Number(data_info[i].info). Nebo je snad info číselná hodnota, abys z ní dělal typově číslo?! Chce to víc koukat na dokumentaci a orientovat se v základech, ne to jen nahodile mezi sebou kopírovat.
Díky, ale
Notice: Undefined index: info in
C:\xampp\htdocs\pokus_do_itnetwork\get_coordinates.php on line 14
<?php
$conn = mysqli_connect("localhost", "root", "", "lokace");
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT souradnice FROM tabulka_lokace";
$result = $conn->query($sql);
$variable="";
$list = [];
if ($result->num_rows > 0) {
while($name = $result->fetch_assoc()) {
list($lng, $lat) = explode(',', $name['souradnice']);
$list[] = ['lng' => $lng, 'lat' => $lat, 'info' => $name['info']];
}
} else { echo "0 results"; }
$conn->close();
?>
A to jsou ty scházející základy, o kterých mluvím. Když máš undefined index info, tak tam žádné info asi není načtené.
SELECT souradnice, info FROM tabulka_lokace
Ty hodnoty z info to teď vrací, jenže ne příslušné, vrátí to tu poslední. Vím že tuto funkci
map.on('singleclick', function (event) {
if (map.hasFeatureAtPixel(event.pixel) === true) {
document.getElementById("www").innerHTML=informations;
} else {
overlay.setPosition(undefined);
closer.blur();
}
});
musím napsat až po
map.addLayer(layer);
protože to s tou map pracuje, zároveň by to ale mělo být ještě vrámci cyklu. Ale když to nefunguje v místě kde to je, tak nevím kde by to mělo být.... Kam to map.on('singleclick', function (event) {... teda posunout?
if(window.phpdata.markers && window.phpdata.markers.length > 0) {
var data = window.phpdata.markers;
for(var i = 0; i < data.length; i++) {
var informations = data[i].info;
var marker = new ol.Feature({
geometry: new ol.geom.Point(
ol.proj.fromLonLat([Number(data[i].lng), Number(data[i].lat)])
),
});
marker.setStyle(new ol.style.Style({
image: new ol.style.Icon(({
src: 'dot.png'
}))
}));
vectors.addFeature(marker);
map.on('singleclick', function (event) {
if (map.hasFeatureAtPixel(event.pixel) === true) {
document.getElementById("www").innerHTML=informations;
} else {
overlay.setPosition(undefined);
closer.blur();
}
});
}
var layer = new ol.layer.Vector({
source: vectors,
});
map.addLayer(layer);
}
document.getElementById('myposition').innerText = "click to map and get coordinates here";
map.on('singleclick', event => {
const coordinate = ol.proj.toLonLat(event.coordinate);
//const innerText = `Lon: ${coordinate[0].toFixed(4)}, Lat: ${coordinate[1].toFixed(4)}`;
const innerText = `${coordinate[0].toFixed(4)}, ${coordinate[1].toFixed(4)}`;
document.getElementById('myposition').innerText = innerText;
});
map.on('pointermove', function(evt) {
map.getTargetElement().style.cursor = map.hasFeatureAtPixel(evt.pixel) ? 'pointer' : '';
});
console.table(window.phpdata.markers)
Tak jsem si našel chvilku a podíval se na to. Tady je výsledek https://jsfiddle.net/pwjt1nq4/
Pozor, je to psané proti aktuálním knihovnám OpenLayer, takže tam oproti knihovně ze staršího návodu nemusí být kompatibilita. Jinak musím říct, že takhle ukecané mapové API jsem ještě nepotkal a u většího projektu bych dlouho přemýšlel, zda raději neplatit Google Maps API.
Zobrazeno 9 zpráv z 9.