Многочисленные вызовы API геокодирования и очень медленный код - PullRequest
0 голосов
/ 08 апреля 2019

Мне нужно найти расстояние между посылкой и служебным адресом, а также адресом доставки и служебным адресом.

Я сделал код php, вызвав geocode api, чтобы получить адресные координаты с динамическим вводом адреса из базы данных. Затем он вычисляет необходимые расстояния (решает задачу), но приводит к нескольким вызовам API, из-за которых регистрируются тысячи предприятий, проходящих через все из них.

Я попытался использовать curl вместо file_get_contents, но это не имеет никакого значения. Можем ли мы уменьшить количество вызовов API и сделать это быстрее?

                /* this whole code is in loop for all businesses*/
                /*address from database*/
                $raddress=$rstreetno." ".$rstreetname.",".$rsuburb.",".$address_state.",".$rpostcode;
                $mapsApiKey= get_option('shipme_radius_maps_api_key');
                /* API Call*/
                $urllocal = "https://maps.googleapis.com/maps/api/geocode/json?address=".urlencode($raddress)."&sensor=false&key=".$mapsApiKey;
                $result_string = file_get_contents($urllocal);
                $result = json_decode($result_string, true);
                if(!empty($result['results'])){
                    $remoaddLat = $result['results'][0]['geometry']['location']['lat'];
                    $remoaddlng = $result['results'][0]['geometry']['location']['lng'];
                }
                $earthRadius = 6378;//earth radius in kms.
                $latpickFrom = deg2rad($jobpickup_lat);
                  $lonpickFrom = deg2rad($jobpickup_lng);
                  $lataddress=deg2rad($remoaddLat);
                  $lngaddress=deg2rad($remoaddlng);
                  $latdelTo = deg2rad($jobdelivery_lat);
                  $londelTo = deg2rad($jobdelivery_lng);

                  $latDeltapickup = $lataddress- $latpickFrom;
                  $lonDeltapickup = $lngaddress - $lonpickFrom;
                  $latDeltadel =  $latdelTo - $lataddress;
                  $lonDeltadel =  $londelTo - $lngaddress;
                  $latjobdist = $latdelTo - $latpickFrom;
                  $lonjobdist = $londelTo - $lonpickFrom;

                    /*Distance between business address and pickup*/
                    $a = sin($latDeltapickup / 2) * sin($latDeltapickup / 2) +
                    cos($lataddress) * cos($latpickFrom) *
                    sin($lonDeltapickup / 2) * sin($lonDeltapickup / 2);
                    $c = 2 * asin(sqrt($a));
                    $distancefrompickup = round($earthRadius * $c,2);

                    /*Distance between business address and delivery*/
                    $a1 = sin($latDeltadel / 2) * sin($latDeltadel / 2) +
                    cos($lataddress) * cos($latdelTo) *
                    sin($lonDeltadel / 2) * sin($lonDeltadel / 2);
                    $c1 = 2 * asin(sqrt($a1));
                    $distancefromdel = round($earthRadius * $c1,2); 

                 /*Distance between pickup and delivery*/

                $a2 = sin($latjobdist / 2) * sin($latjobdist / 2) +
                    cos($latpickFrom) * cos($latdelTo) *
                    sin($lonjobdist / 2) * sin($lonjobdist / 2);
                    $c2 = 2 * asin(sqrt($a2));
                    $jobdistance = round($earthRadius * $c2,2);

/ * Затем эти расстояния используются в дальнейших сравнениях * /

...