建议:自定义shapefile或矩阵的C#热图

时间:2012-07-03 21:20:11

标签: c# gis heatmap shapefile

我正在研究如何在建筑物内的不同位置创建数字数据热图。我花了几个小时研究数据映射等,我正在寻找一些建议。我是GIS新手。大多数可用的选项主要是使用lat / long的tile API,并且对我的要求来说太过分了......

最终,我只想输出背景图像(平面图),热图叠加显示高强度区域。数据绑定到特定位置(例如,活动级别:14,位置:接收入口),因此不会随机分布在地图上。数据有时间戳,最终目标是为动画打印每小时活动的PNG。

我觉得我有两种选择。

我喜欢这个教程(http://dylanvester.com/post/Creating-Heat-Maps-with-NET-20-%28C-Sharp%29.aspx),因为它提供了极大的灵活性和最终版本图像与我想要的非常相似 - 这是一个很好的开端。也就是说,我需要将诸如“接收入口”之类的位置分配给x,y坐标,或者甚至是多个x,y坐标。然后,我需要在每个热图之前处理一个矩阵,从我的CSV文件中获取数据并将活动值放在适当的坐标中。

我认为我的另一个选择是从平面图中创建自定义shapefile(?)。也就是说,创建具有定义区域的矢量图形,其中每个区域都可归因于可标记位置。这似乎是最灵活的选择,但我真的很难找到如何创建shapefile?

我对GIS术语的不熟悉使搜索变得困难。后者似乎是最明智的解决方案(使用像https://gist.github.com/1370472之类的shapefile)来随时间更改活动值。

找到的链接:

  • guthcad.com/cad2shape.htm(但没有CAD绘图,只有栅格平面图)
  • stackoverflow.com/questions/4014072/arcgis-flex-overlay-floor-plan-png(无用,不想平铺)
  • oliverobrien.co.uk/2010/01/simple-choropleth-maps-in-quantum-gis /
  • gis.stackexchange.com/questions/20901/using-gis-for-interactive-floor-plan(看起来很棒)

总结:我想映射绑定到建筑物内的位置的数据。在我想要使用的C#教程中有非常好的代码,但是活动数据与坐标的链接可能是混乱的(虽然可以允许描述位置之间的活动转换,因为可以使用坐标之间的向量。 )。另一个选项是创建一个图像,其中的区域可以通过QGIS等链接到CSV数据。具有更多经验的人能否提出最佳方向,甚至是替代方案?

谢谢!

1 个答案:

答案 0 :(得分:0)

我最近为美国某些事件的热图做了类似的事情。

我的输入数据只是一个包含三列的CSV文件:纬度,经度和事件数。

在检查可用选项后,我最终使用了GHeat.Net。它非常易于使用,只需要一点修改就可以满足我的需求。

输出是一个透明的PNG,然后我覆盖到谷歌地图上。

虽然你的规模差异很大,但我认为同样的解决方案应该适用于你的情况。

<强>更新

如果x,y值在一个相当小的范围内是整数,并且如果你有足够的样本,你可能只是创建一个(稀疏?)数组,每个数组元素的值是该坐标处的样本数。识别“最热”的数组元素(具有最多样本的元素)并将其等同于热图中的“白色”,较小的值对应于较冷的颜色(或者换句话说,使用最高值对数组中的所有值进行标准化并将标准化值映射到色标。将数组映射到PNG。

像GHeat这样的热图会在每个数据点周围创建一个影响范围。根据您的数据,您可能不需要它。

如果您的采样率不够高,您可以将影响范围代码从GHeat中提取出来并将其应用到您自己的阵列中。

影响范围内容基本上将“1”的值添加到数据样本中的特定坐标,并且还向地图中的相邻像素添加较小的值,以便提供更平滑的地图。我不知道GHeat中使用的具体算法,但基本思路是使用类似这样的模式添加到特定的x,y值以及邻居:

0.25 | 0.5 | 0.25
-----------------
 0.5 | 1.0 | 0.5
-----------------
0.25 | 0.5 | 0.25