我想创建一些热图样式图块,使用Open Layers覆盖我们的基本地图。基本上,我想将一些边界框划分为网格,并根据样本落在该网格方格中的多少点,使用不同的颜色显示网格的每个方格。
所涉及的技术包括C#,OpenLayers,SQL Server 2008和GeoServer。
我的问题基本上是一种常规方法,我不确定将凿子的尖端放在哪一个上。
我的最终目标是能够获取任意任意边界框,计算适合该边界框的x英里x英里网格,迭代各个点的集合并将它们分配给一个网格方格或另外,我可以计算每个网格的点密度,然后根据密度为网格着色,然后使用Open Layers将其覆盖在CloudMade基础地图上。
任何帮助都会非常感激,无论是整件事还是其中任何部分。
答案 0 :(得分: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 on World Files
答案 1 :(得分:2)
“将某些边界框划分为网格,并根据样本中有多少点落在该网格方格内,使用不同的颜色显示网格的每个方格。”这是栅格,GeoServer中有features用于显示颜色阴影,图例等。我认为使用这些功能比在C#中创建图像切片更灵活。
从GeoServer文档:
栅格数据不仅仅是图片, 相反,它可以被认为是一个网格 地理参考信息,很多 像图形是视觉网格 信息(红色组合, 果岭和布鲁斯)。不像图形, 每个只包含可视数据 栅格网格中的点/像素可以有 很多不同的属性,有 可能他们都没有 本质上是视觉成分。
这也称为其他GIS包中的专题制图或等高线图或热图或2.5D图。
您可以使用免费的GIS,例如Grass到create栅格网格,但是根据您的描述,您不需要进行插值(因为每个单元格至少包含一个点),因此它可能是就像编写自己的代码一样容易。
编辑:有一个开源库GDAL可用于在various formats中编写光栅文件。有C#绑定。
答案 2 :(得分: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)