在C#中生成地理参考图像

时间:2009-03-10 20:32:16

标签: c# geospatial openlayers heatmap geoserver

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

所涉及的技术包括C#,OpenLayers,SQL Server 2008和GeoServer。

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

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

任何帮助都会非常感激,无论是整件事还是其中任何部分。

3 个答案:

答案 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,例如Grasscreate栅格网格,但是根据您的描述,您不需要进行插值(因为每个单元格至少包含一个点),因此它可能是就像编写自己的代码一样容易。

编辑:有一个开源库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)