程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#進行MapX二次開發之地圖搜索

C#進行MapX二次開發之地圖搜索

編輯:關於C#

在GIS中,地標或者道路等信息查找是一項很重要的功能,類似於我們查找數據庫記錄那樣,需要模糊 進行匹配,一般來說,找到需要的地標或者道路等地圖元素後,雙擊可以定位到地圖的具體位置,並放大 地圖,類似於Google Map的Fly to功能。

由於地圖的信息是按照層來存儲的,所以我們查找信息 的時候,也是按照一層層來進行檢索,由於MapInfo的地圖一般有很多層,每層進行遍歷會比較花費時間 ,所以一般的專業系統,都只是關系一部分層,我們通常在配置文件中指定感興趣的層名集合,然後查找 的時候,在這些層中查找,這樣可以提高檢索的速度。

我們看看操作層的代碼,是如何實現的。

foreach (string layer in layerNameArray)
{
if  (string.IsNullOrEmpty(layer))
continue;
try
{
#region 每層的查詢
string condition = string.Format("NAME like \"%{0}%\"", SearchLocation);
MapXLib.Layer mapLayer =  TarMap.Layers._Item(layer);
if (mapLayer != null)
{
feature = mapLayer.Search(condition, null);
int count =  feature.Count;
if (feature != null)
{
MapXLib.Dataset ds =  TarMap.DataSets.Add(MapXLib.DatasetTypeConstants.miDataSetLayer, mapLayer, layer,
0,  0, 0, Missing.Value, false);
Dictionary<string, ResultOfSearching>  resultList = new Dictionary<string, ResultOfSearching>();

//To Do 遍 歷特性代碼,待續

TarMap.DataSets.RemoveAll();
}
}
#endregion
}
catch (Exception ex)
{
LogHelper.Error(ex);
}
}

查找的時候,我們得到了每個Feature,然後對Feature的ID和Name進行判斷查找,如何有匹配的,就表示 找到了一個對象,如果最後一個也沒有,那麼本次地圖查找應該沒有匹配的元素了,Feature的查找代碼 如下所示

#region 遍歷特性
for (int i = 1; i < feature.Count;  i++)
{
try
{
object objLocation = ds.get_Value(feature[i],  "Name");
object objID = ds.get_Value(feature[i], "Id");
string strLocation  = (objLocation == null) ? "" : objLocation.ToString();
string strID =  (objID == null) ? "" : objID.ToString();
if (!resultList.ContainsKey(strID)  && feature[i].FeatureID != 0)
{
ResultOfSearching searchInfo = new  ResultOfSearching();
searchInfo.FeatureID = feature[i].FeatureID;
searchInfo.ID  = strID;
searchInfo.Layer = layer;
searchInfo.Location = feature [i].Name;
if (!resultList.ContainsKey(strID))
{
resultList.Add(strID,  searchInfo);
}
if (!allResultList.ContainsKey(strID))
{
allResultList.Add(strID, searchInfo);
}
}
}
catch(Exception ex)
{
//LogHelper.Error(ex);
}
}
#endregion

我們遍歷每層,對 每層的Feature的信息進行查找,把結果放到集合中,當我們返回集合的時候,我們就可以把搜索到的信 息顯示在樹形控件中了。

if (searchResult != null &&  searchResult.Count > 0)
{
this.tvwResult.BeginUpdate();
TreeNode node  = null;
foreach (ResultOfSearching info in searchResult.Values)
{
if  (!string.IsNullOrEmpty(info.Location))
{
node = tvwResult.Nodes.Add (info.Location);
node.Tag = info;
}
}
this.tvwResult.EndUpdate();
this.tssl_Status.Text = string.Format("從地圖上找到 {0} 結果",  searchResult.Count);
}
else
{
this.tssl_Status.Text = "地圖上找不到您 需要的數據";
}

最後我們看到查找信息的界面如下所示

文章來源:http://www.cnblogs.com/wuhuacong/archive/2009/10/30/1593222.html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved