- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个非地理图像而不是普通的 map 。比方说,例如X射线,MRI扫描或显微镜图像,我想使用传单,这样我就可以放大,缩小并在一些预定点上放置一些标记。
我已经阅读了Non-geographical maps的示例,但本例演示了使用单个图像而不是平铺图像。我宁愿使用图块,因为我的图像会很大。还有其他适合我上述情况的情况吗?我正在研究rastercoords,但尚未确定是否适用于此栅格文件,仅适用于纯 map 。
最佳答案
这是我的经验,介绍了如何从PDFs或高分辨率图像或non-slippy maps等来源创建滑动 map 。无论如何,我都想写一篇文章,所以让这个答案成为尚未撰写的文章的草图。
举一个例子,这是带有 vector 图形的PDF map of European inland waterways,这是其中的slippy map。
基本上,最合理的方法是制作一个标准的图块集,然后让Leaflet展示它。即为每个缩放级别生成大小为256x256的图块。
您不希望将大图像用作图层,因为这对于浏览器来说会很沉重。您也不想在浏览器中调整大小,这会导致质量下降。
幸运的是,使用ImageMagick创建图块非常容易。这就是我的方法。
确定您想要多少个缩放级别
首先,确定所需的缩放级别。这取决于 map ,根据我的经验,您最多需要5-7缩放级别。让我们以5个缩放级别为例。生产的级别越多,对硬件的要求就越高。以下方法可能不适用于超过7-8的缩放级别。
渲染或调整源图像的大小
接下来,为每个缩放级别渲染或调整图像大小。您必须生成尺寸等于以下之一的图像:
等级0上的
256
像素512
像素1024
像素2048
像素4096
像素convert -resize
与
x*256*
或
*256*x
一起使用:
convert images\source.jpg -resize x256 images\0.jpg
convert images\source.jpg -resize x512 images\1.jpg
convert images\source.jpg -resize x1024 images\2.jpg
convert images\source.jpg -resize x2048 images\3.jpg
convert images\source.jpg -resize x4096 images\4.jpg
convert images\source.jpg -resize x8192 images\5.jpg
vk-X-Y.jpg
,并进行了切割以使其重叠。在这种情况下,您首先必须裁剪图像:
magick data\vk-0-0.jpg -crop 522x373+0x0 images\t-0-0.jpg
magick data\vk-1-0.jpg -crop 522x373+0x0 images\t-1-0.jpg
magick data\vk-2-0.jpg -crop 522x373+0x0 images\t-2-0.jpg
magick data\vk-3-0.jpg -crop 522x373+0x0 images\t-3-0.jpg
magick data\vk-4-0.jpg -crop 522x373+0x0 images\t-4-0.jpg
magick data\vk-5-0.jpg -crop 650x373+0x0 images\t-5-0.jpg
...
magick images\t-0-0.jpg images\t-1-0.jpg images\t-2-0.jpg images\t-3-0.jpg images\t-4-0.jpg images\t-5-0.jpg +append images\t-0.jpg
...
magick images\t-0.jpg images\t-1.jpg images\t-2.jpg images\t-3.jpg images\t-4.jpg images\t-5.jpg images\t-6.jpg images\t-7.jpg images\t-8.jpg images\t-9.jpg images\t-10.jpg -append images\t.jpg
density
调整大小。要计算每个缩放级别的密度(这是Windows命令,请针对Linux进行相应修改):
identify -precision 16 -format "%%[fx:((256/max(w,h))*72)]\n%%[fx:((512/max(w,h))*72)]\n%%[fx:((1024/max(w,h))*72)]\n%%[fx:((2048/max(w,h))*72)]\n%%[fx:((4096/max(w,h))*72)]" source.pdf
21.89073634204276
43.78147268408551
87.56294536817103
175.1258907363421
350.2517814726841
(4096/max(w,h))*72
表达式的魔力很简单:(目标大小/源大小)*标准DPI。
convert -verbose -density 21.89073634204276 source.pdf images\0.png
convert -verbose -density 43.78147268408551 source.pdf images\1.png
convert -verbose -density 87.56294536817103 source.pdf images\2.png
convert -verbose -density 175.1258907363421 source.pdf images\3.png
convert -verbose -density 350.2517814726841 source.pdf images\4.png
convert -verbose images\0.png -crop 256x256 +adjoin -background white -extent 256x256 -set filename:tile "%%[fx:floor(page.x/256)]_%%[fx:floor(page.y/256)]" +repage "tiles\0_%%[filename:tile].png"
convert -verbose images\1.png -crop 256x256 +adjoin -background white -extent 256x256 -set filename:tile "%%[fx:floor(page.x/256)]_%%[fx:floor(page.y/256)]" +repage "tiles\1_%%[filename:tile].png"
convert -verbose images\2.png -crop 256x256 +adjoin -background white -extent 256x256 -set filename:tile "%%[fx:floor(page.x/256)]_%%[fx:floor(page.y/256)]" +repage "tiles\2_%%[filename:tile].png"
convert -verbose images\3.png -crop 256x256 +adjoin -background white -extent 256x256 -set filename:tile "%%[fx:floor(page.x/256)]_%%[fx:floor(page.y/256)]" +repage "tiles\3_%%[filename:tile].png"
convert -verbose images\4.png -crop 256x256 +adjoin -background white -extent 256x256 -set filename:tile "%%[fx:floor(page.x/256)]_%%[fx:floor(page.y/256)]" +repage "tiles\4_%%[filename:tile].png"
convert -verbose images\5.png -crop 256x256 +adjoin -background white -extent 256x256 -set filename:tile "%%[fx:floor(page.x/256)]_%%[fx:floor(page.y/256)]" +repage "tiles\5_%%[filename:tile].png"
tiles/0_0_0.png
tiles/1_0_0.png
tiles/1_0_1.png
tiles/1_1_0.png
tiles/1_1_1.png
../tiles
目录中,则很简单:
L.tileLayer('../tiles/{z}_{x}_{y}.png', {
maxZoom: 5,
noWrap: true,
attribution: 'Some Attribution'
}).addTo(map);
map.getCenter();
map.getZoom();
var map = L.map('map').setView([-26.3525, -65.0390], 3);
L.marker([-26.3525, -65.0390], {title: "Hi there!"}).addTo(map);
关于javascript - 如何从非地理来源为传单制作平铺的图像金字塔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51343042/
我想简化/减少我的代码,所以我尝试将具有重复参数的类的初始化放在它们自己的扩展类中。这是一个基于 Pyramid & Cornice 的 REST API。 我如何初始化 pyramid.httpex
我正在尝试构建一个由 4 个 DIV 组成的金字塔。布局如下所示: ------ | #1 | ------ ---------------- | #2 | #3 | #
我是 3d 绘图的新手。我只想用 5 个点 build 一个金字塔,然后从中切出一个平面。我的问题是我不知道如何填充边。 points = np.array([[-1, -1, -1],
我需要创建金字塔 slider 。 正如您在我当前的实现中看到的那样,我需要有一个位于其余元素顶部的中心图像。它们形成金字塔结构。图像也被放置在彼此下面,这种效果打破了一切,因为我需要转换它们(中心图
我一直在玩我在这里找到的演示:http://codepen.io/singhiskng/pen/dqiGj 我正在尝试制作一个 4 边形金字塔。
在jsp中实现如图所示的金字塔, 代码如下: 大致思路如下: 1、先画出前5行。因为 i+空格数=总行数,所以第一行的空格数是 总行数-i(第几行),然后画出 *,*的数目=2*i-11;
我在尝试找出一种使用用户输入创建金字塔的方法时遇到了很大的麻烦。它应该是这样的。 Enter a number between 1 and 9: 4 O O O O OOOO OOOO OOOO OO
我一直在寻找解决厄运金字塔的办法。到目前为止,我得出的结论如下: router.use('/create', function(res,req,next) { try { v
我刚刚开始处理。因此,我想创建一个函数,允许任何用户输入边数来创建 3D 金字塔。我正在使用处理 3。我需要一些帮助。提前致谢。我编写了一段目前有效的代码,但我想概括它。任何建议/提示将不胜感激。提前
我使用 JavaScript 创建了一个金字塔以下是我迄今为止使用 for 循环尝试的代码: function showPyramid() { var rows = 5; var ou
我被告知数据库超时(连接、交互、等待)设置为 30 秒。该数据库上有一个网站,人们往往会闲置超过 30 秒。 使用sqlalchemy,我需要在继续查询之前检查mysql连接是否仍然有效,否则站点会出
另一个棘手的问题。你在这里看到的是我的物理金字塔,它由 3 个 LED 构成,在 1 个平面上形成一个三角形,另一个 LED 在中间中心,比其他 3 个高约 18 毫米。第 4 个使三角形成为金字塔。
目标: 我正在尝试生成类似于下面给出的格式的金字塔。这需要一个基本的 Java 程序来接受用户输入、将数字转换为字符串、使用嵌套循环并生成格式化输出。下面是使用 8 行的所需输出示例。 Enter t
我的数据是多维组合数据(所有维度总和为 1 或 100)。我已经学会了如何使用三个变量来创建二维三元图。 我想添加第四个维度,使我的情节看起来像这样。 我愿意使用 python 或 R。我现在正在使用
我的数据是多维组合数据(所有维度总和为 1 或 100)。我已经学会了如何使用三个变量来创建二维三元图。 我想添加第四个维度,使我的情节看起来像这样。 我愿意使用 python 或 R。我现在正在使用
我是一名优秀的程序员,十分优秀!