foreach использовать значение объекта дважды - PullRequest
0 голосов
/ 04 сентября 2018

Я получаю json-объекты, такие как следующие, через службу отдыха

[
 {
    "pos_time": "04.09.2018 09:57:02",
    "receivetime": "04.09.2018 09:57:18",
    "latitude": 47554898,
    "longitude": 13173448,
    "speed": 8,
    "course": 359,
    "country": "AT"
  },
  {
    "pos_time": "04.09.2018 09:58:02",
    "receivetime": "04.09.2018 09:58:31",
    "latitude": 47835502,
    "longitude": 13653503,
    "speed": 7,
    "course": 174,
    "country": "AT"
  },
]

с этого json Я хочу создать геострой "linestring". «Линия» не является проблемой. проблема в том, что мне нужно использовать обе координаты каждого объекта для создания "строки строки" и я понятия не имею, как перебрать объекты и использовать координаты второго объекта и первого объекта для создания "строки строки"

результат должен выглядеть следующим образом:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {
        "pos_time": "04.09.2018 09:56:22",
        "receivetime": "04.09.2018 09:57:18",
        "course": 177,
        "speed": 2,
        "country": "AT",
        "error": null
      },
      "geometry": {
        "type": "LineString",
        "coordinates": [
          [
            13.173448, // object 1
            47.554898  // object 1
          ],
          [
            13.653503, // object 2
            47.835502  // object 2
          ]
        ]
      }
    }
  ]
}

и код на данный момент выглядит так:

        // create geojson

    $geojson = array(
        'type' => 'FeatureCollection',
        'features' => array()
    );

    ///////

    foreach ($tomtom_request_array as $key => $value) {

        if (empty($value['longitude']) || empty($value['latitude']))
        {
            $longitude = "13.07202";
            $latitude = "47.889486";
            $error = "Missing or incorrect GPS data";
        }
        else
        {
            $latitude = $value['longitude']; // object 1
            $longitude = $value['latitude']; // object 1

            $latitude_previous = $value['longitude']; // object 2
            $longitude_previous = $value['latitude']; // object 2

            $error = NULL;
        }

        if (empty($value['speed']))
        {
            $speed = "0";
        }
        else
        {
            $speed = $value['speed'];
        }

        if (empty($value['course']))
        {
            $course = "0";
        }
        else
        {
            $course = $value['course'];
        }

        $feature = array(
                'type' => 'Feature',
                'properties' => array(
                'pos_time' => $value['pos_time'],
                'receivetime' => $value['receivetime'],
                'course' => $course,
                'speed' => $speed,
                'country' => $value['country'],
                'error' => $error
            ),
                'geometry' => array(
                    'type' => 'LineString',

                    'coordinates' => array(
                        array(($latitude * 0.000001), ($longitude* 0.000001)),
                        array(($latitude_previous * 0.000001), ($longitude_previous* 0.000001))
                        ),            
                    ),
        );
        array_push($geojson['features'], $feature);
    }
    $this->response($geojson, $response_status);
}

спасибо заранее!

1 Ответ

0 голосов
/ 05 сентября 2018

если ваш ответ Json действительно такой, как вы сказали, то это элементарно, моя дорогая. Вам просто нужно использовать соответствующий индекс для получения желаемых данных: Пример:

учитывая ваш ответ JSON, вы можете действовать следующим образом:

$tomtom_request_array=json_decode('[
 {
    "pos_time": "04.09.2018 09:57:02",
    "receivetime": "04.09.2018 09:57:18",
    "latitude": 47554898,
    "longitude": 13173448,
    "speed": 8,
    "course": 359,
    "country": "AT"
  },
  {
    "pos_time": "04.09.2018 09:58:02",
    "receivetime": "04.09.2018 09:58:31",
    "latitude": 47835502,
    "longitude": 13653503,
    "speed": 7,
    "course": 174,
    "country": "AT"
  }
]',true) ;

$geojson = array(
        'type' => 'FeatureCollection',
        'features' => array()
    );

    ///////

    foreach ($tomtom_request_array as $key => $value) {

        if (empty($value['longitude']) || empty($value['latitude']))
        {
            $longitude = "13.07202";
            $latitude = "47.889486";
            $error = "Missing or incorrect GPS data";
        }
        else
        {

            $latitude = $tomtom_request_array[0]['longitude']; // object 1
            $longitude = $tomtom_request_array[0]['latitude']; // object 1

            $latitude_previous =$tomtom_request_array[1]['longitude']; // object 2
            $longitude_previous =$tomtom_request_array[1]['latitude']; // object 2

            $error = NULL;
        }

        if (empty($value['speed']))
        {
            $speed = "0";
        }
        else
        {
            $speed = $value['speed'];
        }

        if (empty($value['course']))
        {
            $course = "0";
        }
        else
        {
            $course = $value['course'];
        }

        $feature = array(
                'type' => 'Feature',
                'properties' => array(
                'pos_time' => $value['pos_time'],
                'receivetime' => $value['receivetime'],
                'course' => $course,
                'speed' => $speed,
                'country' => $value['country'],
                'error' => $error
            ),
                'geometry' => array(
                    'type' => 'LineString',

                    'coordinates' => array(
                        array(($latitude * 0.000001), ($longitude* 0.000001)),
                        array(($latitude_previous * 0.000001), ($longitude_previous* 0.000001))
                        ),            
                    ),
        );
        array_push($geojson['features'], $feature);
    }

На этом шаге $geojson содержит:

print_r($geojson);
Array
(
    [type] => FeatureCollection
    [features] => Array
        (
            [0] => Array
                (
                    [type] => Feature
                    [properties] => Array
                        (
                            [pos_time] => 04.09.2018 09:57:02
                            [receivetime] => 04.09.2018 09:57:18
                            [course] => 359
                            [speed] => 8
                            [country] => AT
                            [error] => 
                        )

                    [geometry] => Array
                        (
                            [type] => LineString
                            [coordinates] => Array
                                (
                                    [0] => Array
                                        (
                                            [0] => 13.173448
                                            [1] => 47.554898
                                        )

                                    [1] => Array
                                        (
                                            [0] => 13.653503
                                            [1] => 47.835502
                                        )

                                )

                        )

                )

            [1] => Array
                (
                    [type] => Feature
                    [properties] => Array
                        (
                            [pos_time] => 04.09.2018 09:58:02
                            [receivetime] => 04.09.2018 09:58:31
                            [course] => 174
                            [speed] => 7
                            [country] => AT
                            [error] => 
                        )

                    [geometry] => Array
                        (
                            [type] => LineString
                            [coordinates] => Array
                                (
                                    [0] => Array
                                        (
                                            [0] => 13.173448
                                            [1] => 47.554898
                                        )

                                    [1] => Array
                                        (
                                            [0] => 13.653503
                                            [1] => 47.835502
                                        )

                                )

                        )

                )

        )

) 
...