Ejemplo n.º 1
0
        private static KmzFile SaveKmlAndLinkedContentIntoAKmzArchive(KmlFile kml, string path)
        {
            // All the links in the KML will be relative to the KML file, so
            // find it's directory so we can add them later
            string basePath = Path.GetDirectoryName(path);

            // Create the archive with the KML data
            KmzFile kmz = KmzFile.Create(kml);

            // Now find all the linked content in the KML so we can add the
            // files to the KMZ archive
            var links = new LinkResolver(kml);

            // Next gather the local references and add them.
            foreach (string relativePath in links.GetRelativePaths())
            {
                // Make sure it doesn't point to a directory below the base path
                if (relativePath.StartsWith("..", StringComparison.Ordinal))
                {
                    continue;
                }

                // Add it to the archive
                string fullPath = Path.Combine(basePath, relativePath);
                using (Stream file = File.OpenRead(fullPath))
                {
                    kmz.AddFile(relativePath, file);
                }
            }

            return(kmz);
        }
Ejemplo n.º 2
0
        public void GetRelativePathsShouldReturnTheNormalizedPath()
        {
            string[] expected =
            {
                "itemicon.png",
                "../more.kml",
                "go.jpeg",
                "so.jpeg",
                "po.jpeg",
                "model.dae",
                "style.kml"
            };

            using (var stream = SampleData.CreateStream("Engine.Data.Links.kml"))
                using (var reader = new StreamReader(stream))
                {
                    var resolver = new LinkResolver(KmlFile.Load(reader));

                    IEnumerable <string> relatives = resolver.GetRelativePaths();

                    Assert.That(relatives, Is.EquivalentTo(expected));
                }
        }