地图容器坐标和图层坐标有什么区别?
从我收集的数据来看,地图容器坐标总是相对于地图视口,而图层坐标总是以与容器坐标相同的值开始,但是一旦平移地图,它们就会改变。
引用坐标/点的API:
地图容器坐标和图层坐标有什么区别?
从我收集的数据来看,地图容器坐标总是相对于地图视口,而图层坐标总是以与容器坐标相同的值开始,但是一旦平移地图,它们就会改变。
引用坐标/点的API:
Answers:
containerPoint方法可追溯到2012年的功能请求,而今天,它们有些令人困惑。
最好的答案是Leaflet维护者Vladimir Agafonkin的描述:
“ layerPoint实际上是相对于地图图层(包含图块和标记的div)的一个点,而不是外部地图容器。您需要的是map.layerPointToContainerPoint。但是我同意没有方便的方法可以立即获取它,因此进行调度对于下一个版本。”
更详细地:
Leaflet中的核心公共转换方法(尽管很少被应用程序开发人员使用)是L.Map.project(latlng [, zoom])
和L.Map.unproject(point [, zoom])
。
Web地图被分成多个图块网格,每个图块具有相同数量的像素。在较高的缩放级别下,将地图划分为更多数量的图块,并具有相应更多的像素。因此,地图的像素大小取决于缩放级别。
这意味着如果您在浏览器中弄乱了Leaflet演示窗口,则仅当您放大和缩小时,给定latlng的L.Map.project`的输出才会改变。
从Leaflet(0.7.3)的最新版本开始,定义L.Map.latLngToLayerPoint
如下:
latLngToLayerPoint: function (latlng) {
var projectedPoint = this.project(L.latLng(latlng))._round();
return projectedPoint._subtract(this.getPixelOrigin());
}
相比之下,L.Map.latLngToContainerPoint
内容如下:
latLngToContainerPoint: function (latlng) {
return this.layerPointToContainerPoint(this.latLngToLayerPoint(L.latLng(latlng)));
}
与L.Map.layerPointToContainerPoint
定义为:
layerPointToContainerPoint: function (point) {
return L.point(point).add(this._getMapPanePos());
}
私有地图方法_getMapPanePos()
返回当前地图位置与其首次创建时位置之间的偏移量。这仅在地图平移期间发生变化(而不是在缩放期间发生变化),因此对应于给定latlng的layerPoint和containerPoint之间的区别在于,layerPoint是<div>
地图在其初始位置处的地图容器中latlng的位置,而containerPoint是latlng在地图容器中的当前位置<div>
。
编辑:原来我错了。容器坐标似乎适用于可见帧,而层坐标适用于比可见帧更大的区域。这个问题需要比我更有知识的人来回答。