private void HandleFeatureSelectedChanged(object item)
        {
            FeatureInfo featureInfo = item as FeatureInfo;

            if (!map.Overlays.Contains(chartsOverlayName))
            {
                return;
            }
            if (map.Overlays.Contains(highlightOverlayName))
            {
                map.Overlays.Remove(highlightOverlayName);
            }

            if (featureInfo != null)
            {
                LayerOverlay overlay             = map.Overlays[chartsOverlayName] as LayerOverlay;
                NauticalChartsFeatureLayer layer = overlay.Layers[featureInfo.LayerName] as NauticalChartsFeatureLayer;
                layer.Open();
                Feature feature = layer.QueryTools.GetFeatureById(featureInfo.Id, ReturningColumnsType.AllColumns);
                layer.Close();

                if (feature != null)
                {
                    LayerOverlay highlightOverlay = CreateHighlightLayerOverlay(feature);
                    map.Overlays.Add(highlightOverlayName, highlightOverlay);
                    map.CurrentExtent = feature.GetBoundingBox();
                }
            }

            map.Refresh();
        }
Пример #2
0
        private void Form_Load(object sender, EventArgs e)
        {
            // It is important to set the map unit first to either feet, meters or decimal degrees.
            mapView.MapUnit = GeographyUnit.DecimalDegree;

            // Create a new overlay that will hold our new layer and add it to the map.
            LayerOverlay chartOverlay = new LayerOverlay();

            // Currently this layer only works in single tile mode at the moment.
            // If you use multi tile not all of the data may load in.
            chartOverlay.TileType = TileType.SingleTile;

            // Add the chart to the overlay for display
            mapView.Overlays.Add(chartOverlay);

            // Create the new layer.
            NauticalChartsFeatureLayer nauticalLayer = new NauticalChartsFeatureLayer(@"../../../Data/S57/US1GC09M/US1GC09M.000");

            // Add the layer to the overlay we created earlier.
            chartOverlay.Layers.Add("Charts", nauticalLayer);

            // Set the current extent to a portion of the data
            mapView.CurrentExtent = new RectangleShape(-83.79534200990409, 25.87521424320395, -80.82463888490409, 23.90646424320395);

            // Refresh the map.
            mapView.Refresh();
        }
Пример #3
0
        public HttpResponseMessage GetTile(int z, int x, int y)
        {
            if (nauticalChartsFeatureLayer == null)
            {
                nauticalChartsFeatureLayer = new NauticalChartsFeatureLayer(nauticalChartsFilePath);
            }
            lock (nauticalChartsFeatureLayer)
            {
                nauticalChartsFeatureLayer.IsDepthContourTextVisible = true;
                nauticalChartsFeatureLayer.IsLightDescriptionVisible = true;
                nauticalChartsFeatureLayer.StylingType               = NauticalChartsStylingType.EmbeddedStyling;
                nauticalChartsFeatureLayer.SymbolTextDisplayMode     = NauticalChartsSymbolTextDisplayMode.None;
                nauticalChartsFeatureLayer.DisplayCategory           = NauticalChartsDisplayCategory.All;
                nauticalChartsFeatureLayer.DefaultColorSchema        = NauticalChartsDefaultColorSchema.DayBright;
                nauticalChartsFeatureLayer.SymbolDisplayMode         = NauticalChartsSymbolDisplayMode.Simplified;
                nauticalChartsFeatureLayer.BoundaryDisplayMode       = NauticalChartsBoundaryDisplayMode.Plain;
                nauticalChartsFeatureLayer.SafetyDepthInMeter        = NauticalChartsFeatureLayer.ConvertDistanceToMeters(28, NauticalChartsDepthUnit.Meter);
                nauticalChartsFeatureLayer.ShallowDepthInMeter       = NauticalChartsFeatureLayer.ConvertDistanceToMeters(3, NauticalChartsDepthUnit.Meter);
                nauticalChartsFeatureLayer.DeepDepthInMeter          = NauticalChartsFeatureLayer.ConvertDistanceToMeters(10, NauticalChartsDepthUnit.Meter);
                nauticalChartsFeatureLayer.SafetyContourDepthInMeter = NauticalChartsFeatureLayer.ConvertDistanceToMeters(10, NauticalChartsDepthUnit.Meter);
                nauticalChartsFeatureLayer.DrawingMode               = NauticalChartsDrawingMode.Optimized;
                nauticalChartsFeatureLayer.IsFullLightLineVisible    = true;
                nauticalChartsFeatureLayer.IsMetaObjectsVisible      = false;
            }

            LayerOverlay layerOverlay = new LayerOverlay();

            layerOverlay.Layers.Add(nauticalChartsFeatureLayer);

            return(DrawLayerOverlay(layerOverlay, z, x, y));
        }
Пример #4
0
        public override void Handle(Window owner, WpfMap map, MenuItemMessage message)
        {
            switch (message.MenuItem.Action)
            {
            case "contourlabel":
                Globals.IsDepthContourTextVisible = message.MenuItem.IsChecked;
                break;

            case "soundinglabel":
                Globals.IsSoundingTextVisible = message.MenuItem.IsChecked;
                break;

            case "lightdescription":
                Globals.IsLightDescriptionVisible = message.MenuItem.IsChecked;
                break;

            case "textlabel":
                if (message.MenuItem.IsChecked)
                {
                    Globals.SymbolTextDisplayMode = NauticalChartsSymbolTextDisplayMode.English;
                }
                break;

            case "nationallanguagelabel":

                if (message.MenuItem.IsChecked)
                {
                    Globals.SymbolTextDisplayMode = NauticalChartsSymbolTextDisplayMode.NationalLanguage;
                }
                break;

            case "notextlabel":

                if (message.MenuItem.IsChecked)
                {
                    Globals.SymbolTextDisplayMode = NauticalChartsSymbolTextDisplayMode.None;
                }
                break;
            }
            if (map.Overlays.Contains(chartsOverlayName))
            {
                LayerOverlay chartsOverlay = map.Overlays[chartsOverlayName] as LayerOverlay;

                foreach (var item in chartsOverlay.Layers)
                {
                    NauticalChartsFeatureLayer nauticalChartsFeatureLayer = item as NauticalChartsFeatureLayer;
                    nauticalChartsFeatureLayer.IsDepthContourTextVisible = Globals.IsDepthContourTextVisible;
                    nauticalChartsFeatureLayer.IsLightDescriptionVisible = Globals.IsLightDescriptionVisible;
                    nauticalChartsFeatureLayer.IsSoundingTextVisible     = Globals.IsSoundingTextVisible;
                    nauticalChartsFeatureLayer.SymbolTextDisplayMode     = Globals.SymbolTextDisplayMode;
                }

                map.Refresh();
            }
        }
Пример #5
0
 public override void Handle(Window owner, MapView map, MenuItemMessage message)
 {
     Globals.IsMetaObjectsVisible = message.MenuItem.IsChecked;
     if (map.Overlays.Contains(chartsOverlayName))
     {
         LayerOverlay chartsOverlay = map.Overlays[chartsOverlayName] as LayerOverlay;
         foreach (var item in chartsOverlay.Layers)
         {
             NauticalChartsFeatureLayer maritimeFeatureLayer = item as NauticalChartsFeatureLayer;
             maritimeFeatureLayer.IsMetaObjectsVisible = Globals.IsMetaObjectsVisible;
         }
         map.Refresh();
     }
 }
Пример #6
0
 public override void Handle(Window owner, WpfMap map, MenuItemMessage message)
 {
     Globals.CurrentDrawingMode = (NauticalChartsDrawingMode)Enum.Parse(typeof(NauticalChartsDrawingMode), message.MenuItem.Action, true);
     if (map.Overlays.Contains(chartsOverlayName))
     {
         LayerOverlay chartsOverlay = map.Overlays[chartsOverlayName] as LayerOverlay;
         foreach (var item in chartsOverlay.Layers)
         {
             NauticalChartsFeatureLayer maritimeFeatureLayer = item as NauticalChartsFeatureLayer;
             maritimeFeatureLayer.DrawingMode = Globals.CurrentDrawingMode;
         }
         map.Refresh();
     }
 }
        private void HandleSafeWaterDepthMessage(SafeWaterDepthSettingMessage message)
        {
            if (!map.Overlays.Contains(chartsOverlayName))
            {
                return;
            }

            LayerOverlay overlay = map.Overlays[chartsOverlayName] as LayerOverlay;
            var          layers  = overlay.Layers.OfType <NauticalChartsFeatureLayer>();

            foreach (NauticalChartsFeatureLayer layer in layers)
            {
                layer.SafetyDepthInMeter        = NauticalChartsFeatureLayer.ConvertDistanceToMeters(message.SafetyWaterDepth, message.DepthUnit);
                layer.ShallowDepthInMeter       = NauticalChartsFeatureLayer.ConvertDistanceToMeters(message.ShallowWaterDepth, message.DepthUnit);
                layer.DeepDepthInMeter          = NauticalChartsFeatureLayer.ConvertDistanceToMeters(message.DeepWaterDepth, message.DepthUnit);
                layer.SafetyContourDepthInMeter = NauticalChartsFeatureLayer.ConvertDistanceToMeters(message.SafetyContourDepth, message.DepthUnit);
            }
            Globals.SafetyDepth      = message.SafetyWaterDepth;
            Globals.DeepDepth        = message.DeepWaterDepth;
            Globals.ShallowDepth     = message.ShallowWaterDepth;
            Globals.SafetyContour    = message.SafetyContourDepth;
            Globals.CurrentDepthUnit = message.DepthUnit;
            map.Refresh();
        }
        //private void SetupAnimationForOverlay(LayerOverlay overlay)
        //{
        //    overlay.Drawing -= overlay_Drawing;
        //    overlay.Drawing += overlay_Drawing;
        //    overlay.Drawn -= overlay_Drawn;
        //    overlay.Drawn += overlay_Drawn;
        //}

        private void WpfMap_MapClick(object sender, MapClickWpfMapEventArgs e)
        {
            if (isIdentify)
            {
                ThinkGeo.MapSuite.Shapes.PointShape point = e.WorldLocation;
                if (!map.Overlays.Contains(chartsOverlayName))
                {
                    return;
                }
                LayerOverlay overlay = map.Overlays[chartsOverlayName] as LayerOverlay;

                var features = new Collection <Feature>();
                NauticalChartsFeatureLayer hydrographyFeatureLayer = null;
                foreach (var item in overlay.Layers)
                {
                    NauticalChartsFeatureLayer itemLayer = item as NauticalChartsFeatureLayer;
                    itemLayer.Open();
                    features = itemLayer.QueryTools.GetFeaturesIntersecting(point.GetBoundingBox(), ReturningColumnsType.AllColumns);

                    if (features.Count > 0)
                    {
                        hydrographyFeatureLayer = itemLayer;
                        break;
                    }
                }

                if (features.Count > 0)
                {
                    List <FeatureInfo> selectedFeatures = new List <FeatureInfo>();

                    foreach (var item in features)
                    {
                        double       area      = double.MaxValue;
                        PolygonShape areaShape = item.GetShape() as PolygonShape;
                        if (areaShape != null)
                        {
                            area = areaShape.GetArea(map.MapUnit, AreaUnit.SquareMeters);
                        }
                        selectedFeatures.Add(new FeatureInfo(item, hydrographyFeatureLayer.Name, area));
                    }

                    if (map.Overlays.Contains(highlightOverlayName))
                    {
                        map.Overlays.Remove(highlightOverlayName);
                    }

                    IEnumerable <FeatureInfo> featureInfos = selectedFeatures.OrderBy(p => p.Area);
                    SelectedFeatureInfo = featureInfos.FirstOrDefault();
                    NauticalChartsFeatureSource featureSource = hydrographyFeatureLayer.FeatureSource as NauticalChartsFeatureSource;
                    if (featureSource != null)
                    {
                        ChartSelectedItem = new ChartSelectedItem(featureSource.NauticalChartsPathFilename, featureInfos);
                    }
                }
                else
                {
                    if (map.Overlays.Contains(highlightOverlayName))
                    {
                        map.Overlays.Remove(highlightOverlayName);
                    }
                    map.Refresh();
                }
            }
        }
        private void HandleLoadChartMessage(ChartMessage message)
        {
            LayerOverlay overlay = null;

            if (message.Charts != null)
            {
                if (map.Overlays.Contains(chartsOverlayName))
                {
                    overlay = ((LayerOverlay)map.Overlays[chartsOverlayName]);
                }
                else
                {
                    overlay = new LayerOverlay()
                    {
                        TileType = TileType.SingleTile,
                    };
                    map.Overlays.Insert(1, chartsOverlayName, overlay);
                }

                overlay.Layers.Clear();
                ChartSelectedItem = new ChartSelectedItem(string.Empty, null);
                IEnumerable <ChartItem> charts      = message.Charts;
                RectangleShape          boundingBox = null;
                foreach (ChartItem item in charts)
                {
                    if (!File.Exists(item.IndexFileName))
                    {
                        NauticalChartsFeatureSource.BuildIndexFile(item.FileName, BuildIndexMode.DoNotRebuild);
                    }
                    NauticalChartsFeatureLayer layer = new NauticalChartsFeatureLayer(item.FileName);
                    if (map.MapUnit == GeographyUnit.Meter)
                    {
                        layer.FeatureSource.Projection = new Proj4Projection(4326, 3857);
                    }

                    layer.DrawingFeatures += hydrographyLayer_DrawingFeatures;

                    layer.IsDepthContourTextVisible = Globals.IsDepthContourTextVisible;
                    layer.IsLightDescriptionVisible = Globals.IsLightDescriptionVisible;
                    layer.IsSoundingTextVisible     = Globals.IsSoundingTextVisible;
                    layer.SymbolTextDisplayMode     = Globals.SymbolTextDisplayMode;
                    layer.DisplayCategory           = Globals.DisplayMode;
                    layer.DefaultColorSchema        = Globals.CurrentColorSchema;
                    layer.SymbolDisplayMode         = Globals.CurrentSymbolDisplayMode;
                    layer.BoundaryDisplayMode       = Globals.CurrentBoundaryDisplayMode;

                    layer.SafetyDepthInMeter        = NauticalChartsFeatureLayer.ConvertDistanceToMeters(Globals.SafetyDepth, Globals.CurrentDepthUnit);
                    layer.ShallowDepthInMeter       = NauticalChartsFeatureLayer.ConvertDistanceToMeters(Globals.ShallowDepth, Globals.CurrentDepthUnit);
                    layer.DeepDepthInMeter          = NauticalChartsFeatureLayer.ConvertDistanceToMeters(Globals.DeepDepth, Globals.CurrentDepthUnit);
                    layer.SafetyContourDepthInMeter = NauticalChartsFeatureLayer.ConvertDistanceToMeters(Globals.SafetyContour, Globals.CurrentDepthUnit);

                    layer.DrawingMode            = Globals.CurrentDrawingMode;
                    layer.IsFullLightLineVisible = Globals.IsFullLightLineVisible;
                    layer.IsMetaObjectsVisible   = Globals.IsMetaObjectsVisible;
                    layer.Name = item.FileName;
                    layer.Open();
                    if (boundingBox == null)
                    {
                        boundingBox = layer.GetBoundingBox();
                    }
                    else
                    {
                        boundingBox.ExpandToInclude(layer.GetBoundingBox());
                    }

                    boundingBoxPreviewLayer.InternalFeatures.Add(layer.GetHashCode().ToString(), new Feature(layer.GetBoundingBox()));

                    layer.Close();
                    overlay.Layers.Add(item.FileName, layer);
                }
                if (boundingBox != null)
                {
                    map.CurrentExtent = boundingBox;
                }

                //SetupAnimationForOverlay(overlay);

                ApplyOverlayOpacity();

                map.Refresh();
            }
        }
Пример #10
0
 void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
 {
     NauticalChartsFeatureLayer.CreateNauticalChartsStyleFileFromIhoDaiFile(daiFilePath, outputFilePath);
 }