HTML5 GeoLocation имеет тенденцию быть намного более точным, чем GeoLocation на основе IP.
GeoLocation на основе IP зависит от баз данных, связанных с интернет-провайдерами, чтобы выяснить, где вы находитесь.Это плохо работает, когда ваш провайдер обслуживает очень большую область и выдает динамические IP-адреса.Адрес в одном городе сегодня может быть на расстоянии 100 миль завтра.Кроме того, эти базы данных обычно не обновляются часто.Если ваш провайдер продает блоки IP-адресов или перемещает их в новый город, база данных все равно может неправильно думать, что вы где-то еще.
Местоположение HTML5 использует службы, предоставляемые вашим браузером, чтобы выяснить, где вы находитесь.Если ваш компьютер имеет встроенный GPS (например, на многих мобильных устройствах и некоторых ноутбуках), он будет знать точно , где вы находитесь.Это делает его гораздо более полезным для веб-приложений, которые имеют компонент навигации или местоположения.Для устройств без GPS это может быть очень хорошее приближение, основанное на близких известных беспроводных сигналах и других факторах, таких как отслеживание того, через что маршрутизатор проходит ваш компьютер при подключении к Интернету.Точная реализация зависит от компьютера, от того, какое аппаратное обеспечение у него имеется, и от того, как браузер решает что-то делать.
Например, когда я проверяю службу определения местоположения на основе IP, он говорит, что я вособый большой город в том же районе, в котором я живу, но на самом деле это около 50 миль.Когда я использую сервис на основе местоположения в HTML5, чтобы выяснить, где я нахожусь, он отключается только примерно на 20 блоков .
Если вы разрабатываете веб-приложение, для которого требуются данные о местоположении, попробуйте , если возможно, используя HTML5 GeoLocation.Настройте запасной вариант, чтобы в случае сбоя HTML5 можно использовать решение GeoIP.Таким образом, вы получите оптимальную точность на поддерживаемых браузерах и устройствах, но у вас останется решение, когда данные HTML5 недоступны.
Если вы использовали проект geolocation-javascript из Google Code, вы можете использовать следующий код:
//determine if device has geo location capabilities
if(geo_position_js.init()){
geo_position_js.getCurrentPosition(success_callback,error_callback);
}
else{
// use an AJAX request to look up the location based on IP address
}