1

我正在使用 C# 将地址列表添加到 Mappoint 中。

foreach (Stop stop in _stops)
                _route.Waypoints.Add(_mpMap.FindAddressResults(stop.Street, stop.City, "", "Oregon", stop.Zip)[1]);

有时地址格式是错误的,因此我会崩溃或填写错误的地址。

在 mappoint(应用程序)中,您可以搜索地点,如果 mappoint 找到多个地点或地址错误,它会打开一个查找并为您提供搜索和/或添加地址的选项。

例子: 在此处输入图像描述

请注意输入的地址格式不正确,但 mapoint 可以轻松找到具有正常格式的完整地址。有时会有更多结果,如果发生这种情况,我需要能够手动选择。问:怎么做?

稍后添加:

我可以使用方法调用对话框本身,ShowFindDialog并且可以使用 .Count 参数获取找到的结果计数

MapPoint.FindResults results = _mpMap.FindAddressResults(stop.Street, stop.City, "", "Oregon", stop.Zip);
MessageBox.Show("Found " + results.Count + " results");

但我找不到指定地址的方法ShowFindDialog

4

1 回答 1

2

您正在滥用 FindAddressResults。这不会返回一个简单的数组(这是您对待它的方式),而是一个 FindResults 集合。FindResults 集合包括一个名为“ResultsQuality”的属性。这在 MapPoint 附带的帮助文件中有完整的记录,但是在盲目地假设集合包含一个或多个结果之前,您必须检查此值!

ResultsQuality 属性设置为 GeoFindResultsQuality 枚举。您要检查 geoAllResultsValid (0) 或 geoFirstResultGood (1)。其他值表示没有结果或结果不明确。

这是文档中的 VB6 示例:

Sub AddPushpinToGoodFindMatch()

Dim objApp As New MapPoint.Application
Dim objFR As MapPoint.FindResults

'Set up the application
objApp.Visible = True
objApp.UserControl = True

'Get a FindResults collection
Set objFR = objApp.ActiveMap.FindResults("Seattle")

'If the first result is a good match, then use it
If objFR.ResultsQuality = geoFirstResultGood Then
    objApp.ActiveMap.AddPushpin objFR.Item(1)
Else
    MsgBox "The first result was not a good match."
End If

End Sub

FindResults() 是一个旧方法,它返回相同的 FindResults 类,但使用 FindAddressResults (正如你正在做的那样)通常是一件更好的事情。


附录:由于这个普遍问题是如此普遍(可能是由于盲目剪切和粘贴的 MapPoint 文档中的错误示例代码),我在“MapPoint HowTo”页面上写了一篇关于正确使用 FindResults 集合的文章。

于 2011-07-09T21:06:34.783 回答