文章出處
地圖對象構建
構造圖層
設置圖層參數
得到image
當前公司需要一個用時較少的熱力圖呈現方案,在避免較底層的GDI開發和比較了多家GIS產品的實際效果之后,團隊決定用sharpMap的API來實現,由于之前框架采用的是另外一個開源項目GMap.net,兩個項目的交互必然存在一個過渡,而這個過渡就是Image類。
為了方便大家理解,以及之后我回頭再看不至于看不懂,加入了較多的注釋。
先放一張最終效果圖和數據點的對比:
實現過程:
1、首先添加幾個NuGet程序包,SharpMap和SharpMap.Layers.HeatLayer,另外,個人建議把SharpMap.UI也加入到項目里,因為地圖控件在這個程序集之中。
2、初始化一個地圖對象
1 private static SharpMap.Map GetDefaultMap(Size sharpMapSize)
2 {
3 //必須先初始化一個地圖對象,否則數據源會報沒有初始化對象(這tm肯定是個bug)。
4 SharpMap.Map mySharpMap = new SharpMap.Map(new Size(sharpMapSize.Width, sharpMapSize.Height));
5 //這里可以設置最小的放大級別,如果不夠小,地圖無法縮放,會影響最終image邊界。
6 mySharpMap.MinimumZoom = 0.01; //Minimum zoom allowed
7 //背景色透明
8 mySharpMap.BackColor = Color.Transparent;
9
10 return mySharpMap;
11 }
3、通過一個ShapeFile文件,構造熱圖層對象。
1 private static SharpMap.Layers.HeatLayer GetHeatLayerByVector(string vectorPath, string valueColumn, float scale)
2 {
3 //初始化一個矢量圖層,作為數據源。
4 SharpMap.Layers.VectorLayer myVectorLayer = new SharpMap.Layers.VectorLayer("My layer");
5 //這個數據源非常重要。
6 myVectorLayer.DataSource = new SharpMap.Data.Providers.ShapeFile(vectorPath);
7 myVectorLayer.Style.PointColor = Brushes.Transparent;
8
9 //新建熱層對象。第三個參數非常重要,與value相乘后的百分數決定了symbol顯示的顏色,大于1的是靛藍色
10 SharpMap.Layers.HeatLayer heatLayer = new SharpMap.Layers.HeatLayer(myVectorLayer, valueColumn, scale);
11
12 return heatLayer;
13 }
4、圖層相關設置
1 //這兩個變量跟比例尺有關,在區間內可變,區間外symbol不再變
2 heatLayer.ZoomMin = 0f;
3 heatLayer.ZoomMax = 1000000f;//myMap.GetExtents().Width;
4 //控制透明度
5 heatLayer.OpacityMax = 0.2f;
6 heatLayer.OpacityMin = 0.6f;
7 //設置地圖顏色條帶,官方就2種,一種彩虹,一種火焰。
8 heatLayer.HeatColorBlend = SharpMap.Layers.HeatLayer.Classic;
5、根據圖層和地圖對象,得到image
1 private static System.Drawing.Image GetHeatLayerImage(SharpMap.Layers.HeatLayer heatLayer, SharpMap.Map mySharpMap, Envelope Extent)
2 {
3
4 //在地圖對象中加入構造的熱圖對象。
5 mySharpMap.Layers.Add(heatLayer);
6 //轉到當前四至范圍
7 mySharpMap.ZoomToBox(Extent);
8 //通過地圖對象,拿到img對象。-----------------------------------------------Image-----------------------------
9 Image imgMap = mySharpMap.GetMap();
10
11 return imgMap;
12 }
6、之后根據這個image,加載到相關地圖控件就可以了,由于地圖控件代碼并不屬于SharpMap項目,暫時不給出了。
ps:如果有人需要源碼,請移步傳送門。如有任何問題,請回復交流。
不含病毒。www.avast.com |
全站熱搜
留言列表