Оптимизация запросов геокодирования и маршрутизации Bing Maps - PullRequest
7 голосов
/ 15 февраля 2010

У меня есть база данных, содержащая заказы, и каждому заказу соответствует местоположение. В настоящее время, когда пользователь вошел в систему, я использую API Карт Bing для геокодирования каждого местоположения заказа, а затем вычисляю расстояние вождения до вошедшего в систему пользователя. Основываясь на этих расстояниях, пользователь с помощью выпадающего списка может указать максимальные расстояния с результатами, отображаемыми в виде сетки. Однако при наличии более 100 заказов процесс становится мучительно медленным. Я был бы признателен за некоторые советы по оптимизации запросов Bing, возможно, кеширование результатов (чтобы их можно было повторно использовать без повторной обработки API Bing Maps) или использование Ajax для какой-либо фоновой обработки заказов. Спасибо.

Ответы [ 2 ]

1 голос
/ 15 февраля 2010

Я планирую сделать что-то подобное в самое ближайшее время, поэтому у меня есть несколько предложений, но пока нет реального кода, которым можно поделиться. Я надеюсь, что это полезно.

Я ожидаю сохранить широту / долготу для каждого элемента в моей базе данных (поэтому он геокодируется только один раз). Чтобы выбрать элементы на определенном расстоянии от точки, я вычислю широту / долготу, которые находятся в «х» милях к северу / югу / востоку / западу от моей центральной точки. Тогда выбор становится простым делом выбора записей, где значения широты и долготы находятся между значениями моего квадрата.

И да, я знаю, что технически я должен использовать круг, чтобы точно контролировать расстояние, но это намного проще и быстрее. Если вам действительно нужно использовать круг для более точного ограничения, сначала используйте этот метод, а затем используйте более сложные вычисления, чтобы отсеять элементы за пределами круга в углах.

Я не знаком с лицензированием Bing, но если я правильно помню о Google, вам нужна платная (коммерческая) лицензия для хранения результатов геокодирования. И это не дешево. Так что это может свести на нет любую ценность, которую могло иметь мое предложение: (

Edit; Я просто читаю вопрос немного более внимательно и вижу, что речь идет о пробеге миль, а не линейных миль. Таким образом, мой ответ на самом деле не применим, если только вы не хотите использовать его как способ сузить количество вычислений пробега, которое вам нужно сделать.

Кроме того, что касается геокодирования и лицензий, вы можете посмотреть на geocoder.us , который довольно дешев.

0 голосов
/ 15 февраля 2010

Что вы, вероятно, хотите сделать, - это создать минимальное связующее дерево, предполагая, что у вас есть одно и то же место назначения для пользователя. MST по-прежнему является O (V ^ 2), но вы эффективно кэшируете многие из кратчайших путей, поскольку многие из них будут использовать одни и те же дороги.

Другой вариант - сначала оценить использование линейных расстояний вместо дорожных миль, но все зависит от того, что вы отправляете обратно пользователю.

Удачи!

...