3

我想使用 Open Layers 创建一些热图样式的图块以覆盖我们的基本图。基本上,我想将一些边界框划分为一个网格,并根据样本中有多少点落在该网格正方形内,使用不同的颜色显示网格的每个正方形。

涉及的技术有 C#、OpenLayers、SQL Server 2008 和 GeoServer。

我的问题基本上是一种通用方法,我不确定将凿子的尖端放在哪里。

我的最终目标是能够采用任意边界框,计算适合该边界框的 x 英里 x 英里网格,迭代单个点的集合并将它们分配给一个网格正方形或另一个网格可以计算每个网格正方形的点密度,然后根据密度为网格着色,然后使用 Open Layers 将其覆盖在 CloudMade 底图上。

任何帮助都将不胜感激,无论是整个事情还是其中的任何一部分。

4

3 回答 3

4

如果您的边界框是轴对齐的,这相当简单。只需制作您的图像,然后手动为其创建一个世界文件。世界文件只有 6 行文本,您已经知道所需的一切(x 和 y 像素大小,左上角的坐标)。

只要确保您使用左上角像素的中心,而不是框的角。

------ 以下是制作世界文件的方法 -------

假设您的边界框的左上角位于 203732x598374,并且您想要一个具有 200 米宽的东 <-> 西和 300 米高的北 <-> 南矩形的图像。

您将制作一个具有适当像素数的图像,然后制作一个包含以下 6 行的世界文件:

200
0
0
-300
203632
598524

这对应于:

200 == size of one pixel in X
0 == shear1
0 == shear2
-300 == size of one pixel in Y (from top down)
203632 == left edge - 1/2 pixel size (to center on pixel instead of edge of box)
598524 == top edge - 1/2 pixel size (to center on pixel instead of edge of box)

如果您使用 .png 图像,您需要使用相同的名称保存它,但保存为 .pgw。如果您使用 .jpg,它将是 .jgw 等。

有关完整的详细信息,请参阅: 世界文件上的 Wiki

于 2009-03-10T20:41:11.343 回答
2

“将一些边界框划分为网格,并根据样本中有多少点落在该网格正方形内,使用不同的颜色显示网格的每个正方形。” 这是一个栅格,GeoServer 中有一些功能可以用颜色阴影、图例等来显示这些。我认为使用这些功能会比在 C# 中创建图像图块更灵活。

从 GeoServer 文档:

栅格数据不仅仅是一张图片,它还可以被认为是地理参考信息的网格,就像图形是视觉信息的网格(红色、绿色和蓝色的组合)。与仅包含视觉数据的图形不同,栅格网格中的每个点/像素都可以具有许多不同的属性,其中可能没有一个具有固有的视觉组件。

这在其他 GIS 软件包中也称为专题图或等高线图或热图或 2.5D 图。

您可以使用像Grass这样的免费 G​​IS来创建栅格网格,但根据您的描述,您不需要插值(因为每个单元格至少包含一个点),因此滚动您自己的代码可能同样容易。

编辑:有一个开源库GDAL,您可以使用它来编写各种格式的光栅文件。有 C# 绑定。

于 2009-03-12T09:57:37.770 回答
0

我认为计算左上角像素中心的公式是错误的。在该示例中,左上角像素的中心将位于 (203732,598374) 的右下方。那么不应该是下面这个吗?

203832 == left edge + 1/2 pixel size (to center on pixel instead of edge of box)
598224 == top edge - 1/2 pixel size (to center on pixel instead of edge of box)
于 2009-04-24T19:11:29.327 回答