0

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

据我所知,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>

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

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

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

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

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

任何帮助将不胜感激。

4

2 回答 2

2

下面是一些将 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';
}
?>

我从这篇文章中得到了这个:用 php 解压缩文件 从那里你几乎可以像处理任何其他 XML 一样处理 KML。

希望有帮助!

于 2014-11-28T05:52:05.547 回答
1

使用 PHP 解压缩 zip 文件:使用 php 解压缩文件

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

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

于 2014-01-07T12:48:23.780 回答