默認情況下,當您向標記提供圖標時,圖像會在您提供的圖像左上角用圖像的左上角繪製。對於iconAnchor允許你定位圖像,使其指向正確的區域(無論您的圖像均可)
這裏是一個小提琴,顯示此http://jsfiddle.net/GX9bh/1/ 第一個標記有[0,0] iconAnchor,使頂部圖像左側指向倫敦,第二個雖然有[100,100],所以在每個方向上向左和向左移動100個像素。
var icon_normal = new L.icon({
iconUrl: 'http://cdn.leafletjs.com/leaflet-0.6.4/images/marker-icon.png',
iconAnchor: [0, 0]
});
var icon_offsetted = new L.icon({
iconUrl: 'http://cdn.leafletjs.com/leaflet-0.6.4/images/marker-icon.png',
iconAnchor: [100, 100]
});
var marker = new L.Marker([51.505, -0.09], {
icon: icon_normal
});
var marker2 = new L.Marker([51.505, -0.09], {
icon: icon_offsetted
});
請注意,如果您沒有提供任何圖標,該小冊子正在處理此問題。你可以看到,這個代碼:http://jsfiddle.net/GX9bh/2/
var marker3 = new L.Marker([51.505, -0.09]);
這標誌「點」在實際的緯度和經度,這是標記圖像的左上角。
彈出窗口非常相似,這裏是我們原始標記上的基本彈出窗口的小提琴。 http://jsfiddle.net/GX9bh/3/
var popup = L.popup()
.setContent('<p>Hello world!<br />This is a nice popup.</p>');
marker.bindPopup(popup).openPopup()
您會注意到它也指向了默認的原始latlng! 但如果我們有popupAnchor,我們可以調整它。
popupAnchor: [100, 100]
但是對於這個傢伙來說,它在每個方向向下和向右移動100個像素(奇怪)。這裏是一個小提琴http://jsfiddle.net/GX9bh/4/
所以真的你想知道你用於標記的圖像的寬度和高度,所以你實際上調整它。
因爲我知道圖像是25px x 41px,我想偏移圖標[12,41],以便中心(圖像點所在的位置)指向實際的latlng,同樣我也想要直接在彈出窗口中彈出,所以它應該被[0,-41]偏移,所以它剛好在彈出窗口中(它已經居中)。當然,這裏是小提琴:http://jsfiddle.net/GX9bh/5/
var icon_normal = new L.icon({
iconUrl: 'http://cdn.leafletjs.com/leaflet-0.6.4/images/marker-icon.png',
iconAnchor: [12, 41],
popupAnchor: [0, -41]
});
希望這有助於!
偉大的答案,謝謝 – InitLipton