c# 畫熱力圖(二)
public void DrawHeat(string filePath, string sheetName)
{
string ParamPalettePath = @"D:\Ventuz5\01\Images\HeatMap/palette.png";//顏色板
DataTable dt = GetExcelTable(filePath, sheetName,2);
List<double> lon = new List<double>();
List<double> lat = new List<double>();
List<double> weight = new List<double>();
for (int i = 0; i < dt.Rows.Count; i++)
{
string[] lonAndLat = dt.Rows[i]["座標值"].ToString().Split(',');
double lonStr = Convert.ToDouble(lonAndLat[0]);
double latStr = Convert.ToDouble(lonAndLat[1]);
double weightStr = Convert.ToDouble(dt.Rows[i]["權重值"].ToString());
lon.Add(lonStr);lat.Add(latStr);weight.Add(weightStr);
}
double latRange = Math.Abs(lat.Max() - lat.Min());
double lngRange = Math.Abs(lon.Max() - lon.Min());
int width = 0;
int height = 0;
double scale = 1;
if (lngRange > latRange)
{
width = 500;
scale = lngRange / 500;
height = (int)(latRange / lngRange * 500);
}
else
{
height =500;
scale = latRange / 500;
width = (int)(lngRange / latRange * 500);
}
Bitmap bitmap = new Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
RayHeatMap heatMap = new RayHeatMap();
heatMap.BrushStop = 0.3f;
heatMap.Radius = 30;
for (int i = 0; i < lat.Count; i++)
{
int y = (int)((lat[i] - lat.Min()) / scale);
int x = (int)((lon[i] - lon.Min()) / scale);
int weightInt = (int)((double)weight[i] / weight.Max() * 255);
heatMap.AddPoint(new Point(x, y), weightInt);
}
heatMap.Draw(ref bitmap);
heatMap.Colorize(ref bitmap, ParamPalettePath);
DirectoryInfo dir = new DirectoryInfo(System.IO.Path.Combine(System.IO.Path.GetDirectoryName(ParamPalettePath), "ShenZhen"));
if (!dir.Exists)
dir.Create();
string name = DateTime.Now.ToString("yyyyMMddHHmm") + ".png";
string filePaths = System.IO.Path.Combine(dir.ToString(), name);
FileStream fs = File.Open(filePaths, FileMode.Create);
bitmap.Save(fs, System.Drawing.Imaging.ImageFormat.Png);
fs.Close();
}
相關推薦
c# 畫熱力圖(二)
public void DrawHeat(string filePath, string sheetName) { string ParamPalettePath = @"D:\Ventuz5\01\Images\HeatMap/pal
python畫熱力圖(相關係數矩陣圖)
使用熱力圖的形式展示包括相關係數矩陣圖的二維矩陣的方法,目前發現有兩個:首先是使用pandas包的函式,但是pandas包的目測,不能顯示數字?如果想試一下,可以參考https://zhuanlan.zhihu.com/p/26100511所以研究了一下第二種方法,就是用se
【C語言天天練(二)】statickeyword
修飾 weight () main函數 class code keyword spa tail 引言: statickeyword不僅能夠修飾變量。並且能夠修飾函數。了解它的使用方法,不僅對閱讀別人的代碼有幫助,也有助於自己寫出更加健壯的
C++構造函數(二)
frame 筆記 自動轉換 數據類型 public clas 並不是 調用 這樣的 本篇是介紹C++的構造函數的第二篇(共二篇),屬於讀書筆記,對C++進行一個系統的復習。 復制構造函數 復制構造函數是構造函數的一種,也被稱為拷貝構造函數,他只有一個參數,參數類型是本類的引
Python和C|C++的混編(二):利用Cython進行混編
cde uil 有時 當前 class def 將在 python 混編 還能夠使用Cython來實現混編 1 下載Cython。用python setup.py install進行安裝 2 一個實例 ① 創建helloworld文件夾創建hellowor
C++ 模板詳解(二)(轉)
創建 規則 error ++ 例如 public err iostream () 四、類模板的默認模板類型形參 1、可以為類模板的類型形參提供默認值,但不能為函數模板的類型形參提供默認值。函數模板和類模板都可以為模板的非類型形參提供默認值。 2、類模板的類型形
小程序思維導圖(二)
寫在前面 需要 模板 常用功能 授權 產生 data- gin origin 寫在前面 第二波小程序思維導圖終於出爐了,各位久等。 思維導圖是一個很神奇的東西,它直觀,界面美而有富有邏輯性。技術這種東西知識點多而雜,想要全面掌握不容易。需要用做到熟練更加不容易了。界
讀書筆記--C陷阱與缺陷(二)
ase 結果 erro bit 使用 功能 錯誤 多層 gnu 第二章 1. 理解函數聲明 書中分析了復雜的類型聲明方式,也說明了使用typedef聲明會更好理解,推薦大家使用typedef進行函數聲明。 書中類型分析一層一層挖掘,讓讀者可以理解多層嵌套的類型含義,有
我的C#跨平臺之旅(二):開發一組標準的Restful API
ref 運行 mar margin bruce ora soft left 啟用 添加NuGet引用:Microsoft.AspNet.WebApi.Owin 在啟動類啟用WebApi; 添加一個Controller類,代碼如下: 運行程序
C#常見問題總結(二)
7月 組件 圖片 水晶報表 datetime 控制臺 col orm value 1、erp系統可以在具有固定ip的擁有多層服務器的局域網中使用嗎?如何使用解決方法:把ini.配置文件字符串中的服務器名改成服務器的,把debug文件夾拷到其他機器上就行,服務器上的服務器名是
【C++ Primer 筆記】(二) 變量
class tro ++ div bsp mail post c++ 系列 本系列文章由 Nick-Pem 原創編寫,轉載請說明出處。 作者:Nick-Pem 郵箱:[email protected] 留坑【C++ Primer 筆記
C#上位機開發(二)
styles 寫代碼 面向 ext size ring 入口 查詢法 命令 上一篇大致了解了一下單片機實際項目開發中上位機開發部分的內容已經VS下載與安裝,按照編程慣例,接下來就是“Hello,World!” 1、新建C#項目工程 首先選擇新建Windows窗體應
c#多線程(二)——同步和異步
沒有 之前 什麽 adk 返回 con bsp cti csu 1、什麽是異步 如果一個程序調用某個方法,等待其執行所有處理後才繼續執行,我們稱這樣的方法是同步的。 如果一個程序調用某個方法,在該方法處理完成之前就返回到調用方法,則這個方法是異步的。 異步的好處在於
記錄圖(二)
img socket soc 記錄 info bound ket nbsp com Socket: Bounds 記錄圖(二)
C語言基礎篇(二)運算子
導航: 2.1 算數運算子 2.2 邏輯運算子 2.3 位運算 2.4 賦值運算 2.5 記憶體訪問符號 ----->x<------------->x&
SQLite - C/C++接口 API(二)
mage std per src argc sele pdb face module to 1、打開數據庫 SQLITE_API int sqlite3_open16( const void *filename, /* Database filename (U
詳解C#委託和事件(二)
一、當我們使用關鍵字delegate宣告一個自定義委託型別時,實際上是聲明瞭一個該名稱的類型別,繼承自抽象類System.MulticastDelegate,還包含例項方法Invoke、BeginInvoke、EndInvoke: public delegate void MyDelegate
《More Effective C++ 》讀書筆記(二)Exception 異常
derived 對象 模板 帶來 成員 臨時對象 行為 ron 阻止 這事篇讀書筆記,只記錄自己的理解和總結,一般情況不對其舉例子具體說明,因為那正是書本身做的事情,我的筆記作為梳理和復習之用,劃重點。我推薦學C++的人都好好讀一遍Effective C++ 系列,真是好
C# 操作Excel公式(二)——批量刪除Excel公式並保留文字值
在Excel表格中,公式很常用,在處理資料時給我們提供了極大的方便。我們可以通過建立公式來批量處理資料,同理,我們也可以通過批量刪除公式來保護資料來源或方便於我們對資料的二次操作。下面的方法將介紹如何通過C#程式設計來批量刪除Excel公式並保留值。 所需工具:Spire.XLS for .
Java伺服器部署基於OpenCV的C++影象處理專案(二)編譯篇
Java伺服器部署基於OpenCV的C++影象處理專案(二)編譯篇 部署好環境之後,本篇記錄編譯的詳細步驟。部署環境篇 1.建立檔案 在native.cpp中寫入以下程式碼。 #include <jni.h> #include <string>