Tôi đã đề xuất một vấn đề và tác giả đã đóng nó trên Github, nhưng tôi vẫn không có kết luận. Longitudes nằm trong khoảng từ -180 đến 180. Nhưng đôi khi, Leaflet trả về các kinh độ như 474.2578215 từ getBounds(), mà sau đó tất nhiên không có gì được trả về trong cơ sở dữ liệu của tôi.Leaflet getBounds() trả lại kinh độ lớn hơn 180
Tôi được thông báo: Đó là hành vi dự định. Điều đó xảy ra khi bạn phóng to quá xa và/hoặc kéo bản đồ đến một bản sao khác của thế giới và các khoảng thời gian getBounds không được bao bọc theo mặc định. Bạn có thể sử dụng phương thức bọc LatLng để có được những gì bạn muốn - ví dụ: bounds.getSouthWest(). wrap().
Ok. Vì vậy, tôi đã thêm phương thức bọc trong đó và dữ liệu chính xác được trả lại, nhưng hiện tại không có điểm đánh dấu nào sẽ hiển thị trên bản đồ. Điều này có thể là do các vị trí đánh dấu không nằm trong phạm vi số cao đó (tờ rơi nào là tọa độ của các ranh giới ...)
Tôi không chắc rằng việc thu phóng hoặc kéo là nguyên nhân của vấn đề. Sự cố vẫn tiếp diễn khi làm mới trang, nơi người dùng không phóng to hoặc kéo các sự kiện đã xảy ra. Tôi có zoom giới hạn trong init với: minZoom: 6, maxZoom: 13.
Tôi cũng cần lưu ý rằng mã này (không thay đổi) được sử dụng để hoạt động tốt. Đây là mã của tôi:
$(document).ready(function(){ initmap(); });
var map;
var plotlist;
var plotlayers=[];
function initmap(){
// set up the map
map = new L.Map('map');
//get our map
var osmUrl='http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';
var osmAttrib='© <a href = "http://www.openstreetmap.org/copyright"> OpenStreetMap </a> contributors';
var osm = new L.TileLayer(osmUrl, {minZoom: 6, maxZoom: 13,
attribution: osmAttrib});
map.setView(new L.LatLng(<?=$slat;?>, <?=$slng;?>),9);
map.attributionControl.setPrefix('');
map.addLayer(osm);
getGameMarkers();
map.on('moveend', onMapMove);
}
function onMapMove(e){
getGameMarkers();
}
function getGameMarkers(){
var center = map.getCenter();
var zoo = map.getZoom();
var bounds = map.getBounds();
console.log(bounds);
var min = bounds.getSouthWest().wrap();
var max = bounds.getNorthEast().wrap();
$.ajax({type: "GET", url: "./ajax/markers.php", dataType: "json", data: "clat="+center.lat+"&clng="+center.lng+"&zoom="+zoo+"&minlat="+min.lat+"&minlng="+min.lng+"&maxlat="+max.lat+"&maxlng="+max.lng+cookiestr,
success: function(data){
if (data.showmap == 1) {
plotlist = data.map_data;
removeMarkers();
for (i=0;i<plotlist.length;i++) {
var iconic = String(plotlist[i].icon);
var plotmark = new L.marker([plotlist[i].lat,plotlist[i].lng], {icon: L.icon({iconUrl: iconic, iconSize: [32, 32]}) }).bindPopup(plotlist[i].html);
map.addLayer(plotmark);
plotlayers.push(plotmark);
}
$("#content").html(data.html);
}else {
$("#map_content").show();
$("#map_content").html(data.main_content);
$("#content").html(data.side_content);
}
}
});
}
Hàm wrap() đưa ra tọa độ chính xác và DB trả về các ô chính xác. Nhưng vì lý do nào đó, chúng không hiển thị. Dưới đây là những âm mưu trả lại (phần map_data):
map_data: [{lat:36.672825, lng:-76.541748, icon:./img/avicon3.png,…},…]
0: {lat:36.672825, lng:-76.541748, icon:./img/avicon3.png,…}
1: {lat:36.901314, lng:-76.041870, icon:./img/avicon2.png,…}
2: {lat:37.101192, lng:-76.264343, icon:./img/avicon3.png,…}
3: {lat:37.300274, lng:-75.673828, icon:./img/avicon3.png,…}
4: {lat:37.348328, lng:-76.830139, icon:./img/avicon3.png,…}
5: {lat:37.2481003, lng:-76.1194000, icon:./img/bicon3.png,…}
6: {lat:37.0298691, lng:-76.3452225, icon:./img/ricon.png,…}
7: {lat:37.6087608, lng:-77.3733063, icon:./img/ricon.png,…}
8: {lat:37.7440300, lng:-77.1316376, icon:./img/ricon.png,…}
9: {lat:37.5917015, lng:-77.4207993, icon:./img/bicon2.png,…}
10: {lat:37.5206985, lng:-77.3783112, icon:./img/ricon.png,…}
11: {lat:37.3306999, lng:-77.3227615, icon:./img/ricon.png,…}
12: {lat:37.1228981, lng:-75.9063034, icon:./img/bicon2.png,…}
Không có lỗi trong giao diện điều khiển, và như tôi đã nói, đôi khi nó tất cả các công trình (khi getBounds không trả lại một LON lớn điên). Vì vậy, những gì trong heck tôi làm sai, và quan trọng hơn, làm thế nào để giải quyết nó?
Những giới hạn đó đến từ việc kéo bản đồ và được trả lại bằng tờ rơi. Vì vậy, tôi không chắc chắn tôi có thể thay đổi chương trình đó. Các điểm đánh dấu không hiển thị trên init hoặc kéo. Tôi có console.log mà đi qua vòng lặp và in ra tất cả các điểm đánh dấu, vì vậy tôi biết rằng sự kiện xảy ra ít nhất. Tôi đã từng sử dụng Google Maps, vì vậy tôi đã giữ cho chương trình càng giống với bản triển khai cuối cùng của tôi càng tốt (chỉ trong trường hợp tôi cần phải quay lại). Tôi cũng không thạo tiếng geojson, vì vậy tôi không chắc chắn chính xác cách sử dụng nó. –