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); } }
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); }
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); } }
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); }
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)); } } }
/// <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); } }
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); }