Решение:
OrderByChild отсортировано по Firebase ( https://www.firebase.com/docs/web/guide/retrieving-data.html#section- упорядоченные данные )
Таким образом, я экспортировал базу данных (файл .json), отредактировал записи, используя не лексикографически ключ (проверьте ключи полученных данных ранее), сохранил и импортировал.
Это обычно называют Геолокацией IP.
Пример здесь.
Вещь, большинство сайтов (если Вы запланируете вызов этого как веб-сервис), то обвинит Вас за него. Иначе бросьте вместе веб-сервис, который захватывает страницу геолокации, анализирует ее для адреса и возвратов та информация.
В PHP это, кажется, работает вполне прилично:
<?php
if(isset($_GET["ip"])){
echo geolocate($_GET["ip"]);
}
function geolocate($ip){
$raw_html = file_get_contents("http://www.geody.com/geoip.php?ip=$ip");
if(preg_match('/Location:(.*)/',$raw_html,$matches)){
$location_raw = $matches[1];
//Get rid of pesky HTML tags
$location = preg_replace("/<[^>]*>/","",$location_raw);
return $location;
}else{
return "ERROR";
}
}
Google позволяет получать пользовательское местоположение через, он - Ajax загрузчик API. Это будет даже работать без установленных Механизмов. Просто включайте тег script, указывающий на JsAPI:
<script type="text/javascript"
src="http://www.google.com/jsapi?key=ABCDEFG">
</script>
Когда приложение использует Ajax загрузчик API, попытки загрузчика к гео-определяют местоположение клиента на основе, он - IP-адрес. Если этот процесс успешно выполняется, местоположение клиента, ограниченное по объему к уровню метро, сделано доступным в google.loader. Свойство ClientLocation. Если процессу не удается найти соответствие, это свойство устанавливается в NULL.
if (google.loader.ClientLocation){
var center = new google.maps.LatLng(
google.loader.ClientLocation.latitude,
google.loader.ClientLocation.longitude
);
map.setCenter(center);
}
При заполнении, google.loader. Объект ClientLocation заполняется со следующими свойствами гранулярности уровня метро:
ClientLocation.latitude
— предоставляет с низким разрешением широту, связанную с IP-адресом клиентаClientLocation.longitude
— предоставляет с низким разрешением долготу, связанную с IP-адресом клиентаClientLocation.address.city
— предоставляет название города, связанного с IP-адресом клиентаClientLocation.address.country
— предоставляет название страны, связанной с IP-адресом клиентаClientLocation.address.country_code
— предоставляет название кода страны ISO 3166-1, связанного с IP-адресом клиентаClientLocation.address.region
— предоставляет страну определенное название региона, связанное с IP-адресом клиентаОдна вещь не упустить со службой геолокации или библиотекой состоит в том, что они никогда не будут на 100% точны. Мы используем один, IP2Location, и это на самом деле был излучатель в установившемся режиме жалоб нашему отделу обслуживания клиентов. Мы смотрим на способы изменить поведение сайта и взвешиваем факторы удаления его полностью.
Проблема заключается в том, что нагрузкой соединения IP с пользователем является с пользователями ISP. У них есть большие блоки диапазонов IP, и они регистрируются, какие блоки принадлежат определенному местоположению. Проблема состоит в том, что ISPs часто не обновляют эту информацию, когда они смещают блоки, или блок покрывает слишком большой из области.
Например, я живу приблизительно в шестидесяти милях к северу от Манхэттена, но мой IP часто показывает, что я нахожусь в Чикаго с большинством инструментов поиска. Я имею FIOS и говорил с несколькими другими людьми, которые подтвердили то же поведение.
Если ваши пользователи работают на мобильном телефоне, Xitfy также является бесплатной опцией. У них есть небольшой клиент, который после того, как пользователь соглашается, может быть легко установлен на их телефон. Затем вы можете вызвать API на основе REST, чтобы получить их точный широту / долготу от gps / wifi или сотовой вышки.
Они поддерживают Android, Windows Mobile, BlackBerry и Symbian, которые охватывают почти все смартфоны.