Геокодирование и локация

В данной статье https://phpjs.ru/2017/03/21/google-geolocation-api/ я писал как получить координаты по ip и далее адрес по координатам., используя яндекс, гугл апи. Практика показала, что оба сервиса никчемны. Во-первых, апи гугл платно. Во вторых апи яндекса постоянно блочиться из-за каких то там их политик конфид-ти. Тем временем адрес и координаты можно получить 2 строчками кода.

function getIPYou(){
    if (!empty($_SERVER['HTTP_CLIENT_IP'])){
        //check ip from share internet
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    }elseif(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
        //to check ip is pass from proxy
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip;    
}

$city = json_decode(file_get_contents('http://ip-api.com/json/'.getIPYou()), true);

в ответе даже адрес уже есть

Array
(
    [status] => success
    [country] => Russia
    [countryCode] => RU
    [region] => SAM
    [regionName] => Samara Oblast
    [city] => Samara
    [zip] => 404146
    [lat] => 53.1813
    [lon] => 50.1218
    [timezone] => Europe/Samara
    [isp] => AIST Networks
    [org] => 
    [as] => AS8439 JSC AIST
    [query] => 62.106.126.87
)

Геокодирование

$latlng = '53.1813,50.1218';
$city = file_get_contents("https://geocode.xyz/$latlng?geoit=json");

ответ

Array
(
    [statename] => Array
        (
        )

    [distance] => 0.073
    [elevation] => 41
    [osmtags] => Array
        (
            [wikidata] => Q4178963
            [boundary] => administrative
            [name] => Железнодорожный район
            [type] => boundary
            [admin-level] => 9
        )

    [state] => RU
    [latt] => 53.18175
    [city] => Samara
    [prov] => RU
    [geocode] => SAMARA-NNBVZ
    [geonumber] => 8481645241783
    [country] => Russian Federation
    [stnumber] => Array
        (
        )

    [staddress] => Нечаевская улица
    [inlatt] => 53.18130
    [alt] => array ...

    [timezone] => Europe/Samara
    [region] => Samara Oblast
    [postal] => 443041
    [poi] => array ...

    [longt] => 50.12260
    [remaining_credits] => Array
        (
        )

    [confidence] => 0.9
    [inlongt] => 50.12180
    [class] => residential
    [altgeocode] => TASHM-NNBVZ
)

Leave a comment

Your email address will not be published.


*