2011-07-05 34 views
1

我有一個由郵編分隔的馬里蘭州的Shapefile地圖。我想要做的是根據我在數據庫中查找的值爲每個區域着色。目前,我正在使用ASP.NET和SharpMap軟件包。基本問題是:在ASP.NET中着色Shapefile地圖

1)如何將形狀與其郵編相關聯?我可以使用SharpMap的ExecuteIntersectionQuery將BoundingBox設置爲地圖的範圍來生成郵編列表,但是我不知道如何將結果表的每一行與它所表示的形狀連接起來。

2)一旦我獲得了個人形狀,並知道我想要什麼顏色,如何將顏色分配給形狀?在SharpMap中,我可以着色VectorLayer,但VectorLayer是從源.shp文件生成的,而不是形狀。

我可以使用其他免費地圖包,除了SharpMap(所以沒有ArcGIS),但出於法律原因,我不能使用GoogleMaps。

我覺得這應該是相對簡單的,但試圖爲SharpMap找到像樣的資源相當困難。

編輯:好吧,我已經做了很多過程,只是通過閱讀什麼文檔。通過設置ShapeFile的FilterDelegate,我可以創建一個只包含郵編匹配特定值的行的圖層。現在我唯一的問題是讓委託過濾器每次都尋找不同的郵政編碼。除了FeatureDataRow,我可以傳遞另一個參數嗎?我應該訴諸全球變數嗎?

+0

實際上,ERSI可以免費使用 - 包括他們的公共地圖服務器用於基本服務等。 –

+0

他們提供的免費服務是否允許我輕鬆實現此目標?如果是的話,你能提供一些特定的鏈接嗎? – Jodaka

+0

你想要asp,flash或silverlight嗎? –

回答

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參數來獲取您的郵政編碼,執行您需要執行的任何邏輯來計算其樣式,配置該樣式並將其返回。

此方法(可能)會被調用很多,因此請考慮存儲樣式並重用它們,而不是每次都重新創建它們。

希望這會有所幫助。

+0

這是非常有益的,謝謝。 – Jodaka