我需要将一些kml坐标(x,y,z)转换为(x,y)数组以与php函数一起使用,然后返回到变量以与google地图一起使用。
$pontos = "224,250,0 244,232,0 231,262,0 248,229,0 224,250,0";
需要转变为:
$pontos = array(
array('x'=>224,'y'=>250),
array('x'=>244,'y'=>232),
array('x'=>231,'y'=>262),
array('x'=>248,'y'=>229),
array('x'=>224,'y'=>250)
);
它将与某个功能一起使用:
simplify($pontos);
此函数将返回一个简化的点数组,如下所示:
Array (
[0] => Array ( [x] => 224 [y] => 250 )
[1] => Array ( [x] => 231 [y] => 262 )
[2] => Array ( [x] => 224 [y] => 250 )
)
这个数组需要转换回变量,如下所示:
$pontos = "224,250,0 231,262,0 224,250,0";
有人能指出我如何实现这一目标的方向吗? 非常感谢:)
答案 0 :(得分:2)
这两次转化都是使用array_map()
的具体工具:
$pontos = "224,250,0 244,232,0 231,262,0 248,229,0 224,250,0";
// convert to
$xy = array_map(function($item) {
return ['x' => strtok($item, ','), 'y' => strtok(',')];
}, explode(' ', $pontos));
// convert back
$pontos = join(' ', array_map(function($item) {
return sprintf('%d,%d,0', $item['x'], $item['y']);
}, $xy));
答案 1 :(得分:1)
这就是你要做的事情:
//To convert it into a 2D array
$pontos = explode(" ",$pontos);
for($i=0;$i<count($pontos);$i++){
$temp = array_splice(explode(",",$pontos[$i]),2);
$pontos[$i]['x'] = $temp[0];
$pontos[$i]['y'] = $temp[1];
}
无法将其转换回来,因为“z”坐标已被删除,因此您需要在转换之前将字符串预先存储在另一个变量中。
$old = $pontos;
//do converting stuff
//.....
//convert back by doing:
$pontos = $old
但是,假设z始终为0,那么可以将其反转为:
for($j=0;$j<count($pontos);$j++){
$pontos[$j] = implode(",",$pontos[$j]);
$pontos[$j] .= ",0"
}
$pontos = implode(" ",$pontos);
注意:我没有运行此代码,因此可能有一些错误(可能不会)。如果它不起作用,请评论,我会相应地更新答案。