[c#] kml compressen naar kmz wil niet lukken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • shades
  • Registratie: September 2001
  • Laatst online: 14-07 13:45
Hello.

Heb een leuk programmaatje gemaakt die de output van mij gps datalogger (in csv-format) omzet naar kml. Inmiddels wordt de kml die wordt uitgepoep groter dan een Mb of 15. Opzich niet veel maar ingepakt blijft er weinig van over. Aangezien kmz niets anders is dan een gezipt kml zou dit ook prima onderhanden genomen kunnen worden door mijn programmaatje (c# 2.0)

Ik het het al via de system.io.compress geprobeerd (examples zat te googlen) en via SharpZipLib (ook examples zat te googelen) maar vervolgens kan google earth er dan niets meer mee. Uitpakken van de kmz geeft geen fouten maar met het resultaat (die kml) kan earth ook weer niets en kan gewoon door earth gelezen worden.

Gewoon zippen met zip or rar (wel zipformat gebruiken dan) en de extensie aanpassen naar kmz lukt prima..

Iemand een idee met welke methode het wel goed gaat ?

[ Voor 4% gewijzigd door shades op 08-04-2010 15:19 ]

https://k1600gt.nl


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Kennelijk is dat gezipte bestand een zip-file met entries. Alleen een stream compressen levert een raw stream op en geen zip bestand met zip entries. Aangezien ik geen kristallen bol heb kan ik niet ruiken wat er met je code mis is.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 15-07 15:35

leuk_he

1. Controleer de kabel!

ZipPackage Class zal wel die headers voor je bouwen?

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Ik denk dat de kans groot is dat google's 'compressie algoritme' Protocol Buffers wordt gebruikt. Ik zou zeggen open eens een kmz in een hex editor. Is de content leesbaar dan gebruikt men PB.

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Niemand_Anders schreef op donderdag 08 april 2010 @ 15:10:
Ik denk dat de kans groot is dat google's 'compressie algoritme' Protocol Buffers wordt gebruikt. Ik zou zeggen open eens een kmz in een hex editor. Is de content leesbaar dan gebruikt men PB.
KMZ is gewoon gezipte KML hoor, en dat is gewoon XML. Protocol Buffers wordt vooral voor interne communicatie gebruikt.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • shades
  • Registratie: September 2001
  • Laatst online: 14-07 13:45
Niemand_Anders schreef op donderdag 08 april 2010 @ 15:10:
Ik denk dat de kans groot is dat google's 'compressie algoritme' Protocol Buffers wordt gebruikt. Ik zou zeggen open eens een kmz in een hex editor. Is de content leesbaar dan gebruikt men PB.
Ik heb ff de ts aangepast. Uitpakken levert een prima kml-bestandje op waar earth iets mee kan (werkt gewoon). Als ik de gegenereerde kml bestandje en het gezipte en uitgepakte bestandje door een compare programmaatje haal (notepad++) dan zijn ze identiek..

Onderstaande codes heb ik geprobeerd. Werken allebei, tenminste, uitpakken levert hetzelfde bestand op als voordat het was ingepakt..

- http://dotnet-snippets.co...ompress-files-SID586.aspx
- http://www.eggheadcafe.co...essing-and-decompres.aspx

Dacht het ff snel in te bouwen, zag niet echt een struikelblok hierin.

[ Voor 0% gewijzigd door shades op 08-04-2010 15:32 . Reden: typos ]

https://k1600gt.nl


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Als je vertikt je eigen code te posten laat dan maar.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • shades
  • Registratie: September 2001
  • Laatst online: 14-07 13:45
Hydra schreef op donderdag 08 april 2010 @ 15:32:
Als je vertikt je eigen code te posten laat dan maar.
jee zeg... is niet mijn eigen code - heb het ook maar ergens vandaan - onderwerp is compleet nieuw voor mij.. Toch fijn dat je wil helpen

Ik bied aan in filesToZip precies 1 kml bestand. Path param spreekt voor zich. Is de bestandsnaam met kmz extensie.. Ik maar gebruik van de SharpZipLib en het maakt niet uit welke compressierate is gebruik (0,5 en 9 geprobeerd)

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using ICSharpCode.SharpZipLib.Checksums;
using ICSharpCode.SharpZipLib.Zip;

namespace csv2kmllib
{
    class Kml2Kmz
    {
        /// <summary>
        /// Writes the zip file.
        /// </summary>
        /// <param name="filesToZip">The files to zip.</param>
        /// <param name="path">The destination path.</param>
        /// <param name="compression">The compression level.</param>
        internal static void WriteZipFile(List<string> filesToZip, string path, int compression)
        {
            if (compression < 0 || compression > 9)
                throw new ArgumentException("Invalid compression rate.");

            if (!Directory.Exists(new FileInfo(path).Directory.ToString()))
                throw new ArgumentException("The Path does not exist.");

            foreach (string c in filesToZip)
                if (!File.Exists(c))
                    throw new ArgumentException(string.Format("The File{0}does not exist!", c));


            Crc32 crc32 = new Crc32();
            ZipOutputStream stream = new ZipOutputStream(File.Create(path));
            stream.SetLevel(compression);

            for (int i = 0; i < filesToZip.Count; i++)
            {
                ZipEntry entry = new ZipEntry(Path.GetFileName(filesToZip[i]));
                entry.DateTime = DateTime.Now;

                using (FileStream fs = File.OpenRead(filesToZip[i]))
                {
                    byte[] buffer = new byte[fs.Length];
                    fs.Read(buffer, 0, buffer.Length);
                    entry.Size = fs.Length;
                    fs.Close();
                    crc32.Reset();
                    crc32.Update(buffer);
                    entry.Crc = crc32.Value;
                    stream.PutNextEntry(entry);
                    stream.Write(buffer, 0, buffer.Length);
                }
            }
            stream.Finish();
            stream.Close();
        }
    }
}

[ Voor 3% gewijzigd door shades op 08-04-2010 15:55 ]

https://k1600gt.nl


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
shades schreef op donderdag 08 april 2010 @ 15:44:
jee zeg... is niet mijn eigen code - heb het ook maar ergens vandaan - onderwerp is compleet nieuw voor mij..
Voor support op code van derden moet je bij die derden zijn doorgaans ;) We hebben het in de devschuur over zélf programmeren/maken. Als je niet bekend bent met een onderwerp, hoe moeten wij je dan helpen?

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • shades
  • Registratie: September 2001
  • Laatst online: 14-07 13:45
RobIII schreef op donderdag 08 april 2010 @ 16:04:
[...]

Voor support op code van derden moet je bij die derden zijn doorgaans ;) We hebben het in de devschuur over zélf programmeren/maken. Als je niet bekend bent met een onderwerp, hoe moeten wij je dan helpen?
Omdat een doorgewinterde devver dat wel is/zou kunnen zijn en best iemand op weg wil helpen ?

https://k1600gt.nl


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Dus anderen moeten de code van derden doorgronden omdat jij te lui bent dat zelf te doen? Een beetje zelf research doen en wat debuggen mag wel.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • shades
  • Registratie: September 2001
  • Laatst online: 14-07 13:45
Grijze Vos schreef op donderdag 08 april 2010 @ 22:52:
Dus anderen moeten de code van derden doorgronden omdat jij te lui bent dat zelf te doen? Een beetje zelf research doen en wat debuggen mag wel.
:? wat een ongelofelijke loze niets toevoegende opmerking...

Loop al een paar dagen voorbeeldjes en zip-componenten te proberen en alle code is goed - geen foutmeldingen that is - alleen wat er uitgespuugd is werkt niet icm GE terwijl het uitpakken wel weer het origineel is.. Lekker makkelijk he - anderen lui noemen.

[ Voor 4% gewijzigd door shades op 09-04-2010 07:51 ]

https://k1600gt.nl


Acties:
  • 0 Henk 'm!

  • giMoz
  • Registratie: Augustus 2002
  • Laatst online: 20-08 15:12

giMoz

iets met meester...

wikipedia zegt:
KML files are very often distributed in KMZ files, which are zipped files with a .kmz extension. These must be legacy (ZIP 2.0) compression compatible (e.g. deflate method), otherwise the .kmz file might not uncompress in all geobrowsers. The contents of a KMZ file are a single root KML document (notionally "doc.kml") and optionally any overlays, images, icons, and COLLADA 3D models referenced in the KML including network-linked KML files. The root KML document is typically a file named "doc.kml" at the root directory level but the first .kml file entry in the KMZ file is the actual one selected in Google Earth regardless of its name. By convention the root KML document is at root level and referenced files are in subdirectories (e.g. images for overlay images).
Doe je dat allemaal wel goed?

Of niet natuurlijk...


Acties:
  • 0 Henk 'm!

  • shades
  • Registratie: September 2001
  • Laatst online: 14-07 13:45
giMoz schreef op vrijdag 09 april 2010 @ 08:25:
wikipedia zegt:

[...]


Doe je dat allemaal wel goed?
Kans is vrij groot dat ik het niet goed doe of in de verkeerde hoek zit...Deze had ik nog niet gevonden nee. (goed googlen is ook een kunst) Documentatie van die objecten is ook niet super.

Dank.. Ga verder opzoek.


Edit I:

Vandaar dat het niet lukt (quote is uit de readme van DotNetZip die ik net heb gevonden - hoop dat het hiermee wel lukt..)
The System.IO.Compression namespace, starting with v2.0 for the desktop Framework and v3.5 for the Compact Framework, includes base class libraries supporting compression within streams - both the Deflate and Gzip formats are supported. But these classes are not directly useful for creating compressed ZIP archives. GZIP is not ZIP. Deflate is not ZIP. The GZipStream in System.IO.Compression is able to read and write GZIP streams, but that is not the same as reading or writing a zip file. Also, these classes deliver pretty poor compression in practice, especially with binary data.
Edit II:

Oplossing: http://dotnetzip.codeplex.com/Wikipage. Tot nog toe ook de meest simpele implementatie om te gebruiken. Volgens mij is met dotnetzip ook direct te streamen naar zip..
C#:
1
2
3
4
5
6
7
using Ionic.Zip;

using (ZipFile zip = new ZipFile())
{
    zip.AddFile(strKMLFile);
    zip.Save(strKMLFile.Replace(".kml", ".kmz"));
}


giMoz: Dank voor de duw in de juiste richting...

[ Voor 64% gewijzigd door shades op 09-04-2010 09:31 ]

https://k1600gt.nl


Acties:
  • 0 Henk 'm!

  • giMoz
  • Registratie: Augustus 2002
  • Laatst online: 20-08 15:12

giMoz

iets met meester...

shades schreef op vrijdag 09 april 2010 @ 08:54:
[...]
giMoz: Dank voor de duw in de juiste richting...
QFT ;-)

En graag gedaan natuurlijk

Of niet natuurlijk...


Acties:
  • 0 Henk 'm!

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 03:43
Die quote is wel waar, en verklaard waarom het met gzipstream ed niet werkt. CSharpZibLib produceert voor zover ik weer wél echte zip files, en zou dus ook moeten werken?

Roomba E5 te koop


Acties:
  • 0 Henk 'm!

  • shades
  • Registratie: September 2001
  • Laatst online: 14-07 13:45
sig69 schreef op vrijdag 09 april 2010 @ 15:02:
Die quote is wel waar, en verklaard waarom het met gzipstream ed niet werkt. CSharpZibLib produceert voor zover ik weer wél echte zip files, en zou dus ook moeten werken?
Geen idee waarom. Zipfile die csharpziplib producteer is wel een valide zipfile maar GE slikt em niet. Gelukkig doet DotNetZip dat wel en is gelijk een veel eenvoudiger om mee te werken en heeft ook meer in zn mars..

https://k1600gt.nl


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Mijn vermoeden is eigenlijk dat je bestand in het zipbestand iets anders dan doc.kml genaamd was, en dan werkt het natuurlijk niet.. :p

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1