在ASP.NET中着色Shapefile映射

时间:2011-07-05 17:16:46

标签: asp.net shapefile sharpmap

我有一个由邮政编码分隔的马里兰州的Shapefile地图。我想做的是根据我在数据库中查找的值为每个区域着色。目前,我正在使用带有SharpMap软件包的ASP.NET。基本问题是:

1)如何将形状与其zipcode相关联?我可以使用SharpMap的ExecuteIntersectionQuery生成zipcodes列表,并将BoundingBox设置为地图范围,但我不知道如何然后将结果表的每一行与它所代表的形状相连接。

2)一旦我可以访问单个形状并知道我想要的颜色,如何为形状指定颜色?在SharpMap中,我可以为VectorLayer着色,但VectorLayer是从源.shp文件生成,而不是形状。

除了SharpMap之外,我还可以使用其他免费地图包(所以没有ArcGIS),但出于法律原因,我无法使用GoogleMaps。

我觉得这应该相对简单,但是试图为SharpMap寻找任何合适的资源都非常困难。

编辑:好吧,我通过阅读有关哪些文档来完成了很多过程。通过设置ShapeFile的FilterDelegate,我可以使图层仅包含邮政编码与特定值匹配的行。现在我唯一的问题是让委托过滤器每次都查找不同的邮政编码。我可以传递除FeatureDataRow之外的其他参数吗?我应该求助于全局变量吗?

1 个答案:

答案 0 :(得分:1)

您需要使用thematics来执行此操作。

我假设您已经有一些代码可以配置您的地图及其图层。你的shapefile是一个VectorLayer。

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参数获取您的邮政编码,执行您需要做的任何逻辑来计算它的样式,配置该样式并将其返回。

这种方法(可能)被大量调用,因此请考虑存储样式并重复使用它们,而不是每次都重新创建它们。

希望这有帮助。