在ASP.NET中为Shapefile映射着色



我有一张马里兰州的Shapefile地图,以邮政编码分隔。我要做的是根据我在数据库中查找的值给每个区域上色。目前,我正在使用ASP。使用SharpMap包。基本问题是:

1) 如何将形状与其邮政编码相关联?我可以使用SharpMap的ExecuteIntersectionQuery与BoundingBox集作为地图的范围生成邮政编码列表,但我不知道如何将结果表的每一行与它所代表的形状连接起来。

2)一旦我有了一个单独的形状,知道我想要什么颜色,我如何分配颜色的形状?在SharpMap中,我可以给VectorLayer上色,但是VectorLayer是从源文件生成的,而不是形状。

我愿意使用其他免费的地图包除了SharpMap(所以没有ArcGIS),但由于法律原因我不能使用GoogleMaps。

我觉得这应该是相对简单的,但试图找到任何像样的资源SharpMap是相当困难的。

编辑:好吧,我已经做了很多的过程,只是通过阅读文档。通过设置ShapeFile的FilterDelegate,我可以使一个层只包含邮政编码匹配某个值的行。现在我唯一的问题是让委托过滤器每次寻找不同的邮政编码。除了FeatureDataRow,我可以传递另一个参数吗?我应该求助于全局变量吗?

你需要使用thematics来做到这一点。

我假设你已经有一些代码来配置你的地图和它的层。你的shapefile是一个矢量层。

VectorLayer shapefileLayer = GetMyShapefileLayer();
shapefileLayer.Theme = new SharpMap.Rendering.Thematics.CustomTheme(GetStyleForShape);

然后,每当地图需要渲染样式时,调用GetStyleForShape方法。它看起来像这样:-

private SharpMap.Styles.VectorStyle GetStyleForShape(SharpMap.Data.FeatureDataRow row, SharpMap.Layers.Layer layer)
    {
}

在该方法中,您创建并返回一个VectorStyle。与它试图呈现的特性相关联的表数据作为参数传递给该方法。

所以你可以使用row参数来获取你的邮政编码,做任何你需要做的逻辑来计算它的样式,配置该样式并返回它。

这个方法(可能)被调用了很多次,所以考虑存储样式并重用它们,而不是每次都重新创建它们。

最新更新