kmz ضغط google earth مع جافا
-
22-07-2019 - |
سؤال
لا أحد يعرف ما ضغط لاستخدامها في جافا لإنشاء KMZ ملفات الصور المخزنة داخلها ؟ حاولت استخدام جافا القياسية ضغط (و وسائط مختلفة ، BEST_COMPRESSION, DEFAULT_COMPRESSION ، الخ) ، لكن ملف مضغوط و ملف kmz تأتي دائما مختلفة قليلا لا تحميل في جوجل الأرض.يبدو أن الصور png على وجه الخصوص (الفعلية ملف kml يبدو أن ضغط بنفس الطريقة).
وقد أي شخص بنجاح إنشاء kmz الأرشيف أن روابط الصور المحلية (و يحصل المخزنة في دليل ملفات) من خارج جوجل الأرض ؟
شكرا
جيف
المحلول
والمفتاح لفهم هذا هو الجواب منfraser، الذي يدعمه هذا المقتطف من KML دعم المطور:
<اقتباس فقرة>وأسلوب ضغط معتمد فقط هو ZIP (PKZIP متوافق)، لذلك لا غزيب ولا bzip ستعمل. مضغوط ملفات KMZ مع هذا معتمدة أسلوب بالكامل من قبل API.
KMZ في برنامج Google Earth API وKML ضغط في بيئة يونكس م>
اقتباس فقرة>وأباتشي العموم لديه أرشيف التعامل مع مكتبة التي من شأنها أن تكون في متناول اليد لذلك: HTTP: //commons.apache.org/proper/commons-vfs/filesystems.html
نصائح أخرى
وKMZ هو ببساطة ملف مضغوط مع ملف KML والأصول. على سبيل المثال، يحتوي الملف london_eye.kmz
KMZ:
$ unzip -l london_eye.kmz
Archive: london_eye.kmz
Length Date Time Name
-------- ---- ---- ----
451823 09-27-07 08:47 doc.kml
0 09-26-07 07:39 files/
1796 12-31-79 00:00 files/Blue_Tile.JPG
186227 12-31-79 00:00 files/Legs.dae
3960 12-31-79 00:00 files/Olive.JPG
1662074 12-31-79 00:00 files/Wheel.dae
65993 12-31-79 00:00 files/Wooden_Fence.jpg
7598 12-31-79 00:00 files/a0.gif
7596 12-31-79 00:00 files/a1.gif
7556 12-31-79 00:00 files/a10.gif
7569 12-31-79 00:00 files/a11.gif
7615 12-31-79 00:00 files/a12.gif
7587 12-31-79 00:00 files/a13.gif
7565 12-31-79 00:00 files/a14.gif
7603 12-31-79 00:00 files/a15.gif
7599 12-31-79 00:00 files/a16.gif
7581 12-31-79 00:00 files/a17.gif
7606 12-31-79 00:00 files/a18.gif
7613 12-31-79 00:00 files/a19.gif
7607 12-31-79 00:00 files/a2.gif
7592 12-31-79 00:00 files/a3.gif
7615 12-31-79 00:00 files/a4.gif
7618 12-31-79 00:00 files/a5.gif
7618 12-31-79 00:00 files/a6.gif
7578 12-31-79 00:00 files/a7.gif
7609 12-31-79 00:00 files/a8.gif
7603 12-31-79 00:00 files/a9.gif
57185 12-31-79 00:00 files/capsule.dae
310590 12-31-79 00:00 files/groundoverlay.jpg
224927 12-31-79 00:00 files/mechanism.dae
160728 12-31-79 00:00 files/shadowoverlay.jpg
33044 12-31-79 00:00 files/shed.dae
-------- -------
3310275 32 files
ويمكنك بناء هذه مع java.util.zip، أو حتى مع jar
إذا كنت تريد.
وبقدر ما يذهب الصور، لا ينبغي أن تكون مضغوطة، لأنها تحتوي فعلا على البيانات المضغوطة. كنت لا تحصل على أي وفورات كبيرة.
افتراضيا ZipOutputStream الدرجة في جافا خلق متوافق ملف KMZ أن جوجل الأرض يمكن قراءة.
في ZipEntry يمكنك تحديد إما تخزين أو بددت وسيلة ضغط ، وكلاهما متوافق مع جوجل الأرض.
- ملاحظة أيهما الرمز البريدي المكتبة أو API التي تستخدمها ، يجب أن تأكد من تحديد الرمز البريدي 2.0 أو "تراث" أساليب ضغط (أي تخزين وفرغ طرق) ما لم تكن هذه هي الطرق الافتراضية.وفرغ ما يسمى طريقة فائق وتخزينها يسمى لا شيء أو 'لا ضغط في برنامج لضغط الملفات والوثائق.
- الأقصى أو تعزيز فرغ الأسلوب غالبا ما يتم عرضه مع الاسم المختصر "Defl:X"كما يدعم برنامج Google Earth.
- أساليب الضغط أكثر تقدما (على سبيل المثال, bzip2, LZMA, الخ.) هي لا متوافق مع Google Earth و هذه ملفات KMZ سوف يكون بصمت تجاهلها إذا فتحت.
هنا هو رمز بسيط مقتطف لإنشاء ملف KMZ في جاوة.
FileOutputStream fos = new FileOutputStream("example.kmz");
ZipOutputStream zoS = new ZipOutputStream(fos);
ZipEntry ze = new ZipEntry("doc.kml");
zoS.putNextEntry(ze);
PrintStream ps = new PrintStream(zoS);
ps.println("<?xml version='1.0' encoding='UTF-8'?>");
ps.println("<kml xmlns='http://www.opengis.net/kml/2.2'>");
// write out contents of KML file ...
ps.println("<Document>");
ps.println("<Placemark>");
// ...
ps.println("</Placemark>");
ps.println("</Document>");
ps.println("</kml>");
ps.flush();
zoS.closeEntry(); // close KML entry
// include and write other files (E.g. icons, overlays, other KML files, etc.)
zoS.close();
وبالتأكيد، لدي ملفات حزمة KMZ مع الصور في C #. AFAIK طريقة الضغط الوحيد الذي معتمدة ZIP (PKZIP متوافق). ما مكتبة جافا الذي تستخدمه؟
وهناك مكتبة للتعامل مع KML في جاوة ودعا JAK (جافا API لKML).
ولسوء الحظ، فإنه يبدو ان لديه علة: العدد 1: حفظ لا تعمل ملف KMZ - لذلك يبدو أنك لا أول واحد لديه مشاكل مع توليد ملف KMZ ...
وكما قال simsong، KMZ هو ببساطة مضغوط KML. شيء واحد لم ألاحظ أن doc.kml يجب أن يكون الإدخال الأول في ملف مضغوط من أجل أن تعمل بشكل موثوق. لا أذكر تفعل أي شيء خاص مع الصور (بصرف النظر عن وضع كل شيء ولكن doc.kml في دليل فرعي). يتم إنشاء ملفات KMZ الخاص بي باستخدام java.util.zip.