Je travail sur le projet marchands des 4 saisons. On a besoin de la distance entre chaque fournisseur et chaque marchand, donc il faut trouver une solution gratuit pour notre site, sinon ça va couter 100 EURO.

L'idée est trop simple :), on a le code postal, on cherche le code postal dans la bdd et trouve le point géo qui correspond au code postal.

En suite, il faut utiliser le formulaire mathématique pour calculer la distance entre 2 points.

le code en PHP:

<?php
/**
     * la fonction pour calculer la distance entre deux points GPS/
     * @param [type] $lat1 [cp1]
     * @param [type] $lon1 [cp2]
     * @param [type] $unit [unité]
     */
    function distance($code_postal1, $code_postal2, $unit) { 
      $condition1['code_postal']  =array('like','%'.$code_postal1.'%');
      //chercher l'information dans la bdd, on veut lon et lat en radian.
      $info1=M('ville')->where($condition1)->find();
      $lon1=$info1['longitude_radian'];
      $lat1=$info1['latitude_radian'];
      
      $condition2['code_postal']  =array('like','%'.$code_postal2.'%');
      $info2=M('ville')->where($condition2)->find();
      $lon2=$info2['longitude_radian'];
      $lat2=$info2['latitude_radian'];

      $radius = 6371.0090667; // earth mean radius defined by IUGG

      $dlon = $lon1 - $lon2; 
      $distance = acos( sin($lat1) * sin($lat2) +  cos($lat1) * cos($lat2) * cos($dlon)) * $radius; 

      if ($unit == "KM") {
            return number_format($distance, 2); 
      } else if ($unit == "M") {
            return ($distance * 0.621371192);
      } else if ($unit == "N") {
            return ($distance * 0.539956803);
      } else {
            return 0;
      }
    }
?>

C'est pas fini. Je vais le finir plus tard.
Télécharger le fichier SQL : ville.sql.zip

简单的做一下简介,这次是要通过邮政编码来计算两个城市的距离,这个是如何实现的呢?
原理还是比较简单的,其实就是在数据库中找到邮政编码对应的城市,然后找到它对应的GPS位置,这样的话通过计算公式还是而已很好的就计算出来。
原理就是这么简单 :P 然后有什么问题可以随时来提问的。在火车上面完成了这个奇葩的问题。

Comments
Write a Comment