Разбор KML-координат из Google Maps - PHP - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь собрать координаты (долготу и широту) из файла Google KML с помощью PHP.

<Point>
    <coordinates>45.51088930166307,52.52216552154544</coordinates>
</Point>

Я могу разбить координаты запятой и получить результаты, как показано ниже:

[0] => 45.51088930166307
[1] => 52.52216552154544

Чтобы получить этот результат, я использую:

explode(',', $coordinates);

Как взорвать координаты запятыми?

<Point>
    <coordinates>45.51088930166307,51,52.52216552154544,75</coordinates>
</Point>

Результаты, которые мне нужны:

[0] => 45.51088930166307,51
[1] => 52.52216552154544,75

А как убрать цифры после запятых?

[0] => 45.51088930166307
[1] => 52.52216552154544

Спасибо,

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Решением без регулярных выражений является использование strpos, чтобы найти положение второй запятой и разделить строку там.

$str = "45.51088930166307,51,52.52216552154544,75";
if(substr_count($str, ",")>1){
    $pos = strpos($str, ",", strpos($str, ",")+1); // find second comma
    // The inner strpos finds the first comma and uses that as the starting point to find the second comma.
    $arr = [substr($str, 0,$pos), substr($str,$pos+1)]; //split string at second comma
}else{
    $arr = explode(",", $str);
}
var_dump($arr);

https://3v4l.org/nnrlV

0 голосов
/ 17 октября 2018

Вы можете разделить строку запятой, за которой следуют цифры и точка:

preg_split('~,(?=\d+\.)~', $s)

См. Демонстрационный пример regex .

Подробности

  • , - запятая, которая ...
  • (?=\d+\.) - сразу за ней следуют 1 или более цифр (\d+) и точка (\.).

PHP демо :

$s = '45.51088930166307,51,52.52216552154544,75';
$res = preg_split('~,(?=\d+\.)~', $s);
print_r($res);
// => Array ( [0] => 45.51088930166307,51 [1] => 52.52216552154544,75 )
...