2014-01-07 51 views
0

我一直在環顧四周,我能找到的所有答案都與使用谷歌地圖有關。我想要做的是獲取存儲在裏面的信息,將其「導入」到我的數據庫。如何使用PHP/JavaScript解析/處理服務器上的KMZ文件?

據我所知,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文件的座標。

任何幫助將不勝感激。

回答

1

解壓到PHP的zip文件:Unzip a file with php

對於確保用戶不會在彼此的頂部上傳,可以考慮使用時間戳,使用tempnam()功能(http://us1.php.net/tempnam),具有一個單獨的文件夾每個用戶或使用自動增加的數據庫列來跟蹤上傳。任何方法都可以正常工作,爲每個上傳指定一個唯一的文件名,以便它們不會重複。

希望這會指出你在正確的方向。

+0

感謝您的回覆,是否有可能在客戶端做到這一點?就像在瀏覽器內存中解壓縮它並獲取對kml和zip文件中圖像的引用? – Pochi

0

以下是將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的35年5月4日這個問題。 我用下面的代碼解決了這個:

<?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 從那裏,你幾乎可以處理KML酷似任何其他XML。

希望有幫助!

相關問題