我在一个项目中工作,人们上传GPX,我正在尝试将GPX文件转换为KML文件,因此他们可以选择下载这两种格式。
我发现了一个XSLT文件,它可以将GPX转换成KML,但当我尝试用XSLTProcessor在php中进行转换时,它给了我一些错误,说有些函数找不到。我检查了XSLT文件,这些函数都在那里。我对XSLT不是很熟悉,所以如果有人能给我一些指导,那就太好了。
xslt文件位于以下位置:http://members.home.nl/cybarber/geomatters/FlitspaalGPX2KML.xslt
gpx文件位于以下位置:http://geobetty.com/maps/download/8/archuletas-acres.gpx
代码如下:
<?php
$gpx = new DOMDocument();
$gpx->loadXML($ride);
$xslsheet = new DOMDocument();
$xslsheet->load(DOCROOT . '/lib/gpx-to-kml.xslt');
$xsl = new XSLTProcessor();
$xsl->importStyleSheet($xslsheet);
$kml = $xsl->transformToXML($gpx); ?>以下是我的错误:
xmlXPathCompOpEval: function distCosineLaw未找到未注册的function xmlXPathCompiledEval:堆栈上剩余3个对象
除其他外,
发布于 2011-02-12 23:41:37
XSLT转换是专门为由MSXML运行而编写的,并使用扩展元素<msxsl:script>,该元素仅由MSXML XSLT处理器实现。
Solution:以下任一选项:
使用MSXML (版本)
发布于 2011-02-13 00:07:32
您也可以尝试使用gpsbabel (一个外部程序)来进行转换。通过这种方式,您还可以自动支持许多其他格式。缺点是你需要安装一个外部程序,这可能是可能的,也可能不可能,这取决于你的主机。
发布于 2015-01-19 16:01:59
Please use your gpx file name in program or path of gpx file
<?php
$name_file="ff72be886cde0672af512bb2c383d422.gpx";
$point=explode(".",$name_file);
$namekml=$point[0].'.kml';
$xml = simplexml_load_file($name_file);$i=0;
$arry=array();
foreach($xml->trk->trkseg->trkpt as $trkpt) {
$arry[$i++]=xml2array ( $trkpt, $out = array () );
}
generatekml($arry,true,$namekml);
function generatekml($input,$file,$filename){
$output="<?xml version=\"1.0\" encoding=\"UTF-8\"?>
<kml xmlns=\"http://www.opengis.net/kml/2.2\">
<Document>
";
$i=1;
foreach($input as $key=>$point){
$name="point ".$i++;
$description=$point['ele'];
$lat=$point['@attributes']['lat'];
$lon=$point['@attributes']['lon'];
$coordinates=$lat .",".$lon;
$output.="<Placemark>
<name>$name</name>
<description>$description</description>
<Point>
<coordinates>$coordinates</coordinates>
</Point>
</Placemark>
";
}
$output.="</Document>
</kml>
";
if($file){
header("Content-type: octet/stream");
header("Content-disposition: attachment; filename=".$filename.";");
// header("Content-lenght: ".filesize("files/".$file));
print $output;
}else print $output;
}
function xml2array ( $xmlObject, $out = array () )
{
foreach ( (array) $xmlObject as $index => $node )
$out[$index] = ( is_object ( $node ) ) ? xml2array ( $node ) : $node;
return $out;
}
?>https://stackoverflow.com/questions/4978739
复制相似问题