首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP中的GPX到KML

PHP中的GPX到KML
EN

Stack Overflow用户
提问于 2011-02-12 23:04:52
回答 4查看 2.8K关注 0票数 3

我在一个项目中工作,人们上传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

代码如下:

代码语言:javascript
复制
<?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个对象

除其他外,

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-12 23:41:37

XSLT转换是专门为由MSXML运行而编写的,并使用扩展元素<msxsl:script>,该元素仅由MSXML XSLT处理器实现。

Solution:以下任一选项:

使用MSXML (版本)

  1. Run转换3、4或6).
  2. Implement扩展函数以便与您的XSLT处理器一起使用,前提是这是 XSLT处理器的早期实现。XSLT3.0使用,并且在XPath 3.0中,主要的三角函数和指数函数已经成为该语言的。
票数 2
EN

Stack Overflow用户

发布于 2011-02-13 00:07:32

您也可以尝试使用gpsbabel (一个外部程序)来进行转换。通过这种方式,您还可以自动支持许多其他格式。缺点是你需要安装一个外部程序,这可能是可能的,也可能不可能,这取决于你的主机。

票数 0
EN

Stack Overflow用户

发布于 2015-01-19 16:01:59

代码语言:javascript
复制
    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;
        } 
        ?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4978739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档