Я считаю, что вам нужно сделать это в два этапа:
Первым шагом будет вычисление ломаной линии, представляющей маршрут между А и В (как вы говорите, это очевидно). Вы можете сделать это, используя BEST Maps REST (http://msdn.microsoft.com/en-us/library/ff701717.aspx) или SOAP (http://msdn.microsoft.com/en-us/library/cc966826.aspx) службы маршрутизации, например.
)
Когда вы запрашиваете маршрут у любой из этих служб, убедитесь, что вы хотите, чтобы в результаты был включен полный путь маршрута (параметр rpo для REST или параметр RoutePathType.Points для SOAP). Это даст вам массив всех точек, которые используются для построения пути маршрута - в противном случае вы просто получите сводку точек маршрута (т.е. только те точки на маршруте, в которых вам нужно что-то сделать - изменить дороги и т. Д.)
Как только вы получите массив точек, шаг второй - определить все те места, которые находятся на расстоянии x от пути, проведенного между этими точками. Хотя существует множество веб-сервисов, которые позволяют запрашивать места, лежащие в пределах x расстояния от отдельной точки (например, включая службу поиска Bing Maps и службу geonames findNearby), я не знаю ни о каких веб-сервисы, которые предоставляют эту функцию, поэтому вам придется предоставить ее самостоятельно.
Один из способов сделать это - использовать SQL Server 2008 или SQL Server Azure, загруженный дампом данных geonames allCountries из http://download.geonames.org/export/dump/. Затем вы можете построить геометрию LineString из точек в вашем пути маршрута и запросить список мест в базе данных с помощью запроса, например:
ВЫБРАТЬ * ИЗ всех стран, ГДЕ Location.STDistance (@RoutePath) <= 1000; </p>
Йоханнес Кебек опубликовал пример использования этого подхода на основе сервиса Bing SOAP Route и SQL Azure, который вы можете найти здесь: http://jkebeck.wordpress.com/2010/06/26/find-near-route-for-bing-maps-powered-by-sql-azure-spatial/