У меня есть изоморфное приложение, которое загружается и на сервере, и на клиента. Я забочусь о загрузке результатов для приложения на сервере. Мне нужно позвонить в google maps api service, чтобы получить мощность и долготу для места для ex 'www.mysite.com/search/New-York–NY–United-States' то мне нужно найти его широту и долготу из google maps api с ниже кода в php (мой api находится в php)
$address= $this->input->get('address'); $geo = file_get_contents('http://maps.googleapis.com/maps/api/geocode/json?address='.urlencode($address).'&sensor=false'); $geo = json_decode($geo, true); if ($geo['status'] = 'OK') { $lat = $geo['results'][0]['geometry']['location']['lat']; $lng = $geo['results'][0]['geometry']['location']['lng']; }
Затем, основываясь на этой широте и долготе, я ищу результаты, как показано ниже
$radius = 6371; $distance = 250; // latitude boundaries $maxlat = $lat + rad2deg($distance / $radius); $minlat = $lat - rad2deg($distance / $radius); // longitude boundaries (longitude gets smaller when latitude increases) $maxlng = $lng + rad2deg($distance / $radius / cos(deg2rad($lat))); $minlng = $lng - rad2deg($distance / $radius / cos(deg2rad($lat)));
С помощью вышеописанного кода я вычисляю максимальную и минимальную длину волны и долготу, а затем просматриваю результаты, применяя условия, как указано ниже.
$this->db->where('rv.LATITUDE >=', $minlat); $this->db->where('rv.LATITUDE <=', $maxlat); $this->db->where('rv.LONGTITUDE >=', $minlng); $this->db->where('rv.LONGTITUDE <=', $maxlng);
Как получить широту и долготу, не вызывая google maps api и как оптимизировать ее, чтобы быстрее получать результаты. Просьба представить предложения по этому вопросу.
Если вы не пытаетесь указывать уличные адреса и интересуетесь только такими именами, как города, ориентиры и т. Д. (В вашем примере, Нью-Йорк, США), вы можете посмотреть различные экспортные продукты GeoNames . Вы можете загрузить их в локальное хранилище данных и выполнить поиск по имени.