2010-08-07 3 views
2

Ребята, у меня есть небольшая проблема, я попытался найти несколько примеров системы на основе GeoIP, которая расширяет поиск по соседним странам. Например, посетитель из Великобритании и пытается найти IP-адреса из Франции, Испании, Бельгии и т. Д., Например, Бразилии, Аргентины, Китая. Итак, как я могу получить ближайшие страны из данной страны/IP и расширить приращение расстояния?GeoIP ближайшая (ближайшая) страна

Редактировать: Я использую бесплатную версию Max-mind, так как меня не интересуют города. И мой проект основан на C#.

ответ

1

Ну, первый шаг к решению проблемы состоит в том, чтобы использовать базовую географию и классифицировать страны на continents.

Оттуда вы можете составить список расстояний в пределах данного континента и отсортировать по этим «расстояниям» или «весам».

Географическое расстояние (например, км или мили) между столичными городами должно быть «достаточно хорошим» приближением, чтобы начать, если вы хотите быть фантазией. Бьюсь об заклад, вы даже можете найти такой список с небольшим поиском в Интернете.

Оттуда вас есть «пост-офисные проблемы» (Кнут) или «nearest neighbor search» проблема оптимизации, и в этом случае я подозреваю, что вы можете [Перефразировано] просто пойти с линейного поиска в перегородках континентов , Если вам нужна более высокая производительность, то достаточно приблизительного алгоритмического подхода. (ответы не гарантируются best решение, но должно быть разумным большую часть времени)

Отметьте, что эта форма географии, основанная на «маршрутизации», слаба в нескольких исключительных случаях, таких как Куба, которая не получает Доступ в Интернет из его (наивного) очевидного географического соседа, США и некоторых стран «черной дыры» из-за политических отношений. Северная Корея и Тибет Я подозреваю, что подобные случаи.

+0

Очень хороший подход, действительно, я это рассмотрю, но на данный момент эта реализация выглядит сложной. – Anonymous

0

Maxmind дает вам Lat/Long каждой страны, поэтому вы можете просто рассчитать разницу в вашей стране с остальными, и все готово. См. this thread for geolocation distance calculation или воспользуйтесь библиотекой по вашему выбору.

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