2016-03-24 6 views
-1

Я рассмотрел другие вопросы, на которые были ответы, однако, я до сих пор не знаю, как это сделать;Разработка расстояния между двумя почтовыми индексами

  1. Получить данные, включая почтовый индекс Великобритании широту, долготу, Grid-N и грид-E в мою базу данных

  2. Если я использую API, как я могу идти об этом? С чего начать?

  3. Должен ли я использовать теорему Пифагора для расчета расстояния между двумя почтовыми индексами?
  4. У меня есть таблица в моей базе данных, когда пользователь добавляет свойство. Может быть, есть способ, когда кто-то добавляет свойство, он может добавить этот почтовый индекс вместе с почтовыми индексами другую информацию (long, lat, grid-ref) в мою таблицу почтовых индексов, чтобы я мог определить расстояние между этими двумя почтовыми индексами.

Благодаря

+0

Есть либо слишком много возможных ответов, или хорошие ответы будут слишком долго для этого формата. Пожалуйста, добавьте детали, чтобы сузить набор ответов или изолировать проблему, на которую можно ответить в нескольких параграфах. Я бы предложил вам найти форум для разработки (возможно, [Quora] (http://www.quora.com/Computer-Programming) ?), чтобы выработать общие положения. Затем, когда/если у вас есть особые проблемы с кодированием, вернитесь в StackOverflow, и мы будем рады помочь. –

+0

Как подсказка, не используйте теорему Пифагора, за исключением очень близких расстояний - вы, скорее всего, захотите Расстояние Великого круга –

+0

Также стоит посмотреть на [OpenData OS] (https://www.ordnancesurvey.co. uk/opendatadownload/products.html) (который [Зеркало моего общества] (http://parlvid.mysociety.org/os/)) –

ответ

0

У меня есть класс, я использую специально для этого:

class Geocode 
{ 
    /** 
    * Work out the distance between two sets of lat/lng coordinates as the crow flies. 
    * 
    * @param float $lat1 
    * @param float $lng1 
    * @param float $lat2 
    * @param float $lng2 
    * 
    * @return float 
    */ 
    public static function distance($lat1 = 0.0, $lng1 = 0.0, $lat2 = 0.0, $lng2 = 0.0) { 
     $theta = $lng1 - $lng2; 
     $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta)); 
     $dist = acos($dist); 
     $dist = rad2deg($dist); 
     return $dist * 60 * 1.1515; 
    } 

    /** 
    * Get the lat/lng coordinates for an address. 
    * 
    * @param string $address 
    * 
    * @return stdClass 
    */ 
    public static function convert($address = '') 
    { 
     $address = str_replace(" ", "+", urlencode(str_replace(PHP_EOL, ', ', $address))); 
     $url = "https://maps.googleapis.com/maps/api/geocode/json?address={$address}&region=uk&sensor=false"; 

     $ch = curl_init(); 
     curl_setopt($ch, CURLOPT_URL, $url); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     $response = json_decode(curl_exec($ch), TRUE); 

     if($response['status'] != 'OK') { 
      return (object) ['status' => $response['status']]; 
     } 
     $geo = $response['results'][0]['geometry']; 

     return (object) [ 
      'lat'  => $geo['location']['lat'], 
      'lng'  => $geo['location']['lng'], 
      'status' => $response['status'] 
     ]; 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^