Диалог MapPoint 2011 FindAddress в .NET - PullRequest
1 голос
/ 08 июля 2011

Я добавляю список адресов в Mappoint, используя C #.

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

Иногда формат адреса неверен, и из-за этого я получаю сбой или неверный адрес.

В mappoint (приложение) вы можете искать места, и если mappoint находит несколько или вы ошибаетесь в адресе, он открывает поиск и дает вам возможность искать и / или добавлять адрес в любом случае.

Пример: enter image description here

Обратите внимание, что введенный адрес плохо отформатирован, но mapoint может легко найти полный адрес при обычном форматировании. Иногда есть больше результатов, и мне нужно иметь возможность выбрать вручную, если это произойдет. Вопрос: Как?

Добавлено позже:

Я могу вызвать сам диалог с помощью метода ShowFindDialog и получить количество результатов, найденных с помощью параметра .Count

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

Но я не могу найти способ указать адрес ShowFindDialog

1 Ответ

2 голосов
/ 10 июля 2011

Вы злоупотребляете 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, который вырезан и вставлен вслепую), я написал статью о , использующем коллекцию FindResults правильно на моих страницах "MapPoint HowTo".

...