【问题标题】:Dynamically inserting latitude/longitude from array to weather API call in PHP在 PHP 中动态插入数组中的纬度/经度到天气 API 调用
【发布时间】:2021-03-02 15:36:39
【问题描述】:

我有一张传单地图,上面有标记显示一个国家的前 10 个城市,具体取决于从选择字段中选择的国家/地区。

$latLng 包含 10 个纬度/经度对,用于将该位置的每个城市添加到地图上。控制台示例(澳大利亚):

(2) [-35.2834624726481, 149.128074645996]
(2) [-33.8678499639382, 151.207323074341]
(2) [-37.8139965641595, 144.963322877884]
(2) [-31.95224, 115.861397]
(2) [-34.928661, 138.598633]
(2) [-32.92953, 151.7801]
(2) [-42.87936056387943, 147.32940673828125]
(2) [-19.26639, 146.805695]
(2) [-16.92366, 145.76613]
(2) [-12.46113366159021, 130.84184646606445]

locationList 数组被字符串化并用作 AJAX 调用的数据,然后在 PHP 中的 foreach 循环中对其进行解码 - 第一对示例: {"lat":-35.283462472648096763805369846522808074951171875,"lng":149.128074645996008484871708787977695465087890625}

在 PHP 文件中,我试图弄清楚如何将 $lat$lng 动态添加到开放天气的 API 例程中,以便当点击特定的 $cityMarker 时,该纬度/的天气预报/ lng 出现在模态中。

我尝试在 PHP 中添加一个 foreach 循环来遍历天气 cURL 例程的所有对,但目前我只看到数组中最后一个 lat/lng 对的模态显示天气 - [-12.46113366159021, 130.84184646606445] in上述情况。此外,仅当单击上述位置的标记时才会出现模式 - 单击其他城市标记只会显示其传单弹出窗口。

有没有更好的方法来循环所有十对,以便在天气 API 调用中匹配并使用被点击标记的纬度/经度?还是另一种方法?

感谢大家的帮助!

PHP:

<?php

    ini_set('display_errors', 'On');
    error_reporting(E_ALL);

    $executionStartTime = microtime(true) / 1000;
    
    $locationList = json_decode($_POST['locationList'], true);

    $locationArray = [];
    
    foreach ($locationList as $location){
        $data['lat'] = $location['lat'];
        $data['lng'] = $location['lng'];
        array_push($locationArray, $data);
    }

    // openweather routine

    foreach ($locationArray as $location){
        $lat = $location['lat'];
        $lng = $location['lng'];

        $openWeatherUrl='api.openweathermap.org/data/2.5/weather?lat=' . $lat . '&lon='  . $lng  . '&units=metric&appid=demo';
    }

    $openWeatherch = curl_init();
    curl_setopt($openWeatherch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($openWeatherch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($openWeatherch, CURLOPT_URL,$openWeatherUrl);

    $openWeatherResult = curl_exec($openWeatherch);

    curl_close($openWeatherch);

    $openWeather = json_decode($openWeatherResult, true);

    $output['status']['code'] = "200";
    $output['status']['name'] = "ok";
    $output['status']['description'] = "mission saved";
    $output['status']['returnedIn'] = (microtime(true) - $executionStartTime) / 1000 . " ms";
    $output['data']['location'] = $locationArray;
    $output['data']['openWeather'] = $openWeather;
    

    header('Content-Type: application/json; charset=UTF-8');

    echo json_encode($output);

?>

【问题讨论】:

    标签: javascript php jquery ajax leaflet


    【解决方案1】:

    未测试,但您想在循环中构建data 部分。我在['data']['location'] 部分将$locationArray 更改为$location

    foreach ($locationArray as $location){
        $lat = $location['lat'];
        $lng = $location['lng'];
        $openWeatherUrl='api.openweathermap.org/data/2.5/weather?lat=' . $lat . '&lon='  . $lng  . '&units=metric&appid=demo';
    
        $openWeatherch = curl_init();
        curl_setopt($openWeatherch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($openWeatherch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($openWeatherch, CURLOPT_URL,$openWeatherUrl);
        $openWeatherResult = curl_exec($openWeatherch);
        curl_close($openWeatherch);
    
        $openWeather = json_decode($openWeatherResult, true);
        $output['data'][] = ['location' => $location, 'openWeather' => $openWeather];
    }   
    $output['status']['code'] = "200";
    $output['status']['name'] = "ok";
    $output['status']['description'] = "mission saved";
    $output['status']['returnedIn'] = (microtime(true) - $executionStartTime) / 1000 . " ms";
    
    header('Content-Type: application/json; charset=UTF-8');
    echo json_encode($output);
    

    【讨论】:

    • 非常感谢 - 这帮了大忙!您是否知道如何在 AJAX 调用(在 JS 文件中)中访问这些数据,以便在单击城市标记时,将该特定位置的天气数据拉入模态 - 我想我可能需要一个检查 API 调用中的 lat/lng 是否与地图上的城市标记匹配的语句?目前模态已经完全消失了!
    • 既然您的 JSON 显示正确,那就是另一个问题了。
    猜你喜欢
    • 1970-01-01
    • 2011-07-03
    • 2013-01-15
    • 2019-04-10
    • 2014-10-19
    • 2021-05-11
    • 1970-01-01
    • 2013-02-02
    • 2019-02-18
    相关资源
    最近更新 更多