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 に付属のヘルプ ファイルに完全に記載されていますが、コレクションに 1 つ以上の結果が含まれていると盲目的に想定する前に、この値を確認する必要があります。

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 ドキュメントの悪いサンプル コードが原因です)、FindResults コレクションを正しく使用する方法に関する記事を「MapPoint HowTo」ページに書きました。

于 2011-07-09T21:06:34.783 に答える