小弟在寫一個與GIS有關的程式,使用了teechart控制元件,但是從來沒有接觸過這個控制元件;經過現在能在一個map的series里顯示SHP影像了,但是還需要在地圖中添加很多點。問題是c#里自帶的Point型別只支持int引數,不能直接使用經緯度。因此我想請教各位,在teechart里怎么樣使用以double為引數的點型別呢?因為是新版的插件,所以好像沒有addxy之類的方法可用。
ps: System自帶的PointF不滿足精度要求,需要用double的
uj5u.com熱心網友回復:
原來答案很簡單使用兩個list<double> 分別讀取x、y的值(一一對應),然后再
series.add(list1.toarray<double>(),listy.toarray<double>())就好了
uj5u.com熱心網友回復:
樓主送分不?uj5u.com熱心網友回復:
……那就送吧
uj5u.com熱心網友回復:
有人私信問我這個問題,看來也是新手,我就把自己的代碼貼一部分在這里
public Map sreMap = new Map();
public Points sreLowerPoints = new Points();
this.tChart.Series.Add(sreLowerPoints);
int intMost = 10000;
if (dtblExcel.Rows.Count > intMost)
{
MessageBox.Show("點數過多,僅添加前" + intMost + "個");
}
else
{
intMost = dtblExcel.Rows.Count;
}
List<double> listPointX = new List<double>();
List<double> listPointY = new List<double>();
for (int i = 0; i < intMost; i++)
{
listPointX.Add((double)dtblExcel.Rows[i][0]);
listPointY.Add((double)dtblExcel.Rows[i][1]);
}
sreLowerPoints.Add(listPointX.ToArray<double>(), listPointY.ToArray<double>());
事實上,通過對于series[n]的查看,我知道了這種資料結構是seriesXYPoint,是在名字空間steema.tchart.data中的一種資料型別;此外,series.add有53種多載型別,可見還有很多其他靈活的方式添加資料,比起早先版本teechart的addXY或addArray增加了更多靈活性
uj5u.com熱心網友回復:
樓主送分不?uj5u.com熱心網友回復:
非常感謝老師,這么快的回復。我還是沒有看太明白,這樣是增加了可以使用double的sreLowerPoints。
那怎樣map掛起鉤呢?就是用這么資料點生成map呢?俺實在是新手,弄不太明白呢
uj5u.com熱心網友回復:
你參照著寫一下就明白了,不同series都會顯示在影像上。因為專案的原因,我除了lowerSeries還有一個higherSeries,一共三個series疊放在一起;tChart.Chart.Add(Serie) 越晚,這個serie顯示得越在上面。
所以相對這一段代碼來說我所謂的“lower”里的內容實際上會遮擋map上的內容。沒改變數名,希望不要誤導你
uj5u.com熱心網友回復:
至于map這個serie,我使用的是向其中匯入Shp檔案,Steem.teeChart.Data空間中有對shp檔案的支持型別TeeShp,通過它的loadmap方法直接將檔案內容加載到map這個serie上。
另外,teechart有個地方做的不太好,loadmap會自動在選擇的shp檔案的相同目錄下尋找同名shx檔案,如果沒有的話會產生例外。
因此如果你要用其他方法使用map型別的serie,我就幫不了你了~
uj5u.com熱心網友回復:
我就是想增加一些坐標點,形成一個地圖區域。 但是用map.add(),增加進去多個陣列點,就是不顯示,很郁悶。uj5u.com熱心網友回復:
Map map = new Map();
tChart1.Series.Add(map);
List<double> ldx = new List<double>();
List<double> ldy = new List<double>();
List<double> ldz = new List<double>();
ldx.Add(50);
ldx.Add(20);
ldx.Add(15);
ldx.Add(30);
ldx.Add(11);
ldy.Add(215);
ldy.Add(400);
ldy.Add(10);
ldy.Add(10);
map.Add(ldx.ToArray(), ldy.ToArray());
我就是這樣增加的,但就是不顯示地圖區域。
uj5u.com熱心網友回復:
為了回答你的問題我去讀了TeeSHP的原始碼,總結一下可以這么寫:
double[] dbX = new double[] { 0, 0, 1, 1, 0 };
double[] dbY = new double[] { 0, 1, 1, 0, 0 };
Map map1 = new Map(tChart.Chart);
sreMap.Add(0, 0, "");
Polygon pgon = sreMap.Shapes[0];
pgon.Points.BeginUpdate();
for(int i = 0; i < dbX.Count(); i++)
{
pgon.Add(dbX[i], dbY[i]);
}
pgon.Points.EndUpdate();
uj5u.com熱心網友回復:
非常感謝您這么熱心。剛開始依然不行,經過一下午的試驗查找,Polygon pgon = new Polygon(sreMap.Shapes, tChart1.Chart);
這句話改成這樣,就OK了,真是難死個人了。希望以后遇到這問題的,看到文章就能夠解決了。
uj5u.com熱心網友回復:
請問怎么在C#2015中添加Teechart控制元件呢?轉載請註明出處,本文鏈接:https://www.uj5u.com/net/71687.html
標籤:C#
上一篇:VS2019 如何設定系統生成的控制元件事件命名規則
下一篇:C# 作業系統檔案夾中的檔案
