Exemple #1
0
        public static string ProcessImageMap(Vector2d?[][] view, string imageName)
        {
            var features = view.Select(q => q.Select(p => !p.HasValue ? null : UsgsRawFeatures.GetData(p.Value)).ToArray()).ToArray();
            var polys    = View.GetPolygons(features);
            var polymap  = polys
                           .Where(p => p.Value != null)
                           .Select(p => new
            {
                id     = p.Value.Id,
                alt    = p.Value.Name,
                coords = string.Join(",", p.Border.Select(q => q.X + "," + (view[0].Length - 1 - q.Y))),
            })
                           .Select(p => "<area href='" + p.alt + "' title='" + p.alt + "' alt='" + p.alt + "' shape='poly' coords='" + p.coords + "' >")
                           .ToArray();
            var mapId = Guid.NewGuid().ToString();

            var mapText = "<div>" +
                          "<map name='" + mapId + "'>" + string.Join("\r\n", polymap) + "</map>" +
                          "<img src='" + imageName + "' usemap='#" + mapId + "' >" +
                          "</div>";

            return(mapText);
        }
Exemple #2
0
        public static async Task Doit(Config config, TraceListener log, Action <Stream, FeatureInfo[][]> drawToScreen)
        {
            DateTime start = DateTime.Now;

            BlobHelper.SetConnectionString(ConfigurationManager.AppSettings["ConnectionString"]);

            int subpixel     = 3;
            var compositeBmp = new DirectBitmap(subpixel * config.Width, subpixel * config.Height);

            Device.RenderState renderState = new Device.RenderState(compositeBmp)
            {
                Camera = new Camera()
                {
                    MaxAngleRad  = config.MaxAngleDec * Math.PI / 180,
                    MinAngleRad  = config.MinAngleDec * Math.PI / 180,
                    HeightOffset = config.HeightOffset,
                },
            };

            var chunks = View.GetRelevantChunkKeys(config, log);
            StandardChunkMetadata mainChunk = StandardChunkMetadata.GetRangeFromKey(chunks.Last());
            var mainMesh = await Meshes.Current.GetData(mainChunk, log);

            var norm = mainMesh.GetCenterAndScale(
                config.Lat.DecimalDegree,
                config.Lon.DecimalDegree,
                mainChunk.ZoomLevel,
                mainChunk.LatDelta.DecimalDegree,
                10,
                log);


            int counter = 0;

            foreach (var chunkKey in chunks)
            {
                StandardChunkMetadata chunk = StandardChunkMetadata.GetRangeFromKey(chunkKey);
                if (chunk == null)
                {
                    continue;
                }

                var mesh = await Meshes.Current.GetData(chunk, log);

                if (mesh == null)
                {
                    continue;
                }

                mesh.Match(norm);
                try
                {
                    mesh.ImageData = await JpegImages.Current.GetData(chunk, log);
                }
                catch
                {
                }

                if (mesh.ImageData == null)
                {
                    DirectBitmap tmp = new DirectBitmap(10, 10);
                    tmp.SetAllPixels(new MyColor(0, 0, 0, 255));
                    using (var mss = new MemoryStream())
                    {
                        tmp.WriteFile(OutputType.PNG, mss);
                        mss.Position   = 0;
                        mesh.ImageData = new byte[mss.Length];
                        mss.Read(mesh.ImageData, 0, mesh.ImageData.Length);
                    }
                }

                using (var renderMesh = SoftEngine.Mesh.GetMesh(mesh))
                {
                    Device.RenderInto(renderState, renderMesh);
                    renderState.UpdateLatLons(chunk.LatLo, chunk.LatDelta, chunk.LonLo, chunk.LonDelta);
                }

                counter++;
                log?.WriteLine(counter);
            }

            FeatureInfo[][] features = renderState.GetLatLons().Select(q => q.Select(p => !p.HasValue ? null : UsgsRawFeatures.GetData(p.Value)).ToArray()).ToArray();

            string fileNameRoot = DateTime.Now.ToString("HHmmss");
            //config.LocalTime = new DateTimeOffset(2019, 3, 5, 0, 0, 0, TimeSpan.FromHours(-8));
            //while (config.LocalTime < new DateTimeOffset(2019, 3, 6, 0, 0, 0, TimeSpan.FromHours(-8)))
            {
                var skyColor = new Nishita(config.SunPos);
                using (DirectBitmap lighted = renderState.RenderLight(config.Light, config.DirectLight, config.AmbientLight, skyColor))
                {
                    drawToScreen?.Invoke(lighted.GetStream(OutputType.PNG), features);
                    using (var fs = File.OpenWrite("final_" + config.LocalTime.ToString("HHmmss") + "_" + fileNameRoot + ".jpg"))
                    {
                        lighted.WriteFile(OutputType.JPEG, fs);
                    }
                }

                //config.LocalTime = config.LocalTime.AddHours(1);
            }

            DateTime end = DateTime.Now;

            log?.WriteLine(start);
            log?.WriteLine(end);
            log?.WriteLine(end - start);
        }