翻譯|使用教程|編輯:龔雪|2022-09-20 09:59:43.987|閱讀 216 次
概述:本文將為大家介紹使用DevExpress WinForms控件開發地圖應用時如何實現搜索功能,歡迎下載相關產品體驗!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
DevExpress WinForm擁有180+組件和UI庫,能為Windows Forms平臺創建具有影響力的業務解決方案。DevExpress WinForms能完美構建流暢、美觀且易于使用的應用程序,無論是Office風格的界面,還是分析處理大批量的業務數據,它都能輕松勝任!
DevExpress Map控件支持Microsoft的Bing搜索和OpenStreetMap搜索服務,允許您在應用程序中嵌入搜索功能。 啟用此功能后,您可以在Search Panel(或使用自定義UI)中輸入搜索條件,實現請求,并在地圖和搜索面板中查看結果。
和 類代表提供搜索功能的 Bing Search 和 OpenStreetMap Search 數據提供者,在本文中解釋了如何在地圖控件中使用搜索數據提供程序。
重要提示:由于Bing于 2017 年 7 月 30 日取消 SOAP 服務,地圖控件的Bing搜索提供程序在 16.1 版和早期版本中無法正常工作。
執行以下操作以在Map控件中啟用搜索:
下面的代碼片段顯示了如何執行此操作。
C#
private void Form1_Load(object sender, System.EventArgs e) { // ... InformationLayer infoLayer = new InformationLayer(); map.Layers.Add(infoLayer); BingSearchDataProvider searchProvider = new BingSearchDataProvider(); infoLayer.DataProvider = searchProvider; searchProvider.BingKey = yourBingKey; }
VB.NET
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load ' .... Dim infoLayer As New InformationLayer() map.Layers.Add(infoLayer) Dim searchProvider As New BingSearchDataProvider() infoLayer.DataProvider = searchProvider searchProvider.BingKey = yourBingKey End Sub
您還可以自定義搜索結果計數:
C#
private void Form1_Load(object sender, System.EventArgs e) { // ... searchProvider.SearchOptions.ResultsCount = 5; }
VB.NET
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load ' .... searchProvider.SearchOptions.ResultsCount = 5 End Sub
當Map控件包含提供搜索數據的信息層時,Map控件會自動調用其內置的搜索面板(默認設置為 true)。
Map控件提供帶有附加參數的搜索功能,例如國家地區或郵政編碼。 使用這種方法,您可以構建自定義搜索面板以從搜索服務中獲取額外的搜索結果。
注意:將屬性設置為 false 以在使用此方法時禁用默認搜索面板。
要開始搜索位置,請調用或 方法。
例如,應用程序的 UI 包含一個名為“tbKeywords”的文本框和一個名為“btnSearch”的按鈕。 要開始搜索,請單擊調用以下 Search 方法重載的 Search 按鈕:
C#
private void OnClick(object sender, EventArgs e) { searchProvider.Search(tbKeywords.Text); }
VB.NET
Private Sub OnClick(ByVal sender As Object, ByVal e As EventArgs) Handles btnSearch.Click searchProvider.Search(tbKeywords.Text) End Sub
要獲取搜索結果,請處理或事件。
SearchCompleted 事件處理程序參數的提供后代類實例來存儲搜索結果。
結果包含與搜索位置關聯的顯示名稱、地址和地理坐標(緯度和經度)。
Form1.cs
void OnSearchCompleted(object sender, BingSearchCompletedEventArgs e) { if(e.Cancelled) return; if(e.RequestResult.ResultCode != RequestResultCode.Success) { meResult.Text = "The Bing Search service does not work for this location."; return; } StringBuilder resultList = new StringBuilder(""); int resCounter = 1; foreach(BingLocationInformation resultInfo in e.RequestResult.SearchResults) { resultList.Append(String.Format("Result {0}: \r\n", resCounter)); resultList.Append(String.Format("Name: {0}\r\n", resultInfo.DisplayName)); resultList.Append(String.Format("Address: {0}\r\n", resultInfo.Address.FormattedAddress)); resultList.Append(String.Format("Confidence level: {0}\r\n", resultInfo.Confidence)); resultList.Append(String.Format("Geographic coordinates: {0}\r\n", resultInfo.Location)); resultList.Append(String.Format("Match code: {0}\r\n", resultInfo.MatchCode)); resultList.Append(String.Format("______________________________\r\n")); resCounter++; } meResult.Text = resultList.ToString(); }
Form1.vb
Private Sub OnSearchCompleted(ByVal sender As Object, ByVal e As BingSearchCompletedEventArgs) If e.Cancelled Then Return End If If e.RequestResult.ResultCode <> RequestResultCode.Success Then meResult.Text = "The Bing Search service does not work for this location." Return End If Dim resultList As New StringBuilder("") Dim resCounter As Integer = 1 For Each resultInfo As BingLocationInformation In e.RequestResult.SearchResults resultList.Append(String.Format("Result {0}: " & ControlChars.CrLf, resCounter)) resultList.Append(String.Format("Name: {0}" & ControlChars.CrLf, resultInfo.DisplayName)) resultList.Append(String.Format("Address: {0}" & ControlChars.CrLf, resultInfo.Address.FormattedAddress)) resultList.Append(String.Format("Confidence level: {0}" & ControlChars.CrLf, resultInfo.Confidence)) resultList.Append(String.Format("Geographic coordinates: {0}" & ControlChars.CrLf, resultInfo.Location)) resultList.Append(String.Format("Match code: {0}" & ControlChars.CrLf, resultInfo.MatchCode)) resultList.Append(String.Format("______________________________" & ControlChars.CrLf)) resCounter += 1 Next resultInfo meResult.Text = resultList.ToString() End Sub
“New York”關鍵字的搜索結果如下圖所示。
DevExpress技術交流群6:600715373 歡迎一起進群討論
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網