ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

来看界面组件DevExpress WinForm是如何实现地图搜索的

来看界面组件DevExpress WinForm是如何实现地图搜索的 DevExpress WinForm拥有180组件和UI库能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序无论是Office风格的界面还是分析处理大批量的业务数据它都能轻松胜任DevExpress新旧版本帮助文档下载 可进QQ qun获取169725316DevExpress Map控件支持Microsoft的Bing搜索和OpenStreetMap搜索服务允许您在应用程序中嵌入搜索功能。 启用此功能后您可以在Search Panel或使用自定义UI中输入搜索条件实现请求并在地图和搜索面板中查看结果。BingSearchDataProvider 和 OsmSearchDataProvider类代表提供搜索功能的 Bing Search 和 OpenStreetMap Search 数据提供者在本文中解释了如何在地图控件中使用搜索数据提供程序。重要提示由于Bing于 2017 年 7 月 30 日取消 SOAP 服务地图控件的Bing搜索提供程序在 16.1 版和早期版本中无法正常工作。启用搜索执行以下操作以在Map控件中启用搜索创建一个信息层并将其添加到地图中信息层提供了表示从地图控件中的搜索服务获得的 GIS 数据的矢量元素。创建BingSearchDataProvider 或OsmSearchDataProvider实例并将其分配给InformationLayer.DataProvider属性。使用BingMapDataProviderBase.BingKey 属性为Bing Data Provider指定Bing Maps key。下面的代码片段显示了如何执行此操作。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.NETPrivate 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.NETPrivate Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load .... searchProvider.SearchOptions.ResultsCount 5 End Sub当Map控件包含提供搜索数据的信息层时Map控件会自动调用其内置的搜索面板MapControl.ShowSearchPanel默认设置为 true。使用自定义 UIMap控件提供带有附加参数的搜索功能例如国家地区或邮政编码。 使用这种方法您可以构建自定义搜索面板以从搜索服务中获取额外的搜索结果。注意将MapControl.ShowSearchPanel属性设置为 false 以在使用此方法时禁用默认搜索面板。要开始搜索位置请调用BingSearchDataProvider.Search或 OsmSearchDataProvider.Search方法。例如应用程序的 UI 包含一个名为“tbKeywords”的文本框和一个名为“btnSearch”的按钮。 要开始搜索请单击调用以下 Search 方法重载的 Search 按钮C#private void OnClick(object sender, EventArgs e) { searchProvider.Search(tbKeywords.Text); }VB.NETPrivate Sub OnClick(ByVal sender As Object, ByVal e As EventArgs) Handles btnSearch.Click searchProvider.Search(tbKeywords.Text) End Sub搜索结果要获取搜索结果请处理BingSearchDataProvider.SearchCompleted或OsmSearchDataProvider.SearchCompleted事件。SearchCompleted 事件处理程序参数的SearchCompletedEventArgs.RequestResult提供SearchRequestResult后代类实例来存储搜索结果。结果包含与搜索位置关联的显示名称、地址和地理坐标纬度和经度。Form1.csvoid 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.vbPrivate 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”关键字的搜索结果如下图所示。
返回列表