示例#1
0
        private static Image GetTileImage(InteractiveOverlay overlay, MapArguments mapArguments, string tileName = defaultLayerTileName, int zIndex = 1)
        {
            LayerTile layerTile = overlay.OverlayCanvas.Children.OfType <LayerTile>().FirstOrDefault(tmpTile
                                                                                                     => tmpTile.GetValue(Canvas.NameProperty).Equals(tileName));

            if (layerTile == null)
            {
                layerTile         = new LayerTile();
                layerTile.IsAsync = false;
                layerTile.SetValue(Canvas.NameProperty, tileName);
                layerTile.SetValue(Canvas.ZIndexProperty, zIndex);
                overlay.OverlayCanvas.Children.Add(layerTile);
            }

            Image image = layerTile.Content as Image;

            if (image == null)
            {
                image             = new Image();
                layerTile.Content = image;
            }

            image.Width  = mapArguments.ActualWidth;
            image.Height = mapArguments.ActualHeight;
            return(image);
        }
        protected override void DrawCore(RectangleShape targetExtent, OverlayRefreshType overlayRefreshType)
        {
            if (overlayRefreshType == OverlayRefreshType.Pan)
            {
                if (PreviousExtent != null)
                {
                    double resolution    = MapArguments.CurrentResolution;
                    double worldOffsetX  = targetExtent.UpperLeftPoint.X - PreviousExtent.UpperLeftPoint.X;
                    double worldOffsetY  = targetExtent.UpperLeftPoint.Y - PreviousExtent.UpperLeftPoint.Y;
                    double screenOffsetX = worldOffsetX / resolution;
                    double screenOffsetY = worldOffsetY / resolution;

                    translateTransform.X -= screenOffsetX;
                    translateTransform.Y += screenOffsetY;
                }
            }
            else
            {
                translateTransform.X = 0;
                translateTransform.Y = 0;

                snappingPointsLayer.InternalFeatures.Clear();

                if (OverlayCanvas.Children.Count == 0)
                {
                    OverlayCanvas.Children.Add(tile);
                }

                tile.TargetExtent   = targetExtent;
                tile.Width          = MapArguments.ActualWidth;
                tile.Height         = MapArguments.ActualHeight;
                tile.ZoomLevelIndex = MapArguments.GetSnappedZoomLevelIndex(targetExtent);
                RedrawTile(tile);
            }
        }
示例#3
0
        private static ImageSource GetEditTraceLineImageSourceWithGdiPlusGeoCanvas(MapArguments mapArguments, InMemoryFeatureLayer inProcessLayer, Collection <SimpleCandidate> simpleCandidates, OutlineDrawMode outlineDrawMode)
        {
            MemoryStream            streamSource = null;
            OutlineGdiPlusGeoCanvas geoCanvas    = new OutlineGdiPlusGeoCanvas();

            geoCanvas.OutlineDrawMode = outlineDrawMode;
            using (var nativeImage = new System.Drawing.Bitmap((int)mapArguments.ActualWidth, (int)mapArguments.ActualHeight))
            {
                geoCanvas.BeginDrawing(nativeImage, mapArguments.CurrentExtent, mapArguments.MapUnit);
                lock (inProcessLayer)
                {
                    if (!inProcessLayer.IsOpen)
                    {
                        inProcessLayer.Open();
                    }
                    inProcessLayer.Draw(geoCanvas, simpleCandidates);
                }
                geoCanvas.EndDrawing();

                streamSource = new MemoryStream();
                nativeImage.Save(streamSource, System.Drawing.Imaging.ImageFormat.Png);
                streamSource.Seek(0, SeekOrigin.Begin);
            }

            BitmapImage bitmapImage = new BitmapImage();

            bitmapImage.BeginInit();
            bitmapImage.StreamSource = streamSource;
            bitmapImage.EndInit();
            bitmapImage.Freeze();

            return(bitmapImage);
        }
示例#4
0
 private static void UpdateImageSource(MapArguments mapArguments, Collection <SimpleCandidate> simpleCandidates, RenderMode renderMode, InMemoryFeatureLayer inProcessLayer, Image defaultImage, OutlineDrawMode outlineDrawMode = OutlineDrawMode.LineWithFill)
 {
     if (renderMode == RenderMode.DrawingVisual)
     {
         defaultImage.Source = GetEditTraceLineImageSourceWithDrawingVisualGeoCanvas(mapArguments, inProcessLayer, simpleCandidates, outlineDrawMode);
     }
     else
     {
         defaultImage.Source = GetEditTraceLineImageSourceWithGdiPlusGeoCanvas(mapArguments, inProcessLayer, simpleCandidates, outlineDrawMode);
     }
 }
示例#5
0
        public static void Main(params string[] args)
        {
            Console.WriteLine();
            Arguments inputArgs = new Arguments(args);

            if (!String.IsNullOrEmpty(inputArgs["map"]))
            {
                MapLoader loader = new MapLoader(inputArgs["map"]);

                if (loader.MapIsValid)
                {
                    MapArguments mapArgs = new MapArguments(inputArgs, loader);

                    if (mapArgs.ArgumentsAreValid)
                    {
                        DateTime start = DateTime.Now;
                        Packer = new Packer(loader, mapArgs);
                        Packer.Pack(Console.Out, Console.Error);
                        Console.WriteLine(TIME, DateTime.Now.Subtract(start).TotalSeconds, DateTime.Now);

                        if (!String.IsNullOrEmpty(inputArgs["watch"]) && Convert.ToBoolean(inputArgs["watch"]))
                        {
                            Console.WriteLine(WATCHING);
                            LastChange = DateTime.Now;

                            FileSystemWatcher watcher = new FileSystemWatcher(mapArgs.SourcePath);
                            watcher.IncludeSubdirectories = true;
                            watcher.Changed += new FileSystemEventHandler(watcher_Changed);
                            watcher.EnableRaisingEvents = true;

                            while (true)
                            {
                                Console.ReadKey();
                            }
                        }
                    }
                    else
                    {
                        Console.Error.WriteLine(mapArgs.ArgumentsInvalidReason);
                    }
                }
                else
                {
                    Console.Error.WriteLine(loader.MapIsInvalidReason);
                }
            }
            else
            {
                Console.Error.WriteLine(USAGE);
            }
        }
        private bool CheckZoomLevelChanged(RectangleShape targetExtent)
        {
            bool zoomLevelChanged = false;

            if (MapArguments != null && PreviousExtent != null)
            {
                int targetZoomLevelIndex  = MapArguments.GetSnappedZoomLevelIndex(targetExtent);
                int currentZoomLevelIndex = MapArguments.GetSnappedZoomLevelIndex(PreviousExtent);
                if (currentZoomLevelIndex != targetZoomLevelIndex)
                {
                    zoomLevelChanged = true;
                }
            }

            return(zoomLevelChanged);
        }
示例#7
0
        public static bool UpdateInProcessInteractiveOverlayImageSource(InteractiveOverlay overlay
                                                                        , MapArguments mapArguments
                                                                        , IEnumerable <InMemoryFeatureLayer> inProcessLayers
                                                                        , Collection <SimpleCandidate> simpleCandidates
                                                                        , RenderMode renderMode, PolygonTrackMode polygonTrackMode = PolygonTrackMode.Default, bool refreshAll = false, bool isTrackingPolygon = false)
        {
            bool isUpdated          = false;
            var  inProcessLayer     = inProcessLayers.FirstOrDefault();
            var  inProcessLineLayer = inProcessLayers.Count() == 2 ? inProcessLayers.Last() : null;

            simpleCandidates.Clear();
            if (inProcessLineLayer != null && inProcessLineLayer.InternalFeatures.Count > 0)
            {
                Image defaultImage = GetTileImage(overlay, mapArguments, tracksInProcessLineName, 2);
                inProcessLineLayer.InternalFeatures.First().ColumnValues[inTrackingFeatureKey] = "True";
                UpdateImageSource(mapArguments, simpleCandidates, renderMode, inProcessLineLayer, defaultImage, OutlineDrawMode.Dynamic);
                inProcessLineLayer.InternalFeatures.First().ColumnValues[inTrackingFeatureKey] = string.Empty;
                isUpdated = true;

                if (refreshAll)
                {
                    defaultImage = GetTileImage(overlay, mapArguments);
                    var outlineDrawing = isTrackingPolygon ? OutlineDrawMode.Open : OutlineDrawMode.Sealed;
                    UpdateImageSource(mapArguments, simpleCandidates, renderMode, inProcessLayer, defaultImage, outlineDrawing);
                }
            }
            else if (inProcessLayer != null && inProcessLayer.InternalFeatures.Count > 0)
            {
                Image defaultImage    = GetTileImage(overlay, mapArguments);
                var   outlineDrawMode = polygonTrackMode == PolygonTrackMode.LineOnly ? OutlineDrawMode.Open : OutlineDrawMode.LineWithFill;
                if (outlineDrawMode == OutlineDrawMode.Open && !isTrackingPolygon)
                {
                    outlineDrawMode = OutlineDrawMode.Sealed;
                }
                UpdateImageSource(mapArguments, simpleCandidates, renderMode, inProcessLayer, defaultImage, outlineDrawMode);
                isUpdated = true;
            }
            else
            {
                Image defaultImage = GetTileImage(overlay, mapArguments);
                defaultImage.Source = blankImageSource;
            }

            return(isUpdated);
        }
 private void RefreshHighlightTile(RectangleShape targetExtent)
 {
     highlightTile.TargetExtent = targetExtent;
     highlightTile.DrawingLayers.Clear();
     highlightTile.DrawingLayers.Add(highlightFeatureLayer);
     highlightTile.DrawingLayers.Add(standOutHighlightFeatureLayer);
     if (MapArguments != null)
     {
         highlightTile.Width          = MapArguments.ActualWidth;
         highlightTile.Height         = MapArguments.ActualHeight;
         highlightTile.ZoomLevelIndex = MapArguments.GetSnappedZoomLevelIndex(targetExtent);
         using (System.Drawing.Bitmap nativeImage = new System.Drawing.Bitmap((int)highlightTile.Width, (int)highlightTile.Height))
         {
             PlatformGeoCanvas geoCanvas = new PlatformGeoCanvas();
             geoCanvas.BeginDrawing(nativeImage, targetExtent, MapArguments.MapUnit);
             highlightTile.Draw(geoCanvas);
             geoCanvas.EndDrawing();
             highlightTile.CommitDrawing(geoCanvas, GetImageSourceFromNativeImage(nativeImage));
         }
     }
 }
示例#9
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="loader">The loader containing the map file to pack.</param>
 /// <param name="arguments">The arguments defining the packing behavior.</param>
 public Packer(MapLoader loader, MapArguments arguments)
 {
     Loader = loader;
     Arguments = arguments;
 }
        public static SnappingAdapter Convert(double snappingDistance, SnappingDistanceUnit snappingDistanceUnit, MapArguments mapArguments, PointShape worldCoordinate)
        {
            DistanceUnit tempDistanceUnit = defaultDistanceUnit;

            if (snappingDistanceUnit != SnappingDistanceUnit.Pixel)
            {
                tempDistanceUnit = (DistanceUnit)snappingDistanceUnit;
            }

            double tempDistance = snappingDistance;

            if (snappingDistanceUnit == SnappingDistanceUnit.Pixel)
            {
                double     worldDistance         = snappingDistance * mapArguments.CurrentResolution;
                PointShape targetWorldCoordinate = new PointShape(worldCoordinate.X + worldDistance, worldCoordinate.Y);
                tempDistance = worldCoordinate.GetDistanceTo(targetWorldCoordinate, mapArguments.MapUnit, defaultDistanceUnit);
            }

            return(new SnappingAdapter(tempDistance, tempDistanceUnit));
        }
 public static SnappingAdapter Convert(double snappingDistance, SnappingDistanceUnit snappingDistanceUnit, MapArguments mapArguments, Vertex worldCoordinate)
 {
     return(Convert(snappingDistance, snappingDistanceUnit, mapArguments, new PointShape(worldCoordinate)));
 }
        protected override void DrawCore(RectangleShape targetExtent, OverlayRefreshType overlayRefreshType)
        {
            LayerTile tile = GetTile(targetExtent, MapArguments.ActualWidth, MapArguments.ActualHeight, 0, 0, MapArguments.GetSnappedZoomLevelIndex(targetExtent));

            if (overlayRefreshType == OverlayRefreshType.Pan)
            {
                isPanningMap = true;
                PanOverlay(targetExtent);
            }
            else
            {
                isPanningMap = false;
                RefreshHighlightLayerTileAndPopup(targetExtent, tile);
            }
        }
示例#13
0
        private static ImageSource GetEditTraceLineImageSourceWithDrawingVisualGeoCanvas(MapArguments mapArguments, InMemoryFeatureLayer inProcessLayer, Collection <SimpleCandidate> simpleCandidates, OutlineDrawMode outlineDrawMode)
        {
            OutlineDrawingVisualGeoCanvas geoCanvas = new OutlineDrawingVisualGeoCanvas();

            geoCanvas.OutlineDrawMode = outlineDrawMode;
            RenderTargetBitmap nativeImage = new RenderTargetBitmap((int)mapArguments.ActualWidth, (int)mapArguments.ActualHeight, geoCanvas.Dpi, geoCanvas.Dpi, PixelFormats.Pbgra32);

            geoCanvas.BeginDrawing(nativeImage, mapArguments.CurrentExtent, mapArguments.MapUnit);
            lock (inProcessLayer)
            {
                if (!inProcessLayer.IsOpen)
                {
                    inProcessLayer.Open();
                }
                inProcessLayer.Draw(geoCanvas, simpleCandidates);
            }
            geoCanvas.EndDrawing();
            return(nativeImage);
        }