5

我的地图(Mapbox)占据了站点的整个背景,因此中心位于站点的中间。但是用户的地图焦点在右侧,因为我的内容与左侧的地图重叠。当传单抓取位置时,它来自地图的中心,但如果我可以将它设置为从站点右三分之一的中心抓取位置会更方便,这样用户就不会居中地图上的目标与站点左半部分的内容接壤。

有没有办法可以为地图设置传单 API 的中心或位置焦点?

这是我目前的设置方式,

mapOptions: {
        maxZoom: 18,
        zoomControl: false,
        worldCopyJump: true 
},

createMap: function() {
        Map.map =  L.map('map', Map.mapOptions);
        Map.layer = L.mapbox.tileLayer(Map.mapID, {
                unloadInvisibleTiles: true,
        }).addTo(Map.map);              
        Map.map.locate({setView: true});
        Map.map.addControl(L.mapbox.geocoderControl(Map.mapID));
        new L.Control.Zoom({ position: 'topright' }).addTo(Map.map);
},
4

4 回答 4

13

您可以使用panBy()和的组合getSize()来偏移地图叠加层的宽度。

这是一个可以帮助您入门的片段:

// Calculate the offset
var offset = map.getSize().x*0.15;
// Then move the map
map.panBy(new L.Point(-offset, 0), {animate: false});

在我的示例中,我的叠加层是地图宽度的 33%。所以我抓住地图区域的大小,然后乘以 0.15(这是基于一些实验,看看最佳偏移量是多少)并用于panBy()偏移地图中心。

这是一个完整的例子

于 2013-07-23T03:04:14.653 回答
3

如果您有多个标记并希望将地图置于其边界的中心,同时您有重叠的容器,则可以使用fitBounds选项(paddingTopLeft、paddingBottomRight、padding)。

http://leafletjs.com/reference.html#map-paddingtopleft

于 2014-07-30T12:37:55.460 回答
2

首先,您需要知道地图上要居中的点的纬度和经度。然后很简单,只需调用 Map.map.setView 传入您的坐标和缩放级别。Api 参考: http: //leafletjs.com/reference.html#map-set-methods

如果您不知道您的坐标,那么您可以通过反复试验找到它,只需创建一个标记并将其添加到地图中即可。

于 2013-07-22T07:21:26.933 回答
0

ghybsGIS上找到了这个解决方案,它帮助我解决了这个问题:

  • 传单活动区域

    此插件允许您使用地图的较小部分作为活动区域。所有定位方法(setView、fitBounds、setZoom)都将应用于此部分而不是所有地图。

于 2019-01-01T15:05:48.147 回答