在ASP.NET中为形状文件映射着色

在ASP.NET中为形状文件映射着色,asp.net,shapefile,sharpmap,Asp.net,Shapefile,Sharpmap,我有一张马里兰州的形状文件地图,用zipcode隔开。我想做的是根据我在数据库中查找的值为每个区域着色。目前,我正在使用ASP.NET和SharpMap包。基本问题是: 1) 如何将形状与其zipcode关联?我可以使用SharpMap的ExecuteIntersectionQuery生成zipcodes列表,并将BoundingBox设置为映射的范围,但我不知道如何将结果表的每一行与其表示的形状连接起来 2) 一旦我可以访问单个形状并知道我想要什么颜色,我如何为该形状指定颜色?在SharpMa

我有一张马里兰州的形状文件地图,用zipcode隔开。我想做的是根据我在数据库中查找的值为每个区域着色。目前,我正在使用ASP.NET和SharpMap包。基本问题是:

1) 如何将形状与其zipcode关联?我可以使用SharpMap的ExecuteIntersectionQuery生成zipcodes列表,并将BoundingBox设置为映射的范围,但我不知道如何将结果表的每一行与其表示的形状连接起来

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

除了SharpMap(因此没有ArcGIS),我还可以使用其他免费地图包,但出于法律原因,我不能使用谷歌地图

我觉得这应该相对简单,但是为SharpMap找到合适的资源是相当困难的


编辑:好的,我已经做了很多的过程,只是通过阅读文档。通过设置ShapeFile的FilterDelegate,我可以使一个层仅由邮政编码与某个值匹配的行组成。现在我唯一的问题是让代理筛选器每次都查找不同的邮政编码。我可以传递FeatureDataRow之外的另一个参数吗?我应该求助于全局变量吗?

您需要使用主题信息来实现这一点

我假设您已经有了一些配置地图及其图层的代码。您的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)
    {
}
在方法中,创建并返回矢量样式。与试图呈现的功能关联的表数据作为参数传递给此方法

因此,您可以使用row参数获取邮政编码,执行计算其样式所需的任何逻辑,配置该样式并返回它

这种方法(潜在的)被调用了很多,所以考虑存储样式和重用它们,而不是每次重新创建它们。


希望这能有所帮助。

事实上,ERI是免费使用的——包括其用于基本服务的公共地图服务器等。他们提供的免费服务是否能让我轻松实现这一目标?如果有的话,你能提供一些具体的链接吗?你想要asp、flash或silverlight?asp.NET。另外,我很抱歉,但我不理解您链接的目的,因为我仍然不知道在哪里可以根据我自己的数据(而不是ESRI提供的信息集)为邮政编码区域指定颜色。