سؤال

لا أحد يعرف ما ضغط لاستخدامها في جافا لإنشاء 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top