【问题标题】:Using leaflet.js with a non-geo map (gdal2tiles.py)将 Leaflet.js 与非地理地图一起使用 (gdal2tiles.py)
【发布时间】:2015-05-12 00:17:52
【问题描述】:

我正在尝试使用 Leaflet.js 访问我使用 gdal2tiles.py -p raster 平铺的非地理(扫描图像...)地图。但我绝对无法让它工作:我看到 Leaflet 请求带有负坐标和不存在坐标的 URL。 (如:/3/-1/8.png...)

相关地图宽 1162 像素,高 700 像素。

gdal2tiles 生成的 tilemapresource.xml 文件说,除其他外: <BoundingBox minx="0.0" miny="-700.0" maxx="1162.0" maxy="0.0"/> <Origin x="0.0" y="-700.0"/>

因此,如您所见,Y 坐标的范围从负数到零,X 的范围从零到正数。 (这正是gdal2tiles.py 决定这样做的方式,我猜。)

我正在使用CRS.Simple,就像所有文档所说的那样,我将界限设置为SouthWest=(-700,0), NorthEast=(0,1162),承认当我看到其他似乎与第二个相反的示例时已经非常困惑(Lng ) 坐标。

(我意识到“Lat”对应“Y”,“Lng”对应“X”。)

让我同样困惑的是,当我使用最大缩放unproject 西南和东北点时,我得到西南和东北点的LatLng(-36.3125, -21.875)。我不知道为什么。 (同样,我正在使用CRS.Simple ...)

在实验中,我在 tile-layer 上设置了“tms: false”,这导致 something 出现,但现在显示器正在做最令人惊奇的事情:完全靠自己,它是“ping -pong" 沿着从左右边缘大致中间到底部中间的一条线来回移动,然后返回。

我知道我今天已经在这件事上苦苦挣扎了太久......

【问题讨论】:

  • 我想当我在任何浏览器的调试器中执行此操作时我最困惑:L.CRS.Simple.pointToLatLng(new L.Point(10,10), 3) ...我得到的回应是Lat(-1.25, 1.25),在我看来基本上是正如leafletjs.com/reference.html#icrs 所暗示的那样,它不是“将 lat,lng 直接转换为 x,y”...

标签: leaflet


【解决方案1】:

嗯,我找到了。 (而且,由于我最后问了两次这个问题,让我在两个地方都回答。)

当您调用 Map 对象的构造函数时,使用layers 选项添加所有您将在地图上使用的图层。

换句话说,不要像我一样做:先尝试设置各个图层,然后将它们添加到地图中。地图需要了解图层,而图层需要了解地图,从一开始就知道。所以,添加它们,然后根据需要配置它们。

否则,“可能会发生奇怪和默认的事情。”例如,虽然我指定了Simple CRS,但这并不是我有效结束的。似乎各种对象(地图、图层)在这个库中“相互交谈”很多,而且他们不希望成为孤立对象。

(实际上,可能发生的一些“奇怪的事情”是奇怪的 ...例如:地图的一个小版本,ping-ponging “大约三点钟”和“大约六点钟”,然后又回来了。这是一件有趣且有趣的事情,除非你还不知道它为什么会发生,也不知道如何停止它!哇!

“leaflet.js”的设计当然没有错误, 可以肯定的是,但它会给粗心的人带来一些令人不快的惊喜。 (像我一样。)希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2018-07-30
    • 2016-04-26
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 2014-05-18
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多