【问题标题】:How to parse/process a KMZ file on my server using PHP/JavaScript?如何使用 PHP/JavaScript 在我的服务器上解析/处理 KMZ 文件?
【发布时间】:2014-01-07 12:43:11
【问题描述】:

我一直在环顾四周,我能找到的都是与使用谷歌地图相关的答案。我想要做的是获取存储在其中的信息以将其“导入”到我的数据库中。

据我所知,KMZ 文件是 KML 的 zip 文件(如 xml)。

我要处理的 KMZ 看起来像这样(在本地解压缩时):

包含以下信息的 KML 文件 (doc.kml):

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
  <Document>
    <name>KmlFile</name>
    <Placemark>
      <description>
        <![CDATA[<div style='border: 1px solid #aaa; font-size: 20px;'><span style='padding: 1em; display: inline-block;'><img src='files/tags_1470231.jpg' /></span></div>
<div style='background-color: #aaa; color: white; text-align: right; padding: 0.5em 0.5em 0 0;'>Posted: 2013/12/26</div>]]>
        <![CDATA[<div style='border: 1px solid #aaa; font-size: 20px;'><span style='padding: 1em; display: inline-block;'>test
</span></div>
<div style='background-color: #aaa; color: white; text-align: right; padding: 0.5em 0.5em 0 0;'>Posted: 2013/12/26</div>]]>
        <![CDATA[<div style='border: 1px solid #aaa; font-size: 20px;'><span style='padding: 1em; display: inline-block;'>cool pic</span></div>
<div style='background-color: #aaa; color: white; text-align: right; padding: 0.5em 0.5em 0 0;'>Posted: 2013/12/26</div>]]>
      </description>
      <visibility>0</visibility>
      <Point>
        <coordinates>135.753498,35.024914,0</coordinates>
      </Point>
    </Placemark>
    <Placemark>
      <description>
        <![CDATA[<div style='border: 1px solid #aaa; font-size: 20px;'><span style='padding: 1em; display: inline-block;'><img src='files/tags_1470232.jpg' /></span></div>
<div style='background-color: #aaa; color: white; text-align: right; padding: 0.5em 0.5em 0 0;'>Posted: 2013/12/26</div>]]>
        <![CDATA[<div style='border: 1px solid #aaa; font-size: 20px;'><span style='padding: 1em; display: inline-block;'>panda
</span></div>
<div style='background-color: #aaa; color: white; text-align: right; padding: 0.5em 0.5em 0 0;'>Posted: 2013/12/26</div>]]>
      </description>
      <visibility>0</visibility>
      <Point>
        <coordinates>135.753482,35.024868,0</coordinates>
      </Point>
    </Placemark>
  </Document>
</kml>

还有一个名为“files”的文件夹,里面有图片。

理论上我想我必须在我的服务器中解压这个文件,读取 doc.kml 文件,解析它以获得每个元素的坐标和图片名称,然后处理这些信息。

我遇到的问题是我不确定如何解压缩此文件并在我的服务器中为每个使用该网站的用户处理它。

我应该在我的服务器中使用临时位置吗?如果多个用户同时执行,文件不会覆盖吗?解压缩后如何引用每个图像?

我正在使用一个 PHP 站点,我计划显示每个图像的预览以及上传的 KMZ 文件的坐标。

任何帮助将不胜感激。

【问题讨论】:

    标签: javascript php kml kmz


    【解决方案1】:

    以下是一些将 KMZ 解压缩为 KML 的代码示例。 这在 php 中很容易完成。下面是两个php示例:

    <?php
    $data = file_get_contents("http://example.com/some_file.kmz"); // url of the KMZ file
    file_put_contents("/tmp/kmz_temp",$data);
    ob_start();
    passthru('unzip -p /tmp/kmz_temp');
    $xml_data = ob_get_clean();
    header("Content-type: text/xml");
    echo $xml_data;
    ?> 
    

    发件人:http://dtbaker.net/web-development/how-to-convert-kmz-to-kml/ 这在 PHP 5.5.9 上运行良好,但我在 PHP 5.4.35 上发现了这个问题。 我已经用以下代码解决了这个问题:

    <?php
    $zip = new ZipArchive;
    $res = $zip->open('some_file.kmz');
    if ($res === TRUE) {
      $zip->extractTo('/DestinationFolder/');
      $zip->close();
      echo 'Success!';
    } else {
      echo 'errors';
    }
    ?>
    

    我从这个帖子中得到这个:Unzip a file with php 从那里您几乎可以像处理任何其他 XML 一样处理 KML。

    希望有帮助!

    【讨论】:

    • 是的,第二个sn-p对于kmz到kml的转换非常有用。
    【解决方案2】:

    使用 PHP 解压缩 zip 文件:Unzip a file with php

    至于确保用户不会相互重叠上传,请考虑使用时间戳、使用tempnam() 函数 (http://us1.php.net/tempnam)、为每个用户设置一个单独的文件夹或使用自动递增数据库列来跟踪上传。任何方法都可以为您的每次上传获取一个唯一的文件名,这样它们就不会重复。

    希望这将为您指明正确的方向。

    【讨论】:

    • 感谢您的回复,请问可以在客户端这样做吗?就像在浏览器内存中解压缩并获取对 kml 的引用和 zip 文件中的图像?
    猜你喜欢
    • 2021-10-28
    • 2012-03-09
    • 2012-01-20
    • 2015-03-29
    • 1970-01-01
    • 2013-04-12
    • 2012-06-21
    • 2011-11-05
    • 1970-01-01
    相关资源
    最近更新 更多